diff --git a/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h b/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h --- a/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h +++ b/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h @@ -29,6 +29,7 @@ #include "llvm/Support/FormatVariadic.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/MemoryBuffer.h" +#include "llvm/TargetParser/SubtargetFeature.h" #include "llvm/TargetParser/Triple.h" #include @@ -984,9 +985,7 @@ using GetEdgeKindNameFunction = const char *(*)(Edge::Kind); - using FeatureVector = std::vector; - - LinkGraph(std::string Name, const Triple &TT, FeatureVector Features, + LinkGraph(std::string Name, const Triple &TT, SubtargetFeatures Features, unsigned PointerSize, support::endianness Endianness, GetEdgeKindNameFunction GetEdgeKindName) : Name(std::move(Name)), TT(TT), Features(std::move(Features)), @@ -996,8 +995,8 @@ LinkGraph(std::string Name, const Triple &TT, unsigned PointerSize, support::endianness Endianness, GetEdgeKindNameFunction GetEdgeKindName) - : LinkGraph(std::move(Name), TT, FeatureVector(), PointerSize, Endianness, - GetEdgeKindName) {} + : LinkGraph(std::move(Name), TT, SubtargetFeatures(), PointerSize, + Endianness, GetEdgeKindName) {} LinkGraph(const LinkGraph &) = delete; LinkGraph &operator=(const LinkGraph &) = delete; @@ -1012,7 +1011,7 @@ const Triple &getTargetTriple() const { return TT; } /// Return the subtarget features for this Graph. - const FeatureVector &getFeatures() const { return Features; } + const SubtargetFeatures &getFeatures() const { return Features; } /// Returns the pointer size for use in this graph. unsigned getPointerSize() const { return PointerSize; } @@ -1519,7 +1518,7 @@ std::string Name; Triple TT; - FeatureVector Features; + SubtargetFeatures Features; unsigned PointerSize; support::endianness Endianness; GetEdgeKindNameFunction GetEdgeKindName = nullptr; diff --git a/llvm/lib/ExecutionEngine/JITLink/CMakeLists.txt b/llvm/lib/ExecutionEngine/JITLink/CMakeLists.txt --- a/llvm/lib/ExecutionEngine/JITLink/CMakeLists.txt +++ b/llvm/lib/ExecutionEngine/JITLink/CMakeLists.txt @@ -52,7 +52,6 @@ LINK_COMPONENTS BinaryFormat - MC Object Option OrcTargetProcess diff --git a/llvm/lib/ExecutionEngine/JITLink/COFFLinkGraphBuilder.h b/llvm/lib/ExecutionEngine/JITLink/COFFLinkGraphBuilder.h --- a/llvm/lib/ExecutionEngine/JITLink/COFFLinkGraphBuilder.h +++ b/llvm/lib/ExecutionEngine/JITLink/COFFLinkGraphBuilder.h @@ -39,7 +39,7 @@ using COFFSymbolIndex = int32_t; COFFLinkGraphBuilder(const object::COFFObjectFile &Obj, Triple TT, - LinkGraph::FeatureVector Features, + SubtargetFeatures Features, LinkGraph::GetEdgeKindNameFunction GetEdgeKindName); LinkGraph &getGraph() const { return *G; } diff --git a/llvm/lib/ExecutionEngine/JITLink/COFFLinkGraphBuilder.cpp b/llvm/lib/ExecutionEngine/JITLink/COFFLinkGraphBuilder.cpp --- a/llvm/lib/ExecutionEngine/JITLink/COFFLinkGraphBuilder.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/COFFLinkGraphBuilder.cpp @@ -24,8 +24,7 @@ } COFFLinkGraphBuilder::COFFLinkGraphBuilder( - const object::COFFObjectFile &Obj, Triple TT, - LinkGraph::FeatureVector Features, + const object::COFFObjectFile &Obj, Triple TT, SubtargetFeatures Features, LinkGraph::GetEdgeKindNameFunction GetEdgeKindName) : Obj(Obj), G(std::make_unique( Obj.getFileName().str(), createTripleWithCOFFFormat(TT), diff --git a/llvm/lib/ExecutionEngine/JITLink/COFF_x86_64.cpp b/llvm/lib/ExecutionEngine/JITLink/COFF_x86_64.cpp --- a/llvm/lib/ExecutionEngine/JITLink/COFF_x86_64.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/COFF_x86_64.cpp @@ -182,7 +182,7 @@ public: COFFLinkGraphBuilder_x86_64(const object::COFFObjectFile &Obj, const Triple T, - const LinkGraph::FeatureVector Features) + const SubtargetFeatures Features) : COFFLinkGraphBuilder(Obj, std::move(T), std::move(Features), getCOFFX86RelocationKindName) {} }; @@ -321,7 +321,7 @@ return Features.takeError(); return COFFLinkGraphBuilder_x86_64(**COFFObj, (*COFFObj)->makeTriple(), - Features->getFeatures()) + std::move(*Features)) .buildGraph(); } diff --git a/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h b/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h --- a/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h +++ b/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h @@ -59,7 +59,7 @@ public: ELFLinkGraphBuilder(const object::ELFFile &Obj, Triple TT, - LinkGraph::FeatureVector Features, StringRef FileName, + SubtargetFeatures Features, StringRef FileName, LinkGraph::GetEdgeKindNameFunction GetEdgeKindName); /// Debug sections are included in the graph by default. Use @@ -189,7 +189,7 @@ template ELFLinkGraphBuilder::ELFLinkGraphBuilder( - const ELFFile &Obj, Triple TT, LinkGraph::FeatureVector Features, + const ELFFile &Obj, Triple TT, SubtargetFeatures Features, StringRef FileName, LinkGraph::GetEdgeKindNameFunction GetEdgeKindName) : ELFLinkGraphBuilderBase(std::make_unique( FileName.str(), Triple(std::move(TT)), std::move(Features), diff --git a/llvm/lib/ExecutionEngine/JITLink/ELF_aarch32.cpp b/llvm/lib/ExecutionEngine/JITLink/ELF_aarch32.cpp --- a/llvm/lib/ExecutionEngine/JITLink/ELF_aarch32.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/ELF_aarch32.cpp @@ -191,7 +191,7 @@ public: ELFLinkGraphBuilder_aarch32(StringRef FileName, const llvm::object::ELFFile &Obj, Triple TT, - LinkGraph::FeatureVector Features, + SubtargetFeatures Features, aarch32::ArmConfig ArmCfg) : ELFLinkGraphBuilder(Obj, std::move(TT), std::move(Features), FileName, getELFAArch32EdgeKindName), @@ -254,7 +254,7 @@ case Triple::thumb: { auto &ELFFile = cast>(**ELFObj).getELFFile(); return ELFLinkGraphBuilder_aarch32( - (*ELFObj)->getFileName(), ELFFile, TT, Features->getFeatures(), + (*ELFObj)->getFileName(), ELFFile, TT, std::move(*Features), ArmCfg) .buildGraph(); } @@ -262,7 +262,7 @@ case Triple::thumbeb: { auto &ELFFile = cast>(**ELFObj).getELFFile(); return ELFLinkGraphBuilder_aarch32( - (*ELFObj)->getFileName(), ELFFile, TT, Features->getFeatures(), + (*ELFObj)->getFileName(), ELFFile, TT, std::move(*Features), ArmCfg) .buildGraph(); } diff --git a/llvm/lib/ExecutionEngine/JITLink/ELF_aarch64.cpp b/llvm/lib/ExecutionEngine/JITLink/ELF_aarch64.cpp --- a/llvm/lib/ExecutionEngine/JITLink/ELF_aarch64.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/ELF_aarch64.cpp @@ -429,7 +429,7 @@ public: ELFLinkGraphBuilder_aarch64(StringRef FileName, const object::ELFFile &Obj, Triple TT, - LinkGraph::FeatureVector Features) + SubtargetFeatures Features) : ELFLinkGraphBuilder(Obj, std::move(TT), std::move(Features), FileName, aarch64::getEdgeKindName) {} }; @@ -589,7 +589,7 @@ auto &ELFObjFile = cast>(**ELFObj); return ELFLinkGraphBuilder_aarch64( (*ELFObj)->getFileName(), ELFObjFile.getELFFile(), - (*ELFObj)->makeTriple(), Features->getFeatures()) + (*ELFObj)->makeTriple(), std::move(*Features)) .buildGraph(); } diff --git a/llvm/lib/ExecutionEngine/JITLink/ELF_i386.cpp b/llvm/lib/ExecutionEngine/JITLink/ELF_i386.cpp --- a/llvm/lib/ExecutionEngine/JITLink/ELF_i386.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/ELF_i386.cpp @@ -210,7 +210,7 @@ public: ELFLinkGraphBuilder_i386(StringRef FileName, const object::ELFFile &Obj, - Triple TT, LinkGraph::FeatureVector Features) + Triple TT, SubtargetFeatures Features) : ELFLinkGraphBuilder(Obj, std::move(TT), std::move(Features), FileName, i386::getEdgeKindName) {} }; @@ -236,7 +236,7 @@ auto &ELFObjFile = cast>(**ELFObj); return ELFLinkGraphBuilder_i386( (*ELFObj)->getFileName(), ELFObjFile.getELFFile(), - (*ELFObj)->makeTriple(), Features->getFeatures()) + (*ELFObj)->makeTriple(), std::move(*Features)) .buildGraph(); } diff --git a/llvm/lib/ExecutionEngine/JITLink/ELF_loongarch.cpp b/llvm/lib/ExecutionEngine/JITLink/ELF_loongarch.cpp --- a/llvm/lib/ExecutionEngine/JITLink/ELF_loongarch.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/ELF_loongarch.cpp @@ -130,7 +130,7 @@ public: ELFLinkGraphBuilder_loongarch(StringRef FileName, const object::ELFFile &Obj, Triple TT, - LinkGraph::FeatureVector Features) + SubtargetFeatures Features) : ELFLinkGraphBuilder(Obj, std::move(TT), std::move(Features), FileName, loongarch::getEdgeKindName) {} }; @@ -168,7 +168,7 @@ auto &ELFObjFile = cast>(**ELFObj); return ELFLinkGraphBuilder_loongarch( (*ELFObj)->getFileName(), ELFObjFile.getELFFile(), - (*ELFObj)->makeTriple(), Features->getFeatures()) + (*ELFObj)->makeTriple(), std::move(*Features)) .buildGraph(); } @@ -177,7 +177,7 @@ auto &ELFObjFile = cast>(**ELFObj); return ELFLinkGraphBuilder_loongarch( (*ELFObj)->getFileName(), ELFObjFile.getELFFile(), - (*ELFObj)->makeTriple(), Features->getFeatures()) + (*ELFObj)->makeTriple(), std::move(*Features)) .buildGraph(); } diff --git a/llvm/lib/ExecutionEngine/JITLink/ELF_ppc64.cpp b/llvm/lib/ExecutionEngine/JITLink/ELF_ppc64.cpp --- a/llvm/lib/ExecutionEngine/JITLink/ELF_ppc64.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/ELF_ppc64.cpp @@ -63,7 +63,7 @@ public: ELFLinkGraphBuilder_ppc64(StringRef FileName, const object::ELFFile &Obj, Triple TT, - LinkGraph::FeatureVector Features) + SubtargetFeatures Features) : ELFLinkGraphBuilder(Obj, std::move(TT), std::move(Features), FileName, ppc64::getEdgeKindName) {} }; @@ -106,7 +106,7 @@ auto &ELFObjFile = cast>(**ELFObj); return ELFLinkGraphBuilder_ppc64( (*ELFObj)->getFileName(), ELFObjFile.getELFFile(), - (*ELFObj)->makeTriple(), Features->getFeatures()) + (*ELFObj)->makeTriple(), std::move(*Features)) .buildGraph(); } diff --git a/llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp b/llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp --- a/llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp @@ -515,7 +515,7 @@ static RelaxAux initRelaxAux(LinkGraph &G) { RelaxAux Aux; Aux.Config.IsRV32 = G.getTargetTriple().isRISCV32(); - const auto &Features = G.getFeatures(); + const auto &Features = G.getFeatures().getFeatures(); Aux.Config.HasRVC = std::find(Features.begin(), Features.end(), "+c") != Features.end(); @@ -919,7 +919,7 @@ public: ELFLinkGraphBuilder_riscv(StringRef FileName, const object::ELFFile &Obj, Triple TT, - LinkGraph::FeatureVector Features) + SubtargetFeatures Features) : ELFLinkGraphBuilder(Obj, std::move(TT), std::move(Features), FileName, riscv::getEdgeKindName) {} }; @@ -943,7 +943,7 @@ auto &ELFObjFile = cast>(**ELFObj); return ELFLinkGraphBuilder_riscv( (*ELFObj)->getFileName(), ELFObjFile.getELFFile(), - (*ELFObj)->makeTriple(), Features->getFeatures()) + (*ELFObj)->makeTriple(), std::move(*Features)) .buildGraph(); } else { assert((*ELFObj)->getArch() == Triple::riscv32 && @@ -951,7 +951,7 @@ auto &ELFObjFile = cast>(**ELFObj); return ELFLinkGraphBuilder_riscv( (*ELFObj)->getFileName(), ELFObjFile.getELFFile(), - (*ELFObj)->makeTriple(), Features->getFeatures()) + (*ELFObj)->makeTriple(), std::move(*Features)) .buildGraph(); } } diff --git a/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp b/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp --- a/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp @@ -228,7 +228,7 @@ public: ELFLinkGraphBuilder_x86_64(StringRef FileName, const object::ELFFile &Obj, - LinkGraph::FeatureVector Features) + SubtargetFeatures Features) : ELFLinkGraphBuilder(Obj, Triple("x86_64-unknown-linux"), std::move(Features), FileName, x86_64::getEdgeKindName) {} @@ -338,7 +338,7 @@ auto &ELFObjFile = cast>(**ELFObj); return ELFLinkGraphBuilder_x86_64((*ELFObj)->getFileName(), ELFObjFile.getELFFile(), - Features->getFeatures()) + std::move(*Features)) .buildGraph(); } diff --git a/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.h b/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.h --- a/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.h +++ b/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.h @@ -84,7 +84,7 @@ using SectionParserFunction = std::function; MachOLinkGraphBuilder(const object::MachOObjectFile &Obj, Triple TT, - LinkGraph::FeatureVector Features, + SubtargetFeatures Features, LinkGraph::GetEdgeKindNameFunction GetEdgeKindName); LinkGraph &getGraph() const { return *G; } diff --git a/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp b/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp --- a/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp @@ -47,8 +47,7 @@ } MachOLinkGraphBuilder::MachOLinkGraphBuilder( - const object::MachOObjectFile &Obj, Triple TT, - LinkGraph::FeatureVector Features, + const object::MachOObjectFile &Obj, Triple TT, SubtargetFeatures Features, LinkGraph::GetEdgeKindNameFunction GetEdgeKindName) : Obj(Obj), G(std::make_unique(std::string(Obj.getFileName()), diff --git a/llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp b/llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp --- a/llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp @@ -26,7 +26,7 @@ class MachOLinkGraphBuilder_arm64 : public MachOLinkGraphBuilder { public: MachOLinkGraphBuilder_arm64(const object::MachOObjectFile &Obj, - LinkGraph::FeatureVector Features) + SubtargetFeatures Features) : MachOLinkGraphBuilder(Obj, Triple("arm64-apple-darwin"), std::move(Features), aarch64::getEdgeKindName), NumSymbols(Obj.getSymtabLoadCommand().nsyms) {} @@ -547,7 +547,7 @@ if (!Features) return Features.takeError(); - return MachOLinkGraphBuilder_arm64(**MachOObj, Features->getFeatures()) + return MachOLinkGraphBuilder_arm64(**MachOObj, std::move(*Features)) .buildGraph(); } diff --git a/llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp b/llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp --- a/llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp @@ -26,7 +26,7 @@ class MachOLinkGraphBuilder_x86_64 : public MachOLinkGraphBuilder { public: MachOLinkGraphBuilder_x86_64(const object::MachOObjectFile &Obj, - LinkGraph::FeatureVector Features) + SubtargetFeatures Features) : MachOLinkGraphBuilder(Obj, Triple("x86_64-apple-darwin"), std::move(Features), x86_64::getEdgeKindName) {} @@ -472,7 +472,7 @@ if (!Features) return Features.takeError(); - return MachOLinkGraphBuilder_x86_64(**MachOObj, Features->getFeatures()) + return MachOLinkGraphBuilder_x86_64(**MachOObj, std::move(*Features)) .buildGraph(); }