From 0351bd959faefe54456b43933b2f628ea14efb0d Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Fri, 23 Oct 2020 08:24:17 -0400 Subject: [PATCH] [InstSimplify] add tests for cttz constant range; NFC This is a search-and-replace of f6cb7f3 --- llvm/test/Transforms/InstSimplify/compare.ll | 107 +++++++++++++++++++ 1 file changed, 107 insertions(+) diff --git a/llvm/test/Transforms/InstSimplify/compare.ll b/llvm/test/Transforms/InstSimplify/compare.ll index 311d8ebebc16..4e6e286d5c62 100644 --- a/llvm/test/Transforms/InstSimplify/compare.ll +++ b/llvm/test/Transforms/InstSimplify/compare.ll @@ -2267,4 +2267,111 @@ define <2 x i1> @ctlz_slt_bitwidth_splat(<2 x i13> %x) { ret <2 x i1> %cmp } +declare i11 @llvm.cttz.i11(i11) +declare i73 @llvm.cttz.i73(i73) +declare <2 x i13> @llvm.cttz.v2i13(<2 x i13>) + +define i1 @cttz_sgt_bitwidth(i11 %x) { +; CHECK-LABEL: @cttz_sgt_bitwidth( +; CHECK-NEXT: [[POP:%.*]] = call i11 @llvm.cttz.i11(i11 [[X:%.*]], i1 false) +; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i11 [[POP]], 11 +; CHECK-NEXT: ret i1 [[CMP]] +; + %pop = call i11 @llvm.cttz.i11(i11 %x) + %cmp = icmp sgt i11 %pop, 11 + ret i1 %cmp +} + +define i1 @cttz_sle_minus1(i11 %x) { +; CHECK-LABEL: @cttz_sle_minus1( +; CHECK-NEXT: [[POP:%.*]] = call i11 @llvm.cttz.i11(i11 [[X:%.*]], i1 false) +; CHECK-NEXT: [[CMP:%.*]] = icmp sle i11 [[POP]], -1 +; CHECK-NEXT: ret i1 [[CMP]] +; + %pop = call i11 @llvm.cttz.i11(i11 %x) + %cmp = icmp sle i11 %pop, -1 + ret i1 %cmp +} + +define i1 @cttz_ugt_bitwidth(i73 %x) { +; CHECK-LABEL: @cttz_ugt_bitwidth( +; CHECK-NEXT: [[POP:%.*]] = call i73 @llvm.cttz.i73(i73 [[X:%.*]], i1 false) +; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i73 [[POP]], 73 +; CHECK-NEXT: ret i1 [[CMP]] +; + %pop = call i73 @llvm.cttz.i73(i73 %x) + %cmp = icmp ugt i73 %pop, 73 + ret i1 %cmp +} + +; Negative test - does not simplify, but instcombine could reduce this. + +define i1 @cttz_ugt_bitwidth_minus1(i73 %x) { +; CHECK-LABEL: @cttz_ugt_bitwidth_minus1( +; CHECK-NEXT: [[POP:%.*]] = call i73 @llvm.cttz.i73(i73 [[X:%.*]], i1 false) +; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i73 [[POP]], 72 +; CHECK-NEXT: ret i1 [[CMP]] +; + %pop = call i73 @llvm.cttz.i73(i73 %x) + %cmp = icmp ugt i73 %pop, 72 + ret i1 %cmp +} + +define <2 x i1> @cttz_sgt_bitwidth_splat(<2 x i13> %x) { +; CHECK-LABEL: @cttz_sgt_bitwidth_splat( +; CHECK-NEXT: [[POP:%.*]] = call <2 x i13> @llvm.cttz.v2i13(<2 x i13> [[X:%.*]], i1 false) +; CHECK-NEXT: [[CMP:%.*]] = icmp sgt <2 x i13> [[POP]], +; CHECK-NEXT: ret <2 x i1> [[CMP]] +; + %pop = call <2 x i13> @llvm.cttz.v2i13(<2 x i13> %x) + %cmp = icmp sgt <2 x i13> %pop, + ret <2 x i1> %cmp +} + +define i1 @cttz_ult_plus1_bitwidth(i11 %x) { +; CHECK-LABEL: @cttz_ult_plus1_bitwidth( +; CHECK-NEXT: [[POP:%.*]] = call i11 @llvm.cttz.i11(i11 [[X:%.*]], i1 false) +; CHECK-NEXT: [[CMP:%.*]] = icmp ult i11 [[POP]], 12 +; CHECK-NEXT: ret i1 [[CMP]] +; + %pop = call i11 @llvm.cttz.i11(i11 %x) + %cmp = icmp ult i11 %pop, 12 + ret i1 %cmp +} + +define i1 @cttz_ne_big_bitwidth(i73 %x) { +; CHECK-LABEL: @cttz_ne_big_bitwidth( +; CHECK-NEXT: [[POP:%.*]] = call i73 @llvm.cttz.i73(i73 [[X:%.*]], i1 false) +; CHECK-NEXT: [[CMP:%.*]] = icmp ne i73 [[POP]], 75 +; CHECK-NEXT: ret i1 [[CMP]] +; + %pop = call i73 @llvm.cttz.i73(i73 %x) + %cmp = icmp ne i73 %pop, 75 + ret i1 %cmp +} + +define <2 x i1> @cttz_slt_bitwidth_plus1_splat(<2 x i13> %x) { +; CHECK-LABEL: @cttz_slt_bitwidth_plus1_splat( +; CHECK-NEXT: [[POP:%.*]] = call <2 x i13> @llvm.cttz.v2i13(<2 x i13> [[X:%.*]], i1 false) +; CHECK-NEXT: [[CMP:%.*]] = icmp slt <2 x i13> [[POP]], +; CHECK-NEXT: ret <2 x i1> [[CMP]] +; + %pop = call <2 x i13> @llvm.cttz.v2i13(<2 x i13> %x) + %cmp = icmp slt <2 x i13> %pop, + ret <2 x i1> %cmp +} + +; Negative test - does not simplify, but instcombine could reduce this. + +define <2 x i1> @cttz_slt_bitwidth_splat(<2 x i13> %x) { +; CHECK-LABEL: @cttz_slt_bitwidth_splat( +; CHECK-NEXT: [[POP:%.*]] = call <2 x i13> @llvm.cttz.v2i13(<2 x i13> [[X:%.*]], i1 false) +; CHECK-NEXT: [[CMP:%.*]] = icmp slt <2 x i13> [[POP]], +; CHECK-NEXT: ret <2 x i1> [[CMP]] +; + %pop = call <2 x i13> @llvm.cttz.v2i13(<2 x i13> %x) + %cmp = icmp slt <2 x i13> %pop, + ret <2 x i1> %cmp +} + attributes #0 = { null_pointer_is_valid }