<div dir="ltr">No.<div>This code as written is safe against the *current* use changing, but the auto version is not.</div><div>The range loop is essentially:</div><div><code style="color:rgb(0,0,0);font-size:12.8px;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>{</b></code><br style="color:rgb(0,0,0);font-family:dejavusans,"dejavu sans",arial,sans-serif;font-size:12.8px"><dl style="margin-top:0.2em;margin-bottom:0.5em;color:rgb(0,0,0);font-family:dejavusans,"dejavu sans",arial,sans-serif;font-size:12.8px"><dd style="line-height:1.1em;margin-left:1.6em;margin-bottom:0.1em;margin-right:0px"><code style="background-color:transparent;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>auto && __range =</b></code> <span class="gmail-t-spar" style="color:rgb(128,128,128);font-style:italic;line-height:1.1em">range_expression</span> <code style="background-color:transparent;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>;</b></code> <br></dd><dd style="line-height:1.1em;margin-left:1.6em;margin-bottom:0.1em;margin-right:0px"><code style="background-color:transparent;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>for (auto __begin =</b></code> <i>begin_expr</i><code style="background-color:transparent;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>,</b></code> <code style="background-color:transparent;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>__end =</b></code> <i>end_expr</i><code style="background-color:transparent;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>;</b></code> <br><dl style="margin-top:0.2em;margin-bottom:0.5em"><dd style="line-height:1.1em;margin-left:1.6em;margin-bottom:0.1em;margin-right:0px"><dl style="margin-top:0.2em;margin-bottom:0.5em"><dd style="line-height:1.1em;margin-left:1.6em;margin-bottom:0.1em;margin-right:0px"><code style="background-color:transparent;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>__begin != __end; ++__begin) {</b></code> <br></dd></dl></dd><dd style="line-height:1.1em;margin-left:1.6em;margin-bottom:0.1em;margin-right:0px"><span class="gmail-t-spar" style="color:rgb(128,128,128);font-style:italic;line-height:1.1em">range_declaration</span> <code style="background-color:transparent;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>= *__begin;</b></code> <br></dd><dd style="line-height:1.1em;margin-left:1.6em;margin-bottom:0.1em;margin-right:0px"><span class="gmail-t-spar" style="color:rgb(128,128,128);font-style:italic;line-height:1.1em">loop_statement</span> <br></dd></dl></dd><dd style="line-height:1.1em;margin-left:1.6em;margin-bottom:0.1em;margin-right:0px"><code style="background-color:transparent;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>} </b></code><br></dd></dl><p style="margin:0.4em 0px 0.5em;line-height:1.1em;color:rgb(0,0,0);font-family:dejavusans,"dejavu sans",arial,sans-serif;font-size:12.8px"><code style="background-color:transparent;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>} </b></code></p></div><div><br></div><div>If loop statement destroys begin, you can't move to the next thing properly (at least, for uses).</div><div><br></div><div>This would work if it was:</div><div><div><code style="color:rgb(0,0,0);font-size:12.8px;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>{</b></code><br style="color:rgb(0,0,0);font-family:dejavusans,"dejavu sans",arial,sans-serif;font-size:12.8px"><dl style="margin-top:0.2em;margin-bottom:0.5em;color:rgb(0,0,0);font-family:dejavusans,"dejavu sans",arial,sans-serif;font-size:12.8px"><dd style="line-height:1.1em;margin-left:1.6em;margin-bottom:0.1em;margin-right:0px"><code style="background-color:transparent;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>auto && __range =</b></code> <span class="gmail-t-spar" style="color:rgb(128,128,128);font-style:italic;line-height:1.1em">range_expression</span> <code style="background-color:transparent;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>;</b></code> <br></dd><dd style="line-height:1.1em;margin-left:1.6em;margin-bottom:0.1em;margin-right:0px"><code style="background-color:transparent;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>for (auto __begin =</b></code> <i>begin_expr</i><code style="background-color:transparent;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>,</b></code> <code style="background-color:transparent;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>__end =</b></code> <i>end_expr</i><code style="background-color:transparent;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>;</b></code> <br><dl style="margin-top:0.2em;margin-bottom:0.5em"><dd style="line-height:1.1em;margin-left:1.6em;margin-bottom:0.1em;margin-right:0px"><dl style="margin-top:0.2em;margin-bottom:0.5em"><dd style="line-height:1.1em;margin-left:1.6em;margin-bottom:0.1em;margin-right:0px"><code style="background-color:transparent;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>__begin != __end;) {</b></code> <br></dd></dl></dd><dd style="line-height:1.1em;margin-left:1.6em;margin-bottom:0.1em;margin-right:0px"><span class="gmail-t-spar" style="color:rgb(128,128,128);font-style:italic;line-height:1.1em">range_declaration</span> <code style="background-color:transparent;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>= *__begin++;</b></code> <br></dd><dd style="line-height:1.1em;margin-left:1.6em;margin-bottom:0.1em;margin-right:0px"><span class="gmail-t-spar" style="color:rgb(128,128,128);font-style:italic;line-height:1.1em">loop_statement</span> <br></dd></dl></dd><dd style="line-height:1.1em;margin-left:1.6em;margin-bottom:0.1em;margin-right:0px"><code style="background-color:transparent;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>} </b></code><br></dd></dl><p style="margin:0.4em 0px 0.5em;line-height:1.1em;color:rgb(0,0,0);font-family:dejavusans,"dejavu sans",arial,sans-serif;font-size:12.8px"><code style="background-color:transparent;font-family:dejavusansmono,"dejavu sans mono",courier,monospace"><b>} </b></code></p></div></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Mar 17, 2017 at 10:01 AM, David Blaikie via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><br><div class="gmail_quote"><span class=""><div dir="ltr">On Fri, Mar 17, 2017 at 9:57 AM Andrew Ng via Phabricator <<a href="mailto:reviews@reviews.llvm.org" target="_blank">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">andrewng added a comment.<br class="m_5139403081024907060gmail_msg">
<br class="m_5139403081024907060gmail_msg">
Thanks for the review.<br class="m_5139403081024907060gmail_msg">
<br class="m_5139403081024907060gmail_msg">
<br class="m_5139403081024907060gmail_msg">
<br class="m_5139403081024907060gmail_msg">
================<br class="m_5139403081024907060gmail_msg">
Comment at: lib/Target/X86/<wbr>X86OptimizeLEAs.cpp:567-568<br class="m_5139403081024907060gmail_msg">
+        unsigned LastVReg = Last.getOperand(0).getReg();<br class="m_5139403081024907060gmail_msg">
+        for (auto UI = MRI->use_nodbg_begin(LastVReg)<wbr>,<br class="m_5139403081024907060gmail_msg">
+                  UE = MRI->use_nodbg_end();<br class="m_5139403081024907060gmail_msg">
              UI != UE;) {<br class="m_5139403081024907060gmail_msg">
----------------<br class="m_5139403081024907060gmail_msg">
dblaikie wrote:<br class="m_5139403081024907060gmail_msg">
> I think you can use:<br class="m_5139403081024907060gmail_msg">
><br class="m_5139403081024907060gmail_msg">
>   for (MachineOperand &MO : MRI->use_nodbg_operands(<wbr>LastVReg))<br class="m_5139403081024907060gmail_msg">
><br class="m_5139403081024907060gmail_msg">
> here, probably?<br class="m_5139403081024907060gmail_msg">
Yes, at first I thought so too, but inside the loop there is:<br class="m_5139403081024907060gmail_msg">
```<br class="m_5139403081024907060gmail_msg">
MO.setReg(First.getOperand(0).<wbr>getReg());<br class="m_5139403081024907060gmail_msg">
```<br class="m_5139403081024907060gmail_msg">
which could affect the use iterator. So the original code which increments the use iterator before any changes is safer.<br class="m_5139403081024907060gmail_msg"></blockquote></span><div><br>Not quite sure how one could be safer than the other - they're the same code, aren't they? (range-for and the manually written for loop look like they have identical semantics)<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br class="m_5139403081024907060gmail_msg">
<br class="m_5139403081024907060gmail_msg">
<a href="https://reviews.llvm.org/D30835" rel="noreferrer" class="m_5139403081024907060gmail_msg" target="_blank">https://reviews.llvm.org/<wbr>D30835</a><br class="m_5139403081024907060gmail_msg">
<br class="m_5139403081024907060gmail_msg">
<br class="m_5139403081024907060gmail_msg">
<br class="m_5139403081024907060gmail_msg">
</blockquote></div></div>
<br>______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
<br></blockquote></div><br></div>