[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