From 7d98be81cc88c633cd932bcb543bc49e50cc47a9 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Mon, 15 Aug 2016 19:58:21 +0000 Subject: [PATCH] [InstCombine] add tests for vector icmp folds llvm-svn: 278726 --- llvm/test/Transforms/InstCombine/exact.ll | 94 ++++++++++++++++++++++++++++++- 1 file changed, 93 insertions(+), 1 deletion(-) diff --git a/llvm/test/Transforms/InstCombine/exact.ll b/llvm/test/Transforms/InstCombine/exact.ll index a1e8cb9..530d665 100644 --- a/llvm/test/Transforms/InstCombine/exact.ll +++ b/llvm/test/Transforms/InstCombine/exact.ll @@ -157,6 +157,16 @@ define i1 @udiv_icmp1(i64 %X) { ret i1 %B } +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, +; CHECK-NEXT: ret <2 x i1> [[B]] +; + %A = udiv exact <2 x i64> %X, + %B = icmp ne <2 x i64> %A, zeroinitializer + ret <2 x i1> %B +} + define i1 @udiv_icmp2(i64 %X) { ; CHECK-LABEL: @udiv_icmp2( ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 %X, 0 @@ -167,6 +177,16 @@ define i1 @udiv_icmp2(i64 %X) { ret i1 %B } +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, +; CHECK-NEXT: ret <2 x i1> [[B]] +; + %A = udiv exact <2 x i64> %X, + %B = icmp eq <2 x i64> %A, zeroinitializer + ret <2 x i1> %B +} + define i1 @sdiv_icmp1(i64 %X) { ; CHECK-LABEL: @sdiv_icmp1( ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 %X, 0 @@ -177,6 +197,18 @@ define i1 @sdiv_icmp1(i64 %X) { ret i1 %B } +; FIXME: Vectors should fold too. +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, +; CHECK-NEXT: [[B:%.*]] = icmp eq <2 x i64> [[A]], zeroinitializer +; CHECK-NEXT: ret <2 x i1> [[B]] +; + %A = sdiv exact <2 x i64> %X, + %B = icmp eq <2 x i64> %A, zeroinitializer + ret <2 x i1> %B +} + define i1 @sdiv_icmp2(i64 %X) { ; CHECK-LABEL: @sdiv_icmp2( ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 %X, 5 @@ -187,6 +219,18 @@ 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, +; CHECK-NEXT: [[B:%.*]] = icmp eq <2 x i64> [[A]], +; CHECK-NEXT: ret <2 x i1> [[B]] +; + %A = sdiv exact <2 x i64> %X, + %B = icmp eq <2 x i64> %A, + ret <2 x i1> %B +} + define i1 @sdiv_icmp3(i64 %X) { ; CHECK-LABEL: @sdiv_icmp3( ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 %X, -5 @@ -197,6 +241,18 @@ 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, +; CHECK-NEXT: [[B:%.*]] = icmp eq <2 x i64> [[A]], +; CHECK-NEXT: ret <2 x i1> [[B]] +; + %A = sdiv exact <2 x i64> %X, + %B = icmp eq <2 x i64> %A, + ret <2 x i1> %B +} + define i1 @sdiv_icmp4(i64 %X) { ; CHECK-LABEL: @sdiv_icmp4( ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 %X, 0 @@ -207,6 +263,18 @@ define i1 @sdiv_icmp4(i64 %X) { ret i1 %B } +; FIXME: Vectors should fold too. +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, +; CHECK-NEXT: [[B:%.*]] = icmp eq <2 x i64> [[A]], zeroinitializer +; CHECK-NEXT: ret <2 x i1> [[B]] +; + %A = sdiv exact <2 x i64> %X, + %B = icmp eq <2 x i64> %A, zeroinitializer + ret <2 x i1> %B +} + define i1 @sdiv_icmp5(i64 %X) { ; CHECK-LABEL: @sdiv_icmp5( ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 %X, -5 @@ -217,13 +285,37 @@ 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, +; CHECK-NEXT: [[B:%.*]] = icmp eq <2 x i64> [[A]], +; CHECK-NEXT: ret <2 x i1> [[B]] +; + %A = sdiv exact <2 x i64> %X, + %B = icmp eq <2 x i64> %A, + ret <2 x i1> %B +} + define i1 @sdiv_icmp6(i64 %X) { ; CHECK-LABEL: @sdiv_icmp6( ; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i64 %X, 5 ; CHECK-NEXT: ret i1 [[TMP1]] ; - %A = sdiv exact i64 %X, -5 ; X/-5 == 1 --> x == 5 + %A = sdiv exact i64 %X, -5 ; X/-5 == -1 --> x == 5 %B = icmp eq i64 %A, -1 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, +; CHECK-NEXT: [[B:%.*]] = icmp eq <2 x i64> [[A]], +; CHECK-NEXT: ret <2 x i1> [[B]] +; + %A = sdiv exact <2 x i64> %X, + %B = icmp eq <2 x i64> %A, + ret <2 x i1> %B +} + -- 2.7.4