Skip to content

Commit 3a76d39

Browse files
committed
8277324: C2 compilation fails with "bad AD file" on x86-32 after JDK-8276162 due to missing match rule
Reviewed-by: chagedorn, roland
1 parent 2f20b0d commit 3a76d39

1 file changed

Lines changed: 62 additions & 12 deletions

File tree

src/hotspot/cpu/x86/x86_32.ad

Lines changed: 62 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13150,7 +13150,25 @@ instruct cmovII_mem_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, rRegI dst, memory
1315013150
ins_pipe( pipe_cmov_mem );
1315113151
%}
1315213152

13153-
// Compare 2 longs and CMOVE ints.
13153+
instruct cmovII_reg_LTGE_U(cmpOpU cmp, flagsReg_ulong_LTGE flags, rRegI dst, rRegI src) %{
13154+
predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge ));
13155+
match(Set dst (CMoveI (Binary cmp flags) (Binary dst src)));
13156+
ins_cost(200);
13157+
expand %{
13158+
cmovII_reg_LTGE(cmp, flags, dst, src);
13159+
%}
13160+
%}
13161+
13162+
instruct cmovII_mem_LTGE_U(cmpOpU cmp, flagsReg_ulong_LTGE flags, rRegI dst, memory src) %{
13163+
predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge ));
13164+
match(Set dst (CMoveI (Binary cmp flags) (Binary dst (LoadI src))));
13165+
ins_cost(250);
13166+
expand %{
13167+
cmovII_mem_LTGE(cmp, flags, dst, src);
13168+
%}
13169+
%}
13170+
13171+
// Compare 2 longs and CMOVE ptrs.
1315413172
instruct cmovPP_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, eRegP dst, eRegP src) %{
1315513173
predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge ));
1315613174
match(Set dst (CMoveP (Binary cmp flags) (Binary dst src)));
@@ -13313,7 +13331,25 @@ instruct cmovII_mem_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, rRegI dst, memory
1331313331
ins_pipe( pipe_cmov_mem );
1331413332
%}
1331513333

13316-
// Compare 2 longs and CMOVE ints.
13334+
instruct cmovII_reg_EQNE_U(cmpOpU cmp, flagsReg_ulong_EQNE flags, rRegI dst, rRegI src) %{
13335+
predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne ));
13336+
match(Set dst (CMoveI (Binary cmp flags) (Binary dst src)));
13337+
ins_cost(200);
13338+
expand %{
13339+
cmovII_reg_EQNE(cmp, flags, dst, src);
13340+
%}
13341+
%}
13342+
13343+
instruct cmovII_mem_EQNE_U(cmpOpU cmp, flagsReg_ulong_EQNE flags, rRegI dst, memory src) %{
13344+
predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne ));
13345+
match(Set dst (CMoveI (Binary cmp flags) (Binary dst (LoadI src))));
13346+
ins_cost(250);
13347+
expand %{
13348+
cmovII_mem_EQNE(cmp, flags, dst, src);
13349+
%}
13350+
%}
13351+
13352+
// Compare 2 longs and CMOVE ptrs.
1331713353
instruct cmovPP_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, eRegP dst, eRegP src) %{
1331813354
predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne ));
1331913355
match(Set dst (CMoveP (Binary cmp flags) (Binary dst src)));
@@ -13469,22 +13505,18 @@ instruct cmovLL_reg_LEGT_U(cmpOpU_commute cmp, flagsReg_ulong_LEGT flags, eRegL
1346913505
match(Set dst (CMoveL (Binary cmp flags) (Binary dst src)));
1347013506
predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt ));
1347113507
ins_cost(400);
13472-
format %{ "CMOV$cmp $dst.lo,$src.lo\n\t"
13473-
"CMOV$cmp $dst.hi,$src.hi" %}
13474-
opcode(0x0F,0x40);
13475-
ins_encode( enc_cmov(cmp), RegReg_Lo2( dst, src ), enc_cmov(cmp), RegReg_Hi2( dst, src ) );
13476-
ins_pipe( pipe_cmov_reg_long );
13508+
expand %{
13509+
cmovLL_reg_LEGT(cmp, flags, dst, src);
13510+
%}
1347713511
%}
1347813512

1347913513
instruct cmovLL_mem_LEGT_U(cmpOpU_commute cmp, flagsReg_ulong_LEGT flags, eRegL dst, load_long_memory src) %{
1348013514
match(Set dst (CMoveL (Binary cmp flags) (Binary dst (LoadL src))));
1348113515
predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt ));
1348213516
ins_cost(500);
13483-
format %{ "CMOV$cmp $dst.lo,$src.lo\n\t"
13484-
"CMOV$cmp $dst.hi,$src.hi+4" %}
13485-
opcode(0x0F,0x40);
13486-
ins_encode( enc_cmov(cmp), RegMem(dst, src), enc_cmov(cmp), RegMem_Hi(dst, src) );
13487-
ins_pipe( pipe_cmov_reg_long );
13517+
expand %{
13518+
cmovLL_mem_LEGT(cmp, flags, dst, src);
13519+
%}
1348813520
%}
1348913521

1349013522
// Compare 2 longs and CMOVE ints.
@@ -13508,6 +13540,24 @@ instruct cmovII_mem_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, rRegI dst,
1350813540
ins_pipe( pipe_cmov_mem );
1350913541
%}
1351013542

13543+
instruct cmovII_reg_LEGT_U(cmpOpU_commute cmp, flagsReg_ulong_LEGT flags, rRegI dst, rRegI src) %{
13544+
predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt ));
13545+
match(Set dst (CMoveI (Binary cmp flags) (Binary dst src)));
13546+
ins_cost(200);
13547+
expand %{
13548+
cmovII_reg_LEGT(cmp, flags, dst, src);
13549+
%}
13550+
%}
13551+
13552+
instruct cmovII_mem_LEGT_U(cmpOpU_commute cmp, flagsReg_ulong_LEGT flags, rRegI dst, memory src) %{
13553+
predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt ));
13554+
match(Set dst (CMoveI (Binary cmp flags) (Binary dst (LoadI src))));
13555+
ins_cost(250);
13556+
expand %{
13557+
cmovII_mem_LEGT(cmp, flags, dst, src);
13558+
%}
13559+
%}
13560+
1351113561
// Compare 2 longs and CMOVE ptrs.
1351213562
instruct cmovPP_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, eRegP dst, eRegP src) %{
1351313563
predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt ));

0 commit comments

Comments
 (0)