[llvm] [SCEV] Fix NSW flag propagation in getAddExpr (PR #155267)
Igor Kirillov via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 12 07:31:29 PDT 2025
igogo-x86 wrote:
Is it really correct? In this example, `%iv1` and `%iv2` do not overlow, but their sum does:
```
define void @nuw_sum_wraps() {
entry:
br label %loop
loop:
; k = 0..20
%k = phi i32 [ 0, %entry ], [ %k.next, %loop ]
%iv1 = phi i8 [ 200, %entry ], [ %iv1.next, %loop ]
%iv2 = phi i8 [ 40, %entry ], [ %iv2.next, %loop ]
%sum = add i8 %iv1, %iv2 ; SCEV: {240,+,2} on i8
; Individually marked NUW
%iv1.next = add nuw i8 %iv1, 1
%iv2.next = add nuw i8 %iv2, 1
%k.next = add nuw nsw i32 %k, 1
%cond = icmp ult i32 %k.next, 21
br i1 %cond, label %loop, label %exit
exit:
ret void
}
```
But `opt -passes="print<scalar-evolution>" -S test.ll` adds this flags:
```
%sum = add i8 %iv1, %iv2
--> {-16,+,2}<nuw><nsw><%loop> U: [-16,-1) S: [-16,0) Exits: 24 LoopDispositions: { %loop: Computable }
```
https://github.com/llvm/llvm-project/pull/155267
More information about the llvm-commits
mailing list