summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/Transforms/InstCombine/2007-03-21-SignedRangeTest.ll5
-rw-r--r--llvm/test/Transforms/InstCombine/div.ll15
-rw-r--r--llvm/test/Transforms/InstCombine/exact.ll47
-rw-r--r--llvm/test/Transforms/InstCombine/icmp.ll4
4 files changed, 27 insertions, 44 deletions
diff --git a/llvm/test/Transforms/InstCombine/2007-03-21-SignedRangeTest.ll b/llvm/test/Transforms/InstCombine/2007-03-21-SignedRangeTest.ll
index 69b7c541f93..ffcfe2683cf 100644
--- a/llvm/test/Transforms/InstCombine/2007-03-21-SignedRangeTest.ll
+++ b/llvm/test/Transforms/InstCombine/2007-03-21-SignedRangeTest.ll
@@ -14,11 +14,10 @@ define i1 @test(i32 %tmp6) {
ret i1 %1
}
-; FIXME: Vectors should fold the same way.
define <2 x i1> @test_vec(<2 x i32> %tmp6) {
; CHECK-LABEL: @test_vec(
-; CHECK-NEXT: [[TMP7:%.*]] = sdiv <2 x i32> %tmp6, <i32 12, i32 12>
-; CHECK-NEXT: [[TMP1:%.*]] = icmp ne <2 x i32> [[TMP7]], <i32 -6, i32 -6>
+; CHECK-NEXT: [[TMP6_OFF:%.*]] = add <2 x i32> %tmp6, <i32 83, i32 83>
+; CHECK-NEXT: [[TMP1:%.*]] = icmp ugt <2 x i32> [[TMP6_OFF]], <i32 11, i32 11>
; CHECK-NEXT: ret <2 x i1> [[TMP1]]
;
%tmp7 = sdiv <2 x i32> %tmp6, <i32 12, i32 12>
diff --git a/llvm/test/Transforms/InstCombine/div.ll b/llvm/test/Transforms/InstCombine/div.ll
index ece332ab273..a037607267a 100644
--- a/llvm/test/Transforms/InstCombine/div.ll
+++ b/llvm/test/Transforms/InstCombine/div.ll
@@ -72,12 +72,11 @@ define i1 @test7(i32 %A) {
ret i1 %C
}
-; FIXME: Vectors should fold the same way.
define <2 x i1> @test7vec(<2 x i32> %A) {
; CHECK-LABEL: @test7vec(
-; CHECK-NEXT: [[B:%.*]] = udiv <2 x i32> %A, <i32 10, i32 10>
-; CHECK-NEXT: [[C:%.*]] = icmp eq <2 x i32> [[B]], <i32 2, i32 2>
-; CHECK-NEXT: ret <2 x i1> [[C]]
+; CHECK-NEXT: [[A_OFF:%.*]] = add <2 x i32> %A, <i32 -20, i32 -20>
+; CHECK-NEXT: [[TMP1:%.*]] = icmp ult <2 x i32> [[A_OFF]], <i32 10, i32 10>
+; CHECK-NEXT: ret <2 x i1> [[TMP1]]
;
%B = udiv <2 x i32> %A, <i32 10, i32 10>
%C = icmp eq <2 x i32> %B, <i32 2, i32 2>
@@ -95,11 +94,9 @@ define i1 @test8(i8 %A) {
ret i1 %C
}
-; FIXME: Vectors should fold the same way.
define <2 x i1> @test8vec(<2 x i8> %A) {
; CHECK-LABEL: @test8vec(
-; CHECK-NEXT: [[B:%.*]] = udiv <2 x i8> %A, <i8 123, i8 123>
-; CHECK-NEXT: [[C:%.*]] = icmp eq <2 x i8> [[B]], <i8 2, i8 2>
+; CHECK-NEXT: [[C:%.*]] = icmp ugt <2 x i8> %A, <i8 -11, i8 -11>
; CHECK-NEXT: ret <2 x i1> [[C]]
;
%B = udiv <2 x i8> %A, <i8 123, i8 123>
@@ -118,11 +115,9 @@ define i1 @test9(i8 %A) {
ret i1 %C
}
-; FIXME: Vectors should fold the same way.
define <2 x i1> @test9vec(<2 x i8> %A) {
; CHECK-LABEL: @test9vec(
-; CHECK-NEXT: [[B:%.*]] = udiv <2 x i8> %A, <i8 123, i8 123>
-; CHECK-NEXT: [[C:%.*]] = icmp ne <2 x i8> [[B]], <i8 2, i8 2>
+; CHECK-NEXT: [[C:%.*]] = icmp ult <2 x i8> %A, <i8 -10, i8 -10>
; CHECK-NEXT: ret <2 x i1> [[C]]
;
%B = udiv <2 x i8> %A, <i8 123, i8 123>
diff --git a/llvm/test/Transforms/InstCombine/exact.ll b/llvm/test/Transforms/InstCombine/exact.ll
index 530d665b213..f93bc8eff6b 100644
--- a/llvm/test/Transforms/InstCombine/exact.ll
+++ b/llvm/test/Transforms/InstCombine/exact.ll
@@ -159,8 +159,8 @@ define i1 @udiv_icmp1(i64 %X) {
define <2 x i1> @udiv_icmp1_vec(<2 x i64> %X) {
; CHECK-LABEL: @udiv_icmp1_vec(
-; CHECK-NEXT: [[B:%.*]] = icmp ugt <2 x i64> %X, <i64 4, i64 4>
-; CHECK-NEXT: ret <2 x i1> [[B]]
+; CHECK-NEXT: [[TMP1:%.*]] = icmp ne <2 x i64> %X, zeroinitializer
+; CHECK-NEXT: ret <2 x i1> [[TMP1]]
;
%A = udiv exact <2 x i64> %X, <i64 5, i64 5>
%B = icmp ne <2 x i64> %A, zeroinitializer
@@ -177,10 +177,11 @@ define i1 @udiv_icmp2(i64 %X) {
ret i1 %B
}
+; FIXME: missing vector fold for ult 1 -> eq 0
define <2 x i1> @udiv_icmp2_vec(<2 x i64> %X) {
; CHECK-LABEL: @udiv_icmp2_vec(
-; CHECK-NEXT: [[B:%.*]] = icmp ult <2 x i64> %X, <i64 5, i64 5>
-; CHECK-NEXT: ret <2 x i1> [[B]]
+; CHECK-NEXT: [[TMP1:%.*]] = icmp ult <2 x i64> %X, <i64 1, i64 1>
+; CHECK-NEXT: ret <2 x i1> [[TMP1]]
;
%A = udiv exact <2 x i64> %X, <i64 5, i64 5>
%B = icmp eq <2 x i64> %A, zeroinitializer
@@ -197,12 +198,11 @@ define i1 @sdiv_icmp1(i64 %X) {
ret i1 %B
}
-; FIXME: Vectors should fold too.
+; FIXME: missing vector fold for ult 1 -> eq 0
define <2 x i1> @sdiv_icmp1_vec(<2 x i64> %X) {
; CHECK-LABEL: @sdiv_icmp1_vec(
-; CHECK-NEXT: [[A:%.*]] = sdiv exact <2 x i64> %X, <i64 5, i64 5>
-; CHECK-NEXT: [[B:%.*]] = icmp eq <2 x i64> [[A]], zeroinitializer
-; CHECK-NEXT: ret <2 x i1> [[B]]
+; CHECK-NEXT: [[TMP1:%.*]] = icmp ult <2 x i64> %X, <i64 1, i64 1>
+; CHECK-NEXT: ret <2 x i1> [[TMP1]]
;
%A = sdiv exact <2 x i64> %X, <i64 5, i64 5>
%B = icmp eq <2 x i64> %A, zeroinitializer
@@ -219,12 +219,10 @@ define i1 @sdiv_icmp2(i64 %X) {
ret i1 %B
}
-; FIXME: Vectors should fold too.
define <2 x i1> @sdiv_icmp2_vec(<2 x i64> %X) {
; CHECK-LABEL: @sdiv_icmp2_vec(
-; CHECK-NEXT: [[A:%.*]] = sdiv exact <2 x i64> %X, <i64 5, i64 5>
-; CHECK-NEXT: [[B:%.*]] = icmp eq <2 x i64> [[A]], <i64 1, i64 1>
-; CHECK-NEXT: ret <2 x i1> [[B]]
+; CHECK-NEXT: [[TMP1:%.*]] = icmp eq <2 x i64> %X, <i64 5, i64 5>
+; CHECK-NEXT: ret <2 x i1> [[TMP1]]
;
%A = sdiv exact <2 x i64> %X, <i64 5, i64 5>
%B = icmp eq <2 x i64> %A, <i64 1, i64 1>
@@ -241,12 +239,10 @@ define i1 @sdiv_icmp3(i64 %X) {
ret i1 %B
}
-; FIXME: Vectors should fold too.
define <2 x i1> @sdiv_icmp3_vec(<2 x i64> %X) {
; CHECK-LABEL: @sdiv_icmp3_vec(
-; CHECK-NEXT: [[A:%.*]] = sdiv exact <2 x i64> %X, <i64 5, i64 5>
-; CHECK-NEXT: [[B:%.*]] = icmp eq <2 x i64> [[A]], <i64 -1, i64 -1>
-; CHECK-NEXT: ret <2 x i1> [[B]]
+; CHECK-NEXT: [[TMP1:%.*]] = icmp eq <2 x i64> %X, <i64 -5, i64 -5>
+; CHECK-NEXT: ret <2 x i1> [[TMP1]]
;
%A = sdiv exact <2 x i64> %X, <i64 5, i64 5>
%B = icmp eq <2 x i64> %A, <i64 -1, i64 -1>
@@ -263,12 +259,11 @@ define i1 @sdiv_icmp4(i64 %X) {
ret i1 %B
}
-; FIXME: Vectors should fold too.
+; FIXME: missing vector fold for ult 1 -> eq 0
define <2 x i1> @sdiv_icmp4_vec(<2 x i64> %X) {
; CHECK-LABEL: @sdiv_icmp4_vec(
-; CHECK-NEXT: [[A:%.*]] = sdiv exact <2 x i64> %X, <i64 -5, i64 -5>
-; CHECK-NEXT: [[B:%.*]] = icmp eq <2 x i64> [[A]], zeroinitializer
-; CHECK-NEXT: ret <2 x i1> [[B]]
+; CHECK-NEXT: [[TMP1:%.*]] = icmp ult <2 x i64> %X, <i64 1, i64 1>
+; CHECK-NEXT: ret <2 x i1> [[TMP1]]
;
%A = sdiv exact <2 x i64> %X, <i64 -5, i64 -5>
%B = icmp eq <2 x i64> %A, zeroinitializer
@@ -285,12 +280,10 @@ define i1 @sdiv_icmp5(i64 %X) {
ret i1 %B
}
-; FIXME: Vectors should fold too.
define <2 x i1> @sdiv_icmp5_vec(<2 x i64> %X) {
; CHECK-LABEL: @sdiv_icmp5_vec(
-; CHECK-NEXT: [[A:%.*]] = sdiv exact <2 x i64> %X, <i64 -5, i64 -5>
-; CHECK-NEXT: [[B:%.*]] = icmp eq <2 x i64> [[A]], <i64 1, i64 1>
-; CHECK-NEXT: ret <2 x i1> [[B]]
+; CHECK-NEXT: [[TMP1:%.*]] = icmp eq <2 x i64> %X, <i64 -5, i64 -5>
+; CHECK-NEXT: ret <2 x i1> [[TMP1]]
;
%A = sdiv exact <2 x i64> %X, <i64 -5, i64 -5>
%B = icmp eq <2 x i64> %A, <i64 1, i64 1>
@@ -307,12 +300,10 @@ define i1 @sdiv_icmp6(i64 %X) {
ret i1 %B
}
-; FIXME: Vectors should fold too.
define <2 x i1> @sdiv_icmp6_vec(<2 x i64> %X) {
; CHECK-LABEL: @sdiv_icmp6_vec(
-; CHECK-NEXT: [[A:%.*]] = sdiv exact <2 x i64> %X, <i64 -5, i64 -5>
-; CHECK-NEXT: [[B:%.*]] = icmp eq <2 x i64> [[A]], <i64 -1, i64 -1>
-; CHECK-NEXT: ret <2 x i1> [[B]]
+; CHECK-NEXT: [[TMP1:%.*]] = icmp eq <2 x i64> %X, <i64 5, i64 5>
+; CHECK-NEXT: ret <2 x i1> [[TMP1]]
;
%A = sdiv exact <2 x i64> %X, <i64 -5, i64 -5>
%B = icmp eq <2 x i64> %A, <i64 -1, i64 -1>
diff --git a/llvm/test/Transforms/InstCombine/icmp.ll b/llvm/test/Transforms/InstCombine/icmp.ll
index 93e0cdf3646..9ad8250f66c 100644
--- a/llvm/test/Transforms/InstCombine/icmp.ll
+++ b/llvm/test/Transforms/InstCombine/icmp.ll
@@ -282,11 +282,9 @@ define i1 @test23(i32 %x) {
ret i1 %i4
}
-; FIXME: Vectors should fold too.
define <2 x i1> @test23vec(<2 x i32> %x) {
; CHECK-LABEL: @test23vec(
-; CHECK-NEXT: [[I3:%.*]] = sdiv <2 x i32> %x, <i32 -1328634635, i32 -1328634635>
-; CHECK-NEXT: [[I4:%.*]] = icmp eq <2 x i32> [[I3]], <i32 -1, i32 -1>
+; CHECK-NEXT: [[I4:%.*]] = icmp sgt <2 x i32> %x, <i32 1328634634, i32 1328634634>
; CHECK-NEXT: ret <2 x i1> [[I4]]
;
%i3 = sdiv <2 x i32> %x, <i32 -1328634635, i32 -1328634635>
OpenPOWER on IntegriCloud