r239481 - Pass down the -flto option to the -cc1 job, and from there into the

Nico Weber thakis at chromium.org
Thu Jun 11 18:07:21 PDT 2015


Hi Teresa,

this (well, 239480 really) seems to break building dynamic libraries pretty
decisively: https://code.google.com/p/chromium/issues/detail?id=499508#c3
Can you take a look, and if it takes a while to investigate, revert this
for now?

Thanks,
Nico

On Wed, Jun 10, 2015 at 10:49 AM, Teresa Johnson <tejohnson at google.com>
wrote:

> Author: tejohnson
> Date: Wed Jun 10 12:49:45 2015
> New Revision: 239481
>
> URL: http://llvm.org/viewvc/llvm-project?rev=239481&view=rev
> Log:
> Pass down the -flto option to the -cc1 job, and from there into the
> CodeGenOptions and onto the PassManagerBuilder. This enables gating
> the new EliminateAvailableExternally module pass on whether we are
> preparing for LTO.
>
> If we are preparing for LTO (e.g. a -flto -c compile), the new pass is not
> included as we want to preserve available externally functions for possible
> link time inlining.
>
> Modified:
>     cfe/trunk/include/clang/Driver/Options.td
>     cfe/trunk/include/clang/Frontend/CodeGenOptions.def
>     cfe/trunk/lib/CodeGen/BackendUtil.cpp
>     cfe/trunk/lib/Driver/Tools.cpp
>     cfe/trunk/lib/Frontend/CompilerInvocation.cpp
>     cfe/trunk/test/CodeGen/available-externally-suppress.c
>
> Modified: cfe/trunk/include/clang/Driver/Options.td
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=239481&r1=239480&r2=239481&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/Driver/Options.td (original)
> +++ cfe/trunk/include/clang/Driver/Options.td Wed Jun 10 12:49:45 2015
> @@ -636,7 +636,7 @@ def flat__namespace : Flag<["-"], "flat_
>  def flax_vector_conversions : Flag<["-"], "flax-vector-conversions">,
> Group<f_Group>;
>  def flimited_precision_EQ : Joined<["-"], "flimited-precision=">,
> Group<f_Group>;
>  def flto_EQ : Joined<["-"], "flto=">,
> Group<clang_ignored_gcc_optimization_f_Group>;
> -def flto : Flag<["-"], "flto">, Group<f_Group>;
> +def flto : Flag<["-"], "flto">, Flags<[CC1Option]>, Group<f_Group>;
>  def fno_lto : Flag<["-"], "fno-lto">, Group<f_Group>;
>  def fmacro_backtrace_limit_EQ : Joined<["-"], "fmacro-backtrace-limit=">,
>                                  Group<f_Group>, Flags<[DriverOption,
> CoreOption]>;
>
> Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.def
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.def?rev=239481&r1=239480&r2=239481&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/Frontend/CodeGenOptions.def (original)
> +++ cfe/trunk/include/clang/Frontend/CodeGenOptions.def Wed Jun 10
> 12:49:45 2015
> @@ -67,6 +67,8 @@ CODEGENOPT(InstrumentFunctions , 1, 0) /
>  CODEGENOPT(InstrumentForProfiling , 1, 0) ///< Set when -pg is enabled.
>  CODEGENOPT(LessPreciseFPMAD  , 1, 0) ///< Enable less precise MAD
> instructions to
>                                       ///< be generated.
> +CODEGENOPT(PrepareForLTO     , 1, 0) ///< Set when -flto is enabled on the
> +                                     ///< compile step.
>  CODEGENOPT(MergeAllConstants , 1, 1) ///< Merge identical constants.
>  CODEGENOPT(MergeFunctions    , 1, 0) ///< Set when -fmerge-functions is
> enabled.
>  CODEGENOPT(MSVolatile        , 1, 0) ///< Set when /volatile:ms is
> enabled.
>
> Modified: cfe/trunk/lib/CodeGen/BackendUtil.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/BackendUtil.cpp?rev=239481&r1=239480&r2=239481&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/BackendUtil.cpp (original)
> +++ cfe/trunk/lib/CodeGen/BackendUtil.cpp Wed Jun 10 12:49:45 2015
> @@ -286,6 +286,7 @@ void EmitAssemblyHelper::CreatePasses()
>    PMBuilder.DisableUnitAtATime = !CodeGenOpts.UnitAtATime;
>    PMBuilder.DisableUnrollLoops = !CodeGenOpts.UnrollLoops;
>    PMBuilder.MergeFunctions = CodeGenOpts.MergeFunctions;
> +  PMBuilder.PrepareForLTO = CodeGenOpts.PrepareForLTO;
>    PMBuilder.RerollLoops = CodeGenOpts.RerollLoops;
>
>    PMBuilder.addExtension(PassManagerBuilder::EP_EarlyAsPossible,
>
> Modified: cfe/trunk/lib/Driver/Tools.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=239481&r1=239480&r2=239481&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Driver/Tools.cpp (original)
> +++ cfe/trunk/lib/Driver/Tools.cpp Wed Jun 10 12:49:45 2015
> @@ -2703,6 +2703,10 @@ void Clang::ConstructJob(Compilation &C,
>      assert((isa<CompileJobAction>(JA) || isa<BackendJobAction>(JA)) &&
>             "Invalid action for clang tool.");
>
> +    if (JA.getType() == types::TY_LTO_IR ||
> +        JA.getType() == types::TY_LTO_BC) {
> +      CmdArgs.push_back("-flto");
> +    }
>      if (JA.getType() == types::TY_Nothing) {
>        CmdArgs.push_back("-fsyntax-only");
>      } else if (JA.getType() == types::TY_LLVM_IR ||
>
> Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=239481&r1=239480&r2=239481&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
> +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Wed Jun 10 12:49:45 2015
> @@ -485,6 +485,8 @@ static bool ParseCodeGenArgs(CodeGenOpti
>
>    Opts.MergeFunctions = Args.hasArg(OPT_fmerge_functions);
>
> +  Opts.PrepareForLTO = Args.hasArg(OPT_flto);
> +
>    Opts.MSVolatile = Args.hasArg(OPT_fms_volatile);
>
>    Opts.VectorizeBB = Args.hasArg(OPT_vectorize_slp_aggressive);
>
> Modified: cfe/trunk/test/CodeGen/available-externally-suppress.c
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/available-externally-suppress.c?rev=239481&r1=239480&r2=239481&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/CodeGen/available-externally-suppress.c (original)
> +++ cfe/trunk/test/CodeGen/available-externally-suppress.c Wed Jun 10
> 12:49:45 2015
> @@ -1,12 +1,18 @@
>  // RUN: %clang_cc1 -emit-llvm -o - -triple x86_64-apple-darwin10 %s |
> FileCheck %s
> +// RUN: %clang_cc1 -O2 -fno-inline -emit-llvm -o - -triple
> x86_64-apple-darwin10 %s | FileCheck %s
> +// RUN: %clang_cc1 -flto -O2 -fno-inline -emit-llvm -o - -triple
> x86_64-apple-darwin10 %s | FileCheck %s -check-prefix=LTO
>
>  // Ensure that we don't emit available_externally functions at -O0.
> +// Also should not emit them at -O2, unless -flto is present in which case
> +// we should preserve them for link-time inlining decisions.
>  int x;
>
>  inline void f0(int y) { x = y; }
>
>  // CHECK-LABEL: define void @test()
>  // CHECK: declare void @f0(i32)
> +// LTO-LABEL: define void @test()
> +// LTO: define available_externally void @f0
>  void test() {
>    f0(17);
>  }
> @@ -19,9 +25,13 @@ inline int __attribute__((always_inline)
>  }
>
>  // CHECK: @test1
> +// LTO: @test1
>  int test1(int x) {
>    // CHECK: br i1
>    // CHECK-NOT: call {{.*}} @f1
>    // CHECK: ret i32
> +  // LTO: br i1
> +  // LTO-NOT: call {{.*}} @f1
> +  // LTO: ret i32
>    return f1(x);
>  }
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150611/548da0e3/attachment.html>


More information about the cfe-commits mailing list