[15] RFR (S): 8247502: PhaseStringOpts crashes while optimising effectively dead code
Vladimir Ivanov
vladimir.x.ivanov at oracle.com
Mon Jul 13 13:40:36 UTC 2020
Thanks for the reviews, Vladimir & Tobias.
Best regards,
Vladimir Ivanov
On 13.07.2020 13:07, Tobias Hartmann wrote:
> +1
>
> Thanks for taking care of this while I'm on vacation!
>
> Best regards,
> Tobias
>
>
> On 11.07.20 01:19, Vladimir Kozlov wrote:
>> I agree with this small fix.
>>
>> Thanks,
>> Vladimir
>>
>> On 7/10/20 9:26 AM, Vladimir Ivanov wrote:
>>> https://bugs.openjdk.java.net/browse/JDK-8247502
>>> http://cr.openjdk.java.net/~vlivanov/8247502/webrev.00/
>>>
>>> As Tobias discovered, PhaseStringOpts crashes when it encounters String::append() argument being
>>> TOP: TOP is a constant, but the code expects to see a String constant instead.
>>>
>>> It happens while processing a call in unreachable infinite loop. The code is effectively dead, but
>>> IGVN and PhaseRemoveUseless don't see that. It is discovered later when loop opts kick in which
>>> clean it up.
>>>
>>> Proposed fix tries to make the code more robust and just bails out the optimization when TOP is
>>> encountered.
>>>
>>> Alternative way to fix the problem would be to clean up the graph before PhaseStringOpts (e.g., by
>>> running PhaseIdealLoop(LoopOptsNone) since PhaseRemoveUseless is not enough), but PhaseIdealLoop
>>> pass can be expensive. So, I'm in favor of the local fix in PhaseStringOpts.
>>>
>>> Testing: crash reproducer, hs-precheckin-comp, hs-tier1, hs-tier2, tier1
>>>
>>> Thanks!
>>>
>>> PS: no regression test since I wasn't able to extract a simple reproducer from the crash log.
>>>
>>> Best regards,
>>> Vladimir Ivanov
More information about the hotspot-compiler-dev
mailing list