8150038: aarch64: make use of CBZ and CBNZ when comparing narrow pointer with zero
Aarch64: c2 make use of CBZ and CBNZ when comparing narrow pointer with zero Reviewed-by: aph
This commit is contained in:
parent
f73f7433d0
commit
a30c46aa74
@ -14191,6 +14191,25 @@ instruct cmpP_imm0_branch(cmpOp cmp, iRegP op1, immP0 op2, label labl, rFlagsReg
|
||||
ins_pipe(pipe_cmp_branch);
|
||||
%}
|
||||
|
||||
instruct cmpN_imm0_branch(cmpOp cmp, iRegN op1, immN0 op2, label labl, rFlagsReg cr) %{
|
||||
match(If cmp (CmpN op1 op2));
|
||||
predicate(n->in(1)->as_Bool()->_test._test == BoolTest::ne
|
||||
|| n->in(1)->as_Bool()->_test._test == BoolTest::eq);
|
||||
effect(USE labl);
|
||||
|
||||
ins_cost(BRANCH_COST);
|
||||
format %{ "cbw$cmp $op1, $labl" %}
|
||||
ins_encode %{
|
||||
Label* L = $labl$$label;
|
||||
Assembler::Condition cond = (Assembler::Condition)$cmp$$cmpcode;
|
||||
if (cond == Assembler::EQ)
|
||||
__ cbzw($op1$$Register, *L);
|
||||
else
|
||||
__ cbnzw($op1$$Register, *L);
|
||||
%}
|
||||
ins_pipe(pipe_cmp_branch);
|
||||
%}
|
||||
|
||||
instruct cmpP_narrowOop_imm0_branch(cmpOp cmp, iRegN oop, immP0 zero, label labl, rFlagsReg cr) %{
|
||||
match(If cmp (CmpP (DecodeN oop) zero));
|
||||
predicate(n->in(1)->as_Bool()->_test._test == BoolTest::ne
|
||||
|
Loading…
Reference in New Issue
Block a user