当前位置: 首页>>代码示例>>C++>>正文


C++ LTOCodeGenerator::setModule方法代码示例

本文整理汇总了C++中LTOCodeGenerator::setModule方法的典型用法代码示例。如果您正苦于以下问题:C++ LTOCodeGenerator::setModule方法的具体用法?C++ LTOCodeGenerator::setModule怎么用?C++ LTOCodeGenerator::setModule使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在LTOCodeGenerator的用法示例。


在下文中一共展示了LTOCodeGenerator::setModule方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: main

int main(int argc, char **argv) {
  // Print a stack trace if we signal out.
  sys::PrintStackTraceOnErrorSignal();
  PrettyStackTraceProgram X(argc, argv);

  llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
  cl::ParseCommandLineOptions(argc, argv, "llvm LTO linker\n");

  if (OptLevel < '0' || OptLevel > '3') {
    errs() << argv[0] << ": optimization level must be between 0 and 3\n";
    return 1;
  }

  // Initialize the configured targets.
  InitializeAllTargets();
  InitializeAllTargetMCs();
  InitializeAllAsmPrinters();
  InitializeAllAsmParsers();

  // set up the TargetOptions for the machine
  TargetOptions Options = InitTargetOptionsFromCodeGenFlags();

  if (ListSymbolsOnly)
    return listSymbols(argv[0], Options);

  if (ThinLTO)
    return createCombinedFunctionIndex(argv[0]);

  unsigned BaseArg = 0;

  LTOCodeGenerator CodeGen;

  if (UseDiagnosticHandler)
    CodeGen.setDiagnosticHandler(handleDiagnostics, nullptr);

  CodeGen.setCodePICModel(RelocModel);

  CodeGen.setDebugInfo(LTO_DEBUG_MODEL_DWARF);
  CodeGen.setTargetOptions(Options);

  llvm::StringSet<llvm::MallocAllocator> DSOSymbolsSet;
  for (unsigned i = 0; i < DSOSymbols.size(); ++i)
    DSOSymbolsSet.insert(DSOSymbols[i]);

  std::vector<std::string> KeptDSOSyms;

  for (unsigned i = BaseArg; i < InputFilenames.size(); ++i) {
    std::string error;
    std::unique_ptr<LTOModule> Module(
        LTOModule::createFromFile(InputFilenames[i].c_str(), Options, error));
    if (!error.empty()) {
      errs() << argv[0] << ": error loading file '" << InputFilenames[i]
             << "': " << error << "\n";
      return 1;
    }

    unsigned NumSyms = Module->getSymbolCount();
    for (unsigned I = 0; I < NumSyms; ++I) {
      StringRef Name = Module->getSymbolName(I);
      if (!DSOSymbolsSet.count(Name))
        continue;
      lto_symbol_attributes Attrs = Module->getSymbolAttributes(I);
      unsigned Scope = Attrs & LTO_SYMBOL_SCOPE_MASK;
      if (Scope != LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN)
        KeptDSOSyms.push_back(Name);
    }

    // We use the first input module as the destination module when
    // SetMergedModule is true.
    if (SetMergedModule && i == BaseArg) {
      // Transfer ownership to the code generator.
      CodeGen.setModule(std::move(Module));
    } else if (!CodeGen.addModule(Module.get())) {
      // Print a message here so that we know addModule() did not abort.
      errs() << argv[0] << ": error adding file '" << InputFilenames[i] << "'\n";
      return 1;
    }
  }

  // Add all the exported symbols to the table of symbols to preserve.
  for (unsigned i = 0; i < ExportedSymbols.size(); ++i)
    CodeGen.addMustPreserveSymbol(ExportedSymbols[i].c_str());

  // Add all the dso symbols to the table of symbols to expose.
  for (unsigned i = 0; i < KeptDSOSyms.size(); ++i)
    CodeGen.addMustPreserveSymbol(KeptDSOSyms[i].c_str());

  // Set cpu and attrs strings for the default target/subtarget.
  CodeGen.setCpu(MCPU.c_str());

  CodeGen.setOptLevel(OptLevel - '0');

  std::string attrs;
  for (unsigned i = 0; i < MAttrs.size(); ++i) {
    if (i > 0)
      attrs.append(",");
    attrs.append(MAttrs[i]);
  }

  if (!attrs.empty())
//.........这里部分代码省略.........
开发者ID:Nomad280279,项目名称:llvm,代码行数:101,代码来源:llvm-lto.cpp

示例2: main

int main(int argc, char **argv) {
    // Print a stack trace if we signal out.
    sys::PrintStackTraceOnErrorSignal();
    PrettyStackTraceProgram X(argc, argv);

    llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
    cl::ParseCommandLineOptions(argc, argv, "llvm LTO linker\n");

    if (OptLevel < '0' || OptLevel > '3') {
        errs() << argv[0] << ": optimization level must be between 0 and 3\n";
        return 1;
    }

    // Initialize the configured targets.
    InitializeAllTargets();
    InitializeAllTargetMCs();
    InitializeAllAsmPrinters();
    InitializeAllAsmParsers();

    // set up the TargetOptions for the machine
    TargetOptions Options = InitTargetOptionsFromCodeGenFlags();

    if (ListSymbolsOnly)
        return listSymbols(argv[0], Options);

    unsigned BaseArg = 0;

    LTOCodeGenerator CodeGen;

    if (UseDiagnosticHandler)
        CodeGen.setDiagnosticHandler(handleDiagnostics, nullptr);

    switch (RelocModel) {
    case Reloc::Static:
        CodeGen.setCodePICModel(LTO_CODEGEN_PIC_MODEL_STATIC);
        break;
    case Reloc::PIC_:
        CodeGen.setCodePICModel(LTO_CODEGEN_PIC_MODEL_DYNAMIC);
        break;
    case Reloc::DynamicNoPIC:
        CodeGen.setCodePICModel(LTO_CODEGEN_PIC_MODEL_DYNAMIC_NO_PIC);
        break;
    default:
        CodeGen.setCodePICModel(LTO_CODEGEN_PIC_MODEL_DEFAULT);
    }

    CodeGen.setDebugInfo(LTO_DEBUG_MODEL_DWARF);
    CodeGen.setTargetOptions(Options);

    llvm::StringSet<llvm::MallocAllocator> DSOSymbolsSet;
    for (unsigned i = 0; i < DSOSymbols.size(); ++i)
        DSOSymbolsSet.insert(DSOSymbols[i]);

    std::vector<std::string> KeptDSOSyms;

    for (unsigned i = BaseArg; i < InputFilenames.size(); ++i) {
        std::string error;
        std::unique_ptr<LTOModule> Module(
            LTOModule::createFromFile(InputFilenames[i].c_str(), Options, error));
        if (!error.empty()) {
            errs() << argv[0] << ": error loading file '" << InputFilenames[i]
                   << "': " << error << "\n";
            return 1;
        }

        LTOModule *LTOMod = Module.get();

        // We use the first input module as the destination module when
        // SetMergedModule is true.
        if (SetMergedModule && i == BaseArg) {
            // Transfer ownership to the code generator.
            CodeGen.setModule(Module.release());
        } else if (!CodeGen.addModule(Module.get())) {
            // Print a message here so that we know addModule() did not abort.
            errs() << argv[0] << ": error adding file '" << InputFilenames[i] << "'\n";
            return 1;
        }

        unsigned NumSyms = LTOMod->getSymbolCount();
        for (unsigned I = 0; I < NumSyms; ++I) {
            StringRef Name = LTOMod->getSymbolName(I);
            if (!DSOSymbolsSet.count(Name))
                continue;
            lto_symbol_attributes Attrs = LTOMod->getSymbolAttributes(I);
            unsigned Scope = Attrs & LTO_SYMBOL_SCOPE_MASK;
            if (Scope != LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN)
                KeptDSOSyms.push_back(Name);
        }
    }

    // Add all the exported symbols to the table of symbols to preserve.
    for (unsigned i = 0; i < ExportedSymbols.size(); ++i)
        CodeGen.addMustPreserveSymbol(ExportedSymbols[i].c_str());

    // Add all the dso symbols to the table of symbols to expose.
    for (unsigned i = 0; i < KeptDSOSyms.size(); ++i)
        CodeGen.addMustPreserveSymbol(KeptDSOSyms[i].c_str());

    // Set cpu and attrs strings for the default target/subtarget.
    CodeGen.setCpu(MCPU.c_str());
//.........这里部分代码省略.........
开发者ID:cyrilmagsuci,项目名称:freebsd,代码行数:101,代码来源:llvm-lto.cpp


注:本文中的LTOCodeGenerator::setModule方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。