[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