From: Adam Nemet Date: Fri, 18 Nov 2016 18:17:36 +0000 (+0000) Subject: LTO support for -fsave-optimization-record on Darwin X-Git-Tag: llvmorg-4.0.0-rc1~4177 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e4b9fd985214456ac9597567868da124d0b8d85d;p=platform%2Fupstream%2Fllvm.git LTO support for -fsave-optimization-record on Darwin I guess this would have to be added for each linker. Differential Revision: https://reviews.llvm.org/D26833 llvm-svn: 287358 --- diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index f5295f3..8fc34ab 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -8416,6 +8416,19 @@ void darwin::Linker::ConstructJob(Compilation &C, const JobAction &JA, // we follow suite for ease of comparison. AddLinkArgs(C, Args, CmdArgs, Inputs); + // For LTO, pass the name of the optimization record file. + if (Args.hasFlag(options::OPT_fsave_optimization_record, + options::OPT_fno_save_optimization_record, false)) { + CmdArgs.push_back("-mllvm"); + CmdArgs.push_back("-pass-remarks-output"); + CmdArgs.push_back("-mllvm"); + + SmallString<128> F; + F = Output.getFilename(); + F += ".opt.yaml"; + CmdArgs.push_back(Args.MakeArgString(F)); + } + // It seems that the 'e' option is completely ignored for dynamic executables // (the default), and with static executables, the last one wins, as expected. Args.AddAllArgs(CmdArgs, {options::OPT_d_Flag, options::OPT_s, options::OPT_t, diff --git a/clang/test/Driver/darwin-ld.c b/clang/test/Driver/darwin-ld.c index a7681fa..764081c 100644 --- a/clang/test/Driver/darwin-ld.c +++ b/clang/test/Driver/darwin-ld.c @@ -327,3 +327,12 @@ // LINK_VERSION_DIGITS: invalid version number in '-mlinker-version=133.3.0.1.2.6' // LINK_VERSION_DIGITS: invalid version number in '-mlinker-version=133.3.0.1.a' // LINK_VERSION_DIGITS: invalid version number in '-mlinker-version=133.3.0.1a' + +// Check that we're passing -pass-remarks-output for LTO +// RUN: %clang -target x86_64-apple-darwin12 %t.o -fsave-optimization-record -### -o foo/bar.out 2> %t.log +// RUN: FileCheck -check-prefix=PASS_REMARKS_OUTPUT %s < %t.log +// PASS_REMARKS_OUTPUT: "-mllvm" "-pass-remarks-output" "-mllvm" "foo/bar.out.opt.yaml" + +// RUN: %clang -target x86_64-apple-darwin12 %t.o -fsave-optimization-record -### 2> %t.log +// RUN: FileCheck -check-prefix=PASS_REMARKS_OUTPUT_NO_O %s < %t.log +// PASS_REMARKS_OUTPUT_NO_O: "-mllvm" "-pass-remarks-output" "-mllvm" "a.out.opt.yaml"