Skip to content

Commit 2c4a787

Browse files
committed
Improve matching of loadNKlassCompactHeaders on aarch64
1 parent 0d8a923 commit 2c4a787

File tree

3 files changed

+12
-12
lines changed

3 files changed

+12
-12
lines changed

src/hotspot/cpu/aarch64/aarch64.ad

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5512,6 +5512,10 @@ opclass memory(indirect, indIndexScaled, indIndexScaledI2L, indIndexI2L, indInde
55125512
indirectN, indIndexScaledN, indIndexScaledI2LN, indIndexI2LN, indIndexN, indOffIN,
55135513
indOffLN, indirectX2P, indOffX2P);
55145514

5515+
opclass memory_noindex(indirect, indOffI, indOffL,
5516+
indirectN, indOffIN,
5517+
indOffLN, indirectX2P, indOffX2P);
5518+
55155519
// iRegIorL2I is used for src inputs in rules for 32 bit int (I)
55165520
// operations. it allows the src to be either an iRegI or a (ConvL2I
55175521
// iRegL). in the latter case the l2i normally planted for a ConvL2I
@@ -6448,17 +6452,18 @@ instruct loadNKlass(iRegNNoSp dst, memory mem)
64486452
ins_pipe(iload_reg_mem);
64496453
%}
64506454

6451-
instruct loadNKlassCompactHeaders(iRegNNoSp dst, memory mem)
6455+
instruct loadNKlassCompactHeaders(iRegNNoSp dst, memory_noindex mem)
64526456
%{
64536457
match(Set dst (LoadNKlass mem));
64546458
predicate(!needs_acquiring_load(n) && UseCompactObjectHeaders);
64556459

64566460
ins_cost(4 * INSN_COST);
6457-
format %{ "ldrw $dst, $mem\t# compressed class ptr" %}
6461+
format %{ "load_nklass_compact $dst, $mem\t# compressed class ptr" %}
64586462
ins_encode %{
6459-
__ load_nklass_compact_c2($dst$$Register, $mem$$base$$Register, $mem$$index$$Register, $mem$$scale, $mem$$disp);
6463+
assert($mem$$index$$Register == noreg, "must not have indexed address");
6464+
__ load_nklass_compact_c2($dst$$Register, $mem$$base$$Register, $mem$$disp);
64606465
%}
6461-
ins_pipe(pipe_slow);
6466+
ins_pipe(iload_reg_mem);
64626467
%}
64636468

64646469
// Load Float

src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.cpp

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2558,7 +2558,7 @@ bool C2_MacroAssembler::in_scratch_emit_size() {
25582558
return MacroAssembler::in_scratch_emit_size();
25592559
}
25602560

2561-
void C2_MacroAssembler::load_nklass_compact_c2(Register dst, Register obj, Register index, int scale, int disp) {
2561+
void C2_MacroAssembler::load_nklass_compact_c2(Register dst, Register obj, int disp) {
25622562
// Note: Don't clobber obj anywhere in that method!
25632563

25642564
// The incoming address is pointing into obj-start + klass_offset_in_bytes. We need to extract
@@ -2569,11 +2569,6 @@ void C2_MacroAssembler::load_nklass_compact_c2(Register dst, Register obj, Regis
25692569
// When that happens, we need to lea the address into a single register, and subtract the
25702570
// klass_offset_in_bytes, to get the address of the mark-word.
25712571
int offset = oopDesc::mark_offset_in_bytes() + disp - oopDesc::klass_offset_in_bytes();
2572-
if (index == noreg) {
2573-
ldr(dst, Address(obj, offset));
2574-
} else {
2575-
lea(dst, Address(obj, index, Address::lsl(scale)));
2576-
ldr(dst, Address(dst, offset));
2577-
}
2572+
ldr(dst, Address(obj, offset));
25782573
lsr(dst, dst, markWord::klass_shift);
25792574
}

src/hotspot/cpu/aarch64/c2_MacroAssembler_aarch64.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,6 @@
179179
void vector_signum_sve(FloatRegister dst, FloatRegister src, FloatRegister zero,
180180
FloatRegister one, FloatRegister vtmp, PRegister pgtmp, SIMD_RegVariant T);
181181

182-
void load_nklass_compact_c2(Register dst, Register obj, Register index, int scale, int disp);
182+
void load_nklass_compact_c2(Register dst, Register obj, int disp);
183183

184184
#endif // CPU_AARCH64_C2_MACROASSEMBLER_AARCH64_HPP

0 commit comments

Comments
 (0)