diff options
Diffstat (limited to 'lib/CodeGen/BackendUtil.cpp')
| -rw-r--r-- | lib/CodeGen/BackendUtil.cpp | 15 | 
1 files changed, 8 insertions, 7 deletions
diff --git a/lib/CodeGen/BackendUtil.cpp b/lib/CodeGen/BackendUtil.cpp index 855d6795b9d6c..20059d922f90b 100644 --- a/lib/CodeGen/BackendUtil.cpp +++ b/lib/CodeGen/BackendUtil.cpp @@ -83,9 +83,6 @@ class EmitAssemblyHelper {      return TargetIRAnalysis();    } -  /// Set LLVM command line options passed through -backend-option. -  void setCommandLineOpts(); -    void CreatePasses(legacy::PassManager &MPM, legacy::FunctionPassManager &FPM);    /// Generates the TargetMachine. @@ -372,7 +369,9 @@ static void initTargetOptions(llvm::TargetOptions &Options,    // Set FP fusion mode.    switch (LangOpts.getDefaultFPContractMode()) {    case LangOptions::FPC_Off: -    Options.AllowFPOpFusion = llvm::FPOpFusion::Strict; +    // Preserve any contraction performed by the front-end.  (Strict performs +    // splitting of the muladd instrinsic in the backend.) +    Options.AllowFPOpFusion = llvm::FPOpFusion::Standard;      break;    case LangOptions::FPC_On:      Options.AllowFPOpFusion = llvm::FPOpFusion::Standard; @@ -604,7 +603,7 @@ void EmitAssemblyHelper::CreatePasses(legacy::PassManager &MPM,    PMBuilder.populateModulePassManager(MPM);  } -void EmitAssemblyHelper::setCommandLineOpts() { +static void setCommandLineOpts(const CodeGenOptions &CodeGenOpts) {    SmallVector<const char *, 16> BackendArgs;    BackendArgs.push_back("clang"); // Fake program name.    if (!CodeGenOpts.DebugPass.empty()) { @@ -677,7 +676,7 @@ void EmitAssemblyHelper::EmitAssembly(BackendAction Action,                                        std::unique_ptr<raw_pwrite_stream> OS) {    TimeRegion Region(llvm::TimePassesIsEnabled ? &CodeGenerationTime : nullptr); -  setCommandLineOpts(); +  setCommandLineOpts(CodeGenOpts);    bool UsesCodeGen = (Action != Backend_EmitNothing &&                        Action != Backend_EmitBC && @@ -806,7 +805,7 @@ static PassBuilder::OptimizationLevel mapToLevel(const CodeGenOptions &Opts) {  void EmitAssemblyHelper::EmitAssemblyWithNewPassManager(      BackendAction Action, std::unique_ptr<raw_pwrite_stream> OS) {    TimeRegion Region(llvm::TimePassesIsEnabled ? &CodeGenerationTime : nullptr); -  setCommandLineOpts(); +  setCommandLineOpts(CodeGenOpts);    // The new pass manager always makes a target machine available to passes    // during construction. @@ -944,6 +943,8 @@ static void runThinLTOBackend(ModuleSummaryIndex *CombinedIndex, Module *M,        ModuleToDefinedGVSummaries;    CombinedIndex->collectDefinedGVSummariesPerModule(ModuleToDefinedGVSummaries); +  setCommandLineOpts(CGOpts); +    // We can simply import the values mentioned in the combined index, since    // we should only invoke this using the individual indexes written out    // via a WriteIndexesThinBackend.  | 
