RFR(XS) 8025657: compiler/intrinsics/mathexact/ConstantTest.java fails on assert in lcm.cpp on solaris x64
Rickard Bäckman
rickard.backman at oracle.com
Sun Oct 6 22:13:07 PDT 2013
Vladimir,
both addExact and FlagsProj are in must_clone. It means they have to be close to use, but since there are 2
uses of addExact this seems to be problematic.
The code in schedule_pinned_nodes takes the addExact and FlagsProj and schedules them into the same block as the jump on overflow. It seems correct to me.
Thank you
/R
On Oct 4, 2013, at 8:55 PM, Vladimir Kozlov wrote:
> Rickard,
>
> addExact, should in must_clone[] list since it produce flag (I think your original changes have it). With that it should be scheduled near use (see PhaseCFG::schedule_late()). The problem could be it has 2 uses.
>
> FlagsProj should be scheduled near consumer of the flag (since it is also in must_clone[]). Otherwise flags state could be changes by other instructions. So moving it to addExact block is wrong. It should be opposite: addExact should at the same block as FlagsProj and conditional jump.
>
> Vladimir
>
> On 10/4/13 4:35 AM, Rickard Bäckman wrote:
>> Hi all,
>>
>> I would appreciate some reviews on this change.
>>
>> On some machines when running with -XX:+DeoptimizeALot a test (test/compiler/intrinsics/mathexact/ConstantTest.java) failed with an assert.
>> assert(idx >= 0) failed: index should be set
>>
>> It seems that gcm would put the addExact in a different block then the jump.
>> This change forces the producer of FlagsProjNode to be in the same block as
>> the consumer.
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8025657
>> Webrev: http://cr.openjdk.java.net/~rbackman/8025657.1/
>>
>> Thanks
>> /R
>>
More information about the hotspot-compiler-dev
mailing list