[llvm] 457308a - [ValueTracking] Add more tests for constant ranges; NFC
Noah Goldstein via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 12 12:12:39 PDT 2023
Author: Noah Goldstein
Date: 2023-10-12T14:12:26-05:00
New Revision: 457308a46a37fd56af06664ad923a06d50243a56
URL: https://github.com/llvm/llvm-project/commit/457308a46a37fd56af06664ad923a06d50243a56
DIFF: https://github.com/llvm/llvm-project/commit/457308a46a37fd56af06664ad923a06d50243a56.diff
LOG: [ValueTracking] Add more tests for constant ranges; NFC
Added:
llvm/test/Analysis/ValueTracking/constant-ranges.ll
Modified:
Removed:
################################################################################
diff --git a/llvm/test/Analysis/ValueTracking/constant-ranges.ll b/llvm/test/Analysis/ValueTracking/constant-ranges.ll
new file mode 100644
index 000000000000000..e425c1547bc3a60
--- /dev/null
+++ b/llvm/test/Analysis/ValueTracking/constant-ranges.ll
@@ -0,0 +1,146 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt -passes=instsimplify < %s -S | FileCheck %s
+
+define i1 @shl_C_X_ugt(i8 %x) {
+; CHECK-LABEL: @shl_C_X_ugt(
+; CHECK-NEXT: [[SHL:%.*]] = shl i8 7, [[X:%.*]]
+; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], -32
+; CHECK-NEXT: ret i1 [[R]]
+;
+ %shl = shl i8 7, %x
+ %r = icmp ugt i8 %shl, 224
+ ret i1 %r
+}
+
+define i1 @shl_C_X_ugt2(i8 %x) {
+; CHECK-LABEL: @shl_C_X_ugt2(
+; CHECK-NEXT: [[SHL:%.*]] = shl i8 5, [[X:%.*]]
+; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], -64
+; CHECK-NEXT: ret i1 [[R]]
+;
+ %shl = shl i8 5, %x
+ %r = icmp ugt i8 %shl, 192
+ ret i1 %r
+}
+
+define i1 @shl_C_X_ugt_fail(i8 %x) {
+; CHECK-LABEL: @shl_C_X_ugt_fail(
+; CHECK-NEXT: [[SHL:%.*]] = shl i8 1, [[X:%.*]]
+; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], 127
+; CHECK-NEXT: ret i1 [[R]]
+;
+ %shl = shl i8 1, %x
+ %r = icmp ugt i8 %shl, 127
+ ret i1 %r
+}
+
+define i1 @shl_C_X_ugt_fail2(i8 %x) {
+; CHECK-LABEL: @shl_C_X_ugt_fail2(
+; CHECK-NEXT: [[SHL:%.*]] = shl i8 3, [[X:%.*]]
+; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], -66
+; CHECK-NEXT: ret i1 [[R]]
+;
+ %shl = shl i8 3, %x
+ %r = icmp ugt i8 %shl, 190
+ ret i1 %r
+}
+
+define i1 @shl_C_X_ugt_fail3(i8 %x) {
+; CHECK-LABEL: @shl_C_X_ugt_fail3(
+; CHECK-NEXT: [[SHL:%.*]] = shl i8 -1, [[X:%.*]]
+; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], -2
+; CHECK-NEXT: ret i1 [[R]]
+;
+ %shl = shl i8 -1, %x
+ %r = icmp ugt i8 %shl, 254
+ ret i1 %r
+}
+
+define i1 @shl_C_X_ugt_todo(i8 %x) {
+; CHECK-LABEL: @shl_C_X_ugt_todo(
+; CHECK-NEXT: [[SHL:%.*]] = shl i8 -127, [[X:%.*]]
+; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], -116
+; CHECK-NEXT: ret i1 [[R]]
+;
+ %shl = shl i8 129, %x
+ %r = icmp ugt i8 %shl, 140
+ ret i1 %r
+}
+
+define i1 @shl_X_C_ugt(i8 %x) {
+; CHECK-LABEL: @shl_X_C_ugt(
+; CHECK-NEXT: [[SHL:%.*]] = shl i8 [[X:%.*]], 6
+; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], -64
+; CHECK-NEXT: ret i1 [[R]]
+;
+ %shl = shl i8 %x, 6
+ %r = icmp ugt i8 %shl, 192
+ ret i1 %r
+}
+
+define i1 @shl_X_C_ugt_fail(i8 %x) {
+; CHECK-LABEL: @shl_X_C_ugt_fail(
+; CHECK-NEXT: [[SHL:%.*]] = shl i8 [[X:%.*]], 6
+; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], -65
+; CHECK-NEXT: ret i1 [[R]]
+;
+ %shl = shl i8 %x, 6
+ %r = icmp ugt i8 %shl, 191
+ ret i1 %r
+}
+
+define i1 @shl_X_C_ugt_fail2(i8 %x) {
+; CHECK-LABEL: @shl_X_C_ugt_fail2(
+; CHECK-NEXT: [[SHL:%.*]] = shl i8 [[X:%.*]], 5
+; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], -64
+; CHECK-NEXT: ret i1 [[R]]
+;
+ %shl = shl i8 %x, 5
+ %r = icmp ugt i8 %shl, 192
+ ret i1 %r
+}
+
+define i1 @and_ugt(i8 %xx) {
+; CHECK-LABEL: @and_ugt(
+; CHECK-NEXT: [[X:%.*]] = mul i8 [[XX:%.*]], [[XX]]
+; CHECK-NEXT: [[NEGX:%.*]] = sub i8 0, [[X]]
+; CHECK-NEXT: [[X_P2:%.*]] = and i8 [[NEGX]], [[X]]
+; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[X_P2]], -128
+; CHECK-NEXT: ret i1 [[R]]
+;
+ %x = mul i8 %xx, %xx ; thwart complexity-based canonicalization
+ %negx = sub i8 0, %x
+ %x_p2 = and i8 %negx, %x
+ %r = icmp ugt i8 %x_p2, 128
+ ret i1 %r
+}
+
+define i1 @and_ugt2(i8 %xx) {
+; CHECK-LABEL: @and_ugt2(
+; CHECK-NEXT: [[X:%.*]] = mul i8 [[XX:%.*]], [[XX]]
+; CHECK-NEXT: [[NEGX:%.*]] = sub i8 0, [[X]]
+; CHECK-NEXT: [[X_P2:%.*]] = and i8 [[X]], [[NEGX]]
+; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[X_P2]], -128
+; CHECK-NEXT: ret i1 [[R]]
+;
+ %x = mul i8 %xx, %xx ; thwart complexity-based canonicalization
+ %negx = sub i8 0, %x
+ %x_p2 = and i8 %x, %negx
+ %r = icmp ugt i8 %x_p2, 128
+ ret i1 %r
+}
+
+define i1 @and_ugt_fail(i8 %xx) {
+; CHECK-LABEL: @and_ugt_fail(
+; CHECK-NEXT: [[X:%.*]] = mul i8 [[XX:%.*]], [[XX]]
+; CHECK-NEXT: [[NEGX:%.*]] = sub i8 0, [[X]]
+; CHECK-NEXT: [[X_P2:%.*]] = and i8 [[X]], [[NEGX]]
+; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[X_P2]], 127
+; CHECK-NEXT: ret i1 [[R]]
+;
+ %x = mul i8 %xx, %xx ; thwart complexity-based canonicalization
+ %negx = sub i8 0, %x
+ %x_p2 = and i8 %x, %negx
+ %r = icmp ugt i8 %x_p2, 127
+ ret i1 %r
+}
More information about the llvm-commits
mailing list