diff options
author | Konstantin Zhuravlyov <kzhuravl_dev@outlook.com> | 2017-03-22 22:32:22 +0000 |
---|---|---|
committer | Konstantin Zhuravlyov <kzhuravl_dev@outlook.com> | 2017-03-22 22:32:22 +0000 |
commit | 7498cd61fb7930a64a0ed4dae8703b49ae0500ff (patch) | |
tree | 3f7674c022831165f6faf315151a7bf5831fb58d /llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp | |
parent | eb685e5f27f9dcee0713523b417c50af95f492da (diff) | |
download | bcm5719-llvm-7498cd61fb7930a64a0ed4dae8703b49ae0500ff.tar.gz bcm5719-llvm-7498cd61fb7930a64a0ed4dae8703b49ae0500ff.zip |
[AMDGPU] Restructure code object metadata creation
- Rename runtime metadata -> code object metadata
- Make metadata not flow
- Switch enums to use ScalarEnumerationTraits
- Cleanup and move AMDGPUCodeObjectMetadata.h to AMDGPU/MCTargetDesc
- Introduce in-memory representation for attributes
- Code object metadata streamer
- Create metadata for isa and printf during EmitStartOfAsmFile
- Create metadata for kernel during EmitFunctionBodyStart
- Finalize and emit metadata to .note during EmitEndOfAsmFile
- Other minor improvements/bug fixes
Differential Revision: https://reviews.llvm.org/D29948
llvm-svn: 298552
Diffstat (limited to 'llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp | 69 |
1 files changed, 39 insertions, 30 deletions
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp index 98ac1ca9743..963171f4462 100644 --- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp +++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp @@ -27,7 +27,6 @@ #include "llvm/MC/MCSectionELF.h" #include "llvm/Support/ELF.h" #include "llvm/Support/FormattedStream.h" -#include "AMDGPURuntimeMD.h" namespace llvm { #include "AMDGPUPTNote.h" @@ -36,9 +35,29 @@ namespace llvm { using namespace llvm; using namespace llvm::AMDGPU; +//===----------------------------------------------------------------------===// +// AMDGPUTargetStreamer +//===----------------------------------------------------------------------===// + AMDGPUTargetStreamer::AMDGPUTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {} +void AMDGPUTargetStreamer::EmitStartOfCodeObjectMetadata( + const FeatureBitset &Features, const Module &Mod) { + CodeObjectMetadataStreamer.begin(Features, Mod); +} + +void AMDGPUTargetStreamer::EmitKernelCodeObjectMetadata(const Function &Func) { + CodeObjectMetadataStreamer.emitKernel(Func); +} + +void AMDGPUTargetStreamer::EmitEndOfCodeObjectMetadata( + const FeatureBitset &Features) { + CodeObjectMetadataStreamer.end(); + EmitCodeObjectMetadata(Features, + CodeObjectMetadataStreamer.toYamlString().get()); +} + //===----------------------------------------------------------------------===// // AMDGPUTargetAsmStreamer //===----------------------------------------------------------------------===// @@ -93,24 +112,18 @@ void AMDGPUTargetAsmStreamer::EmitAMDGPUHsaProgramScopeGlobal( OS << "\t.amdgpu_hsa_program_global " << GlobalName << '\n'; } -void AMDGPUTargetAsmStreamer::EmitRuntimeMetadata(const FeatureBitset &Features, - const Module &M) { - OS << "\t.amdgpu_runtime_metadata\n"; - OS << getRuntimeMDYAMLString(Features, M); - OS << "\n\t.end_amdgpu_runtime_metadata\n"; -} - -bool AMDGPUTargetAsmStreamer::EmitRuntimeMetadata(const FeatureBitset &Features, - StringRef Metadata) { - auto VerifiedMetadata = getRuntimeMDYAMLString(Features, Metadata); - if (!VerifiedMetadata) - return true; +bool AMDGPUTargetAsmStreamer::EmitCodeObjectMetadata( + const FeatureBitset &Features, StringRef YamlString) { + auto VerifiedYamlString = + CodeObjectMetadataStreamer.toYamlString(Features, YamlString); + if (!VerifiedYamlString) + return false; - OS << "\t.amdgpu_runtime_metadata"; - OS << VerifiedMetadata.get(); - OS << "\t.end_amdgpu_runtime_metadata\n"; + OS << '\t' << AMDGPU::CodeObject::MetadataAssemblerDirectiveBegin << '\n'; + OS << VerifiedYamlString.get(); + OS << '\t' << AMDGPU::CodeObject::MetadataAssemblerDirectiveEnd << '\n'; - return false; + return true; } //===----------------------------------------------------------------------===// @@ -223,11 +236,12 @@ void AMDGPUTargetELFStreamer::EmitAMDGPUHsaProgramScopeGlobal( Symbol->setBinding(ELF::STB_GLOBAL); } -bool AMDGPUTargetELFStreamer::EmitRuntimeMetadata(const FeatureBitset &Features, - StringRef Metadata) { - auto VerifiedMetadata = getRuntimeMDYAMLString(Features, Metadata); - if (!VerifiedMetadata) - return true; +bool AMDGPUTargetELFStreamer::EmitCodeObjectMetadata( + const FeatureBitset &Features, StringRef YamlString) { + auto VerifiedYamlString = + CodeObjectMetadataStreamer.toYamlString(Features, YamlString); + if (!VerifiedYamlString) + return false; // Create two labels to mark the beginning and end of the desc field // and a MCExpr to calculate the size of the desc field. @@ -240,18 +254,13 @@ bool AMDGPUTargetELFStreamer::EmitRuntimeMetadata(const FeatureBitset &Features, EmitAMDGPUNote( DescSZ, - ElfNote::NT_AMDGPU_HSA_RUNTIME_METADATA, + ElfNote::NT_AMDGPU_HSA_CODE_OBJECT_METADATA, [&](MCELFStreamer &OS) { OS.EmitLabel(DescBegin); - OS.EmitBytes(VerifiedMetadata.get()); + OS.EmitBytes(VerifiedYamlString.get()); OS.EmitLabel(DescEnd); } ); - return false; -} - -void AMDGPUTargetELFStreamer::EmitRuntimeMetadata(const FeatureBitset &Features, - const Module &M) { - EmitRuntimeMetadata(Features, getRuntimeMDYAMLString(Features, M)); + return true; } |