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 <[email protected]> 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 > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
