[llvm] bd6e5c0 - [InstCombine] Add tests for add+icmp assumes (NFC)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 5 06:28:23 PDT 2023
Author: Nikita Popov
Date: 2023-07-05T15:28:13+02:00
New Revision: bd6e5c0cb34c62331d1b892808c025e760d88a9c
URL: https://github.com/llvm/llvm-project/commit/bd6e5c0cb34c62331d1b892808c025e760d88a9c
DIFF: https://github.com/llvm/llvm-project/commit/bd6e5c0cb34c62331d1b892808c025e760d88a9c.diff
LOG: [InstCombine] Add tests for add+icmp assumes (NFC)
Added:
Modified:
llvm/test/Transforms/InstCombine/assume.ll
Removed:
################################################################################
diff --git a/llvm/test/Transforms/InstCombine/assume.ll b/llvm/test/Transforms/InstCombine/assume.ll
index d11928f62ce78e..1c73d86986b7ce 100644
--- a/llvm/test/Transforms/InstCombine/assume.ll
+++ b/llvm/test/Transforms/InstCombine/assume.ll
@@ -837,6 +837,125 @@ define void @assume_makes_and_known_assume_on_bitwise(ptr %p, i32 %a, i32 %b) {
ret void
}
+define i32 @range_16_31_top28(i32 %x) {
+; CHECK-LABEL: @range_16_31_top28(
+; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[X:%.*]], -16
+; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP1]], 16
+; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
+; CHECK-NEXT: ret i32 16
+;
+ %add = add i32 %x, -16
+ %cmp = icmp ult i32 %add, 16
+ call void @llvm.assume(i1 %cmp)
+ %res = and i32 %x, u0xfffffff0
+ ret i32 %res
+}
+
+define i32 @range_16_31_top29(i32 %x) {
+; CHECK-LABEL: @range_16_31_top29(
+; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[X:%.*]], -16
+; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP1]], 16
+; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
+; CHECK-NEXT: [[RES:%.*]] = and i32 [[X]], 24
+; CHECK-NEXT: ret i32 [[RES]]
+;
+ %add = add i32 %x, -16
+ %cmp = icmp ult i32 %add, 16
+ call void @llvm.assume(i1 %cmp)
+ %res = and i32 %x, u0xfffffff8
+ ret i32 %res
+}
+
+define i32 @range_16_30_top28(i32 %x) {
+; CHECK-LABEL: @range_16_30_top28(
+; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X:%.*]], -16
+; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[ADD]], 15
+; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
+; CHECK-NEXT: [[RES:%.*]] = and i32 [[X]], -16
+; CHECK-NEXT: ret i32 [[RES]]
+;
+ %add = add i32 %x, -16
+ %cmp = icmp ult i32 %add, 15
+ call void @llvm.assume(i1 %cmp)
+ %res = and i32 %x, u0xfffffff0
+ ret i32 %res
+}
+
+define i32 @range_16_32_top28(i32 %x) {
+; CHECK-LABEL: @range_16_32_top28(
+; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X:%.*]], -16
+; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[ADD]], 17
+; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
+; CHECK-NEXT: [[RES:%.*]] = and i32 [[X]], -16
+; CHECK-NEXT: ret i32 [[RES]]
+;
+ %add = add i32 %x, -16
+ %cmp = icmp ult i32 %add, 17
+ call void @llvm.assume(i1 %cmp)
+ %res = and i32 %x, u0xfffffff0
+ ret i32 %res
+}
+
+define i32 @range_16_32_top27(i32 %x) {
+; CHECK-LABEL: @range_16_32_top27(
+; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X:%.*]], -16
+; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[ADD]], 17
+; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
+; CHECK-NEXT: [[RES:%.*]] = and i32 [[X]], -32
+; CHECK-NEXT: ret i32 [[RES]]
+;
+ %add = add i32 %x, -16
+ %cmp = icmp ult i32 %add, 17
+ call void @llvm.assume(i1 %cmp)
+ %res = and i32 %x, u0xffffffe0
+ ret i32 %res
+}
+
+define i32 @range_16_32_top26(i32 %x) {
+; CHECK-LABEL: @range_16_32_top26(
+; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X:%.*]], -16
+; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[ADD]], 17
+; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
+; CHECK-NEXT: [[RES:%.*]] = and i32 [[X]], -64
+; CHECK-NEXT: ret i32 [[RES]]
+;
+ %add = add i32 %x, -16
+ %cmp = icmp ult i32 %add, 17
+ call void @llvm.assume(i1 %cmp)
+ %res = and i32 %x, u0xffffffc0
+ ret i32 %res
+}
+
+define i32 @range_15_31_top28(i32 %x) {
+; CHECK-LABEL: @range_15_31_top28(
+; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X:%.*]], -15
+; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[ADD]], 16
+; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
+; CHECK-NEXT: [[RES:%.*]] = and i32 [[X]], -16
+; CHECK-NEXT: ret i32 [[RES]]
+;
+ %add = add i32 %x, -15
+ %cmp = icmp ult i32 %add, 16
+ call void @llvm.assume(i1 %cmp)
+ %res = and i32 %x, u0xfffffff0
+ ret i32 %res
+}
+
+define i32 @range_15_31_top27(i32 %x) {
+; CHECK-LABEL: @range_15_31_top27(
+; CHECK-NEXT: [[ADD:%.*]] = add i32 [[X:%.*]], -15
+; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[ADD]], 16
+; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
+; CHECK-NEXT: [[RES:%.*]] = and i32 [[X]], -32
+; CHECK-NEXT: ret i32 [[RES]]
+;
+ %add = add i32 %x, -15
+ %cmp = icmp ult i32 %add, 16
+ call void @llvm.assume(i1 %cmp)
+ %res = and i32 %x, u0xffffffe0
+ ret i32 %res
+}
+
declare void @llvm.dbg.value(metadata, metadata, metadata)
!llvm.dbg.cu = !{!0}
More information about the llvm-commits
mailing list