[llvm] r254587 - AMDGPU/SI: Emit constant arrays in the .hsrodata_readonly_agent section
Tom Stellard via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 2 19:34:32 PST 2015
Author: tstellar
Date: Wed Dec 2 21:34:32 2015
New Revision: 254587
URL: http://llvm.org/viewvc/llvm-project?rev=254587&view=rev
Log:
AMDGPU/SI: Emit constant arrays in the .hsrodata_readonly_agent section
Summary: This is done only when targeting HSA.
Reviewers: arsenm
Subscribers: arsenm, llvm-commits
Differential Revision: http://reviews.llvm.org/D13807
Modified:
llvm/trunk/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
llvm/trunk/lib/Target/AMDGPU/AMDGPUHSATargetObjectFile.cpp
llvm/trunk/lib/Target/AMDGPU/AMDGPUHSATargetObjectFile.h
llvm/trunk/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCAsmInfo.cpp
llvm/trunk/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
llvm/trunk/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h
llvm/trunk/test/CodeGen/AMDGPU/hsa-globals.ll
Modified: llvm/trunk/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp?rev=254587&r1=254586&r2=254587&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp Wed Dec 2 21:34:32 2015
@@ -137,7 +137,7 @@ static bool isModuleLinkage(const Global
void AMDGPUAsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) {
if (TM.getTargetTriple().getOS() != Triple::AMDHSA ||
- GV->isDeclaration() || AMDGPU::isReadOnlySegment(GV)) {
+ GV->isDeclaration()) {
AsmPrinter::EmitGlobalVariable(GV);
return;
}
Modified: llvm/trunk/lib/Target/AMDGPU/AMDGPUHSATargetObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/AMDGPUHSATargetObjectFile.cpp?rev=254587&r1=254586&r2=254587&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/AMDGPUHSATargetObjectFile.cpp (original)
+++ llvm/trunk/lib/Target/AMDGPU/AMDGPUHSATargetObjectFile.cpp Wed Dec 2 21:34:32 2015
@@ -26,6 +26,7 @@ void AMDGPUHSATargetObjectFile::Initiali
DataGlobalAgentSection = AMDGPU::getHSADataGlobalAgentSection(Ctx);
DataGlobalProgramSection = AMDGPU::getHSADataGlobalProgramSection(Ctx);
+ RodataReadonlyAgentSection = AMDGPU::getHSARodataReadonlyAgentSection(Ctx);
}
bool AMDGPUHSATargetObjectFile::isAgentAllocationSection(
@@ -63,5 +64,8 @@ MCSection *AMDGPUHSATargetObjectFile::Se
return DataGlobalProgramSection;
}
+ if (Kind.isReadOnly() && AMDGPU::isReadOnlySegment(GV))
+ return RodataReadonlyAgentSection;
+
return TargetLoweringObjectFileELF::SelectSectionForGlobal(GV, Kind, Mang, TM);
}
Modified: llvm/trunk/lib/Target/AMDGPU/AMDGPUHSATargetObjectFile.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/AMDGPUHSATargetObjectFile.h?rev=254587&r1=254586&r2=254587&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/AMDGPUHSATargetObjectFile.h (original)
+++ llvm/trunk/lib/Target/AMDGPU/AMDGPUHSATargetObjectFile.h Wed Dec 2 21:34:32 2015
@@ -25,6 +25,7 @@ class AMDGPUHSATargetObjectFile final :
private:
MCSection *DataGlobalAgentSection;
MCSection *DataGlobalProgramSection;
+ MCSection *RodataReadonlyAgentSection;
bool isAgentAllocationSection(const char *SectionName) const;
bool isAgentAllocation(const GlobalValue *GV) const;
Modified: llvm/trunk/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp?rev=254587&r1=254586&r2=254587&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp Wed Dec 2 21:34:32 2015
@@ -369,6 +369,7 @@ private:
bool ParseDirectiveAMDGPUHsaProgramGlobal();
bool ParseSectionDirectiveHSADataGlobalAgent();
bool ParseSectionDirectiveHSADataGlobalProgram();
+ bool ParseSectionDirectiveHSARodataReadonlyAgent();
public:
public:
@@ -1004,6 +1005,12 @@ bool AMDGPUAsmParser::ParseSectionDirect
return false;
}
+bool AMDGPUAsmParser::ParseSectionDirectiveHSARodataReadonlyAgent() {
+ getParser().getStreamer().SwitchSection(
+ AMDGPU::getHSARodataReadonlyAgentSection(getContext()));
+ return false;
+}
+
bool AMDGPUAsmParser::ParseDirective(AsmToken DirectiveID) {
StringRef IDVal = DirectiveID.getString();
@@ -1034,6 +1041,9 @@ bool AMDGPUAsmParser::ParseDirective(Asm
if (IDVal == ".hsadata_global_program")
return ParseSectionDirectiveHSADataGlobalProgram();
+ if (IDVal == ".hsarodata_readonly_agent")
+ return ParseSectionDirectiveHSARodataReadonlyAgent();
+
return true;
}
Modified: llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCAsmInfo.cpp?rev=254587&r1=254586&r2=254587&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCAsmInfo.cpp Wed Dec 2 21:34:32 2015
@@ -38,5 +38,6 @@ AMDGPUMCAsmInfo::AMDGPUMCAsmInfo(const T
bool AMDGPUMCAsmInfo::shouldOmitSectionDirective(StringRef SectionName) const {
return SectionName == ".hsatext" || SectionName == ".hsadata_global_agent" ||
SectionName == ".hsadata_global_program" ||
+ SectionName == ".hsarodata_readonly_agent" ||
MCAsmInfo::shouldOmitSectionDirective(SectionName);
}
Modified: llvm/trunk/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp?rev=254587&r1=254586&r2=254587&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp (original)
+++ llvm/trunk/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp Wed Dec 2 21:34:32 2015
@@ -81,6 +81,12 @@ MCSection *getHSADataGlobalProgramSectio
ELF::SHF_AMDGPU_HSA_GLOBAL);
}
+MCSection *getHSARodataReadonlyAgentSection(MCContext &Ctx) {
+ return Ctx.getELFSection(".hsarodata_readonly_agent", ELF::SHT_PROGBITS,
+ ELF::SHF_ALLOC | ELF::SHF_AMDGPU_HSA_READONLY |
+ ELF::SHF_AMDGPU_HSA_AGENT);
+}
+
bool isGroupSegment(const GlobalValue *GV) {
return GV->getType()->getAddressSpace() == AMDGPUAS::LOCAL_ADDRESS;
}
Modified: llvm/trunk/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h?rev=254587&r1=254586&r2=254587&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h (original)
+++ llvm/trunk/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h Wed Dec 2 21:34:32 2015
@@ -36,6 +36,8 @@ MCSection *getHSADataGlobalAgentSection(
MCSection *getHSADataGlobalProgramSection(MCContext &Ctx);
+MCSection *getHSARodataReadonlyAgentSection(MCContext &Ctx);
+
bool isGroupSegment(const GlobalValue *GV);
bool isGlobalSegment(const GlobalValue *GV);
bool isReadOnlySegment(const GlobalValue *GV);
Modified: llvm/trunk/test/CodeGen/AMDGPU/hsa-globals.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/hsa-globals.ll?rev=254587&r1=254586&r2=254587&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/hsa-globals.ll (original)
+++ llvm/trunk/test/CodeGen/AMDGPU/hsa-globals.ll Wed Dec 2 21:34:32 2015
@@ -9,6 +9,9 @@
@common_global_agent = common addrspace(1) global i32 0, section ".hsadata_global_agent"
@external_global_agent = addrspace(1) global i32 0, section ".hsadata_global_agent"
+ at internal_readonly = internal unnamed_addr addrspace(2) constant i32 0
+ at external_readonly = unnamed_addr addrspace(2) constant i32 0
+
define void @test() {
ret void
}
@@ -43,6 +46,16 @@ define void @test() {
; ASM: external_global_agent:
; ASM: .long 0
+; ASM: .amdgpu_hsa_module_global internal_readonly
+; ASM: .hsarodata_readonly_agent
+; ASM: internal_readonly:
+; ASM: .long 0
+
+; ASM: .amdgpu_hsa_program_global external_readonly
+; ASM: .hsarodata_readonly_agent
+; ASM: external_readonly:
+; ASM: .long 0
+
; ELF: Section {
; ELF: Name: .hsadata_global_program
; ELF: Type: SHT_PROGBITS (0x1)
@@ -64,6 +77,15 @@ define void @test() {
; ELF: ]
; ELF: }
+; ELF: Section {
+; ELF: Name: .hsarodata_readonly_agent
+; ELF: Type: SHT_PROGBITS (0x1)
+; ELF: Flags [ (0xA00002)
+; ELF: SHF_ALLOC (0x2)
+; ELF: SHF_AMDGPU_HSA_AGENT (0x800000)
+; ELF: SHF_AMDGPU_HSA_READONLY (0x200000)
+; ELF: ]
+
; ELF: Symbol {
; ELF: Name: common_global_agent
; ELF: Binding: Local
@@ -91,6 +113,13 @@ define void @test() {
; ELF: }
; ELF: Symbol {
+; ELF: Name: internal_readonly
+; ELF: Binding: Local
+; ELF: Type: Object
+; ELF: Section: .hsarodata_readonly_agent
+; ELF: }
+
+; ELF: Symbol {
; ELF: Name: external_global_agent
; ELF: Binding: Global
; ELF: Type: Object
@@ -103,3 +132,10 @@ define void @test() {
; ELF: Type: Object
; ELF: Section: .hsadata_global_program
; ELF: }
+
+; ELF: Symbol {
+; ELF: Name: external_readonly
+; ELF: Binding: Global
+; ELF: Type: Object
+; ELF: Section: .hsarodata_readonly_agent
+; ELF: }
More information about the llvm-commits
mailing list