[llvm] [LV] Avoid bailing on SCEVUnknown in uniformity-rew (PR #160144)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 29 12:34:54 PDT 2025
================
@@ -528,14 +528,6 @@ class SCEVAddRecForUniformityRewriter
return SCEVRewriteVisitor<SCEVAddRecForUniformityRewriter>::visit(S);
}
- const SCEV *visitUnknown(const SCEVUnknown *S) {
----------------
fhahn wrote:
The load itself would be a SCEVUnknown, which may be the only non-uniform part of the expression we are checking.
Something like below. With the change, I think `%gep.1` will be `(%load / 2) + %src.1` for all lanes and hence treated as uniform, but we could load 0 in iteration 0, 2 in iteration 1, and so on?
```
define void @foo(i32 %x, i64 %y, ptr %src.1, i32 %z, ptr %src.a, ptr noalias %dst, ptr noalias %B2) {
entry:
br label %loop
loop:
%iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
%gep.B = getelementptr i32, ptr %B2, i64 %iv
%load = load i64, ptr %gep.B
%d = udiv i64 %load, 2
%gep.1 = getelementptr i32, ptr %src.1, i64 %d
%5 = load i32, ptr %gep.1, align 4
%gep.2 = getelementptr i32, ptr %dst, i64 %iv
store i32 %5, ptr %gep.2
%iv.next = add i64 %iv, 1
%ec = icmp eq i64 %iv, %y
br i1 %ec, label %exit, label %loop
exit:
ret void
}
```
https://github.com/llvm/llvm-project/pull/160144
More information about the llvm-commits
mailing list