RFR (XS): 8151988: Fix for bug - Hotspot deoptimizes div/mod pair usage
Vladimir Kozlov
vladimir.kozlov at oracle.com
Tue Aug 16 21:16:37 UTC 2016
On 8/16/16 2:13 PM, Vladimir Kozlov wrote:
> On 8/8/16 5:10 PM, Deshpande, Vivek R wrote:
>> Hi Vladimir
>>
>> Commenting out the code you mentioned worked, as the control edge for
>> ModINode is never set to NULL.
>> Shall I send the patch with that change ?
>
> Good, thank you for verifying it.
> ModLNode::Ideal() also has the same problem.
> I think removing control edge (when != 0) is still useful for standalone
I mean with the same condition:
if( in(0) && (ti->_hi < 0 || ti->_lo > 0) ) {
Vladimir
> Mod node but it should be done Compile::final_graph_reshaping_imp() when
> find_similar() returns false or UseDivMod is false.
>
> Thanks,
> Vladimir
>
>>
>> Regards,
>> Vivek
>>
>> -----Original Message-----
>> From: Vladimir Kozlov [mailto:vladimir.kozlov at oracle.com]
>> Sent: Wednesday, August 03, 2016 4:10 PM
>> To: Deshpande, Vivek R <vivek.r.deshpande at intel.com>; hotspot compiler
>> <hotspot-compiler-dev at openjdk.java.net>
>> Subject: Re: RFR (XS): 8151988: Fix for bug - Hotspot deoptimizes
>> div/mod pair usage
>>
>> Hi Vivek,
>>
>> The problem is not that DivModINode does not have control edge set but
>> that Div and Mod nodes have different setting and have to be ordered
>> according their uses and 0 checks of their arguments.
>>
>> Please, find where ModI node's control edge is replaced with NULL. May
>> be next in ModINode::Ideal()
>>
>> // Check for useless control input
>> // Check for excluding mod-zero case
>> if( in(0) && (ti->_hi < 0 || ti->_lo > 0) ) {
>> set_req(0, NULL); // Yank control input
>> return this;
>> }
>>
>> Try to comment it.
>>
>> Thanks,
>> Vladimir
>>
>> On 8/1/16 11:49 AM, Deshpande, Vivek R wrote:
>>> Hi Vladimir
>>>
>>> I have fixed the problem of null control edge getting generated for
>>> DivMod node in this later patch.
>>> Could you please take a look at the webrev at this location:
>>> http://cr.openjdk.java.net/~vdeshpande/8151988/webrev.01/
>>>
>>> Regards,
>>> Vivek
>>>
>>> -----Original Message-----
>>> From: Vladimir Kozlov [mailto:vladimir.kozlov at oracle.com]
>>> Sent: Wednesday, July 27, 2016 7:54 PM
>>> To: Deshpande, Vivek R; hotspot compiler
>>> Cc: Viswanathan, Sandhya
>>> Subject: Re: RFR (XS): 8151988: Fix for bug - Hotspot deoptimizes
>>> div/mod pair usage
>>>
>>> If control edge is different (one of them not NULL) I don't think we
>>> can replace Div and Mod nodes.
>>> Control edge enforce the order of execution of data nodes. DivModI
>>> node takes control from ModI node which can put DivModI below users
>>> of DivI node. So you will have shceduler problem.
>>>
>>> So why control edge is NULL for DivI (or ModI) node? Control edge
>>> should come from zero_check_int() which is called for ModI and DivI
>>> nodes.
>>>
>>> Thanks,
>>> Vladimir
>>>
>>> On 7/27/16 5:56 PM, dean.long at oracle.com wrote:
>>>> How about this? I think it gives the same result, but with fewer tests
>>>>
>>>> if (use->in(j) != in(j) &&(j != 0 || (use->in(j) !=
>>>> NULL && in(j) != NULL)) {
>>>> break;
>>>> }
>>>>
>>>>
>>>> dl
>>>>
>>>> On 7/27/16 4:14 PM, Deshpande, Vivek R wrote:
>>>>>
>>>>> Hi
>>>>>
>>>>> I have resolved the bug and fix for the same is here.
>>>>>
>>>>> http://cr.openjdk.java.net/~vdeshpande/8151988/webrev.00/
>>>>>
>>>>> I have also updated the JBS entry.
>>>>>
>>>>> https://bugs.openjdk.java.net/browse/JDK-8151988
>>>>>
>>>>> Would you please review it.
>>>>>
>>>>> Regards,
>>>>>
>>>>> Vivek
>>>>>
>>>>
More information about the hotspot-compiler-dev
mailing list