<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Apr 6, 2018 at 10:15 AM, Chad Rosier <span dir="ltr"><<a href="mailto:mcrosier@codeaurora.org" target="_blank">mcrosier@codeaurora.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF">
<p>Hi Peter,<br>
</p><span class="">
On 4/6/2018 12:25 PM, Peter Collingbourne wrote:<br>
<blockquote type="cite">
<div dir="auto">
<div>Unfortunately reverting would regress the user that
requested this patch. They use -plugin-opt=O0 and expect
performance consistent with setting cg opt level to default.</div>
</div>
</blockquote>
<br></span>
Using -O0 with LTO seems like a very odd/uncommon use case.</div></blockquote><div><br></div><div>It can be used to get program transformations that rely on whole-program information (such as <a href="https://clang.llvm.org/docs/ControlFlowIntegrity.html">control flow integrity</a>) without requesting cross-module optimizations. This is important for users who want CFI but do not want to pay the link time or code size cost of cross-module optimizations.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div text="#000000" bgcolor="#FFFFFF">Can the
user use '-mllvm -cg-opt-level=2' as an alternative solution to
override the codegen optimization level used during LTO?</div></blockquote><div><br></div><div>This flag is not present in the gold plugin, only in llvm-lto2.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div text="#000000" bgcolor="#FFFFFF"><span class=""><br>
<br>
<blockquote type="cite">
<div dir="auto">
<div>
<div dir="auto"><br>
</div>
<div dir="auto">Instead of reverting can we make a change that
just sets the cg opt level to aggressive if -plugin-opt=O3
is passed?</div>
</div>
</div>
</blockquote>
<br></span>
I'd prefer not. IMO, this would just further muddy the water. The
'-mllvm -cg-opt-level=2' suggestion seems like a much less intrusive
fix/workaround.</div></blockquote><div><br></div><div>Adding the flag would be going in the wrong direction IMHO. What we should be working towards is removing the LTO configuration option entirely. We can do that by moving the default/aggressive selection into the LTO API implementation so that the behaviour is consistent between linkers. Then once the attribute is ready we can remove that code.</div><div><br></div><div>Peter </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div text="#000000" bgcolor="#FFFFFF"><div><div class="h5"><br>
<br>
<blockquote type="cite">
<div dir="auto">
<div>
<div dir="auto"><br>
</div>
<div dir="auto">Peter</div>
<br>
<br>
<div class="gmail_quote">
<div dir="ltr">On Fri, Apr 6, 2018, 09:18 Chad Rosier <<a href="mailto:mcrosier@codeaurora.org" target="_blank">mcrosier@codeaurora.org</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Thanks,
Rafael. Sound reasonable to you, Peter?<br>
<br>
<br>
On 4/6/2018 12:12 PM, Rafael Avila de Espindola wrote:<br>
> I am OK with reverting it until we have a better
framework in place.<br>
><br>
> Cheers,<br>
> Rafael<br>
><br>
> Chad Rosier via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" rel="noreferrer" target="_blank">llvm-commits@lists.llvm.org</a>>
writes:<br>
><br>
>> Peter/Rafael,<br>
>><br>
>> Over the past few days I've been investigating
several regressions with<br>
>> our weekly LTO configuration. As a result, I
identified that the<br>
>> following regressions were due to this commit:<br>
>><br>
>> SPEC2006/h264ref: -2.68%<br>
>> SPEC2006/libquantum: -4.36%<br>
>> SPEC2006/perlbench: -2.67%<br>
>> SPEC2017/mcf: -4.47%<br>
>> SPEC2017/perlbench: -3.82%<br>
>><br>
>> I did not test SPEC2000, SPEC2006fp, or
SPEC2017fp, but I'm seeing<br>
>> similar small regressions in our weekly runs
there as well (i.e., the<br>
>> above is just what I was able to test last night,
but isn't likely the<br>
>> only regressions). I'd like to kindly request
that this change be<br>
>> reverted until something is in place to properly
propagate the codegen<br>
>> optimization level.<br>
>><br>
>> Chad<br>
>><br>
>><br>
>> On 2/7/2018 9:41 PM, Peter Collingbourne via
llvm-commits wrote:<br>
>>> Author: pcc<br>
>>> Date: Wed Feb 7 18:41:22 2018<br>
>>> New Revision: 324557<br>
>>><br>
>>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=324557&view=rev" rel="noreferrer noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=324557&view=rev</a><br>
>>> Log:<br>
>>> gold-plugin: Do not set codegen opt level
based on LTO opt level.<br>
>>><br>
>>> The LTO opt level should not affect the
codegen opt level, and indeed<br>
>>> it does not affect it in lld. Ideally the
codegen opt level should<br>
>>> be controlled by an IR-level attribute based
on the compile-time opt<br>
>>> level, but that hasn't been implemented yet.<br>
>>><br>
>>> Differential Revision: <a href="https://reviews.llvm.org/D43040" rel="noreferrer
noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D43040</a><br>
>>><br>
>>> Modified:<br>
>>> llvm/trunk/tools/gold/gold-<wbr>plugin.cpp<br>
>>><br>
>>> Modified:
llvm/trunk/tools/gold/gold-<wbr>plugin.cpp<br>
>>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/gold/gold-plugin.cpp?rev=324557&r1=324556&r2=324557&view=diff" rel="noreferrer noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/tools/gold/<wbr>gold-plugin.cpp?rev=324557&r1=<wbr>324556&r2=324557&view=diff</a><br>
>>>
==============================<wbr>==============================<wbr>==================<br>
>>> --- llvm/trunk/tools/gold/gold-<wbr>plugin.cpp
(original)<br>
>>> +++ llvm/trunk/tools/gold/gold-<wbr>plugin.cpp Wed
Feb 7 18:41:22 2018<br>
>>> @@ -727,20 +727,6 @@ static int
getOutputFileName(StringRef I<br>
>>> return FD;<br>
>>> }<br>
>>><br>
>>> -static CodeGenOpt::Level getCGOptLevel() {<br>
>>> - switch (options::OptLevel) {<br>
>>> - case 0:<br>
>>> - return CodeGenOpt::None;<br>
>>> - case 1:<br>
>>> - return CodeGenOpt::Less;<br>
>>> - case 2:<br>
>>> - return CodeGenOpt::Default;<br>
>>> - case 3:<br>
>>> - return CodeGenOpt::Aggressive;<br>
>>> - }<br>
>>> - llvm_unreachable("Invalid optimization
level");<br>
>>> -}<br>
>>> -<br>
>>> /// Parse the thinlto_prefix_replace
option into the \p OldPrefix and<br>
>>> /// \p NewPrefix strings, if it was
specified.<br>
>>> static void
getThinLTOOldAndNewPrefix(std:<wbr>:string &OldPrefix,<br>
>>> @@ -767,7 +753,6 @@ static
std::unique_ptr<LTO> createLTO(In<br>
>>><br>
>>> Conf.MAttrs = MAttrs;<br>
>>> Conf.RelocModel = RelocationModel;<br>
>>> - Conf.CGOptLevel = getCGOptLevel();<br>
>>> Conf.DisableVerify =
options::DisableVerify;<br>
>>> Conf.OptLevel = options::OptLevel;<br>
>>> if (options::Parallelism)<br>
>>><br>
>>><br>
>>>
______________________________<wbr>_________________<br>
>>> llvm-commits mailing list<br>
>>> <a href="mailto:llvm-commits@lists.llvm.org" rel="noreferrer" target="_blank">llvm-commits@lists.llvm.org</a><br>
>>> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
>> ______________________________<wbr>_________________<br>
>> llvm-commits mailing list<br>
>> <a href="mailto:llvm-commits@lists.llvm.org" rel="noreferrer" target="_blank">llvm-commits@lists.llvm.org</a><br>
>> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
<br>
</blockquote>
</div>
</div>
</div>
</blockquote>
<br>
</div></div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">-- <div>Peter</div></div></div>
</div></div>