[llvm] [ValueTracking] Infer operand bound from mul nuw square predicates (PR #173127)

Yingwei Zheng via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 26 23:37:03 PST 2025


================
@@ -0,0 +1,87 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt -passes=correlated-propagation -S < %s | FileCheck %s
+
+declare void @llvm.assume(i1)
+
+define i1 @assume_mul_nuw_square_i8(i8 %s) {
+; CHECK-LABEL: @assume_mul_nuw_square_i8(
+; CHECK-NEXT:    [[MUL:%.*]] = mul nuw i8 [[S:%.*]], [[S]]
+; CHECK-NEXT:    [[COND:%.*]] = icmp ule i8 [[MUL]], 120
+; CHECK-NEXT:    call void @llvm.assume(i1 [[COND]])
+; CHECK-NEXT:    ret i1 true
+;
+  %mul = mul nuw i8 %s, %s
+  %cond = icmp ule i8 %mul, 120
----------------
dtcxzyw wrote:

In this case, we can just canonicalize the condition into `%s u< 11`.

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


More information about the llvm-commits mailing list