From: David Bolvansky Date: Tue, 2 Apr 2019 18:33:54 +0000 (+0000) Subject: [InstCombine] Added tests for PR41273 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=66a0671770ef440af55dd8b383af062b35c09ab9;p=llvm [InstCombine] Added tests for PR41273 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357508 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/Transforms/InstCombine/ctlz-cttz-bitreverse.ll b/test/Transforms/InstCombine/ctlz-cttz-bitreverse.ll new file mode 100644 index 00000000000..2779f96e3a5 --- /dev/null +++ b/test/Transforms/InstCombine/ctlz-cttz-bitreverse.ll @@ -0,0 +1,75 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt -instcombine -S < %s | FileCheck %s + +define i32 @ctlz_true_bitreverse(i32 %x) { +; CHECK-LABEL: @ctlz_true_bitreverse( +; CHECK-NEXT: [[A:%.*]] = tail call i32 @llvm.bitreverse.i32(i32 [[X:%.*]]) +; CHECK-NEXT: [[B:%.*]] = tail call i32 @llvm.ctlz.i32(i32 [[A]], i1 true), !range !0 +; CHECK-NEXT: ret i32 [[B]] +; + %a = tail call i32 @llvm.bitreverse.i32(i32 %x) + %b = tail call i32 @llvm.ctlz.i32(i32 %a, i1 true) + ret i32 %b +} + +define <2 x i64> @ctlz_true_bitreverse_vec(<2 x i64> %x) { +; CHECK-LABEL: @ctlz_true_bitreverse_vec( +; CHECK-NEXT: [[A:%.*]] = tail call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> [[X:%.*]]) +; CHECK-NEXT: [[B:%.*]] = tail call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> [[A]], i1 true) +; CHECK-NEXT: ret <2 x i64> [[B]] +; + %a = tail call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> %x) + %b = tail call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 true) + ret <2 x i64> %b +} + +define i32 @ctlz_false_bitreverse(i32 %x) { +; CHECK-LABEL: @ctlz_false_bitreverse( +; CHECK-NEXT: [[A:%.*]] = tail call i32 @llvm.bitreverse.i32(i32 [[X:%.*]]) +; CHECK-NEXT: [[B:%.*]] = tail call i32 @llvm.ctlz.i32(i32 [[A]], i1 false), !range !0 +; CHECK-NEXT: ret i32 [[B]] +; + %a = tail call i32 @llvm.bitreverse.i32(i32 %x) + %b = tail call i32 @llvm.ctlz.i32(i32 %a, i1 false) + ret i32 %b +} + +define i32 @cttz_true_bitreverse(i32 %x) { +; CHECK-LABEL: @cttz_true_bitreverse( +; CHECK-NEXT: [[A:%.*]] = tail call i32 @llvm.bitreverse.i32(i32 [[X:%.*]]) +; CHECK-NEXT: [[B:%.*]] = tail call i32 @llvm.cttz.i32(i32 [[A]], i1 true), !range !0 +; CHECK-NEXT: ret i32 [[B]] +; + %a = tail call i32 @llvm.bitreverse.i32(i32 %x) + %b = tail call i32 @llvm.cttz.i32(i32 %a, i1 true) + ret i32 %b +} + +define <2 x i64> @cttz_true_bitreverse_vec(<2 x i64> %x) { +; CHECK-LABEL: @cttz_true_bitreverse_vec( +; CHECK-NEXT: [[A:%.*]] = tail call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> [[X:%.*]]) +; CHECK-NEXT: [[B:%.*]] = tail call <2 x i64> @llvm.cttz.v2i64(<2 x i64> [[A]], i1 true) +; CHECK-NEXT: ret <2 x i64> [[B]] +; + %a = tail call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> %x) + %b = tail call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 true) + ret <2 x i64> %b +} + +define i32 @cttz_false_bitreverse(i32 %x) { +; CHECK-LABEL: @cttz_false_bitreverse( +; CHECK-NEXT: [[A:%.*]] = tail call i32 @llvm.bitreverse.i32(i32 [[X:%.*]]) +; CHECK-NEXT: [[B:%.*]] = tail call i32 @llvm.cttz.i32(i32 [[A]], i1 false), !range !0 +; CHECK-NEXT: ret i32 [[B]] +; + %a = tail call i32 @llvm.bitreverse.i32(i32 %x) + %b = tail call i32 @llvm.cttz.i32(i32 %a, i1 false) + ret i32 %b +} + +declare i32 @llvm.bitreverse.i32(i32) +declare <2 x i64> @llvm.bitreverse.v2i64(<2 x i64>) +declare i32 @llvm.ctlz.i32(i32, i1) +declare i32 @llvm.cttz.i32(i32, i1) +declare <2 x i64> @llvm.ctlz.v2i64(<2 x i64>, i1) +declare <2 x i64> @llvm.cttz.v2i64(<2 x i64>, i1)