From 9daba5888db2d6e8efdfc3e0873c2cca3e735124 Mon Sep 17 00:00:00 2001 From: Piotr Sobczak Date: Wed, 12 Dec 2018 11:20:04 +0000 Subject: [PATCH] [AMDGPU] Set metadata access for explicit section Summary: This patch provides a means to set Metadata section kind for a global variable, if its explicit section name is prefixed with ".AMDGPU.metadata." This could be useful to make the global variable go to an ELF section without any section flags set. Reviewers: dstuttard, tpr, kzhuravl, nhaehnle, t-tye Reviewed By: dstuttard, kzhuravl Subscribers: llvm-commits, arsenm, jvesely, wdng, yaxunl, t-tye Differential Revision: https://reviews.llvm.org/D55267 llvm-svn: 348922 --- lib/Target/AMDGPU/AMDGPUTargetObjectFile.cpp | 10 ++++ lib/Target/AMDGPU/AMDGPUTargetObjectFile.h | 2 + test/CodeGen/AMDGPU/elf.metadata.ll | 56 ++++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 test/CodeGen/AMDGPU/elf.metadata.ll diff --git a/lib/Target/AMDGPU/AMDGPUTargetObjectFile.cpp b/lib/Target/AMDGPU/AMDGPUTargetObjectFile.cpp index e2f718bd3c3..7a720717cc8 100644 --- a/lib/Target/AMDGPU/AMDGPUTargetObjectFile.cpp +++ b/lib/Target/AMDGPU/AMDGPUTargetObjectFile.cpp @@ -29,3 +29,13 @@ MCSection *AMDGPUTargetObjectFile::SelectSectionForGlobal( return TargetLoweringObjectFileELF::SelectSectionForGlobal(GO, Kind, TM); } + +MCSection *AMDGPUTargetObjectFile::getExplicitSectionGlobal( + const GlobalObject *GO, SectionKind SK, const TargetMachine &TM) const { + // Set metadata access for the explicit section + StringRef SectionName = GO->getSection(); + if (SectionName.startswith(".AMDGPU.metadata.")) + SK = SectionKind::getMetadata(); + + return TargetLoweringObjectFileELF::getExplicitSectionGlobal(GO, SK, TM); +} diff --git a/lib/Target/AMDGPU/AMDGPUTargetObjectFile.h b/lib/Target/AMDGPU/AMDGPUTargetObjectFile.h index dd9dc1a88fc..a4ae1a2c18c 100644 --- a/lib/Target/AMDGPU/AMDGPUTargetObjectFile.h +++ b/lib/Target/AMDGPU/AMDGPUTargetObjectFile.h @@ -26,6 +26,8 @@ class AMDGPUTargetObjectFile : public TargetLoweringObjectFileELF { public: MCSection *SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const override; + MCSection *getExplicitSectionGlobal(const GlobalObject *GO, SectionKind Kind, + const TargetMachine &TM) const override; }; } // end namespace llvm diff --git a/test/CodeGen/AMDGPU/elf.metadata.ll b/test/CodeGen/AMDGPU/elf.metadata.ll new file mode 100644 index 00000000000..097310a1673 --- /dev/null +++ b/test/CodeGen/AMDGPU/elf.metadata.ll @@ -0,0 +1,56 @@ +; RUN: llc < %s -march=amdgcn -mcpu=fiji -filetype=obj | llvm-readobj -symbols -s -sd - | FileCheck %s + +; CHECK: Section { +; CHECK: Name: .AMDGPU.metadata.info_1 +; CHECK: Type: SHT_PROGBITS (0x1) +; CHECK: Flags [ (0x0) +; CHECK: Size: 16 +; CHECK: SectionData ( +; CHECK: 0000: 414D4431 414D4431 414D4431 414D4431 |AMD1AMD1AMD1AMD1| +; CHECK: ) +; CHECK: } + +; CHECK: Section { +; CHECK: Name: .AMDGPU.metadata.info_2 +; CHECK: Type: SHT_PROGBITS (0x1) +; CHECK: Flags [ (0x0) +; CHECK: Size: 16 +; CHECK: SectionData ( +; CHECK: 0000: 414D4432 414D4432 414D4432 414D4432 |AMD2AMD2AMD2AMD2| +; CHECK: ) +; CHECK: } + +; CHECK: Section { +; CHECK: Name: .AMDGPU.metadata.info_3 +; CHECK: Type: SHT_PROGBITS (0x1) +; CHECK: Flags [ (0x0) +; CHECK: Size: 16 +; CHECK: SectionData ( +; CHECK: 0000: 414D4433 414D4433 414D4433 414D4433 |AMD3AMD3AMD3AMD3| +; CHECK: ) +; CHECK: } + +; CHECK: Symbol { +; CHECK: Name: metadata_info_var_1 +; CHECK: Size: 16 +; CHECK: Binding: Local +; CHECK: Section: .AMDGPU.metadata.info_1 +; CHECK: } + +; CHECK: Symbol { +; CHECK: Name: metadata_info_var_2 +; CHECK: Size: 16 +; CHECK: Binding: Global +; CHECK: Section: .AMDGPU.metadata.info_2 +; CHECK: } + +; CHECK: Symbol { +; CHECK: Name: metadata_info_var_3 +; CHECK: Size: 16 +; CHECK: Binding: Global +; CHECK: Section: .AMDGPU.metadata.info_3 +; CHECK: } + +@metadata_info_var_1 = internal global [4 x i32][i32 826559809, i32 826559809, i32 826559809, i32 826559809], align 1, section ".AMDGPU.metadata.info_1" +@metadata_info_var_2 = constant [4 x i32][i32 843337025, i32 843337025, i32 843337025, i32 843337025], align 1, section ".AMDGPU.metadata.info_2" +@metadata_info_var_3 = global [4 x i32][i32 860114241, i32 860114241, i32 860114241, i32 860114241], align 1, section ".AMDGPU.metadata.info_3"