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

Fri Apr 25 14:10:48 PDT 2014

```On Apr 25, 2014, at 1:39 PM, Andrew Trick <atrick at apple.com> wrote:

>
> On Apr 18, 2014, at 1:13 PM, Adam Nemet <anemet at apple.com> wrote:
>
>> 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>
>
>
> This fix looks great to me! Please go ahead and commit.

Thanks, Andy.  This is r207271.

>
> Thanks,
> -Andy

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140425/e3365a8f/attachment.html>
```