9 #include <unordered_map>
10 #include <llvm/Support/ErrorHandling.h>
11 #include "core/pass.h"
12 #include "core/pass_manager.h"
29 auto it = registry_.emplace(T::kPassID,
nullptr);
31 llvm::report_fatal_error(
"Pass already registered");
33 it.first->second = std::make_unique<Registrar<T>>();
38 auto it = registry_.find(name);
39 if (it == registry_.end()) {
40 llvm::report_fatal_error(
"Pass not found: '" + name +
"'");
42 it->second->Add(mngr);
46 struct RegistrarBase {
47 virtual ~RegistrarBase();
53 struct Registrar :
public RegistrarBase {
60 std::unordered_map<std::string, std::unique_ptr<RegistrarBase>> registry_;