[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