Commit caaec425 authored by Hans Wennborg's avatar Hans Wennborg
Browse files

Merging r259375:

------------------------------------------------------------------------
r259375 | majnemer | 2016-02-01 09:37:56 -0800 (Mon, 01 Feb 2016) | 6 lines

[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.
------------------------------------------------------------------------

llvm-svn: 259390
parent 520d0e85
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3560,7 +3560,7 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) {
                                BO1->getOperand(0));
          }

          if (CI->isMaxValue(true)) {
          if (BO0->getOpcode() == Instruction::Xor && CI->isMaxValue(true)) {
            ICmpInst::Predicate Pred = I.isSigned()
                                           ? I.getUnsignedPredicate()
                                           : I.getSignedPredicate();
+12 −0
Original line number Diff line number Diff line
@@ -1672,3 +1672,15 @@ define i1 @cmp_slt_rhs_inc(float %x, i32 %i) {
  %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
}