[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