From: Sanjay Patel Date: Mon, 15 Aug 2016 19:58:21 +0000 (+0000) Subject: [InstCombine] add tests for vector icmp folds X-Git-Tag: llvmorg-4.0.0-rc1~12406 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7d98be81cc88c633cd932bcb543bc49e50cc47a9;p=platform%2Fupstream%2Fllvm.git [InstCombine] add tests for vector icmp folds llvm-svn: 278726 --- 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 +} +