diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/CMakeLists.txt | 1 | ||||
-rw-r--r-- | llvm/lib/CodeGen/ErlangGC.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/CodeGen/GCMetadata.cpp | 34 | ||||
-rw-r--r-- | llvm/lib/CodeGen/GCRootLowering.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/CodeGen/GCStrategy.cpp (renamed from llvm/lib/IR/GCStrategy.cpp) | 4 | ||||
-rw-r--r-- | llvm/lib/CodeGen/OcamlGC.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/CodeGen/ShadowStackGC.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/CodeGen/StatepointExampleGC.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/IR/CMakeLists.txt | 1 | ||||
-rw-r--r-- | llvm/lib/IR/Function.cpp | 6 | ||||
-rw-r--r-- | llvm/lib/IR/LLVMContextImpl.cpp | 23 | ||||
-rw-r--r-- | llvm/lib/IR/LLVMContextImpl.h | 11 |
15 files changed, 33 insertions, 63 deletions
diff --git a/llvm/lib/CodeGen/CMakeLists.txt b/llvm/lib/CodeGen/CMakeLists.txt index 7f7f5225180..f0b2dfe365b 100644 --- a/llvm/lib/CodeGen/CMakeLists.txt +++ b/llvm/lib/CodeGen/CMakeLists.txt @@ -23,6 +23,7 @@ add_llvm_library(LLVMCodeGen GCMetadata.cpp GCMetadataPrinter.cpp GCRootLowering.cpp + GCStrategy.cpp GlobalMerge.cpp IfConversion.cpp InlineSpiller.cpp diff --git a/llvm/lib/CodeGen/ErlangGC.cpp b/llvm/lib/CodeGen/ErlangGC.cpp index 30af07f1214..a40bbb5052a 100644 --- a/llvm/lib/CodeGen/ErlangGC.cpp +++ b/llvm/lib/CodeGen/ErlangGC.cpp @@ -16,7 +16,7 @@ #include "llvm/CodeGen/GCs.h" #include "llvm/CodeGen/MachineInstrBuilder.h" -#include "llvm/IR/GCStrategy.h" +#include "llvm/CodeGen/GCStrategy.h" #include "llvm/MC/MCContext.h" #include "llvm/MC/MCSymbol.h" #include "llvm/Target/TargetInstrInfo.h" diff --git a/llvm/lib/CodeGen/GCMetadata.cpp b/llvm/lib/CodeGen/GCMetadata.cpp index 7a61d61e7d0..ab8383a45c4 100644 --- a/llvm/lib/CodeGen/GCMetadata.cpp +++ b/llvm/lib/CodeGen/GCMetadata.cpp @@ -14,8 +14,8 @@ #include "llvm/CodeGen/GCMetadata.h" #include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/Passes.h" +#include "llvm/CodeGen/GCStrategy.h" #include "llvm/IR/Function.h" -#include "llvm/IR/GCStrategy.h" #include "llvm/MC/MCSymbol.h" #include "llvm/Pass.h" #include "llvm/Support/Debug.h" @@ -66,15 +66,7 @@ GCFunctionInfo &GCModuleInfo::getFunctionInfo(const Function &F) { if (I != FInfoMap.end()) return *I->second; - GCStrategy *S = F.getGCStrategy(); - if (!S) { - std::string error = std::string("unsupported GC: ") + F.getGC(); - report_fatal_error(error); - } - // Save the fact this strategy is associated with this module. Note that - // these are non-owning references, the GCStrategy remains owned by the - // Context. - StrategyList.push_back(S); + GCStrategy *S = getGCStrategy(F.getGC()); Functions.push_back(make_unique<GCFunctionInfo>(F, *S)); GCFunctionInfo *GFI = Functions.back().get(); FInfoMap[&F] = GFI; @@ -84,7 +76,7 @@ GCFunctionInfo &GCModuleInfo::getFunctionInfo(const Function &F) { void GCModuleInfo::clear() { Functions.clear(); FInfoMap.clear(); - StrategyList.clear(); + GCStrategyList.clear(); } // ----------------------------------------------------------------------------- @@ -159,3 +151,23 @@ bool Printer::doFinalization(Module &M) { GMI->clear(); return false; } + + +GCStrategy *GCModuleInfo::getGCStrategy(const StringRef Name) { + // TODO: Arguably, just doing a linear search would be faster for small N + auto NMI = GCStrategyMap.find(Name); + if (NMI != GCStrategyMap.end()) + return NMI->getValue(); + + for (auto& Entry : GCRegistry::entries()) { + if (Name == Entry.getName()) { + std::unique_ptr<GCStrategy> S = Entry.instantiate(); + S->Name = Name; + GCStrategyMap[Name] = S.get(); + GCStrategyList.push_back(std::move(S)); + return GCStrategyList.back().get(); + } + } + + report_fatal_error(std::string("unsupported GC: ") + Name); +} diff --git a/llvm/lib/CodeGen/GCRootLowering.cpp b/llvm/lib/CodeGen/GCRootLowering.cpp index 7cb459874ef..ee89ac4e614 100644 --- a/llvm/lib/CodeGen/GCRootLowering.cpp +++ b/llvm/lib/CodeGen/GCRootLowering.cpp @@ -16,9 +16,9 @@ #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineInstrBuilder.h" #include "llvm/CodeGen/MachineModuleInfo.h" +#include "llvm/CodeGen/GCStrategy.h" #include "llvm/CodeGen/Passes.h" #include "llvm/IR/Dominators.h" -#include "llvm/IR/GCStrategy.h" #include "llvm/IR/IntrinsicInst.h" #include "llvm/IR/Module.h" #include "llvm/Support/Debug.h" diff --git a/llvm/lib/IR/GCStrategy.cpp b/llvm/lib/CodeGen/GCStrategy.cpp index b451310f7f0..554d326942e 100644 --- a/llvm/lib/IR/GCStrategy.cpp +++ b/llvm/lib/CodeGen/GCStrategy.cpp @@ -12,9 +12,7 @@ // //===----------------------------------------------------------------------===// -#include "llvm/IR/GCStrategy.h" - -template class llvm::Registry<llvm::GCStrategy>; +#include "llvm/CodeGen/GCStrategy.h" using namespace llvm; diff --git a/llvm/lib/CodeGen/OcamlGC.cpp b/llvm/lib/CodeGen/OcamlGC.cpp index 164e3700909..17654a6ac3a 100644 --- a/llvm/lib/CodeGen/OcamlGC.cpp +++ b/llvm/lib/CodeGen/OcamlGC.cpp @@ -15,7 +15,7 @@ //===----------------------------------------------------------------------===// #include "llvm/CodeGen/GCs.h" -#include "llvm/IR/GCStrategy.h" +#include "llvm/CodeGen/GCStrategy.h" using namespace llvm; diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp index 8c25783f4ea..699e2bbff6a 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -26,6 +26,7 @@ #include "llvm/CodeGen/FastISel.h" #include "llvm/CodeGen/FunctionLoweringInfo.h" #include "llvm/CodeGen/GCMetadata.h" +#include "llvm/CodeGen/GCStrategy.h" #include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineInstrBuilder.h" @@ -40,7 +41,6 @@ #include "llvm/IR/DebugInfo.h" #include "llvm/IR/DerivedTypes.h" #include "llvm/IR/Function.h" -#include "llvm/IR/GCStrategy.h" #include "llvm/IR/GlobalVariable.h" #include "llvm/IR/InlineAsm.h" #include "llvm/IR/Instructions.h" diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index c56973a44fa..63f3d5eb407 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -11,6 +11,7 @@ // //===----------------------------------------------------------------------===// +#include "llvm/CodeGen/GCStrategy.h" #include "llvm/CodeGen/SelectionDAGISel.h" #include "ScheduleDAGSDNodes.h" #include "SelectionDAGBuilder.h" @@ -35,7 +36,6 @@ #include "llvm/IR/Constants.h" #include "llvm/IR/DebugInfo.h" #include "llvm/IR/Function.h" -#include "llvm/IR/GCStrategy.h" #include "llvm/IR/InlineAsm.h" #include "llvm/IR/Instructions.h" #include "llvm/IR/IntrinsicInst.h" diff --git a/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp index 94f09bdc2f9..d3090a96845 100644 --- a/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp @@ -18,10 +18,10 @@ #include "llvm/ADT/Statistic.h" #include "llvm/CodeGen/GCMetadata.h" #include "llvm/CodeGen/FunctionLoweringInfo.h" +#include "llvm/CodeGen/GCStrategy.h" #include "llvm/CodeGen/SelectionDAG.h" #include "llvm/CodeGen/StackMaps.h" #include "llvm/IR/CallingConv.h" -#include "llvm/IR/GCStrategy.h" #include "llvm/IR/Instructions.h" #include "llvm/IR/IntrinsicInst.h" #include "llvm/IR/Intrinsics.h" diff --git a/llvm/lib/CodeGen/ShadowStackGC.cpp b/llvm/lib/CodeGen/ShadowStackGC.cpp index 163d0efc07a..e4a389195ee 100644 --- a/llvm/lib/CodeGen/ShadowStackGC.cpp +++ b/llvm/lib/CodeGen/ShadowStackGC.cpp @@ -26,9 +26,9 @@ //===----------------------------------------------------------------------===// #include "llvm/CodeGen/GCs.h" +#include "llvm/CodeGen/GCStrategy.h" #include "llvm/ADT/StringExtras.h" #include "llvm/IR/CallSite.h" -#include "llvm/IR/GCStrategy.h" #include "llvm/IR/IRBuilder.h" #include "llvm/IR/IntrinsicInst.h" #include "llvm/IR/Module.h" diff --git a/llvm/lib/CodeGen/StatepointExampleGC.cpp b/llvm/lib/CodeGen/StatepointExampleGC.cpp index 67f40c826fa..95dfd75018c 100644 --- a/llvm/lib/CodeGen/StatepointExampleGC.cpp +++ b/llvm/lib/CodeGen/StatepointExampleGC.cpp @@ -16,7 +16,7 @@ // //===----------------------------------------------------------------------===// -#include "llvm/IR/GCStrategy.h" +#include "llvm/CodeGen/GCStrategy.h" #include "llvm/IR/DerivedTypes.h" #include "llvm/IR/Value.h" diff --git a/llvm/lib/IR/CMakeLists.txt b/llvm/lib/IR/CMakeLists.txt index 621c7ca9224..1a210e05827 100644 --- a/llvm/lib/IR/CMakeLists.txt +++ b/llvm/lib/IR/CMakeLists.txt @@ -17,7 +17,6 @@ add_llvm_library(LLVMCore Dominators.cpp Function.cpp GCOV.cpp - GCStrategy.cpp GVMaterializer.cpp Globals.cpp IRBuilder.cpp diff --git a/llvm/lib/IR/Function.cpp b/llvm/lib/IR/Function.cpp index ddfbaf7a187..070513edef2 100644 --- a/llvm/lib/IR/Function.cpp +++ b/llvm/lib/IR/Function.cpp @@ -386,12 +386,6 @@ void Function::clearGC() { } } -GCStrategy *Function::getGCStrategy() const { - // Lookup the GCStrategy (which is owned by the Context), given the name of - // the GC in question. - return getContext().pImpl->getGCStrategy(getGC()); -} - /// copyAttributesFrom - copy all additional attributes (those not needed to /// create a Function) from the Function Src to this one. void Function::copyAttributesFrom(const GlobalValue *Src) { diff --git a/llvm/lib/IR/LLVMContextImpl.cpp b/llvm/lib/IR/LLVMContextImpl.cpp index 3370bdb0f88..d717b92d9fe 100644 --- a/llvm/lib/IR/LLVMContextImpl.cpp +++ b/llvm/lib/IR/LLVMContextImpl.cpp @@ -15,7 +15,6 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/IR/Attributes.h" #include "llvm/IR/DiagnosticInfo.h" -#include "llvm/IR/GCStrategy.h" #include "llvm/IR/Module.h" #include <algorithm> using namespace llvm; @@ -239,25 +238,3 @@ void GetElementPtrConstantExpr::anchor() { } void CompareConstantExpr::anchor() { } -GCStrategy *LLVMContextImpl::getGCStrategy(const StringRef Name) { - // TODO: Arguably, just doing a linear search would be faster for small N - auto NMI = GCStrategyMap.find(Name); - if (NMI != GCStrategyMap.end()) - return NMI->getValue(); - - for (auto& Entry : GCRegistry::entries()) { - if (Name == Entry.getName()) { - std::unique_ptr<GCStrategy> S = Entry.instantiate(); - S->Name = Name; - GCStrategyMap[Name] = S.get(); - GCStrategyList.push_back(std::move(S)); - return GCStrategyList.back().get(); - } - } - - // No GCStrategy found for that name, error reporting is the job of our - // callers. - return nullptr; -} - - diff --git a/llvm/lib/IR/LLVMContextImpl.h b/llvm/lib/IR/LLVMContextImpl.h index 12b150741dd..e4e9f8f2a45 100644 --- a/llvm/lib/IR/LLVMContextImpl.h +++ b/llvm/lib/IR/LLVMContextImpl.h @@ -457,17 +457,6 @@ public: int getOrAddScopeRecordIdxEntry(MDNode *N, int ExistingIdx); int getOrAddScopeInlinedAtIdxEntry(MDNode *Scope, MDNode *IA,int ExistingIdx); - /// An owning list of all GCStrategies which have been created - SmallVector<std::unique_ptr<GCStrategy>, 1> GCStrategyList; - /// A helper map to speedup lookups into the above list - StringMap<GCStrategy*> GCStrategyMap; - - /// Lookup the GCStrategy object associated with the given gc name. If one - /// can't be found, returns nullptr. The lifetime of the returned objects - /// is dictated by the lifetime of the associated context. No caller should - /// attempt to delete the returned objects. - GCStrategy *getGCStrategy(const StringRef Name); - LLVMContextImpl(LLVMContext &C); ~LLVMContextImpl(); |