LFTR is not a safe optimization and never will be
Sun

On Tue, May 24, 2011 at 8:53 AM, Ye, Mei <mei...@amd.com> wrote:
>
>
> My earlier check-in r3502 forces loop end-test comparison to be "unsigned"
> in the Linear Function Test Replacement (LFTR) phase.  This fixes an
> overflow problem when memory address crosses the boundary of 0x80000000 in
> 32-bit architectures. The fix exposes another bug in Linear Function Test
> Replacement, which is explained below using the following pseudo-codes,
> where "sym7" is the original loop index, "sym11" is the memory address that
> replaces the original loop index as the induction variable, and "end" is the
> loop upper bound.  If the value of the memory address is very closed to
> 0xffffffff, adding a positive constant can overflow and produces a small
> positive result for "sym11v5", which then causes "sym11v5 <= end" to be
> evaluated as "TRUE", and the loop is mistakenly executed many more times
> than it should.  This leads to seg faults.
>
>
>
> sym7v3 = const1
>
> sym11v3 = sym7v3 + sym3
>
>
>
> LABEL:
>
> sym11v4 = phi(sym11v3, sym11v5)
>
> *sym11v4 = ...
>
> sym11v5 = sym11v4 + const2
>
> if (sym11v5 <= end)
>
>    goto LABEL
>
>
>
> To fix this bug, we transform the above code into the following.
>
>
>
> sym7v3 = const1
>
> sym11v3 = const1 - const2 + sym3 // The result of 'const1 - const2' should
> use signed type.
>
> LABEL:
>
> sym11v4 = phi(sym11v3, sym11v5)
>
> sym11v5 = sym11v4 + const2
>
> *sym11v5  = ...
>
> if (sym11v5 <= end - const2)
>
>    goto LABEL
>
>
>
>
>
> This transformation uses pre-increment instead of post-increment for the
> induction variable update and replaces the use of "sym11v4" with
> "sym11v5".
>
>
>
> My implementation replaces CR operands associated with "sym11v4" without
> rehashing since none of these expressions appear outside of the loop.  It is
> also impractical to rehash these expressions at this point since doing so
> will burn compilation time to find each occurrence from all the worklsts.  I
> also avoid the situations that the transformation will create new
> expressions having CSE occurrences outside of the loop.  This is to avoid
> changing CODEREPs unintentionally.
>
>
>
> Although this work still will not make LFTR 100% safe, but it should cover a
> vast majority.
>
> ------------------------------------------------------------------------------
> vRanger cuts backup time in half-while increasing security.
> With the market-leading solution for virtual backup and recovery,
> you get blazing-fast, flexible, and affordable data protection.
> Download your free trial now.
> http://p.sf.net/sfu/quest-d2dcopy1
> _______________________________________________
> Open64-devel mailing list
> Open64-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/open64-devel
>
>

------------------------------------------------------------------------------
vRanger cuts backup time in half-while increasing security.
With the market-leading solution for virtual backup and recovery, 
you get blazing-fast, flexible, and affordable data protection.
Download your free trial now. 
http://p.sf.net/sfu/quest-d2dcopy1
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to