<div dir="ltr">Any chance of easy/practical test coverage for this? (eg: is there a way to get opt to run the same pass twice in one go? should there be?)<br><br><div class="gmail_quote"><div dir="ltr">On Mon, May 8, 2017 at 11:15 AM Craig Topper via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: ctopper<br>
Date: Mon May  8 13:02:51 2017<br>
New Revision: 302450<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=302450&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=302450&view=rev</a><br>
Log:<br>
[ARM] Use a Changed flag to avoid making a pass's return value dependent on a compare with a Statistic object.<br>
<br>
Statistic compile to always be 0 in release build so this compare would always return false. And in the debug builds Statistic are global variables and remember their values across pass runs. So this compare returns true anytime the pass runs after the first time it modifies something.<br>
<br>
This was found after reviewing all usages of comparison operators on a Statistic object. We had some internal code that did a compare with a statistic that caused a mismatch in output between debug and release builds. So we did an audit out of paranoia.<br>
<br>
Modified:<br>
    llvm/trunk/lib/Target/ARM/ARMOptimizeBarriersPass.cpp<br>
<br>
Modified: llvm/trunk/lib/Target/ARM/ARMOptimizeBarriersPass.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMOptimizeBarriersPass.cpp?rev=302450&r1=302449&r2=302450&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMOptimizeBarriersPass.cpp?rev=302450&r1=302449&r2=302450&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/ARM/ARMOptimizeBarriersPass.cpp (original)<br>
+++ llvm/trunk/lib/Target/ARM/ARMOptimizeBarriersPass.cpp Mon May  8 13:02:51 2017<br>
@@ -88,13 +88,15 @@ bool ARMOptimizeBarriersPass::runOnMachi<br>
       }<br>
     }<br>
   }<br>
+  bool Changed = false;<br>
   // Remove the tagged DMB<br>
   for (auto MI : ToRemove) {<br>
     MI->eraseFromParent();<br>
     ++NumDMBsRemoved;<br>
+    Changed = true;<br>
   }<br>
<br>
-  return NumDMBsRemoved > 0;<br>
+  return Changed;<br>
 }<br>
<br>
 /// createARMOptimizeBarriersPass - Returns an instance of the remove double<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">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/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div>