Hi Hui Shi,

Thanks for the clarification. Your change looks good to me then.

-Mei

________________________________
From: Hui Shi [mailto:kalin....@gmail.com]
Sent: Wednesday, August 18, 2010 8:04 PM
To: Ye, Mei
Cc: Sun Chan; open64-devel@lists.sourceforge.net
Subject: Re: [Open64-devel] Simd_Finalize_Loops bug in handling unsigned 
comparison loop end

Hi Mei,

If both start and end is 0, it will not enter this loop, because do loop guard 
( if ( start < end ) )  is already added for this loop in 
STD_Canonicalize_Upper_Bound.
In following loop transformation, can trunst change of i < end  to  i <= end -1 
is always legal and correct.

But such do loop guard can't guarantee orig SIMD loop end update is correct.

2010/8/19 Ye, Mei <mei...@amd.com<mailto:mei...@amd.com>>
Hello Hui Shi
See attached "simd.cxx", search for "!!!!!!!".
In your example, if start = 0, end = 0,  can a change of "i < end"  to " i <= 
end - 1" make a 0-trip-count loop to 0xffffffff-trip-count loop?
If this is the case, the formular for simd loop-end should be revised  since 
the existing one assumes that all  LT comparisons have been changed to LE 
comparisions.

-Mei

________________________________
From: Hui Shi [mailto:kalin....@gmail.com<mailto:kalin....@gmail.com>]
Sent: Tuesday, August 17, 2010 7:15 PM
To: Ye, Mei
Cc: Sun Chan; 
open64-devel@lists.sourceforge.net<mailto:open64-devel@lists.sourceforge.net>

Subject: Re: [Open64-devel] Simd_Finalize_Loops bug in handling unsigned 
comparison loop end

Hi Mei,

I made fix for both place.

In patch file.
@@ -4848,6 +4848,23 @@
is for the then branch and
@@ -4936,6 +4959,11 @@
is for the else branch.

I only add comment in first place.
2010/8/18 Ye, Mei <mei...@amd.com<mailto:mei...@amd.com>>
Sorry for the late reply. Somehow did not see your Email.
I mean,

if (WN_kid0(loop_end) == tmp) {
    if (opr == OPR_LT) {
     ....                          --- you fixed here
   }
   ...
}
else {
   if (opr == OPR_LT) {
    .....                      --- looks like you miss here.
  }
......
}

________________________________
From: Hui Shi [mailto:kalin....@gmail.com<mailto:kalin....@gmail.com>]
Sent: Friday, August 13, 2010 9:29 PM
To: Ye, Mei; Sun Chan
Cc: 
open64-devel@lists.sourceforge.net<mailto:open64-devel@lists.sourceforge.net>
Subject: Re: [Open64-devel] Simd_Finalize_Loops bug in handling unsigned 
comparison loop end

Hi, Mei

I fix loop's end update in both branch.
Do you mean I miss fixing for the remainder loop's tart?
remainder_start = start + (((end-start) + 1)/vect)*vect, because end>=start has 
the do loop guard, I guess the start value is always correct.


2010/8/12 Sun Chan <sun.c...@gmail.com<mailto:sun.c...@gmail.com>>
if the fix need to be in multiple places, perhaps make a template out of that?
Sun

On Thu, Aug 12, 2010 at 9:27 AM, Ye, Mei 
<mei...@amd.com<mailto:mei...@amd.com>> wrote:
> Hello Kalin,
>
>
>
> Looks like you missed another place in Simd_Finalize_Loops that may require
> a similar fix.
>
>
>
> -Mei
>
>
>
> ________________________________
>
> From: Ju, Roy
> Sent: Wednesday, August 11, 2010 3:11 PM
> To: Ye, Mei
> Subject: FW: [Open64-devel] Simd_Finalize_Loops bug in handling unsigned
> comparison loop end
>
>
>
> Mei,
>
> See if you can review this changelist. Thanks.
>
>
>
> Roy
>
>
>
> From: Hui Shi [mailto:]
> Sent: Sunday, August 08, 2010 7:46 PM
> To:
> Subject: [Open64-devel] Simd_Finalize_Loops bug in handling unsigned
> comparison loop end
>
>
>
> Hi, All
>
>
>
> Can LNO gatekeeper help review this fix?
>
>
>
> This bug happens in -m32 on x8664 linux.
>
> Attached is the test case and patch.
>
> command line is
>
> opencc -O3 unsigned_loop_end.c -INLINE:ne=foo:ne=init:ne=check
> -OPT:unroll_times_max=1 -m32
>
>
>
> The bug happens when vectorization is happend on following loop.
>
>    int a[100]
>
>    int start;
>    unsigned i, end;
>    for( i = start; i < end; i++) {
>      a[i] = a[i+1];
>    }
>
> with -m64 unsigned comparison is transformed to signed comparison in
> STD_Canonicalize_Upper_Bound.
>
> with -m32 unsigned comparison is kept in LNO.
>
>
>
> will update loop_end align to vecotrize factor (vect)
>
> i <= start + (((end - start + 1) / vect) * vect) -1
> suppose start is 0, end is 2, vect is 4, original serial loop is
> for( i = 0; i < 2; i++)
> after Simd_Finalize_Loops transformation, simd loop becomes
> for(i = 0, i <= -1; i++),
>
> This loop will itreate 0xffffffff times.
>
>
>
> The fix is change loop end to following form when compraion is unsigned.
> i < start + (((end - start + 1) / vect) * vect)
>
>
>
>
>
> As discussed with Shuxin, we also doubt why SIMD loop's upper need aligned
> with vecotrized factor. Can SIMD only update loop's step?
>
> like  for(i = start, i <= end-1; i+= vector_factor)?
>
>
>
>
>
> Best Regards
>
> Shi, Hui
>
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by
>
> Make an app they can't live without
> Enter the BlackBerry Developer Challenge
> http://p.sf.net/sfu/RIM-dev2dev
> _______________________________________________
> Open64-devel mailing list
> Open64-devel@lists.sourceforge.net<mailto:Open64-devel@lists.sourceforge.net>
> https://lists.sourceforge.net/lists/listinfo/open64-devel
>
>



------------------------------------------------------------------------------
This SF.net email is sponsored by 

Make an app they can't live without
Enter the BlackBerry Developer Challenge
http://p.sf.net/sfu/RIM-dev2dev 
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to