InstCombine: Don't turn -(x/INT_MIN) -> x/INT_MIN
[oota-llvm.git] / test / Transforms / InstCombine / sub.ll
index 41d803c8bddd493f394f55b71ce89529d4ed2a5e..a9dffe793a1f0ffbbc0e312a3e10e4c15fec78e4 100644 (file)
@@ -444,3 +444,22 @@ define <2 x i64> @test36(<2 x i64> %A) {
 ; CHECK-NEXT: %sub = mul <2 x i64> %A, <i64 7, i64 15>
 ; CHECK-NEXT: ret <2 x i64> %sub
 }
+
+define <2 x i64> @test37(<2 x i64> %A) {
+  %shl = shl <2 x i64> %A, <i64 3, i64 4>
+  %sub = sub <2 x i64> %shl, %A
+  ret <2 x i64> %sub
+; CHECK-LABEL: @test37(
+; CHECK-NEXT: %sub = mul <2 x i64> %A, <i64 7, i64 15>
+; CHECK-NEXT: ret <2 x i64> %sub
+}
+
+define i32 @test38(i32 %A) {
+  %div = sdiv i32 %A, -2147483648
+  %sub = sub nsw i32 0, %div
+  ret i32 %sub
+; CHECK-LABEL: @test38(
+; CHECK-NEXT: [[DIV:%.*]] = sdiv i32 %A, -2147483648
+; CHECK-NEXT: [[SUB:%.*]] = sub nsw i32 0, [[DIV]]
+; CHECK-NEXT: ret i32 [[SUB]]
+}