[clang] [llvm] [DSE] Make DSE eliminate stores to objects with a sized dead_on_return (PR #173694)

Nikita Popov via cfe-commits cfe-commits at lists.llvm.org
Fri Jan 23 02:19:47 PST 2026


================
@@ -886,5 +886,89 @@ define ptr @test_dead_on_return_ptr_returned(ptr dead_on_return %p) {
   ret ptr %p
 }
 
+define void @test_dead_on_return_oob(ptr dead_on_return(4) %p) {
+; CHECK-LABEL: @test_dead_on_return_oob(
+; CHECK-NEXT:    [[LOCAL_VAR:%.*]] = alloca ptr, align 8
+; CHECK-NEXT:    call void @opaque(ptr [[LOCAL_VAR]])
+; CHECK-NEXT:    [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 8
+; CHECK-NEXT:    store ptr [[LOCAL_VAR]], ptr [[P1]], align 8
+; CHECK-NEXT:    ret void
+;
+  %local.var = alloca ptr
+  call void @opaque(ptr %local.var)
----------------
nikic wrote:

I don't understand the significance of storing an escaped alloca into the pointer in all these tests. Wouldn't `store i8 0, ptr %p1` serve the same purpose?

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


More information about the cfe-commits mailing list