diff --git a/tools/opt/PassRegistry.def b/tools/opt/PassRegistry.def new file mode 100644 index 00000000000..6b507f77555 --- /dev/null +++ b/tools/opt/PassRegistry.def @@ -0,0 +1,30 @@ +//===- PassRegistry.def - Registry of passes --------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file is used as the registry of passes that are part of the core LLVM +// libraries. This file describes both transformation passes and analyses +// Analyses are registered while transformation passes have names registered +// that can be used when providing a textual pass pipeline. +// +//===----------------------------------------------------------------------===// + +// NOTE: NO INCLUDE GUARD DESIRED! + +#ifndef MODULE_PASS +#define MODULE_PASS(NAME, CREATE_PASS) +#endif +MODULE_PASS("print", PrintModulePass(dbgs())) +MODULE_PASS("print-cg", LazyCallGraphPrinterPass(dbgs())) +#undef MODULE_PASS + +#ifndef FUNCTION_PASS +#define FUNCTION_PASS(NAME, CREATE_PASS) +#endif +FUNCTION_PASS("print", PrintFunctionPass(dbgs())) +#undef FUNCTION_PASS diff --git a/tools/opt/Passes.cpp b/tools/opt/Passes.cpp index ffdf9bfec1f..e4791b8ac86 100644 --- a/tools/opt/Passes.cpp +++ b/tools/opt/Passes.cpp @@ -39,19 +39,20 @@ struct NoOpFunctionPass { } // End anonymous namespace. -// FIXME: Factor all of the parsing logic into a .def file that we include -// under different macros. static bool isModulePassName(StringRef Name) { if (Name == "no-op-module") return true; - if (Name == "print") return true; - if (Name == "print-cg") return true; + +#define MODULE_PASS(NAME, CREATE_PASS) if (Name == NAME) return true; +#include "PassRegistry.def" return false; } static bool isFunctionPassName(StringRef Name) { if (Name == "no-op-function") return true; - if (Name == "print") return true; + +#define FUNCTION_PASS(NAME, CREATE_PASS) if (Name == NAME) return true; +#include "PassRegistry.def" return false; } @@ -61,14 +62,14 @@ static bool parseModulePassName(ModulePassManager &MPM, StringRef Name) { MPM.addPass(NoOpModulePass()); return true; } - if (Name == "print") { - MPM.addPass(PrintModulePass(dbgs())); - return true; - } - if (Name == "print-cg") { - MPM.addPass(LazyCallGraphPrinterPass(dbgs())); - return true; + +#define MODULE_PASS(NAME, CREATE_PASS) \ + if (Name == NAME) { \ + MPM.addPass(CREATE_PASS); \ + return true; \ } +#include "PassRegistry.def" + return false; } @@ -77,10 +78,14 @@ static bool parseFunctionPassName(FunctionPassManager &FPM, StringRef Name) { FPM.addPass(NoOpFunctionPass()); return true; } - if (Name == "print") { - FPM.addPass(PrintFunctionPass(dbgs())); - return true; + +#define FUNCTION_PASS(NAME, CREATE_PASS) \ + if (Name == NAME) { \ + FPM.addPass(CREATE_PASS); \ + return true; \ } +#include "PassRegistry.def" + return false; }