RFR(S): 8243670: Unexpected test result caused by C2 MergeMemNode::Ideal

Yangfei (Felix) felix.yang at huawei.com
Mon Jun 29 13:41:22 UTC 2020


Hi,

> -----Original Message-----
> From: Tobias Hartmann [mailto:tobias.hartmann at oracle.com]
> Sent: Thursday, June 25, 2020 9:08 PM
> To: Yangfei (Felix) <felix.yang at huawei.com>; Roland Westrelin
> <rwestrel at redhat.com>; hotspot-compiler-dev at openjdk.java.net
> Cc: guoge (A) <guoge1 at huawei.com>; zhouyong (V)
> <zhouyong44 at huawei.com>
> Subject: Re: RFR(S): 8243670: Unexpected test result caused by C2
> MergeMemNode::Ideal
> 
> Hi Felix,
> 
> On 24.06.20 05:24, Yangfei (Felix) wrote:
> > I updated accordingly, new webrev:
> http://cr.openjdk.java.net/~fyang/8243670/webrev.02
> 
> Looks good to me but isn't the MergeMemNode::Ideal transformation
> useless now?

I added some extra code to check if we still have a chance to replace equivalent phis in MergeMemNode::Ideal.

diff -r 6ad5fd9a52df src/hotspot/share/opto/memnode.cpp
--- a/src/hotspot/share/opto/memnode.cpp        Mon Jun 29 12:28:55 2020 +0000
+++ b/src/hotspot/share/opto/memnode.cpp        Mon Jun 29 21:32:27 2020 +0800
@@ -4615,6 +4615,12 @@
         }
         if (phi_mem != NULL) {
           // equivalent phi nodes; revert to the def
+
+          tty->print("====>\n");
+          this->dump();
+          new_mem->dump();
+          new_base->dump();
+
           new_mem = new_base;
         }
       }

Looks like we missed doing PhiNode::Identity for some phis from the dump of doing a slowdebug build.  

I am still looking into it.  Thoughts?

Part of the dump looks like:
====>
 511    MergeMem        === _  1  1602  1599  1  1  1  1  1  1  1  1  95  [[ 1258 ]]  { N1599:rawptr:BotPTR - - - - - - - - N95:java/util/HashMap$Node+24 * [narrow] }  Memory: @BotPTR *+bot, idx=Bot; !jvms: HashMap::putVal @ bci:91
 1599   Phi     ===  1589  95  95  [[ 1287  1277  1301  1269  1309  1299  1312  511 ]]  #memory  Memory: @rawptr:BotPTR, idx=Raw; !orig=[1223],[943] !jvms: HashMap::putVal @ bci:209
 1602   Phi     ===  1589  95  95  [[ 1315  1278  1350  1389  1395  1247  1401  511 ]]  #memory  Memory: @BotPTR *+bot, idx=Bot; !orig=[943] !jvms: HashMap::putVal @ bci:209
====>
 502    MergeMem        === _  1  1733  1730  1  1  1  1  1  1  1  1  95  [[ 1322 ]]  { N1730:rawptr:BotPTR - - - - - - - - N95:java/util/HashMap$Node+24 * [narrow] }  Memory: @BotPTR *+bot, idx=Bot; !jvms: HashMap::putVal @ bci:81
 1730   Phi     ===  1720  95  95  [[ 1351  1341  1365  1333  1373  1363  1376  502 ]]  #memory  Memory: @rawptr:BotPTR, idx=Raw; !orig=[1287],[974] !jvms: HashMap::putVal @ bci:209
 1733   Phi     ===  1720  95  95  [[ 1379  1342  1414  1453  1459  1311  1465  502 ]]  #memory  Memory: @BotPTR *+bot, idx=Bot; !orig=[974] !jvms: HashMap::putVal @ bci:209
====>
 7843   MergeMem        === _  1  7778  7779  7794  1  7781  1  7828  1  1  1  1  1  1  1  1  1  1  1  7783  7784  [[ 7848 ]]  { N7779:rawptr:BotPTR N7794:jdk/internal/org/objectweb/asm/Frame+18 * - N7781:jdk/internal/org/objectweb/asm/Frame+36 * [narrow] - N7828:int[int:>=0]:exact+any * - - - - - - - - - - - N7783:java/lang/Object * N7784:java/lang/Object+8 * [narrowklass] }  Memory: @BotPTR *+bot, idx=Bot; !jvms: Frame::push @ bci:94 Frame::execute @ bci:1409
 7783   Phi     ===  7509  7773  7  [[ 7843  7797  8094  7814 ]]  #memory  Memory: @java/lang/Object *, idx=20; !jvms: Frame::push @ bci:60 Frame::execute @ bci:1409
 7778   Phi     ===  7509  7773  7  [[ 8089  7797  7855  7814  7871  7830  7839  7843  7872 ]]  #memory  Memory: @BotPTR *+bot, idx=Bot; !jvms: Frame::push @ bci:60 Frame::execute @ bci:1409
====>
 7843   MergeMem        === _  1  7778  7779  7794  1  7781  1  7828  1  1  1  1  1  1  1  1  1  1  1  1  7784  [[ 7848 ]]  { N7779:rawptr:BotPTR N7794:jdk/internal/org/objectweb/asm/Frame+18 * - N7781:jdk/internal/org/objectweb/asm/Frame+36 * [narrow] - N7828:int[int:>=0]:exact+any * - - - - - - - - - - - - N7784:java/lang/Object+8 * [narrowklass] }  Memory: @BotPTR *+bot, idx=Bot; !jvms: Frame::push @ bci:94 Frame::execute @ bci:1409
 7784   Phi     ===  7509  7773  7  [[ 7843  7797  8095  7814 ]]  #memory  Memory: @java/lang/Object+8 * [narrowklass], idx=21; !jvms: Frame::push @ bci:60 Frame::execute @ bci:1409
 7778   Phi     ===  7509  7773  7  [[ 8089  7797  7855  7814  7871  7830  7839  7843  7872 ]]  #memory  Memory: @BotPTR *+bot, idx=Bot; !jvms: Frame::push @ bci:60 Frame::execute @ bci:1409
====>
 3318   MergeMem        === _  1  1614  1615  1616  1  1617  1  1618  1619  1620  1621  1622  1  1623  1624  3112  1  1  1  1  7  7  3489  7  3484  3499  [[ 3321 ]]  { N1615:rawptr:BotPTR N1616:java/lang/String:exact+20 * [narrow] - N1617:java/lang/String:exact+16 * - N1618:java/lang/Object * N1619:java/lang/Object+8 * [narrowklass] N1620:java/util/AbstractList+12 * N1621:java/util/ArrayList+16 * N1622:java/util/ArrayList+20 * [narrow] - N1623:java/lang/String:exact+12 * N1624:java/lang/String:exact+17 * N3112:narrowoop: java/lang/Object *[int:>=0]+any * [narrow] - - - - N7:java/util/ArrayList$SubList:NotNull:exact *,iid=2970 N7:java/util/ArrayList$SubList:NotNull:exact+8 *,iid=2970 [narrowklass] N3489:java/util/ArrayList$SubList:NotNull:exact+24 *,iid=2970 [narrow] N7:java/util/ArrayList$SubList:NotNull:exact+16 *,iid=2970 N3484:java/util/AbstractList:NotNull:exact+12 *,iid=2970 N3499:java/util/ArrayList$SubList:NotNull:exact+20 *,iid=2970 }  Memory: @BotPTR *+bot, idx=Bot;
 3112   Phi     ===  1612  7  955  1382  1629  1886  2363  2586  2586  3283  [[ 3318 ]]  #memory  Memory: @narrowoop: java/lang/Object *[int:>=0]+any * [narrow], idx=16; !orig=1614 !jvms: String::split @ bci:-1
 1614   Phi     ===  1612  7  955  1382  1629  1886  2363  2586  2586  3283  [[ 3318 ]]  #memory  Memory: @BotPTR *+bot, idx=Bot; !jvms: String::split @ bci:-1


More information about the hotspot-compiler-dev mailing list