InstCombine: Don't take A-B<0 into A<B if A-B has other uses
[oota-llvm.git] / test / Transforms / InstCombine / icmp.ll
index ccb57d24451a26b9a901e5ce8d9eb9607ea0a3b9..64741c5712ebe2dbc94f1d38f929a29232a9ba27 100644 (file)
@@ -1558,3 +1558,18 @@ define i1 @f4(i64 %a, i64 %b) {
   %v = icmp sle i64 %t, 0
   ret i1 %v
 }
+
+; CHECK-LABEL: @f5
+; CHECK: %[[cmp:.*]] = icmp slt i32 %[[sub:.*]], 0
+; CHECK: %[[neg:.*]] = sub nsw i32 0, %[[sub]]
+; CHECK: %[[sel:.*]] = select i1 %[[cmp]], i32 %[[neg]], i32 %[[sub]]
+; CHECK: ret i32 %[[sel]]
+define i32 @f5(i8 %a, i8 %b) {
+  %conv = zext i8 %a to i32
+  %conv3 = zext i8 %b to i32
+  %sub = sub nsw i32 %conv, %conv3
+  %cmp4 = icmp slt i32 %sub, 0
+  %sub7 = sub nsw i32 0, %sub
+  %sub7.sub = select i1 %cmp4, i32 %sub7, i32 %sub
+  ret i32 %sub7.sub
+}