diff options
author | Matthias Braun <matze@braunis.de> | 2016-07-16 02:24:15 +0000 |
---|---|---|
committer | Matthias Braun <matze@braunis.de> | 2016-07-16 02:24:15 +0000 |
commit | c0d2a617f7654c1842f121ebad6345bbea8e121a (patch) | |
tree | d6aa1ef8d693bd47a6453ea253be2a027dfe004a /llvm | |
parent | c92a5fc9f6dad6a234a87fc303dc188e73850a8a (diff) | |
download | bcm5719-llvm-c0d2a617f7654c1842f121ebad6345bbea8e121a.tar.gz bcm5719-llvm-c0d2a617f7654c1842f121ebad6345bbea8e121a.zip |
llc: Move pass query/add code into an own function; NFC
llvm-svn: 275663
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/tools/llc/llc.cpp | 53 |
1 files changed, 30 insertions, 23 deletions
diff --git a/llvm/tools/llc/llc.cpp b/llvm/tools/llc/llc.cpp index f30dbd2a1c4..5fd10fd56bc 100644 --- a/llvm/tools/llc/llc.cpp +++ b/llvm/tools/llc/llc.cpp @@ -267,6 +267,31 @@ int main(int argc, char **argv) { return 0; } +static bool addPass(PassManagerBase &PM, const char *argv0, + StringRef PassName, TargetPassConfig &TPC) { + const PassRegistry *PR = PassRegistry::getPassRegistry(); + const PassInfo *PI = PR->getPassInfo(PassName); + if (!PI) { + errs() << argv0 << ": run-pass " << PassName << " is not registered.\n"; + return true; + } + + Pass *P; + if (PI->getTargetMachineCtor()) + P = PI->getTargetMachineCtor()(&TPC.getTM<TargetMachine>()); + else if (PI->getNormalCtor()) + P = PI->getNormalCtor()(); + else { + errs() << argv0 << ": cannot create pass: " << PI->getPassName() << "\n"; + return true; + } + std::string Banner = std::string("After ") + std::string(P->getPassName()); + PM.add(P); + TPC.printAndVerify(Banner); + + return false; +} + static int compileModule(char **argv, LLVMContext &Context) { // Load the module to be compiled... SMDiagnostic Err; @@ -412,33 +437,15 @@ static int compileModule(char **argv, LLVMContext &Context) { return 1; } LLVMTargetMachine &LLVMTM = static_cast<LLVMTargetMachine&>(*Target); - TargetPassConfig *TPC = LLVMTM.createPassConfig(PM); - PM.add(TPC); + TargetPassConfig &TPC = *LLVMTM.createPassConfig(PM); + PM.add(&TPC); LLVMTM.addMachineModuleInfo(PM); LLVMTM.addMachineFunctionAnalysis(PM, MIR.get()); - TPC->printAndVerify(""); + TPC.printAndVerify(""); - for (std::string &RunPassName : *RunPassNames) { - const PassInfo *PI = PR->getPassInfo(RunPassName); - if (!PI) { - errs() << argv[0] << ": run-pass " << RunPassName << " is not registered.\n"; + for (const std::string &RunPassName : *RunPassNames) { + if (addPass(PM, argv[0], RunPassName, TPC)) return 1; - } - - Pass *P; - if (PI->getTargetMachineCtor()) - P = PI->getTargetMachineCtor()(Target.get()); - else if (PI->getNormalCtor()) - P = PI->getNormalCtor()(); - else { - errs() << argv[0] << ": cannot create pass: " - << PI->getPassName() << "\n"; - return 1; - } - std::string Banner - = std::string("After ") + std::string(P->getPassName()); - PM.add(P); - TPC->printAndVerify(Banner); } PM.add(createPrintMIRPass(*OS)); } else { |