mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-26 06:14:42 +00:00
AMDGPU/SI: Don't emit group segment global variables
Summary: Only global or readonly segment variables should appear in object files. Reviewers: arsenm Subscribers: arsenm, llvm-commits Differential Revision: http://reviews.llvm.org/D15111 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@254519 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
26a5db075f
commit
26ecf8e5ac
@ -123,6 +123,13 @@ void AMDGPUAsmPrinter::EmitFunctionEntryLabel() {
|
||||
AsmPrinter::EmitFunctionEntryLabel();
|
||||
}
|
||||
|
||||
void AMDGPUAsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) {
|
||||
|
||||
if (TM.getTargetTriple().getOS() != Triple::AMDHSA ||
|
||||
!AMDGPU::isGroupSegment(GV))
|
||||
return AsmPrinter::EmitGlobalVariable(GV);
|
||||
}
|
||||
|
||||
bool AMDGPUAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
|
||||
|
||||
// The starting address of all shader programs must be 256 bytes aligned.
|
||||
|
@ -103,6 +103,8 @@ public:
|
||||
|
||||
void EmitFunctionEntryLabel() override;
|
||||
|
||||
void EmitGlobalVariable(const GlobalVariable *GV) override;
|
||||
|
||||
bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
|
||||
unsigned AsmVariant, const char *ExtraCode,
|
||||
raw_ostream &O) override;
|
||||
|
@ -7,6 +7,8 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
#include "AMDGPUBaseInfo.h"
|
||||
#include "AMDGPU.h"
|
||||
#include "llvm/IR/GlobalValue.h"
|
||||
#include "llvm/MC/MCContext.h"
|
||||
#include "llvm/MC/MCSectionELF.h"
|
||||
#include "llvm/MC/SubtargetFeature.h"
|
||||
@ -66,5 +68,9 @@ MCSection *getHSATextSection(MCContext &Ctx) {
|
||||
ELF::SHF_AMDGPU_HSA_CODE);
|
||||
}
|
||||
|
||||
bool isGroupSegment(const GlobalValue *GV) {
|
||||
return GV->getType()->getAddressSpace() == AMDGPUAS::LOCAL_ADDRESS;
|
||||
}
|
||||
|
||||
} // End namespace AMDGPU
|
||||
} // End namespace llvm
|
||||
|
@ -15,6 +15,7 @@
|
||||
namespace llvm {
|
||||
|
||||
class FeatureBitset;
|
||||
class GlobalValue;
|
||||
class MCContext;
|
||||
class MCSection;
|
||||
|
||||
@ -31,6 +32,8 @@ void initDefaultAMDKernelCodeT(amd_kernel_code_t &Header,
|
||||
const FeatureBitset &Features);
|
||||
MCSection *getHSATextSection(MCContext &Ctx);
|
||||
|
||||
bool isGroupSegment(const GlobalValue *GV);
|
||||
|
||||
} // end namespace AMDGPU
|
||||
} // end namespace llvm
|
||||
|
||||
|
14
test/CodeGen/AMDGPU/hsa-group-segment.ll
Normal file
14
test/CodeGen/AMDGPU/hsa-group-segment.ll
Normal file
@ -0,0 +1,14 @@
|
||||
; RUN: llc < %s -mtriple=amdgcn--amdhsa -mcpu=kaveri | FileCheck --check-prefix=HSA %s
|
||||
|
||||
@internal_group = internal addrspace(3) global i32 undef
|
||||
@external_group = addrspace(3) global i32 undef
|
||||
|
||||
define void @test() {
|
||||
entry:
|
||||
store i32 0, i32 addrspace(3)* @internal_group
|
||||
store i32 0, i32 addrspace(3)* @external_group
|
||||
ret void
|
||||
}
|
||||
|
||||
; HSA-NOT: internal_group:
|
||||
; HSA-NOT: external_group:
|
Loading…
x
Reference in New Issue
Block a user