[LLVMdev] Question Regarding Sign-Overflow
Jingyue Wu
jingyue at google.com
Wed Jun 25 21:37:00 PDT 2014
Thanks Nuno!
The first case is pretty rare. If (0 - a) does not unsigned overflow, then
a must be 0. Right?
The second case is worth handling. I'll send a patch soon.
Jingyue
On Wed, Jun 25, 2014 at 2:00 PM, Nuno Lopes <nunoplopes at sapo.pt> wrote:
> You're right; there's a bug.
>
> I proved, however, the correctness of two cases:
> 1) X - (0 -nuw A) -> X +nuw nsw A
> 2) X -nsw (0 -nsw A) -> X +nsw A
>
> Not sure if the complexity of implementing this is worth the trouble,
> though.
>
> Nuno
>
> ----- Original Message ----- From: "Jingyue Wu" <jingyue at google.com>
> Sent: Wednesday, June 25, 2014 5:48 AM
> Subject: [LLVMdev] Question Regarding Sign-Overflow
>
>
>
> Hi,
>>
>> I have doubts on the following transformation in InstCombineAddSub.cpp. Is
>> it always safe to preserve NSW/NUW in this case?
>>
>> // If this is a 'B = x-(-A)', change to B = x+A. This preserves
>> NSW/NUW.
>> if (Value *V = dyn_castNegVal(Op1)) {
>> BinaryOperator *Res = BinaryOperator::CreateAdd(Op0, V);
>> Res->setHasNoSignedWrap(I.hasNoSignedWrap());
>> Res->setHasNoUnsignedWrap(I.hasNoUnsignedWrap());
>> return Res;
>> }
>>
>> Suppose A = x = (i4 -8) (the minimum signed integer of i4). The first
>> minus in x - (-A) does not sign-overflow, but x + A sign-overflows.
>>
>> Thanks,
>> Jingyue
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140625/db528a3b/attachment.html>
More information about the llvm-dev
mailing list