diff options
| author | pvanhout <pierre.vanhoutryve@amd.com> | 2023-10-18 12:55:36 +0200 |
|---|---|---|
| committer | pvanhout <pierre.vanhoutryve@amd.com> | 2023-10-18 12:55:36 +0200 |
| commit | 868abf09619cb10ba710162483e5a66b0c1e4446 (patch) | |
| tree | 73f2be856bac866b39ea07a0dbb6de595f474672 /llvm/lib | |
| parent | c92629150e361f7b2a06fc56200389b727616411 (diff) | |
| download | llvm-868abf09619cb10ba710162483e5a66b0c1e4446.zip llvm-868abf09619cb10ba710162483e5a66b0c1e4446.tar.gz llvm-868abf09619cb10ba710162483e5a66b0c1e4446.tar.bz2 | |
Revert "[AMDGPU] Remove Code Object V3 (#67118)"
This reverts commit 544d91280c26fd5f7acd70eac4d667863562f4cc.
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp | 3 | ||||
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUHSAMetadataStreamer.cpp | 85 | ||||
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUHSAMetadataStreamer.h | 21 | ||||
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp | 5 | ||||
| -rw-r--r-- | llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp | 1 | ||||
| -rw-r--r-- | llvm/lib/Target/AMDGPU/SIISelLowering.cpp | 5 | ||||
| -rw-r--r-- | llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp | 21 | ||||
| -rw-r--r-- | llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h | 9 |
8 files changed, 110 insertions, 40 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp index 8d0ef67..aadc4a6 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp @@ -341,6 +341,9 @@ bool AMDGPUAsmPrinter::doInitialization(Module &M) { if (TM.getTargetTriple().getOS() == Triple::AMDHSA) { switch (CodeObjectVersion) { + case AMDGPU::AMDHSA_COV3: + HSAMetadataStream.reset(new HSAMD::MetadataStreamerMsgPackV3()); + break; case AMDGPU::AMDHSA_COV4: HSAMetadataStream.reset(new HSAMD::MetadataStreamerMsgPackV4()); break; diff --git a/llvm/lib/Target/AMDGPU/AMDGPUHSAMetadataStreamer.cpp b/llvm/lib/Target/AMDGPU/AMDGPUHSAMetadataStreamer.cpp index b51a876..5060cd3 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUHSAMetadataStreamer.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUHSAMetadataStreamer.cpp @@ -49,14 +49,14 @@ namespace AMDGPU { namespace HSAMD { //===----------------------------------------------------------------------===// -// HSAMetadataStreamerV4 +// HSAMetadataStreamerV3 //===----------------------------------------------------------------------===// -void MetadataStreamerMsgPackV4::dump(StringRef HSAMetadataString) const { +void MetadataStreamerMsgPackV3::dump(StringRef HSAMetadataString) const { errs() << "AMDGPU HSA Metadata:\n" << HSAMetadataString << '\n'; } -void MetadataStreamerMsgPackV4::verify(StringRef HSAMetadataString) const { +void MetadataStreamerMsgPackV3::verify(StringRef HSAMetadataString) const { errs() << "AMDGPU HSA Metadata Parser Test: "; msgpack::Document FromHSAMetadataString; @@ -78,7 +78,7 @@ void MetadataStreamerMsgPackV4::verify(StringRef HSAMetadataString) const { } std::optional<StringRef> -MetadataStreamerMsgPackV4::getAccessQualifier(StringRef AccQual) const { +MetadataStreamerMsgPackV3::getAccessQualifier(StringRef AccQual) const { return StringSwitch<std::optional<StringRef>>(AccQual) .Case("read_only", StringRef("read_only")) .Case("write_only", StringRef("write_only")) @@ -86,7 +86,7 @@ MetadataStreamerMsgPackV4::getAccessQualifier(StringRef AccQual) const { .Default(std::nullopt); } -std::optional<StringRef> MetadataStreamerMsgPackV4::getAddressSpaceQualifier( +std::optional<StringRef> MetadataStreamerMsgPackV3::getAddressSpaceQualifier( unsigned AddressSpace) const { switch (AddressSpace) { case AMDGPUAS::PRIVATE_ADDRESS: @@ -107,7 +107,7 @@ std::optional<StringRef> MetadataStreamerMsgPackV4::getAddressSpaceQualifier( } StringRef -MetadataStreamerMsgPackV4::getValueKind(Type *Ty, StringRef TypeQual, +MetadataStreamerMsgPackV3::getValueKind(Type *Ty, StringRef TypeQual, StringRef BaseTypeName) const { if (TypeQual.contains("pipe")) return "pipe"; @@ -134,7 +134,7 @@ MetadataStreamerMsgPackV4::getValueKind(Type *Ty, StringRef TypeQual, : "by_value"); } -std::string MetadataStreamerMsgPackV4::getTypeName(Type *Ty, +std::string MetadataStreamerMsgPackV3::getTypeName(Type *Ty, bool Signed) const { switch (Ty->getTypeID()) { case Type::IntegerTyID: { @@ -173,7 +173,7 @@ std::string MetadataStreamerMsgPackV4::getTypeName(Type *Ty, } msgpack::ArrayDocNode -MetadataStreamerMsgPackV4::getWorkGroupDimensions(MDNode *Node) const { +MetadataStreamerMsgPackV3::getWorkGroupDimensions(MDNode *Node) const { auto Dims = HSAMetadataDoc->getArrayNode(); if (Node->getNumOperands() != 3) return Dims; @@ -184,20 +184,14 @@ MetadataStreamerMsgPackV4::getWorkGroupDimensions(MDNode *Node) const { return Dims; } -void MetadataStreamerMsgPackV4::emitVersion() { +void MetadataStreamerMsgPackV3::emitVersion() { auto Version = HSAMetadataDoc->getArrayNode(); - Version.push_back(Version.getDocument()->getNode(VersionMajorV4)); - Version.push_back(Version.getDocument()->getNode(VersionMinorV4)); + Version.push_back(Version.getDocument()->getNode(VersionMajorV3)); + Version.push_back(Version.getDocument()->getNode(VersionMinorV3)); getRootMetadata("amdhsa.version") = Version; } -void MetadataStreamerMsgPackV4::emitTargetID( - const IsaInfo::AMDGPUTargetID &TargetID) { - getRootMetadata("amdhsa.target") = - HSAMetadataDoc->getNode(TargetID.toString(), /*Copy=*/true); -} - -void MetadataStreamerMsgPackV4::emitPrintf(const Module &Mod) { +void MetadataStreamerMsgPackV3::emitPrintf(const Module &Mod) { auto Node = Mod.getNamedMetadata("llvm.printf.fmts"); if (!Node) return; @@ -210,7 +204,7 @@ void MetadataStreamerMsgPackV4::emitPrintf(const Module &Mod) { getRootMetadata("amdhsa.printf") = Printf; } -void MetadataStreamerMsgPackV4::emitKernelLanguage(const Function &Func, +void MetadataStreamerMsgPackV3::emitKernelLanguage(const Function &Func, msgpack::MapDocNode Kern) { // TODO: What about other languages? auto Node = Func.getParent()->getNamedMetadata("opencl.ocl.version"); @@ -229,7 +223,7 @@ void MetadataStreamerMsgPackV4::emitKernelLanguage(const Function &Func, Kern[".language_version"] = LanguageVersion; } -void MetadataStreamerMsgPackV4::emitKernelAttrs(const Function &Func, +void MetadataStreamerMsgPackV3::emitKernelAttrs(const Function &Func, msgpack::MapDocNode Kern) { if (auto Node = Func.getMetadata("reqd_work_group_size")) @@ -254,7 +248,7 @@ void MetadataStreamerMsgPackV4::emitKernelAttrs(const Function &Func, Kern[".kind"] = Kern.getDocument()->getNode("fini"); } -void MetadataStreamerMsgPackV4::emitKernelArgs(const MachineFunction &MF, +void MetadataStreamerMsgPackV3::emitKernelArgs(const MachineFunction &MF, msgpack::MapDocNode Kern) { auto &Func = MF.getFunction(); unsigned Offset = 0; @@ -267,7 +261,7 @@ void MetadataStreamerMsgPackV4::emitKernelArgs(const MachineFunction &MF, Kern[".args"] = Args; } -void MetadataStreamerMsgPackV4::emitKernelArg(const Argument &Arg, +void MetadataStreamerMsgPackV3::emitKernelArg(const Argument &Arg, unsigned &Offset, msgpack::ArrayDocNode Args) { auto Func = Arg.getParent(); @@ -332,7 +326,7 @@ void MetadataStreamerMsgPackV4::emitKernelArg(const Argument &Arg, AccQual, TypeQual); } -void MetadataStreamerMsgPackV4::emitKernelArg( +void MetadataStreamerMsgPackV3::emitKernelArg( const DataLayout &DL, Type *Ty, Align Alignment, StringRef ValueKind, unsigned &Offset, msgpack::ArrayDocNode Args, MaybeAlign PointeeAlign, StringRef Name, StringRef TypeName, StringRef BaseTypeName, @@ -381,7 +375,7 @@ void MetadataStreamerMsgPackV4::emitKernelArg( Args.push_back(Arg); } -void MetadataStreamerMsgPackV4::emitHiddenKernelArgs( +void MetadataStreamerMsgPackV3::emitHiddenKernelArgs( const MachineFunction &MF, unsigned &Offset, msgpack::ArrayDocNode Args) { auto &Func = MF.getFunction(); const GCNSubtarget &ST = MF.getSubtarget<GCNSubtarget>(); @@ -454,10 +448,9 @@ void MetadataStreamerMsgPackV4::emitHiddenKernelArgs( } } -msgpack::MapDocNode -MetadataStreamerMsgPackV4::getHSAKernelProps(const MachineFunction &MF, - const SIProgramInfo &ProgramInfo, - unsigned CodeObjectVersion) const { +msgpack::MapDocNode MetadataStreamerMsgPackV3::getHSAKernelProps( + const MachineFunction &MF, const SIProgramInfo &ProgramInfo, + unsigned CodeObjectVersion) const { const GCNSubtarget &STM = MF.getSubtarget<GCNSubtarget>(); const SIMachineFunctionInfo &MFI = *MF.getInfo<SIMachineFunctionInfo>(); const Function &F = MF.getFunction(); @@ -502,19 +495,18 @@ MetadataStreamerMsgPackV4::getHSAKernelProps(const MachineFunction &MF, return Kern; } -bool MetadataStreamerMsgPackV4::emitTo(AMDGPUTargetStreamer &TargetStreamer) { +bool MetadataStreamerMsgPackV3::emitTo(AMDGPUTargetStreamer &TargetStreamer) { return TargetStreamer.EmitHSAMetadata(*HSAMetadataDoc, true); } -void MetadataStreamerMsgPackV4::begin(const Module &Mod, +void MetadataStreamerMsgPackV3::begin(const Module &Mod, const IsaInfo::AMDGPUTargetID &TargetID) { emitVersion(); - emitTargetID(TargetID); emitPrintf(Mod); getRootMetadata("amdhsa.kernels") = HSAMetadataDoc->getArrayNode(); } -void MetadataStreamerMsgPackV4::end() { +void MetadataStreamerMsgPackV3::end() { std::string HSAMetadataString; raw_string_ostream StrOS(HSAMetadataString); HSAMetadataDoc->toYAML(StrOS); @@ -525,7 +517,7 @@ void MetadataStreamerMsgPackV4::end() { verify(StrOS.str()); } -void MetadataStreamerMsgPackV4::emitKernel(const MachineFunction &MF, +void MetadataStreamerMsgPackV3::emitKernel(const MachineFunction &MF, const SIProgramInfo &ProgramInfo) { auto &Func = MF.getFunction(); if (Func.getCallingConv() != CallingConv::AMDGPU_KERNEL && @@ -551,6 +543,31 @@ void MetadataStreamerMsgPackV4::emitKernel(const MachineFunction &MF, } //===----------------------------------------------------------------------===// +// HSAMetadataStreamerV4 +//===----------------------------------------------------------------------===// + +void MetadataStreamerMsgPackV4::emitVersion() { + auto Version = HSAMetadataDoc->getArrayNode(); + Version.push_back(Version.getDocument()->getNode(VersionMajorV4)); + Version.push_back(Version.getDocument()->getNode(VersionMinorV4)); + getRootMetadata("amdhsa.version") = Version; +} + +void MetadataStreamerMsgPackV4::emitTargetID( + const IsaInfo::AMDGPUTargetID &TargetID) { + getRootMetadata("amdhsa.target") = + HSAMetadataDoc->getNode(TargetID.toString(), /*Copy=*/true); +} + +void MetadataStreamerMsgPackV4::begin(const Module &Mod, + const IsaInfo::AMDGPUTargetID &TargetID) { + emitVersion(); + emitTargetID(TargetID); + emitPrintf(Mod); + getRootMetadata("amdhsa.kernels") = HSAMetadataDoc->getArrayNode(); +} + +//===----------------------------------------------------------------------===// // HSAMetadataStreamerV5 //===----------------------------------------------------------------------===// @@ -663,7 +680,7 @@ void MetadataStreamerMsgPackV5::emitHiddenKernelArgs( void MetadataStreamerMsgPackV5::emitKernelAttrs(const Function &Func, msgpack::MapDocNode Kern) { - MetadataStreamerMsgPackV4::emitKernelAttrs(Func, Kern); + MetadataStreamerMsgPackV3::emitKernelAttrs(Func, Kern); if (Func.getFnAttribute("uniform-work-group-size").getValueAsBool()) Kern[".uniform_work_group_size"] = Kern.getDocument()->getNode(1); diff --git a/llvm/lib/Target/AMDGPU/AMDGPUHSAMetadataStreamer.h b/llvm/lib/Target/AMDGPU/AMDGPUHSAMetadataStreamer.h index 18a7b5d..d2b3b89 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUHSAMetadataStreamer.h +++ b/llvm/lib/Target/AMDGPU/AMDGPUHSAMetadataStreamer.h @@ -62,7 +62,7 @@ protected: msgpack::MapDocNode Kern) = 0; }; -class MetadataStreamerMsgPackV4 : public MetadataStreamer { +class MetadataStreamerMsgPackV3 : public MetadataStreamer { protected: std::unique_ptr<msgpack::Document> HSAMetadataDoc = std::make_unique<msgpack::Document>(); @@ -89,8 +89,6 @@ protected: void emitVersion() override; - void emitTargetID(const IsaInfo::AMDGPUTargetID &TargetID); - void emitPrintf(const Module &Mod); void emitKernelLanguage(const Function &Func, msgpack::MapDocNode Kern); @@ -122,8 +120,8 @@ protected: } public: - MetadataStreamerMsgPackV4() = default; - ~MetadataStreamerMsgPackV4() = default; + MetadataStreamerMsgPackV3() = default; + ~MetadataStreamerMsgPackV3() = default; bool emitTo(AMDGPUTargetStreamer &TargetStreamer) override; @@ -136,6 +134,19 @@ public: const SIProgramInfo &ProgramInfo) override; }; +class MetadataStreamerMsgPackV4 : public MetadataStreamerMsgPackV3 { +protected: + void emitVersion() override; + void emitTargetID(const IsaInfo::AMDGPUTargetID &TargetID); + +public: + MetadataStreamerMsgPackV4() = default; + ~MetadataStreamerMsgPackV4() = default; + + void begin(const Module &Mod, + const IsaInfo::AMDGPUTargetID &TargetID) override; +}; + class MetadataStreamerMsgPackV5 final : public MetadataStreamerMsgPackV4 { protected: void emitVersion() override; diff --git a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp index 21abfb4..3d70ed1 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp @@ -6478,6 +6478,11 @@ bool AMDGPULegalizerInfo::legalizeTrapIntrinsic(MachineInstr &MI, ST.getTrapHandlerAbi() != GCNSubtarget::TrapHandlerAbi::AMDHSA) return legalizeTrapEndpgm(MI, MRI, B); + const Module *M = B.getMF().getFunction().getParent(); + unsigned CodeObjectVersion = AMDGPU::getCodeObjectVersion(*M); + if (CodeObjectVersion <= AMDGPU::AMDHSA_COV3) + return legalizeTrapHsaQueuePtr(MI, MRI, B); + return ST.supportsGetDoorbellID() ? legalizeTrapHsa(MI, MRI, B) : legalizeTrapHsaQueuePtr(MI, MRI, B); } diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp index 42af09e2..6b8c03c 100644 --- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp +++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp @@ -424,6 +424,7 @@ void AMDGPUTargetAsmStreamer::EmitAmdhsaKernelDescriptor( switch (CodeObjectVersion) { default: break; + case AMDGPU::AMDHSA_COV3: case AMDGPU::AMDHSA_COV4: case AMDGPU::AMDHSA_COV5: if (getTargetID()->isXnackSupported()) diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp index 9c5b166..f8f1e6d 100644 --- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp @@ -5992,6 +5992,11 @@ SDValue SITargetLowering::lowerTRAP(SDValue Op, SelectionDAG &DAG) const { Subtarget->getTrapHandlerAbi() != GCNSubtarget::TrapHandlerAbi::AMDHSA) return lowerTrapEndpgm(Op, DAG); + const Module *M = DAG.getMachineFunction().getFunction().getParent(); + unsigned CodeObjectVersion = AMDGPU::getCodeObjectVersion(*M); + if (CodeObjectVersion <= AMDGPU::AMDHSA_COV3) + return lowerTrapHsaQueuePtr(Op, DAG); + return Subtarget->supportsGetDoorbellID() ? lowerTrapHsa(Op, DAG) : lowerTrapHsaQueuePtr(Op, DAG); } diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp index 5fff19e..d123b38 100644 --- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp +++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp @@ -128,6 +128,8 @@ std::optional<uint8_t> getHsaAbiVersion(const MCSubtargetInfo *STI) { return std::nullopt; switch (AmdhsaCodeObjectVersion) { + case 3: + return ELF::ELFABIVERSION_AMDGPU_HSA_V3; case 4: return ELF::ELFABIVERSION_AMDGPU_HSA_V4; case 5: @@ -138,6 +140,12 @@ std::optional<uint8_t> getHsaAbiVersion(const MCSubtargetInfo *STI) { } } +bool isHsaAbiVersion3(const MCSubtargetInfo *STI) { + if (std::optional<uint8_t> HsaAbiVer = getHsaAbiVersion(STI)) + return *HsaAbiVer == ELF::ELFABIVERSION_AMDGPU_HSA_V3; + return false; +} + bool isHsaAbiVersion4(const MCSubtargetInfo *STI) { if (std::optional<uint8_t> HsaAbiVer = getHsaAbiVersion(STI)) return *HsaAbiVer == ELF::ELFABIVERSION_AMDGPU_HSA_V4; @@ -166,6 +174,7 @@ unsigned getCodeObjectVersion(const Module &M) { unsigned getMultigridSyncArgImplicitArgPosition(unsigned CodeObjectVersion) { switch (CodeObjectVersion) { + case AMDHSA_COV3: case AMDHSA_COV4: return 48; case AMDHSA_COV5: @@ -179,6 +188,7 @@ unsigned getMultigridSyncArgImplicitArgPosition(unsigned CodeObjectVersion) { // central TD file. unsigned getHostcallImplicitArgPosition(unsigned CodeObjectVersion) { switch (CodeObjectVersion) { + case AMDHSA_COV3: case AMDHSA_COV4: return 24; case AMDHSA_COV5: @@ -189,6 +199,7 @@ unsigned getHostcallImplicitArgPosition(unsigned CodeObjectVersion) { unsigned getDefaultQueueImplicitArgPosition(unsigned CodeObjectVersion) { switch (CodeObjectVersion) { + case AMDHSA_COV3: case AMDHSA_COV4: return 32; case AMDHSA_COV5: @@ -199,6 +210,7 @@ unsigned getDefaultQueueImplicitArgPosition(unsigned CodeObjectVersion) { unsigned getCompletionActionImplicitArgPosition(unsigned CodeObjectVersion) { switch (CodeObjectVersion) { + case AMDHSA_COV3: case AMDHSA_COV4: return 40; case AMDHSA_COV5: @@ -762,6 +774,15 @@ std::string AMDGPUTargetID::toString() const { std::string Features; if (STI.getTargetTriple().getOS() == Triple::AMDHSA) { switch (CodeObjectVersion) { + case AMDGPU::AMDHSA_COV3: + // xnack. + if (isXnackOnOrAny()) + Features += "+xnack"; + // In code object v2 and v3, "sramecc" feature was spelled with a + // hyphen ("sram-ecc"). + if (isSramEccOnOrAny()) + Features += "+sram-ecc"; + break; case AMDGPU::AMDHSA_COV4: case AMDGPU::AMDHSA_COV5: // sramecc. diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h index 1e0994d..bb2964f 100644 --- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h +++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h @@ -42,12 +42,19 @@ namespace AMDGPU { struct IsaVersion; -enum { AMDHSA_COV4 = 4, AMDHSA_COV5 = 5 }; +enum { + AMDHSA_COV3 = 3, + AMDHSA_COV4 = 4, + AMDHSA_COV5 = 5 +}; /// \returns True if \p STI is AMDHSA. bool isHsaAbi(const MCSubtargetInfo &STI); /// \returns HSA OS ABI Version identification. std::optional<uint8_t> getHsaAbiVersion(const MCSubtargetInfo *STI); +/// \returns True if HSA OS ABI Version identification is 3, +/// false otherwise. +bool isHsaAbiVersion3(const MCSubtargetInfo *STI); /// \returns True if HSA OS ABI Version identification is 4, /// false otherwise. bool isHsaAbiVersion4(const MCSubtargetInfo *STI); |
