[llvm] r259375 - [InstCombine] Don't transform (X+INT_MAX)>=(Y+INT_MAX) -> (X<=Y)
Hans Wennborg via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 1 11:22:25 PST 2016
Thanks, r259390.
On Mon, Feb 1, 2016 at 11:18 AM, David Majnemer
<david.majnemer at gmail.com> wrote:
> The bug is at least four years old so it isn't a regression. However, the
> fix is quite low risk. I think it cannot hurt to merge it in to 3.8
>
> On Mon, Feb 1, 2016 at 11:06 AM, Hans Wennborg <hans at chromium.org> wrote:
>>
>> 3.8?
>>
>> On Mon, Feb 1, 2016 at 9:37 AM, David Majnemer via llvm-commits
>> <llvm-commits at lists.llvm.org> wrote:
>> > Author: majnemer
>> > Date: Mon Feb 1 11:37:56 2016
>> > New Revision: 259375
>> >
>> > URL: http://llvm.org/viewvc/llvm-project?rev=259375&view=rev
>> > Log:
>> > [InstCombine] Don't transform (X+INT_MAX)>=(Y+INT_MAX) -> (X<=Y)
>> >
>> > This miscompile came about because we tried to use a transform which was
>> > only appropriate for xor operators when addition was present.
>> >
>> > This fixes PR26407.
>> >
>> > Modified:
>> > llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp
>> > llvm/trunk/test/Transforms/InstCombine/icmp.ll
>> >
>> > Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp
>> > URL:
>> > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp?rev=259375&r1=259374&r2=259375&view=diff
>> >
>> > ==============================================================================
>> > --- llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp
>> > (original)
>> > +++ llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp Mon
>> > Feb 1 11:37:56 2016
>> > @@ -3877,7 +3877,7 @@ Instruction *InstCombiner::visitICmpInst
>> > BO1->getOperand(0));
>> > }
>> >
>> > - if (CI->isMaxValue(true)) {
>> > + if (BO0->getOpcode() == Instruction::Xor &&
>> > CI->isMaxValue(true)) {
>> > ICmpInst::Predicate Pred = I.isSigned()
>> > ? I.getUnsignedPredicate()
>> > : I.getSignedPredicate();
>> >
>> > Modified: llvm/trunk/test/Transforms/InstCombine/icmp.ll
>> > URL:
>> > http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/icmp.ll?rev=259375&r1=259374&r2=259375&view=diff
>> >
>> > ==============================================================================
>> > --- llvm/trunk/test/Transforms/InstCombine/icmp.ll (original)
>> > +++ llvm/trunk/test/Transforms/InstCombine/icmp.ll Mon Feb 1 11:37:56
>> > 2016
>> > @@ -1672,3 +1672,15 @@ define i1 @cmp_slt_rhs_inc(float %x, i32
>> > %cmp = icmp slt i32 %conv, %inc
>> > ret i1 %cmp
>> > }
>> > +
>> > +; CHECK-LABEL: @PR26407
>> > +; CHECK-NEXT: %[[addx:.*]] = add i32 %x, 2147483647
>> > +; CHECK-NEXT: %[[addy:.*]] = add i32 %y, 2147483647
>> > +; CHECK-NEXT: %[[cmp:.*]] = icmp uge i32 %[[addx]], %[[addy]]
>> > +; CHECK-NEXT: ret i1 %[[cmp]]
>> > +define i1 @PR26407(i32 %x, i32 %y) {
>> > + %addx = add i32 %x, 2147483647
>> > + %addy = add i32 %y, 2147483647
>> > + %cmp = icmp uge i32 %addx, %addy
>> > + ret i1 %cmp
>> > +}
>> >
>> >
>> > _______________________________________________
>> > llvm-commits mailing list
>> > llvm-commits at lists.llvm.org
>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
>
More information about the llvm-commits
mailing list