[PATCH] D100559: [GC][NFC] Make getGCStrategy by name available in IR
Max Kazantsev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 15 23:07:32 PDT 2021
mkazantsev updated this revision to Diff 337995.
mkazantsev retitled this revision from "[GC][NFC] Make getGCStrategy by name available in Analysis" to "[GC][NFC] Make getGCStrategy by name available in IR".
Herald added a subscriber: dexonsmith.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D100559/new/
https://reviews.llvm.org/D100559
Files:
llvm/include/llvm/IR/GCStrategy.h
llvm/lib/CodeGen/GCMetadata.cpp
llvm/lib/IR/GCStrategy.cpp
Index: llvm/lib/IR/GCStrategy.cpp
===================================================================
--- llvm/lib/IR/GCStrategy.cpp
+++ llvm/lib/IR/GCStrategy.cpp
@@ -18,3 +18,21 @@
LLVM_INSTANTIATE_REGISTRY(GCRegistry)
GCStrategy::GCStrategy() = default;
+
+std::unique_ptr<GCStrategy> llvm::getGCStrategy(const StringRef Name) {
+ for (auto &S : GCRegistry::entries())
+ if (S.getName() == Name)
+ return S.instantiate();
+
+ if (GCRegistry::begin() == GCRegistry::end()) {
+ // In normal operation, the registry should not be empty. There should
+ // be the builtin GCs if nothing else. The most likely scenario here is
+ // that we got here without running the initializers used by the Registry
+ // itself and it's registration mechanism.
+ const std::string error =
+ std::string("unsupported GC: ") + Name.str() +
+ " (did you remember to link and initialize the library?)";
+ report_fatal_error(error);
+ } else
+ report_fatal_error(std::string("unsupported GC: ") + Name.str());
+}
Index: llvm/lib/CodeGen/GCMetadata.cpp
===================================================================
--- llvm/lib/CodeGen/GCMetadata.cpp
+++ llvm/lib/CodeGen/GCMetadata.cpp
@@ -145,24 +145,9 @@
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 = std::string(Name);
- GCStrategyMap[Name] = S.get();
- GCStrategyList.push_back(std::move(S));
- return GCStrategyList.back().get();
- }
- }
-
- if (GCRegistry::begin() == GCRegistry::end()) {
- // In normal operation, the registry should not be empty. There should
- // be the builtin GCs if nothing else. The most likely scenario here is
- // that we got here without running the initializers used by the Registry
- // itself and it's registration mechanism.
- const std::string error = ("unsupported GC: " + Name).str() +
- " (did you remember to link and initialize the CodeGen library?)";
- report_fatal_error(error);
- } else
- report_fatal_error(std::string("unsupported GC: ") + Name);
+ std::unique_ptr<GCStrategy> S = llvm::getGCStrategy(Name);
+ S->Name = std::string(Name);
+ GCStrategyMap[Name] = S.get();
+ GCStrategyList.push_back(std::move(S));
+ return GCStrategyList.back().get();
}
Index: llvm/include/llvm/IR/GCStrategy.h
===================================================================
--- llvm/include/llvm/IR/GCStrategy.h
+++ llvm/include/llvm/IR/GCStrategy.h
@@ -131,6 +131,9 @@
/// GCMetadataPrinterRegistery as well.
using GCRegistry = Registry<GCStrategy>;
+/// Lookup the GCStrategy object associated with the given gc name.
+std::unique_ptr<GCStrategy> getGCStrategy(const StringRef Name);
+
} // end namespace llvm
#endif // LLVM_IR_GCSTRATEGY_H
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D100559.337995.patch
Type: text/x-patch
Size: 2911 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210416/12a555c5/attachment.bin>
More information about the llvm-commits
mailing list