[llvm] [ValueTracking] Improve constant range computation for `shl` and `and`. (PR #68446)
Yingwei Zheng via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 6 20:22:57 PDT 2023
================
@@ -0,0 +1,132 @@
+; 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: ret i1 false
+;
+ %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: ret i1 false
+;
+ %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: ret i1 false
+;
+ %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, i8 %yy) {
+; CHECK-LABEL: @and_ugt(
+; CHECK-NEXT: ret i1 false
+;
+ %x = or i8 %xx, %yy
----------------
dtcxzyw wrote:
```suggestion
%x = or i8 %xx, %yy ; thwart complexity-based canonicalization
```
https://github.com/llvm/llvm-project/pull/68446
More information about the llvm-commits
mailing list