From: Nikita Popov Date: Sat, 5 Jan 2019 09:48:05 +0000 (+0000) Subject: [InstCombine] Add vector tests for select + ctlz/cttz; NFC X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d5ac05fb53d335218ba5062f532660255495b779;p=llvm [InstCombine] Add vector tests for select + ctlz/cttz; NFC git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350462 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/Transforms/InstCombine/select-cmp-cttz-ctlz.ll b/test/Transforms/InstCombine/select-cmp-cttz-ctlz.ll index 6ccc6155e4c..f7690079b6f 100644 --- a/test/Transforms/InstCombine/select-cmp-cttz-ctlz.ll +++ b/test/Transforms/InstCombine/select-cmp-cttz-ctlz.ll @@ -399,11 +399,61 @@ define i32 @test_cttz_not_bw_multiuse(i32 %x) { ret i32 %res } +define <2 x i32> @test_ctlz_bw_vec(<2 x i32> %x) { +; CHECK-LABEL: @test_ctlz_bw_vec( +; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> [[X:%.*]], i1 false) +; CHECK-NEXT: ret <2 x i32> [[TMP1]] +; + %ct = tail call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> %x, i1 true) + %cmp = icmp ne <2 x i32> %x, zeroinitializer + %res = select <2 x i1> %cmp, <2 x i32> %ct, <2 x i32> + ret <2 x i32> %res +} + +define <2 x i32> @test_ctlz_not_bw_vec(<2 x i32> %x) { +; CHECK-LABEL: @test_ctlz_not_bw_vec( +; CHECK-NEXT: [[CT:%.*]] = tail call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> [[X:%.*]], i1 false) +; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i32> [[X]], zeroinitializer +; CHECK-NEXT: [[RES:%.*]] = select <2 x i1> [[CMP]], <2 x i32> zeroinitializer, <2 x i32> [[CT]] +; CHECK-NEXT: ret <2 x i32> [[RES]] +; + %ct = tail call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> %x, i1 false) + %cmp = icmp ne <2 x i32> %x, zeroinitializer + %res = select <2 x i1> %cmp, <2 x i32> %ct, <2 x i32> + ret <2 x i32> %res +} + +define <2 x i32> @test_cttz_bw_vec(<2 x i32> %x) { +; CHECK-LABEL: @test_cttz_bw_vec( +; CHECK-NEXT: [[TMP1:%.*]] = tail call <2 x i32> @llvm.cttz.v2i32(<2 x i32> [[X:%.*]], i1 false) +; CHECK-NEXT: ret <2 x i32> [[TMP1]] +; + %ct = tail call <2 x i32> @llvm.cttz.v2i32(<2 x i32> %x, i1 true) + %cmp = icmp ne <2 x i32> %x, zeroinitializer + %res = select <2 x i1> %cmp, <2 x i32> %ct, <2 x i32> + ret <2 x i32> %res +} + +define <2 x i32> @test_cttz_not_bw_vec(<2 x i32> %x) { +; CHECK-LABEL: @test_cttz_not_bw_vec( +; CHECK-NEXT: [[CT:%.*]] = tail call <2 x i32> @llvm.cttz.v2i32(<2 x i32> [[X:%.*]], i1 false) +; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i32> [[X]], zeroinitializer +; CHECK-NEXT: [[RES:%.*]] = select <2 x i1> [[CMP]], <2 x i32> zeroinitializer, <2 x i32> [[CT]] +; CHECK-NEXT: ret <2 x i32> [[RES]] +; + %ct = tail call <2 x i32> @llvm.cttz.v2i32(<2 x i32> %x, i1 false) + %cmp = icmp ne <2 x i32> %x, zeroinitializer + %res = select <2 x i1> %cmp, <2 x i32> %ct, <2 x i32> + ret <2 x i32> %res +} + declare i16 @llvm.ctlz.i16(i16, i1) declare i32 @llvm.ctlz.i32(i32, i1) declare i64 @llvm.ctlz.i64(i64, i1) declare i128 @llvm.ctlz.i128(i128, i1) +declare <2 x i32> @llvm.ctlz.v2i32(<2 x i32>, i1) declare i16 @llvm.cttz.i16(i16, i1) declare i32 @llvm.cttz.i32(i32, i1) declare i64 @llvm.cttz.i64(i64, i1) declare i128 @llvm.cttz.i128(i128, i1) +declare <2 x i32> @llvm.cttz.v2i32(<2 x i32>, i1)