[PATCH][LoopStrengthReduce] Don't trim a formula that uses a subset of required registers

Adam Nemet anemet at apple.com
Fri Apr 18 13:13:35 PDT 2014


Ping

On Apr 10, 2014, at 9:12 PM, Adam Nemet <anemet at apple.com> wrote:

> Consider this use from the new testcase:
> 
>  LSR Use: Kind=ICmpZero, Offsets={0}, widest fixup type: i32
>    reg({1000,+,-1}<nw><%for.body>)
>    -3003 + reg({3,+,3}<nw><%for.body>)
>    -1001 + reg({1,+,1}<nuw><nsw><%for.body>)
>    -1000 + reg({0,+,1}<nw><%for.body>)
>    -3000 + reg({0,+,3}<nuw><%for.body>)
>    reg({-1000,+,1}<nw><%for.body>)
>    reg({-3000,+,3}<nsw><%for.body>)
> 
> This is the last use we consider for a solution in SolveRecurse, so CurRegs is
> a large set.  (CurRegs is the set of registers that are needed by the
> previously visited uses in the in-progress solution.)
> 
> ReqRegs is {
>  {3,+,3}<nw><%for.body>,
>  {1,+,1}<nuw><nsw><%for.body>
> }
> 
> This is the intersection of the regs used by any of the formulas for the
> current use and CurRegs.
> 
> Now, the code requires a formula to contain *all* these regs (the comment is
> simply wrong), otherwise the formula is immediately disqualified.  Obviously,
> no formula for this use contains two regs so they will each get disqualified.
> 
> The fix modifies the check to allow the formula in this case.  The idea is
> that neither of these formulae is introducing any new registers which is the
> point of this early pruning as far as I understand.
> 
> In terms of set arithmetic, we now allow formulas whose used regs are a subset
> of the required regs not just the other way around.
> 
> There are few more loops in the test-suite that are now successfully LSRed.  I
> have benchmarked those and found very minimal change.
> 
> Fixes <rdar://problem/13965777>
> 
> Adam
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: LoopStrengthReduce-Don-t-trim-formula-that-uses-a-su.patch
Type: application/octet-stream
Size: 3842 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140418/d464fb7c/attachment.obj>
-------------- next part --------------
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list