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> > 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> 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 > > 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