[AMDGPU] Set metadata access for explicit section
authorPiotr Sobczak <piotr.sobczak@amd.com>
Wed, 12 Dec 2018 11:20:04 +0000 (11:20 +0000)
committerPiotr Sobczak <piotr.sobczak@amd.com>
Wed, 12 Dec 2018 11:20:04 +0000 (11:20 +0000)
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

llvm/lib/Target/AMDGPU/AMDGPUTargetObjectFile.cpp
llvm/lib/Target/AMDGPU/AMDGPUTargetObjectFile.h
llvm/test/CodeGen/AMDGPU/elf.metadata.ll [new file with mode: 0644]

index e2f718b..7a72071 100644 (file)
@@ -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);
+}
index dd9dc1a..a4ae1a2 100644 (file)
@@ -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/llvm/test/CodeGen/AMDGPU/elf.metadata.ll b/llvm/test/CodeGen/AMDGPU/elf.metadata.ll
new file mode 100644 (file)
index 0000000..097310a
--- /dev/null
@@ -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"