RFR(S): 8250609: C2 crash in IfNode::fold_compares
Vladimir Kozlov
vladimir.kozlov at oracle.com
Tue Jul 28 17:27:47 UTC 2020
Yes, this looks good.
Thanks,
Vladimir K
On 7/28/20 5:10 AM, Yangfei (Felix) wrote:
> Hi,
>
>> -----Original Message-----
>> From: Vladimir Kozlov [mailto:vladimir.kozlov at oracle.com]
>> Sent: Tuesday, July 28, 2020 3:15 AM
>> To: Yangfei (Felix) <felix.yang at huawei.com>; hotspot-compiler-
>> dev at openjdk.java.net
>> Subject: Re: RFR(S): 8250609: C2 crash in IfNode::fold_compares
>>
>> It happens because 'lo' is new node created just now and have no uses yet.
>> For such new nodes we usually add dummy use to avoid removal from graph:
>>
>> http://hg.openjdk.java.net/jdk/jdk/file/c379dc750a02/src/hotspot/share/op
>> to/convertnode.cpp#l403
>
> Thanks for the suggestions. Yes, that will also fix the issue.
> New webrev: http://cr.openjdk.java.net/~fyang/8250609/webrev.01/
> Performed the same tests as before. Does it look better?
>
> Felix
>
>> On 7/27/20 5:27 AM, Yangfei (Felix) wrote:
>>> Hi,
>>>
>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8250609
>>> Webrev: http://cr.openjdk.java.net/~fyang/8250609/webrev.00/
>>>
>>> In IfNode::fold_compares_helper, C2 tries to fold 2 CmpI into a single
>> CmpU.
>>> At the crash site in IfNode::fold_compares_helper:
>>> 995 if (lo && hi) {
>>> 996 // Merge the two compares into a single unsigned compare by
>> building (CmpU (n - lo) (hi - lo))
>>> 997 Node* adjusted_val = igvn->transform(new SubINode(n, lo));
>>> 998 if (adjusted_lim == NULL) {
>>> 999 adjusted_lim = igvn->transform(new SubINode(hi, lo));
>>> 1000 }
>>>
>>> At line 997, we have:
>>> (gdb) p lo->dump()
>>> 641 AddI === _ 513 92 [[]]
>>> $1 = void
>>>
>>> After the transformation at line 997, we have
>>> (gdb) p lo->dump()
>>> 641 AddI === _ _ _ [[]] [34200641]
>>> $3 = void
>>>
>>> Then node 641 was used at line 999, which triggers the crash.
>>> Patch fixes the issue by delaying transformation in IfNode::fold_compares
>> temporarily.
>>> Tier1-3 tested on aarch64-linux-gnu & x86_64-linux-gnu.
>>> Newly added test fail without the patch and pass otherwise.
>>> Suggestions?
>>>
>>> Thanks,
>>> Felix
>>>
More information about the hotspot-compiler-dev
mailing list