diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp --- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp +++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp @@ -166,10 +166,15 @@ // A hook for emitting stuff at the end. // We use it for emitting the accumulated PAL metadata as directives. +// The PAL metadata is reset after it is emitted. void AMDGPUTargetAsmStreamer::finish() { std::string S; getPALMetadata()->toString(S); OS << S; + + // Reset the pal metadata so is data will not affect a compilation that reuses + // this object. + getPALMetadata()->reset(); } void AMDGPUTargetAsmStreamer::EmitDirectiveAMDGCNTarget(StringRef Target) { @@ -421,6 +426,7 @@ // A hook for emitting stuff at the end. // We use it for emitting the accumulated PAL metadata as a .note record. +// The PAL metadata is reset after it is emitted. void AMDGPUTargetELFStreamer::finish() { std::string Blob; const char *Vendor = getPALMetadata()->getVendor(); @@ -430,6 +436,10 @@ return; EmitNote(Vendor, MCConstantExpr::create(Blob.size(), getContext()), Type, [&](MCELFStreamer &OS) { OS.emitBytes(Blob); }); + + // Reset the pal metadata so is data will not affect a compilation that reuses + // this object. + getPALMetadata()->reset(); } void AMDGPUTargetELFStreamer::EmitNote( diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUPALMetadata.h b/llvm/lib/Target/AMDGPU/Utils/AMDGPUPALMetadata.h --- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUPALMetadata.h +++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUPALMetadata.h @@ -106,6 +106,9 @@ // Set legacy PAL metadata format. void setLegacy(); + // Erase all PAL metadata. + void reset(); + private: // Return whether the blob type is legacy PAL metadata. bool isLegacy() const; diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUPALMetadata.cpp b/llvm/lib/Target/AMDGPU/Utils/AMDGPUPALMetadata.cpp --- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUPALMetadata.cpp +++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUPALMetadata.cpp @@ -773,3 +773,9 @@ BlobType = ELF::NT_AMD_AMDGPU_PAL_METADATA; } +// Erase all PAL metadata. +void AMDGPUPALMetadata::reset() { + MsgPackDoc.clear(); + Registers = MsgPackDoc.getEmptyNode(); + HwStages = MsgPackDoc.getEmptyNode(); +}