Exemplo n.º 1
0
static llvm::Module* linkFilesToModule(llvm::cl::list<std::string>& Inputs,
                                       llvm::LLVMContext& Ctx) {
  std::string ErrMsg;
  llvm::Module* M = getModuleFromFilename(Inputs[0], Ctx, ErrMsg);
  llvm::Linker Linker("llvm-ndk-link", M);

  for (unsigned i=1; i<Inputs.size(); ++i) {
    llvm::Module* M = getModuleFromFilename(Inputs[i], Ctx, ErrMsg);
    if (!Linker.LinkInModule(M, &ErrMsg)) {
      assert(false && ErrMsg);
    }
    optimizeModule(M);
  }
  M = Linker.releaseModule();

  llvm::PassManager PM;
  const std::string &ModuleDataLayout = M->getDataLayout();
  if (!ModuleDataLayout.empty())
    if (llvm::TargetData *TD = new llvm::TargetData(ModuleDataLayout))
      PM.add(TD);

#if 0
  FIXME REMOVE
  llvm::createStandardFunctionPasses(&PM, 3 /* OptLevel*/);
  llvm::createStandardModulePasses(&PM,
                                   3, /* OptimizationLevel */
                                   true, /* OptimizeSize */
                                   true, /* UnitAtATime */
                                   true, /* UnrollLoops */
                                   true, /* SimplifyLibCalls */
                                   false, /* HaveExceptions */
                                   NULL /* InliningPass */);
#endif

  llvm::PassManagerBuilder PMBuilder;
  //PMBuilder.OptLevel = 3;
  //PMBuilder.populateFunctionPassManager(PM);

  PMBuilder.OptLevel = 3;
  PMBuilder.SizeLevel = true;
  PMBuilder.DisableUnitAtATime = false;
  PMBuilder.DisableUnrollLoops = false;
  PMBuilder.DisableSimplifyLibCalls = false;
  PMBuilder.populateModulePassManager(PM);

  PM.run(*M);
  return M;
}
Exemplo n.º 2
0
bool linkDwarf(StringRef OutputFilename, const DebugMap &DM, bool Verbose) {
  DwarfLinker Linker(OutputFilename, Verbose);
  return Linker.link(DM);
}