[PATCH] D33567: [InstCombine] Pass the DominatorTree and AssumptionCache to a few calls to isKnownPositive, isKnownNegative, and isKnownNonZero

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Fri May 26 10:54:38 PDT 2017


On Fri, May 26, 2017 at 11:13 AM, Daniel Berlin <dberlin at dberlin.org> wrote:

> I tried to make sure we passed the right instruction in each case, but i
> may have screwed up :)
> note that:
>  SQ.getWithInstruction(&I)
> vs
>  SQ will give different results if the *context instruction* is not I.
>
>
Is that because we only use CxtI in icmp-related queries like
computeKnownBitsFromAssume?
Ie, when we call Simplify*Inst with the plain 'SQ' in instcombine, CxtI is
'null' in that query. There is nothing filling that in with the default 'I'
from what I see.

If the simplify routine uses computeKnownBits or some other value tracking,
then there could be a different result if known bits was somehow using CxtI
for non-icmp analysis?



> I swear there was a case in instcombine where this the case originally,
> and i made sure it continues.
>
> On Fri, May 26, 2017 at 10:06 AM, Sanjay Patel via Phabricator <
> reviews at reviews.llvm.org> wrote:
>
>> spatel added subscribers: davide, hfinkel, dberlin.
>> spatel added a comment.
>>
>> Can you concoct tests with 'llvm.assume' to show a difference?
>>
>> I think that raises a question though: this change can make value
>> tracking more effective, but it comes with non-zero compile-time cost if I
>> understand computeKnownBits() correctly. Do we want to incur that overhead
>> without a real-world motivation for the benefit?
>> cc'ing @dberlin @davide @hfinkel
>>
>> Another question along this line: we call Simplify*Inst() for all
>> instructions as the first step in every visit*() in InstCombine. In most
>> cases, we don't pass a context instruction, but we do for visitICmpInst().
>> Is that difference intentional?
>>
>>   if (Value *V = SimplifyICmpInst(I.getPredicate(), Op0, Op1,
>>                                   SQ.getWithInstruction(&I)))
>>     return replaceInstUsesWith(I, V);
>>
>> vs.
>>
>>   if (Value *V = SimplifyShlInst(Op0, Op1, I.hasNoSignedWrap(),
>>                                   I.hasNoUnsignedWrap(), SQ))
>>      return replaceInstUsesWith(I, V);
>>
>>
>> https://reviews.llvm.org/D33567
>>
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170526/569b5140/attachment.html>


More information about the llvm-commits mailing list