8179933: AArch64: Incorrect match rule for immL_255
Summary: The match rule fix will enable instructs like: SubExtL_uxtb_and and AddExtL_uxtb_and etc. Also rename immL_63 to the proper name: immI_63.
Reviewed-by: aph
Contributed-by: zhongwei.yao@linaro.org
--- a/hotspot/src/cpu/aarch64/vm/aarch64.ad Mon Jun 19 01:23:58 2017 -0700
+++ b/hotspot/src/cpu/aarch64/vm/aarch64.ad Fri May 12 14:59:35 2017 +0800
@@ -5423,6 +5423,16 @@
interface(CONST_INTER);
%}
+operand immI_63()
+%{
+ predicate(n->get_int() == 63);
+ match(ConI);
+
+ op_cost(0);
+ format %{ %}
+ interface(CONST_INTER);
+%}
+
operand immI_64()
%{
predicate(n->get_int() == 64);
@@ -5453,20 +5463,10 @@
interface(CONST_INTER);
%}
-operand immL_63()
-%{
- predicate(n->get_int() == 63);
- match(ConI);
-
- op_cost(0);
- format %{ %}
- interface(CONST_INTER);
-%}
-
operand immL_255()
%{
- predicate(n->get_int() == 255);
- match(ConI);
+ predicate(n->get_long() == 255L);
+ match(ConL);
op_cost(0);
format %{ %}
@@ -11146,7 +11146,7 @@
ins_pipe(ldiv_reg_reg);
%}
-instruct signExtractL(iRegLNoSp dst, iRegL src1, immL_63 div1, immL_63 div2) %{
+instruct signExtractL(iRegLNoSp dst, iRegL src1, immI_63 div1, immI_63 div2) %{
match(Set dst (URShiftL (RShiftL src1 div1) div2));
ins_cost(INSN_COST);
format %{ "lsr $dst, $src1, $div1" %}
@@ -11156,7 +11156,7 @@
ins_pipe(ialu_reg_shift);
%}
-instruct div2RoundL(iRegLNoSp dst, iRegL src, immL_63 div1, immL_63 div2) %{
+instruct div2RoundL(iRegLNoSp dst, iRegL src, immI_63 div1, immI_63 div2) %{
match(Set dst (AddL src (URShiftL (RShiftL src div1) div2)));
ins_cost(INSN_COST);
format %{ "add $dst, $src, $div1" %}