[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