[llvm] [LV] Fix cost misaligned when gather/scatter w/ addr is uniform. (PR #157387)
Luke Lau via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 8 18:56:19 PDT 2025
================
@@ -184,3 +184,121 @@ loop:
exit:
ret void
}
+
+define void @uniform_load_and_addr_also_uniform_load(ptr noalias %0, i32 %.pre, ptr noalias %1, ptr noalias %C) {
----------------
lukel97 wrote:
Here's a version I was able to reproduce the crash with without TBAA, it might be reducible further
```llvm
define void @uniform_load_and_addr_also_uniform_load(ptr noalias %p0, ptr noalias %p1, ptr noalias %p2, ptr noalias %p3, ptr noalias %p4, i32 %.pre) {
entry:
br i1 false, label %loop.preheader, label %exit
loop.preheader: ; preds = %entry
%wide.trip.count = zext i32 %.pre to i64
br label %loop
loop: ; preds = %loop, %loop.preheader
%iv = phi i64 [ 0, %loop.preheader ], [ %iv.next, %loop ]
%arrayidx11 = getelementptr i32, ptr %p1, i64 %iv
%2 = load i64, ptr %p0
%gep = getelementptr i32, ptr %p2, i64 %2
%3 = load i32, ptr %gep
%cmp12 = icmp eq i32 %3, 0
%spec.select = select i1 %cmp12, ptr %p0, ptr %p2
store ptr %spec.select, ptr %arrayidx11
%arrayidx12 = getelementptr i32, ptr %p2, i64 %iv
%4 = load i64, ptr %arrayidx12
%bits_to_go = getelementptr i8, ptr %p3, i64 %4
store i32 0, ptr %bits_to_go
store i32 0, ptr %bits_to_go
store i8 0, ptr %bits_to_go
%iv.next = add i64 %iv, 1
%exitcond.not = icmp eq i64 %iv.next, %wide.trip.count
br i1 %exitcond.not, label %loop.exit_crit_edge, label %loop
loop.exit_crit_edge: ; preds = %loop
br label %exit
exit: ; preds = %loop.exit_crit_edge, %entry
ret void
}
```
https://github.com/llvm/llvm-project/pull/157387
More information about the llvm-commits
mailing list