diff options
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp | 10 | ||||
-rw-r--r-- | llvm/test/CodeGen/AMDGPU/lds-global-non-entry-func.ll | 9 |
2 files changed, 18 insertions, 1 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp index bc888dad67b..81d1b4abfa3 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp @@ -1272,7 +1272,15 @@ SDValue AMDGPUTargetLowering::LowerGlobalAddress(AMDGPUMachineFunction* MFI, GlobalAddressSDNode *G = cast<GlobalAddressSDNode>(Op); const GlobalValue *GV = G->getGlobal(); - if (G->getAddressSpace() == AMDGPUASI.LOCAL_ADDRESS) { + if (G->getAddressSpace() == AMDGPUASI.LOCAL_ADDRESS || + G->getAddressSpace() == AMDGPUASI.REGION_ADDRESS) { + if (!MFI->isEntryFunction()) { + const Function &Fn = DAG.getMachineFunction().getFunction(); + DiagnosticInfoUnsupported BadLDSDecl( + Fn, "local memory global used by non-kernel function", SDLoc(Op).getDebugLoc()); + DAG.getContext()->diagnose(BadLDSDecl); + } + // XXX: What does the value of G->getOffset() mean? assert(G->getOffset() == 0 && "Do not know what to do with an non-zero offset"); diff --git a/llvm/test/CodeGen/AMDGPU/lds-global-non-entry-func.ll b/llvm/test/CodeGen/AMDGPU/lds-global-non-entry-func.ll new file mode 100644 index 00000000000..d797466f068 --- /dev/null +++ b/llvm/test/CodeGen/AMDGPU/lds-global-non-entry-func.ll @@ -0,0 +1,9 @@ +; RUN: not llc -mtriple=amdgcn-amd-amdhsa -o /dev/null %s 2>&1 | FileCheck %s + +@lds = internal addrspace(3) global float undef, align 4 + +; CHECK: error: <unknown>:0:0: in function func_use_lds_global void (): local memory global used by non-kernel function +define void @func_use_lds_global() { + store float 0.0, float addrspace(3)* @lds, align 4 + ret void +} |