summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
diff options
context:
space:
mode:
authorKonstantin Zhuravlyov <kzhuravl_dev@outlook.com>2017-03-22 22:32:22 +0000
committerKonstantin Zhuravlyov <kzhuravl_dev@outlook.com>2017-03-22 22:32:22 +0000
commit7498cd61fb7930a64a0ed4dae8703b49ae0500ff (patch)
tree3f7674c022831165f6faf315151a7bf5831fb58d /llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
parenteb685e5f27f9dcee0713523b417c50af95f492da (diff)
downloadbcm5719-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.cpp69
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;
}
OpenPOWER on IntegriCloud