[llvm] ValueTracking: Use SimplifyQuery for computeConstantRange (PR #191726)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 16 10:03:13 PDT 2026


================
@@ -1,5 +1,8 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all --version 5
-; RUN: opt < %s -passes=instcombine -S | FileCheck %s
+; RUN: opt < %s -passes='instcombine<no-verify-fixpoint>' -S | FileCheck %s
+
+; no-verify-fixpoint is necessary due to dropping nuw, and then
----------------
arsenm wrote:

It does:
```
INSTCOMBINE ITERATION #1 on urem_assume
ADD:   ret i8 %out
ADD:   %out = urem i8 %add, %n
ADD:   %add = add nuw i8 %x, 1
ADD:   tail call void @llvm.assume(i1 %cmp)
ADD:   %cmp = icmp ult i8 %x, %n
IC: Visiting:   %cmp = icmp ult i8 %x, %n
IC: Visiting:   tail call void @llvm.assume(i1 %cmp)
IC: Visiting:   %add = add nuw i8 %x, 1
IC: Visiting:   %out = urem i8 %add, %n
ADD DEFERRED:   %add.frozen = freeze i8 %add
ADD DEFERRED:   %1 = icmp eq i8 %add.frozen, %n
IC: Old =   %out = urem i8 %add, %n
    New =   <badref> = select i1 %1, i8 0, i8 %add.frozen, !prof <0x600000fcd430>
ADD:   %out = select i1 %1, i8 0, i8 %add.frozen, !prof !1
IC: ERASE   %2 = urem i8 %add, %n
ADD DEFERRED:   %add = add nuw i8 %x, 1
ADD:   %add = add nuw i8 %x, 1
ADD:   %1 = icmp eq i8 %add.frozen, %n
ADD:   %add.frozen = freeze i8 %add
IC: Visiting:   %add.frozen = freeze i8 %add
ADD DEFERRED:   %x.fr = freeze i8 %x
IC: Replacing   %add.frozen = freeze i8 %add
    with   %add = add i8 %x.fr, 1
IC: Mod =   %add.frozen = freeze i8 %add
    New =   %add.frozen = freeze i8 %add
IC: ERASE   %add.frozen = freeze i8 %add
ADD DEFERRED:   %add = add i8 %x.fr, 1 ; <<<<< Added here
ADD:   %x.fr = freeze i8 %x
IC: Visiting:   %x.fr = freeze i8 %x
IC: Mod =   %x.fr = freeze i8 %x
    New =   %x.fr = freeze i8 %x
ADD:   %cmp = icmp ult i8 %x.fr, %n
ADD:   %x.fr = freeze i8 %x
IC: Visiting:   %x.fr = freeze i8 %x
IC: Visiting:   %cmp = icmp ult i8 %x.fr, %n
IC: Visiting:   %1 = icmp eq i8 %add, %n
IC: Visiting:   %add = add i8 %x.fr, 1
IC: Visiting:   %out = select i1 %1, i8 0, i8 %add, !prof !1
IC: Visiting:   ret i8 %out


INSTCOMBINE ITERATION #2 on urem_assume
ADD:   ret i8 %out
ADD:   %out = select i1 %1, i8 0, i8 %add, !prof !1
ADD:   %1 = icmp eq i8 %add, %n
ADD:   %add = add i8 %x.fr, 1
ADD:   tail call void @llvm.assume(i1 %cmp)
ADD:   %cmp = icmp ult i8 %x.fr, %n
ADD:   %x.fr = freeze i8 %x
IC: Visiting:   %x.fr = freeze i8 %x
IC: Visiting:   %cmp = icmp ult i8 %x.fr, %n
IC: Visiting:   tail call void @llvm.assume(i1 %cmp)
IC: Visiting:   %add = add i8 %x.fr, 1
IC: Mod =   %add = add i8 %x.fr, 1
    New =   %add = add nuw i8 %x.fr, 1
ADD:   %add = add nuw i8 %x.fr, 1
IC: Visiting:   %add = add nuw i8 %x.fr, 1
IC: Visiting:   %1 = icmp eq i8 %add, %n
IC: Visiting:   %out = select i1 %1, i8 0, i8 %add, !prof !1
IC: Visiting:   ret i8 %out
LLVM ERROR: Instruction Combining on urem_assume did not reach a fixpoint after 1 iterations. Use 'instcombine<no-verify-fixpoint>' or function attribute 'instcombine-no-verify-fixpoint' to suppress this error.
```



https://github.com/llvm/llvm-project/pull/191726


More information about the llvm-commits mailing list