[llvm] [InferAddressSpaces] Handle llvm.lifetime (PR #141045)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Thu May 22 05:41:57 PDT 2025


================
@@ -0,0 +1,42 @@
+; RUN: opt -S -passes=infer-address-spaces %s | FileCheck %s
+
+target triple = "nvptx64-nvidia-cuda"
+
+define i32 @lifetime_flat_pointer() {
+; CHECK-LABEL: define i32 @lifetime_flat_pointer() {
+; CHECK-NEXT:    [[ALLOCA:%.*]] = alloca i32, align 4, addrspace(5)
+; CHECK-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[ALLOCA]])
+; CHECK-NEXT:    store i32 1, ptr addrspace(5) [[ALLOCA]], align 4
+; CHECK-NEXT:    %ret = load i32, ptr addrspace(5) [[ALLOCA]], align 4
+; CHECK-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[ALLOCA]])
+; CHECK-NEXT:    ret i32 %ret
+;
+  %alloca = alloca i32, align 4, addrspace(5)
+  %flat = addrspacecast ptr addrspace(5) %alloca to ptr
+  call void @llvm.lifetime.start.p0(i64 4 , ptr %flat)
+  store i32 1, ptr %flat, align 4
+  %ret = load i32, ptr %flat, align 4
+  call void @llvm.lifetime.end.p0(i64 4 , ptr %flat)
+  ret i32 %ret
+}
+
+define i32 @lifetime_flat_pointer2() {
+; CHECK-LABEL: define i32 @lifetime_flat_pointer2() {
+; CHECK-NEXT:    [[ALLOCA:%.*]] = alloca i32, align 4
+; CHECK-NEXT:    [[TMP1:%.*]] = addrspacecast ptr [[ALLOCA]] to ptr addrspace(5)
+; CHECK-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[TMP1]])
+; CHECK-NEXT:    store i32 1, ptr addrspace(5) [[TMP1]], align 4
+; CHECK-NEXT:    %ret = load i32, ptr addrspace(5) [[TMP1]], align 4
+; CHECK-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[TMP1]])
+; CHECK-NEXT:    ret i32 %ret
+;
+  %alloca = alloca i32, align 4
+  call void @llvm.lifetime.start.p5(i64 4 , ptr %alloca)
+  store i32 1, ptr %alloca, align 4
+  %ret = load i32, ptr %alloca, align 4
+  call void @llvm.lifetime.end.p5(i64 4 , ptr %alloca)
----------------
arsenm wrote:

```suggestion
  call void @llvm.lifetime.start.p5(i64 4, ptr %alloca)
  store i32 1, ptr %alloca, align 4
  %ret = load i32, ptr %alloca, align 4
  call void @llvm.lifetime.end.p5(i64 4, ptr %alloca)
```

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


More information about the llvm-commits mailing list