Request for review (S): 6636138: UseSuperWord enabled failure
Vladimir Kozlov
Vladimir.Kozlov at Sun.COM
Wed Mar 18 18:15:33 PDT 2009
Looks OK.
Vladimir
Changpeng Fang wrote:
> http://cr.openjdk.java.net/~cfang/6636138/webrev.01/
>
> I add two small test case to help review (and updated webrev):
> -------------------------
> Test1.java
> -------------------------
> This test case shows the problem of superwordization of array copy.
> After unrolling, part
> of the loop look like:
> src[i] = i;
> dst[i] = 2;
> ref[i] = src[i]; // (1)
> src[i+1] = i+1;
> dst[i+1] = 2;
> ref[i+1] = src[i+1]; // (2)
>
> The loads src[i] and src[i+1] could be combined to use superword.
> We know src[i]'s memory input is dst[i] and src[i+1]'s memory input is
> dst[i+1].
> The question is what's the memory state input for the corresponding
> superword load?
> The original approach used dst[i], which essentially move the superword
> load before the store[i+1],
> and thus generated the wrong value.
> My approach uses dst[i+1] which preserve the memory order.
>
> ---------------------------
> Test2.java
> ---------------------------
> This test case shows the problem of superwordization of stores. After
> unrolling, part
> of the loop look like:
> src[i] = src[i-1];
> src[i-1] = invar; // (1)
> src[i-1] = src[i-2]; // where to schedule the store src[i-1] and
> load src[i-2]
> src[i-2] = invar; // (2)
>
> src[i-1] = invar and src[i-2] = invar can be combined to use superword
> store. The question is
> where to put the sandwitched src[i-1] = src[i-2] ?
> The original approach put all of them (src[i-1] and src[i-2]) before the
> superword and thus the src[i-1]
> was stored an incorrect value.
> My approach is based on dependence analysis. The result is the store
> src[i-1] is scheduled after the superword,
> and the load src[i-2] is scheduled before the superword.
>
>
> Thanks,
>
> Changpeng
>
>
>
> On 03/12/09 14:56, Changpeng Fang wrote:
>> This patch also fixes the problem in CR 6812207: Possible bug in a
>> floating point (float) arithmetic in 32-bit server HotSpot
>>
>> http://cr.openjdk.java.net/~cfang/6636138/webrev.00/
>>
>> The Problem:
>> SuperWord scheduling ignored the memory dependence, and thus caused
>> memory order violation and thus
>> programs in CR 6636138 and CR 6812207 generated incorrect results.
>>
>> What in This Patch?:
>> I have implemented a new superword scheduling approach to adjust the
>> memory graph. For a store superword,
>> we move all sandwitched memory operations outside the pack based on
>> the dependence information.
>> For a load superword, we use the latest memory state for the pack.
>>
>> Tests:
>> JPRT scimark specjvm98 volano25 jetstream and test cases in CR
>> 6636138 and CR 6812207, and several small self-developed cases.
>>
>>
>> Thanks,
>>
>> Changpeng
>
More information about the hotspot-compiler-dev
mailing list