<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<style>
<!--
@font-face
        {font-family:Calibri}
@font-face
        {font-family:Tahoma}
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif"}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline}
a:visited, span.MsoHyperlinkFollowed
        {color:purple;
        text-decoration:underline}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif"}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif"}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif"}
span.PlainTextChar
        {font-family:"Calibri","sans-serif"}
span.BalloonTextChar
        {font-family:"Tahoma","sans-serif"}
span.EmailStyle21
        {font-family:"Calibri","sans-serif";
        color:#1F497D}
span.EmailStyle22
        {font-family:"Calibri","sans-serif";
        color:windowtext}
span.EmailStyle23
        {font-family:"Calibri","sans-serif";
        color:#1F497D}
.MsoChpDefault
        {font-size:10.0pt}
@page WordSection1
        {margin:1.0in 129.75pt 1.0in 129.7pt}
-->
</style><style id="owaParaStyle" type="text/css">P {margin-top:0;margin-bottom:0;}</style>
</head>
<body ocsi="0" fpstyle="1" lang="EN-US" link="blue" vlink="purple">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">Thanks for the explanation. With all that complexity I can see why it's unreasonable to promise that they're the same thing.<br>
<div style="font-family: Times New Roman; color: #000000; font-size: 16px">
<hr tabindex="-1">
<div style="direction: ltr;" id="divRpF438169"><font face="Tahoma" color="#000000" size="2"><b>From:</b> Robinson, Paul [Paul_Robinson@playstation.sony.com]<br>
<b>Sent:</b> 19 November 2015 15:30<br>
<b>To:</b> Daniel Sanders; llvm-dev@lists.llvm.org<br>
<b>Subject:</b> RE: Mips unconditionally uses fast-isel?<br>
</font><br>
</div>
<div></div>
<div>
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-GB">> > Well, 'optnone' is already not identical to –O0, and given the nature of things, probably can't be</span></p>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<p class="MsoNormal"><span lang="EN-GB">> It's not important to the topic but I'm curious about this since, in instruction selection at least, they both set SelectionDAGISel::OptLevel to CodeGenOpt::None and MCCodeGenInfo::OptLevel by one means or another.
 Could you point me at a difference between the two? I assume it's outside of instruction selection.</span></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span></p>
<p class="MsoNormal"><span style="color:#1F497D">Without actually doing the research…  There are interactions between DAG construction, DAG Combine in particular, possibly CodeGenPrepare, and ISel, which I don't really understand. We tried to turn off all of
 DAG Combine, IIRC, but that totally didn't work, so instead we turn off individual bits and pieces.</span></p>
<p class="MsoNormal"><span style="color:#1F497D">We made a distinct effort to find all the IR and MachineFunction passes that don't run at O0 and turn them off individually (Chandler was particularly insistent that the pass manager should not be aware of 'optnone')
 and it's always possible that we missed some; those cases should be properly considered bugs.  And of course new passes get added from time to time, and typically people don't think about 'optnone' when they're doing that… again those are properly speaking
 bugs.</span></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span></p>
<p class="MsoNormal"><span style="color:#1F497D">Regarding the "circuit-breaker" analogy, 'optnone' itself is a kind of user-visible circuit breaker, and making it not break the entire circuit could be considered a little strange.  But as I said, it does seem
 like a useful debugging tactic for 'optnone' itself.</span></p>
<p class="MsoNormal"><span style="color:#1F497D">--paulr</span></p>
<p class="MsoNormal"><a name="_MailEndCompose"><span style="color:#1F497D"> </span></a></p>
<div style="border:none; border-left:solid blue 1.5pt; padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none; border-top:solid #B5C4DF 1.0pt; padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt; font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt; font-family:"Tahoma","sans-serif""> Daniel Sanders [mailto:Daniel.Sanders@imgtec.com]
<br>
<b>Sent:</b> Thursday, November 19, 2015 3:45 AM<br>
<b>To:</b> Robinson, Paul; llvm-dev@lists.llvm.org<br>
<b>Subject:</b> RE: Mips unconditionally uses fast-isel?</span></p>
</div>
</div>
<p class="MsoNormal"> </p>
<p class="MsoNormal"><span lang="EN-GB">> Well, 'optnone' is already not identical to –O0, and given the nature of things, probably can't be</span></p>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<p class="MsoNormal"><span lang="EN-GB">It's not important to the topic but I'm curious about this since, in instruction selection at least, they both set SelectionDAGISel::OptLevel to CodeGenOpt::None and MCCodeGenInfo::OptLevel by one means or another. Could
 you point me at a difference between the two? I assume it's outside of instruction selection.</span></p>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<p class="MsoNormal"><span lang="EN-GB">> P.S. One nit, the "O0 + optnone" case should not have an asterisk, the FastISel flag is not manipulated if the opt level is already zero. Does not affect the strength of your argument, of course.</span></p>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<p class="MsoNormal"><span lang="EN-GB">Bugs aside, you're right. I made this table using the Mips target so it was switching from O2 to O0.</span></p>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<p class="MsoNormal"><span lang="EN-GB">I'll try to fix that everything-is-O2 bug today/tomorrow. It will probably be tomorrow due to other commitments.</span></p>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<p class="MsoNormal"><span lang="EN-GB">> This is a different motivation than Daniel expressed, which is a more principled idea coming from the "optnone should exactly match –O0" misconception</span></p>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<p class="MsoNormal"><span lang="EN-GB">It doesn't change anything but just for the record: While I do think that this should be true as far as possible, my opinion on -fast-isel=false is more rooted in the idea that emergency overrides shouldn't be overridable
 by normal use. As an analogy, circuit breakers shouldn't be overridable by a light switch.</span></p>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<div style="border:none; border-left:solid blue 1.5pt; padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none; border-top:solid #B5C4DF 1.0pt; padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt; font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt; font-family:"Tahoma","sans-serif""> Robinson, Paul [<a href="mailto:Paul_Robinson@playstation.sony.com" target="_blank">mailto:Paul_Robinson@playstation.sony.com</a>]
<br>
<b>Sent:</b> 18 November 2015 16:04<br>
<b>To:</b> Daniel Sanders; <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">
llvm-dev@lists.llvm.org</a><br>
<b>Subject:</b> RE: Mips unconditionally uses fast-isel?</span></p>
</div>
</div>
<p class="MsoNormal"><span lang="EN-GB"> </span></p>
<p class="MsoNormal"><span style="color:#1F497D">Well, 'optnone' is already not identical to –O0, and given the nature of things, probably can't be; but I am persuaded that it's reasonable for it to honor the –fast-isel option as a debugging tactic.  I'll take
 an AI to make this happen.</span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thanks,</span></p>
<p class="MsoNormal"><span style="color:#1F497D">--paulr</span></p>
<p class="MsoNormal"><span style="color:#1F497D">P.S. One nit, the "O0 + optnone" case should not have an asterisk, the FastISel flag is not manipulated if the opt level is already zero. Does not affect the strength of your argument, of course.</span></p>
<p class="MsoNormal"><span style="color:#1F497D"> </span></p>
<div style="border:none; border-left:solid blue 1.5pt; padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none; border-top:solid #B5C4DF 1.0pt; padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt; font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt; font-family:"Tahoma","sans-serif""> Daniel Sanders [<a href="mailto:Daniel.Sanders@imgtec.com" target="_blank">mailto:Daniel.Sanders@imgtec.com</a>]
<br>
<b>Sent:</b> Wednesday, November 18, 2015 2:19 AM<br>
<b>To:</b> Robinson, Paul; <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">
llvm-dev@lists.llvm.org</a><br>
<b>Subject:</b> RE: Mips unconditionally uses fast-isel?</span></p>
</div>
</div>
<p class="MsoNormal"> </p>
<p class="MsoPlainText"><span lang="EN-GB">> </span>-----Original Message-----<span lang="EN-GB"></span></p>
<p class="MsoPlainText"><span lang="EN-GB">> </span>From: Robinson, Paul [<a href="mailto:Paul_Robinson@playstation.sony.com" target="_blank">mailto:Paul_Robinson@playstation.sony.com</a>]<span lang="EN-GB"></span></p>
<p class="MsoPlainText"><span lang="EN-GB">> </span>Sent: 17 November 2015 22:58<span lang="EN-GB"></span></p>
<p class="MsoPlainText"><span lang="EN-GB">> </span>To: Daniel Sanders; <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">
llvm-dev@lists.llvm.org</a><span lang="EN-GB"></span></p>
<p class="MsoPlainText"><span lang="EN-GB">> </span>Subject: RE: Mips unconditionally uses fast-isel?<span lang="EN-GB"></span></p>
<p class="MsoPlainText"><span lang="EN-GB">> </span></p>
<p class="MsoPlainText"><span lang="EN-GB">> > > The other thing that might work, is having TargetMachine remember how</span></p>
<p class="MsoPlainText"><span lang="EN-GB">> > > the fast-isel option got set, and make OptLevelChanger do the right</span></p>
<p class="MsoPlainText"><span lang="EN-GB">> > > thing. But that seems like a hack to work around Mips not obeying the</span></p>
<p class="MsoPlainText"><span lang="EN-GB">> > > specified optimization level, honestly.</span></p>
<p class="MsoPlainText"><span lang="EN-GB">> ></span></p>
<p class="MsoPlainText"><span lang="EN-GB">> > I think we should do that as well. I don't think it's right that optnone</span></p>
<p class="MsoPlainText"><span lang="EN-GB">> > enables Fast ISel even when it's been explicitly disabled. It should do</span></p>
<p class="MsoPlainText"><span lang="EN-GB">> > the same checks as addPassesToGenerateCode() does.</span></p>
<p class="MsoPlainText"><span lang="EN-GB">> </span></p>
<p class="MsoPlainText"><span lang="EN-GB">> Hm?  What you're asking for is that "-O2" and "-O2 -fast-isel=none" are</span></p>
<p class="MsoPlainText"><span lang="EN-GB">> identical, unless you have an 'optnone' function. Do you really have a</span></p>
<p class="MsoPlainText"><span lang="EN-GB">> use-case for controlling the codegen path for an 'optnone' function?</span></p>
<p class="MsoPlainText"><span lang="EN-GB">> The whole point of 'optnone' is to avoid optimizations.</span></p>
<p class="MsoPlainText"><span lang="EN-GB">> --paulr</span></p>
<p class="MsoPlainText"><span lang="EN-GB">> </span></p>
<p class="MsoPlainText"><span style="color:black" lang="EN-GB"> </span></p>
<p class="MsoPlainText"><span style="color:black" lang="EN-GB">No, that's already true. -O2 doesn't try to enable Fast ISel (unless the optnone attribute is given) so –fast-isel=false has no effect.</span></p>
<p class="MsoPlainText"><span style="color:black" lang="EN-GB"> </span></p>
<p class="MsoPlainText"><span style="color:black" lang="EN-GB">I'm saying that optnone means 'use –O0 for this function' and that optnone should</span></p>
<p class="MsoPlainText"><span style="color:black" lang="EN-GB">respect non-default values of the -fast-isel flag like –O0 does. This is the behaviour I'd expect:</span></p>
<table class="MsoNormalTable" style="border-collapse:collapse" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="width:120.5pt; border:solid windowtext 1.0pt; background:#D9D9D9; padding:0in 5.4pt 0in 5.4pt" valign="top" width="201">
<p class="MsoPlainText"><span style="color:black"> </span></p>
</td>
<td style="width:98.55pt; border:solid windowtext 1.0pt; border-left:none; background:#D9D9D9; padding:0in 5.4pt 0in 5.4pt" valign="top" width="164">
<p class="MsoPlainText"><span style="color:black">-fast-isel=false</span></p>
</td>
<td style="width:91.8pt; border:solid windowtext 1.0pt; border-left:none; background:#D9D9D9; padding:0in 5.4pt 0in 5.4pt" valign="top" width="153">
<p class="MsoPlainText"><span style="color:black">-fast-isel=default</span></p>
</td>
<td style="width:90.85pt; border:solid windowtext 1.0pt; border-left:none; background:#D9D9D9; padding:0in 5.4pt 0in 5.4pt" valign="top" width="151">
<p class="MsoPlainText"><span style="color:black">-fast-isel=true</span></p>
</td>
</tr>
<tr>
<td style="width:120.5pt; border:solid windowtext 1.0pt; border-top:none; background:#D9D9D9; padding:0in 5.4pt 0in 5.4pt" valign="top" width="201">
<p class="MsoPlainText"><span style="color:black">-O0</span></p>
</td>
<td style="width:98.55pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="164">
<p class="MsoPlainText"><span style="color:black">SelectionDAG</span></p>
</td>
<td style="width:91.8pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="153">
<p class="MsoPlainText"><span style="color:black">FastISel</span></p>
</td>
<td style="width:90.85pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="151">
<p class="MsoPlainText"><span style="color:black">FastISel</span></p>
</td>
</tr>
<tr>
<td style="width:120.5pt; border:solid windowtext 1.0pt; border-top:none; background:#D9D9D9; padding:0in 5.4pt 0in 5.4pt" valign="top" width="201">
<p class="MsoPlainText"><span style="color:black">-O0 + optnone attribute</span></p>
</td>
<td style="width:98.55pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="164">
<p class="MsoPlainText"><span style="color:black">SelectionDAG*</span></p>
</td>
<td style="width:91.8pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="153">
<p class="MsoPlainText"><span style="color:black">FastISel</span></p>
</td>
<td style="width:90.85pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="151">
<p class="MsoPlainText"><span style="color:black">FastISel</span></p>
</td>
</tr>
<tr>
<td style="width:120.5pt; border:solid windowtext 1.0pt; border-top:none; background:#D9D9D9; padding:0in 5.4pt 0in 5.4pt" valign="top" width="201">
<p class="MsoPlainText"><span style="color:black">-O1 + optnone attribute</span></p>
</td>
<td style="width:98.55pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="164">
<p class="MsoPlainText"><span style="color:black">SelectionDAG*</span></p>
</td>
<td style="width:91.8pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="153">
<p class="MsoPlainText"><span style="color:black">FastISel</span></p>
</td>
<td style="width:90.85pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="151">
<p class="MsoPlainText"><span style="color:black">FastISel</span></p>
</td>
</tr>
<tr>
<td style="width:120.5pt; border:solid windowtext 1.0pt; border-top:none; background:#D9D9D9; padding:0in 5.4pt 0in 5.4pt" valign="top" width="201">
<p class="MsoPlainText"><span style="color:black">-O2 + optnone attribute</span></p>
</td>
<td style="width:98.55pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="164">
<p class="MsoPlainText"><span style="color:black">SelectionDAG*</span></p>
</td>
<td style="width:91.8pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="153">
<p class="MsoPlainText"><span style="color:black">FastISel</span></p>
</td>
<td style="width:90.85pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="151">
<p class="MsoPlainText"><span style="color:black">FastISel</span></p>
</td>
</tr>
<tr>
<td style="width:120.5pt; border:solid windowtext 1.0pt; border-top:none; background:#D9D9D9; padding:0in 5.4pt 0in 5.4pt" valign="top" width="201">
<p class="MsoPlainText"><span style="color:black">-O3 + optnone attribute</span></p>
</td>
<td style="width:98.55pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="164">
<p class="MsoPlainText"><span style="color:black">SelectionDAG*</span></p>
</td>
<td style="width:91.8pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="153">
<p class="MsoPlainText"><span style="color:black">FastISel</span></p>
</td>
<td style="width:90.85pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="151">
<p class="MsoPlainText"><span style="color:black">FastISel</span></p>
</td>
</tr>
<tr>
<td style="width:120.5pt; border:solid windowtext 1.0pt; border-top:none; background:#D9D9D9; padding:0in 5.4pt 0in 5.4pt" valign="top" width="201">
<p class="MsoPlainText"><span style="color:black">-O1</span></p>
</td>
<td style="width:98.55pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="164">
<p class="MsoPlainText"><span style="color:black">SelectionDAG</span></p>
</td>
<td style="width:91.8pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="153">
<p class="MsoPlainText"><span style="color:black">SelectionDAG</span></p>
</td>
<td style="width:90.85pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="151">
<p class="MsoPlainText"><span style="color:black">FastISel</span></p>
</td>
</tr>
<tr>
<td style="width:120.5pt; border:solid windowtext 1.0pt; border-top:none; background:#D9D9D9; padding:0in 5.4pt 0in 5.4pt" valign="top" width="201">
<p class="MsoPlainText"><span style="color:black">-O2</span></p>
</td>
<td style="width:98.55pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="164">
<p class="MsoPlainText"><span style="color:black">SelectionDAG</span></p>
</td>
<td style="width:91.8pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="153">
<p class="MsoPlainText"><span style="color:black">SelectionDAG</span></p>
</td>
<td style="width:90.85pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="151">
<p class="MsoPlainText"><span style="color:black">FastISel</span></p>
</td>
</tr>
<tr>
<td style="width:120.5pt; border:solid windowtext 1.0pt; border-top:none; background:#D9D9D9; padding:0in 5.4pt 0in 5.4pt" valign="top" width="201">
<p class="MsoPlainText"><span style="color:black">-O3</span></p>
</td>
<td style="width:98.55pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="164">
<p class="MsoPlainText"><span style="color:black">SelectionDAG</span></p>
</td>
<td style="width:91.8pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="153">
<p class="MsoPlainText"><span style="color:black">SelectionDAG</span></p>
</td>
<td style="width:90.85pt; border-top:none; border-left:none; border-bottom:solid windowtext 1.0pt; border-right:solid windowtext 1.0pt; padding:0in 5.4pt 0in 5.4pt" valign="top" width="151">
<p class="MsoPlainText"><span style="color:black">FastISel</span></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoPlainText"><span style="color:black" lang="EN-GB">The cells marked with '*' differ from the current behaviour.</span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"; color:black" lang="EN-GB"> </span></p>
<p class="MsoPlainText"><span style="color:black" lang="EN-GB">In terms of code, I think this part of OptLevelChanger::OptLevelChanger():</span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"; color:black" lang="EN-GB">   if (NewOptLevel == CodeGenOpt::None) {</span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"; color:black" lang="EN-GB">      DEBUG(dbgs() << "\nEnable FastISel for Function "</span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"; color:black" lang="EN-GB">            << IS.MF->getFunction()->getName() << "\n");</span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"; color:black" lang="EN-GB">      IS.TM.setFastISel(true);</span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"; color:black" lang="EN-GB">    }</span></p>
<p class="MsoPlainText"><span style="color:black" lang="EN-GB">Should be:</span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"; color:black" lang="EN-GB">    if (NewOptLevel == CodeGenOpt::None) {</span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"; color:black" lang="EN-GB">      DEBUG(dbgs() << "\nEnable FastISel for Function "</span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"; color:black" lang="EN-GB">            << IS.MF->getFunction()->getName() << "\n");</span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"; color:black" lang="EN-GB">      IS.TM.setFastISel(EnableFastISelOption != cl::BOU_FALSE);</span></p>
<p class="MsoPlainText"><span style="font-family:"Courier New"; color:black" lang="EN-GB">    }</span></p>
<p class="MsoPlainText"><span style="color:black" lang="EN-GB">Where EnableFastISelOption has the same value as the global in LLVMTargetMachine.cpp</span></p>
<p class="MsoPlainText"><span style="color:black" lang="EN-GB"> </span></p>
<p class="MsoPlainText"><span style="color:black" lang="EN-GB">The main reason I'm asking for this is that I think it's weird to for optnone to use a different code generator</span></p>
<p class="MsoPlainText"><span style="color:black" lang="EN-GB">than  –O0. These hidden overrides exist to help us debug code generation problems and, faced with a code</span></p>
<p class="MsoPlainText"><span style="color:black" lang="EN-GB">generation bug, –fast-isel=false is useful for quickly determining whether it's in FastISel or somewhere else.</span></p>
<p class="MsoPlainText"><span style="color:black" lang="EN-GB">The current behaviour allows optnone to overrule the hidden option to force-disable FastISel which will give</span></p>
<p class="MsoPlainText"><span style="color:black" lang="EN-GB">misleading guidance for bugs that lie in functions with optnone.</span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>