RFR: 8238812: assert(false) failed: bad AD file [v3]

Rahul Raghavan rraghavan at openjdk.java.net
Thu Dec 3 06:51:12 UTC 2020


> Request help to review this 8238812 fix.
> 
> <JBS> https://bugs.openjdk.java.net/browse/JDK-8238812
> 
> Found the root cause of the problem as that the following type 
> two If checks are not folded into one for the sample test:
> 
>  170 ConI === 0 [[ 171 ]] #int:31
>  171 CmpI === _ 144 170 [[ 172 179 ]]
>  172 Bool === _ 171 [[ 173 ]] [ne]
> 
>  173 If === 158 172 [[ 176 177 ]]
>  176 IfFalse === 173 [[ 168 ]] #0
>  177 IfTrue === 173 [[ 180 ]] #1
>  179 Bool === _ 171 [[ 180 ]] [lt]
> 
>  180 If === 177 179 [[ 181 182 ]]
>  181 IfTrue === 180 [[ 168 ]] #1
>  182 IfFalse === 180 [[ 218 ]] #0
> 
> Where 144 is the value and the ifs check for:
> value != 31
> value < 31
> 
> Now if we reach 182 IfFalse, the following holds:
>    value != 31 && !(value < 31)
> => value != 31 && value >= 31
> => value > 31
> 
> But the type of value (144) becomes #int:16..31 :
>  140 ConI === 0 [[ 141 ]] #int:2
>  135 Phi === 534 481 528 [[ ... ]] #int:1..4 #tripcount
>  141 LShiftI === _ 135 140 [[ 142 ]] #int:4..16
>  143 ConI === 0 [[ 144 ]] #int:11
>  142 AddI === _ 141 135 [[ 144 500 485 ]] #int:5..20
>  144 AddI === _ 142 143 [[ ... ]] #int:16..31
> 
> And that means that value > 31 is always false and should be folded.
> The root cause of the bug is that this does not happen.
> Understood that the fix by Tobias for JDK-8236721 should optimize exactly above type cases
> https://hg.openjdk.java.net/jdk/jdk/rev/9c53fdf6ba63
> 
> Found the IfNode::fold_compares optmization (and 8236721 related changes by Tobias)
> is not called for 180-If, after the type of 144-AddI is set to #int:16..31.
> because the _worklist is not correctly updated!
> 
> Proposed changes helped to add the required If node to _worklist (after the correct type setting of related value)
> and with this change no failure due to existing fold_compares optimization happening later on.
> Sample test passed and found no issues with various tier testing.

Rahul Raghavan has updated the pull request incrementally with one additional commit since the last revision:

  8238812: assert(false) failed: bad AD file

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

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/1563/files
  - new: https://git.openjdk.java.net/jdk/pull/1563/files/f3e3ecaa..98eccfa4

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=1563&range=02
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=1563&range=01-02

  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
  Patch: https://git.openjdk.java.net/jdk/pull/1563.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/1563/head:pull/1563

PR: https://git.openjdk.java.net/jdk/pull/1563


More information about the hotspot-compiler-dev mailing list