[llvm] r176977 - Make LTO codegen use a PassManager, rather than a FunctionPassManager, for the

David Blaikie dblaikie at gmail.com
Wed Mar 13 14:29:19 PDT 2013


On Wed, Mar 13, 2013 at 2:18 PM, Lang Hames <lhames at gmail.com> wrote:
> Author: lhames
> Date: Wed Mar 13 16:18:46 2013
> New Revision: 176977
>
> URL: http://llvm.org/viewvc/llvm-project?rev=176977&view=rev
> Log:
> Make LTO codegen use a PassManager, rather than a FunctionPassManager, for the
> codegen passes. This brings it in to line with clang and llc's codegen setup,
> and tidies up the code.
>
> If I understand correctly, adding ModulePasses to a FunctionPassManager is
> bogus. It only seems to explode if an added ModulePass depends on a
> FunctionPass though, which might be why this code has survived so long.

Worth putting in some asserts (or whatever else) to make this fail faster?

>
> Fixes <rdar://problem/13386816>.
>
>
> Modified:
>     llvm/trunk/tools/lto/LTOCodeGenerator.cpp
>
> Modified: llvm/trunk/tools/lto/LTOCodeGenerator.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/LTOCodeGenerator.cpp?rev=176977&r1=176976&r2=176977&view=diff
> ==============================================================================
> --- llvm/trunk/tools/lto/LTOCodeGenerator.cpp (original)
> +++ llvm/trunk/tools/lto/LTOCodeGenerator.cpp Wed Mar 13 16:18:46 2013
> @@ -390,14 +390,14 @@ bool LTOCodeGenerator::generateObjectFil
>    // Make sure everything is still good.
>    passes.add(createVerifierPass());
>
> -  FunctionPassManager *codeGenPasses = new FunctionPassManager(mergedModule);
> +  PassManager codeGenPasses;
>
> -  codeGenPasses->add(new DataLayout(*_target->getDataLayout()));
> -  _target->addAnalysisPasses(*codeGenPasses);
> +  codeGenPasses.add(new DataLayout(*_target->getDataLayout()));
> +  _target->addAnalysisPasses(codeGenPasses);
>
>    formatted_raw_ostream Out(out);
>
> -  if (_target->addPassesToEmitFile(*codeGenPasses, Out,
> +  if (_target->addPassesToEmitFile(codeGenPasses, Out,
>                                     TargetMachine::CGFT_ObjectFile)) {
>      errMsg = "target file type not supported";
>      return true;
> @@ -407,15 +407,7 @@ bool LTOCodeGenerator::generateObjectFil
>    passes.run(*mergedModule);
>
>    // Run the code generator, and write assembly file
> -  codeGenPasses->doInitialization();
> -
> -  for (Module::iterator
> -         it = mergedModule->begin(), e = mergedModule->end(); it != e; ++it)
> -    if (!it->isDeclaration())
> -      codeGenPasses->run(*it);
> -
> -  codeGenPasses->doFinalization();
> -  delete codeGenPasses;
> +  codeGenPasses.run(*mergedModule);
>
>    return false; // success
>  }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list