summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
diff options
context:
space:
mode:
authorKonstantin Zhuravlyov <kzhuravl_dev@outlook.com>2017-02-27 07:55:17 +0000
committerKonstantin Zhuravlyov <kzhuravl_dev@outlook.com>2017-02-27 07:55:17 +0000
commit972948b36eecc591cff85391bf11635750c1c88e (patch)
tree8ab64d2de4b2a745e0dbfd18bea623103fba2189 /llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
parent50aa37b96cf9686b87ef675f3614ab5980e33d3b (diff)
downloadbcm5719-llvm-972948b36eecc591cff85391bf11635750c1c88e.tar.gz
bcm5719-llvm-972948b36eecc591cff85391bf11635750c1c88e.zip
[AMDGPU] Runtime metadata fixes:
- Verify that runtime metadata is actually valid runtime metadata when assembling, otherwise we could accept the following when assembling, but ocl runtime will reject it: .amdgpu_runtime_metadata { amd.MDVersion: [ 2, 1 ], amd.RandomUnknownKey, amd.IsaInfo: ... - Make IsaInfo optional, and always emit it. Differential Revision: https://reviews.llvm.org/D30349 llvm-svn: 296324
Diffstat (limited to 'llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp')
-rw-r--r--llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
index 5935c6a49f0..fc07225eebe 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp
@@ -100,10 +100,17 @@ void AMDGPUTargetAsmStreamer::EmitRuntimeMetadata(const FeatureBitset &Features,
OS << "\n\t.end_amdgpu_runtime_metadata\n";
}
-void AMDGPUTargetAsmStreamer::EmitRuntimeMetadata(StringRef Metadata) {
+bool AMDGPUTargetAsmStreamer::EmitRuntimeMetadata(const FeatureBitset &Features,
+ StringRef Metadata) {
+ auto VerifiedMetadata = getRuntimeMDYAMLString(Features, Metadata);
+ if (!VerifiedMetadata)
+ return true;
+
OS << "\t.amdgpu_runtime_metadata";
- OS << Metadata;
+ OS << VerifiedMetadata.get();
OS << "\t.end_amdgpu_runtime_metadata\n";
+
+ return false;
}
//===----------------------------------------------------------------------===//
@@ -216,7 +223,12 @@ void AMDGPUTargetELFStreamer::EmitAMDGPUHsaProgramScopeGlobal(
Symbol->setBinding(ELF::STB_GLOBAL);
}
-void AMDGPUTargetELFStreamer::EmitRuntimeMetadata(StringRef Metadata) {
+bool AMDGPUTargetELFStreamer::EmitRuntimeMetadata(const FeatureBitset &Features,
+ StringRef Metadata) {
+ auto VerifiedMetadata = getRuntimeMDYAMLString(Features, Metadata);
+ if (!VerifiedMetadata)
+ return true;
+
// Create two labels to mark the beginning and end of the desc field
// and a MCExpr to calculate the size of the desc field.
auto &Context = getContext();
@@ -231,13 +243,15 @@ void AMDGPUTargetELFStreamer::EmitRuntimeMetadata(StringRef Metadata) {
PT_NOTE::NT_AMDGPU_HSA_RUNTIME_METADATA,
[&](MCELFStreamer &OS) {
OS.EmitLabel(DescBegin);
- OS.EmitBytes(Metadata);
+ OS.EmitBytes(VerifiedMetadata.get());
OS.EmitLabel(DescEnd);
}
);
+
+ return false;
}
void AMDGPUTargetELFStreamer::EmitRuntimeMetadata(const FeatureBitset &Features,
const Module &M) {
- EmitRuntimeMetadata(getRuntimeMDYAMLString(Features, M));
+ EmitRuntimeMetadata(Features, getRuntimeMDYAMLString(Features, M));
}
OpenPOWER on IntegriCloud