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:
Tom Stellard 2015-12-02 17:00:42 +00:00
parent 26a5db075f
commit 26ecf8e5ac
5 changed files with 32 additions and 0 deletions

View File

@ -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.

View File

@ -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;

View File

@ -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

View File

@ -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

View 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: