diff options
author | Konstantin Zhuravlyov <kzhuravl_dev@outlook.com> | 2017-03-22 23:10:46 +0000 |
---|---|---|
committer | Konstantin Zhuravlyov <kzhuravl_dev@outlook.com> | 2017-03-22 23:10:46 +0000 |
commit | a780ffaac29e9d38db75ba9ba7f74617a2e59ba4 (patch) | |
tree | fbb29e37459b0d39c023017489c0904eb5a5bf61 /llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUCodeObjectMetadataStreamer.cpp | |
parent | 4995afd94339629fa2124a93979df1861d37ec2a (diff) | |
download | bcm5719-llvm-a780ffaac29e9d38db75ba9ba7f74617a2e59ba4.tar.gz bcm5719-llvm-a780ffaac29e9d38db75ba9ba7f74617a2e59ba4.zip |
[AMDGPU] Emit kernel debug properties as code object metadata
Differential Revision: https://reviews.llvm.org/D30969
llvm-svn: 298558
Diffstat (limited to 'llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUCodeObjectMetadataStreamer.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUCodeObjectMetadataStreamer.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUCodeObjectMetadataStreamer.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUCodeObjectMetadataStreamer.cpp index 4a247677211..29f36028328 100644 --- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUCodeObjectMetadataStreamer.cpp +++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUCodeObjectMetadataStreamer.cpp @@ -178,6 +178,22 @@ struct MappingTraits<Kernel::CodeProps::Metadata> { }; template <> +struct MappingTraits<Kernel::DebugProps::Metadata> { + static void mapping(IO &YIO, Kernel::DebugProps::Metadata &MD) { + YIO.mapOptional(Kernel::DebugProps::Key::DebuggerABIVersion, + MD.mDebuggerABIVersion, std::vector<uint32_t>()); + YIO.mapOptional(Kernel::DebugProps::Key::ReservedNumVGPRs, + MD.mReservedNumVGPRs, uint16_t(0)); + YIO.mapOptional(Kernel::DebugProps::Key::ReservedFirstVGPR, + MD.mReservedFirstVGPR, uint16_t(-1)); + YIO.mapOptional(Kernel::DebugProps::Key::PrivateSegmentBufferSGPR, + MD.mPrivateSegmentBufferSGPR, uint16_t(-1)); + YIO.mapOptional(Kernel::DebugProps::Key::WavefrontPrivateSegmentOffsetSGPR, + MD.mWavefrontPrivateSegmentOffsetSGPR, uint16_t(-1)); + } +}; + +template <> struct MappingTraits<Kernel::Metadata> { static void mapping(IO &YIO, Kernel::Metadata &MD) { YIO.mapRequired(Kernel::Key::Name, MD.mName); @@ -190,6 +206,8 @@ struct MappingTraits<Kernel::Metadata> { YIO.mapOptional(Kernel::Key::Args, MD.mArgs); if (!MD.mCodeProps.empty() || !YIO.outputting()) YIO.mapOptional(Kernel::Key::CodeProps, MD.mCodeProps); + if (!MD.mDebugProps.empty() || !YIO.outputting()) + YIO.mapOptional(Kernel::Key::DebugProps, MD.mDebugProps); } }; @@ -574,6 +592,25 @@ void MetadataStreamer::emitKernelCodeProps( CodeProps.mWavefrontSize = KernelCode.wavefront_size; } +void MetadataStreamer::emitKernelDebugProps( + const amd_kernel_code_t &KernelCode) { + if (!(KernelCode.code_properties & AMD_CODE_PROPERTY_IS_DEBUG_SUPPORTED)) + return; + + auto &DebugProps = CodeObjectMetadata.mKernels.back().mDebugProps; + + // FIXME: Need to pass down debugger ABI version through features. This is ok + // for now because we only have one version. + DebugProps.mDebuggerABIVersion.push_back(1); + DebugProps.mDebuggerABIVersion.push_back(0); + DebugProps.mReservedNumVGPRs = KernelCode.reserved_vgpr_count; + DebugProps.mReservedFirstVGPR = KernelCode.reserved_vgpr_first; + DebugProps.mPrivateSegmentBufferSGPR = + KernelCode.debug_private_segment_buffer_sgpr; + DebugProps.mWavefrontPrivateSegmentOffsetSGPR = + KernelCode.debug_wavefront_private_segment_offset_sgpr; +} + void MetadataStreamer::begin(const FeatureBitset &Features, const Module &Mod) { emitVersion(); emitIsa(Features); @@ -593,6 +630,7 @@ void MetadataStreamer::emitKernel(const Function &Func, emitKernelAttrs(Func); emitKernelArgs(Func); emitKernelCodeProps(KernelCode); + emitKernelDebugProps(KernelCode); } ErrorOr<std::string> MetadataStreamer::toYamlString() { |