Mercurial > hg > openjdk > aarch64-port > hotspot
changeset 8562:ed6af9cfdd70
8136615: aarch64: elide DecodeN when followed by CmpP 0
Summary: remove DecodeN when comparing a narrow oop with 0
Reviewed-by: kvn, adinn
author | enevill |
---|---|
date | Wed, 16 Sep 2015 13:50:57 +0000 |
parents | dbab938afe28 |
children | a06dd5987ae9 |
files | src/cpu/aarch64/vm/aarch64.ad |
diffstat | 1 files changed, 19 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/cpu/aarch64/vm/aarch64.ad Mon Sep 21 10:51:33 2015 +0200 +++ b/src/cpu/aarch64/vm/aarch64.ad Wed Sep 16 13:50:57 2015 +0000 @@ -11647,6 +11647,25 @@ 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 + || n->in(1)->as_Bool()->_test._test == BoolTest::eq); + effect(USE labl); + + ins_cost(BRANCH_COST); + format %{ "cb$cmp $oop, $labl" %} + ins_encode %{ + Label* L = $labl$$label; + Assembler::Condition cond = (Assembler::Condition)$cmp$$cmpcode; + if (cond == Assembler::EQ) + __ cbzw($oop$$Register, *L); + else + __ cbnzw($oop$$Register, *L); + %} + ins_pipe(pipe_cmp_branch); +%} + // Conditional Far Branch // Conditional Far Branch Unsigned // TODO: fixme