https://github.com/shiltian created https://github.com/llvm/llvm-project/pull/136798
None >From fb9ba07decd8da6ac12391fa04301a3614ed9c3d Mon Sep 17 00:00:00 2001 From: Shilei Tian <i...@tianshilei.me> Date: Tue, 22 Apr 2025 21:37:21 -0400 Subject: [PATCH] [AMDGPU] Make `AllocaInst` return AS5 in `getAssumedAddrSpace` --- .../lib/Target/AMDGPU/AMDGPUTargetMachine.cpp | 3 ++ .../InferAddressSpaces/AMDGPU/alloca-as0.ll | 35 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 llvm/test/Transforms/InferAddressSpaces/AMDGPU/alloca-as0.ll diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp index b6cc5137d711a..2c4052a30b10f 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp @@ -951,6 +951,9 @@ bool AMDGPUTargetMachine::isNoopAddrSpaceCast(unsigned SrcAS, } unsigned AMDGPUTargetMachine::getAssumedAddrSpace(const Value *V) const { + if (isa<AllocaInst>(V)) + return AMDGPUAS::PRIVATE_ADDRESS; + const auto *LD = dyn_cast<LoadInst>(V); if (!LD) // TODO: Handle invariant load like constant. return AMDGPUAS::UNKNOWN_ADDRESS_SPACE; diff --git a/llvm/test/Transforms/InferAddressSpaces/AMDGPU/alloca-as0.ll b/llvm/test/Transforms/InferAddressSpaces/AMDGPU/alloca-as0.ll new file mode 100644 index 0000000000000..57dcd96594893 --- /dev/null +++ b/llvm/test/Transforms/InferAddressSpaces/AMDGPU/alloca-as0.ll @@ -0,0 +1,35 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 +; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -passes=infer-address-spaces %s -o - | FileCheck %s + +declare void @bar(ptr) + +define i32 @static_alloca() { +; CHECK-LABEL: define i32 @static_alloca() { +; CHECK-NEXT: [[ALLOCA:%.*]] = alloca i32, align 4 +; CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr [[ALLOCA]] to ptr addrspace(5) +; CHECK-NEXT: [[TMP2:%.*]] = addrspacecast ptr addrspace(5) [[TMP1]] to ptr +; CHECK-NEXT: call void @bar(ptr [[TMP2]]) +; CHECK-NEXT: [[LOAD:%.*]] = load i32, ptr addrspace(5) [[TMP1]], align 4 +; CHECK-NEXT: ret i32 [[LOAD]] +; + %alloca = alloca i32, align 4 + call void @bar(ptr %alloca) + %load = load i32, ptr %alloca + ret i32 %load +} + +define i32 @dynamic_alloca(i32 %n) { +; CHECK-LABEL: define i32 @dynamic_alloca( +; CHECK-SAME: i32 [[N:%.*]]) { +; CHECK-NEXT: [[ALLOCA:%.*]] = alloca i32, i32 [[N]], align 4 +; CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr [[ALLOCA]] to ptr addrspace(5) +; CHECK-NEXT: [[TMP2:%.*]] = addrspacecast ptr addrspace(5) [[TMP1]] to ptr +; CHECK-NEXT: call void @bar(ptr [[TMP2]]) +; CHECK-NEXT: [[LOAD:%.*]] = load i32, ptr addrspace(5) [[TMP1]], align 4 +; CHECK-NEXT: ret i32 0 +; + %alloca = alloca i32, i32 %n, align 4 + call void @bar(ptr %alloca) + %load = load i32, ptr %alloca + ret i32 0 +} _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits