diff options
| author | Konstantin Zhuravlyov <kzhuravl_dev@outlook.com> | 2017-02-27 07:55:17 +0000 |
|---|---|---|
| committer | Konstantin Zhuravlyov <kzhuravl_dev@outlook.com> | 2017-02-27 07:55:17 +0000 |
| commit | 972948b36eecc591cff85391bf11635750c1c88e (patch) | |
| tree | 8ab64d2de4b2a745e0dbfd18bea623103fba2189 /llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp | |
| parent | 50aa37b96cf9686b87ef675f3614ab5980e33d3b (diff) | |
| download | bcm5719-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.cpp | 24 |
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)); } |

