RFR: 8370200: Crash: assert(outer->outcnt() >= phis + 2 - be_loads && outer->outcnt() <= phis + 2 + stores + 1) failed: only phis [v4]

Roland Westrelin roland at openjdk.org
Thu Dec 11 15:46:40 UTC 2025


> The crash occurs because verification code expects the inner and outer
> loop of a loop strip mining nest to have the same number of phis but,
> in this case, the inner loop has one more memory phis than the outer
> loop.
> 
> 1) After `OuterStripMinedLoopNode::adjust_strip_mined_loop`, inner and
> outer loops have the same number of phis, as expected.
> 
> 
>  309  MergeMem  === _ 1 306 1 1 284  [[ 429 ]]  { - - N284:instptr:java/lang/Throwable (java/io/Serializable):BotPTR+20,iid=bot [narrow] }  Memory: @ptr:BotPTR+bot, idx=Bot; !orig=205 !jvms: TestMismatchedMemoryPhis::mainTest @ bci:37 (line 49)
> 
>  248  OuterStripMinedLoop  === 248 321 247  [[ 248 249 428 429 430 ]] 
>  429  Phi  === 248 309 205  [[ 93 ]]  #memory  Memory: @ptr:BotPTR+bot, idx=Bot; !orig=93 !jvms: TestMismatchedMemoryPhis::mainTest @ bci:37 (line 49)
>  430  Phi  === 248 306 121  [[ 94 ]]  #memory  Memory: @instptr:TestMismatchedMemoryPhis:BotPTR+16,iid=bot, name=l, idx=4; !orig=94 !jvms: TestMismatchedMemoryPhis::mainTest @ bci:37 (line 49)
> 
>  249  CountedLoop  === 249 248 197  [[ 249 119 96 93 94 ]] inner stride: 1  strip mined !orig=[223],[91] !jvms: TestMismatchedMemoryPhis::mainTest @ bci:37 (line 49)
>   93  Phi  === 249 429 205  [[ 117 97 ]]  #memory  Memory: @ptr:BotPTR+bot, idx=Bot; !jvms: TestMismatchedMemoryPhis::mainTest @ bci:37 (line 49)
>   94  Phi  === 249 430 121  [[ 97 ]]  #memory  Memory: @instptr:TestMismatchedMemoryPhis:BotPTR+16,iid=bot, name=l, idx=4; !jvms: TestMismatchedMemoryPhis::mainTest @ bci:37 (line 49)
> 
> 
> 2) Then `PhiNode::Ideal` runs for 429 and pushed the `MergeMem` 309
> through the outer loop phi:
> 
> 
>  248  OuterStripMinedLoop  === 248 321 247  [[ 248 249 428 429 430 444 446 ]] 
>  430  Phi  === 248 306 121  [[ 94 ]]  #memory  Memory: @instptr:TestMismatchedMemoryPhis:BotPTR+16,iid=bot, name=l, idx=4; !orig=94 !jvms: TestMismatchedMemoryPhis::mainTest @ bci:37 (line 49)
>  444  Phi  === 248 306 121  [[ 445 ]]  #memory  Memory: @ptr:BotPTR+bot, idx=Bot; !orig=429,93 !jvms: TestMismatchedMemoryPhis::mainTest @ bci:37 (line 49)
>  446  Phi  === 248 284 170  [[ 445 ]]  #memory  Memory: @instptr:java/lang/Throwable (java/io/Serializable):BotPTR+20,iid=bot [narrow], name=detailMessage, idx=5; !orig=444,429,93 !jvms: TestMismatchedMemoryPhis::mainTest @ bci:37 (line 49)
> 
>  445  MergeMem  === _ 1 444 1 1 446  [[ 93 ]]  { - - N446:instptr:java/lang/Throwable (java/io/Serializable):BotPTR+20,iid=bot [narrow] }  Memory: @ptr:BotPTR+bot, idx=Bot; !orig=[429],93 !jvms: TestMismatchedMemoryPhis::mainTe...

Roland Westrelin has updated the pull request incrementally with three additional commits since the last revision:

 - Update src/hotspot/share/opto/node.cpp
   
   Co-authored-by: Daniel Lundén <daniel.lunden at oracle.com>
 - Update test/hotspot/jtreg/compiler/loopstripmining/TestMismatchedMemoryPhis.java
   
   Co-authored-by: Daniel Lundén <daniel.lunden at oracle.com>
 - Update src/hotspot/share/opto/cfgnode.cpp
   
   Co-authored-by: Daniel Lundén <daniel.lunden at oracle.com>

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/28677/files
  - new: https://git.openjdk.org/jdk/pull/28677/files/6d3109c7..24a30b44

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=28677&range=03
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=28677&range=02-03

  Stats: 6 lines in 3 files changed: 0 ins; 1 del; 5 mod
  Patch: https://git.openjdk.org/jdk/pull/28677.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/28677/head:pull/28677

PR: https://git.openjdk.org/jdk/pull/28677


More information about the hotspot-compiler-dev mailing list