<br><br><div class="gmail_quote">On Fri, Oct 19, 2012 at 10:32 AM, Chandler Carruth <span dir="ltr"><<a href="mailto:chandlerc@google.com" target="_blank">chandlerc@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">On Thu, Oct 18, 2012 at 11:20 PM, Kostya Serebryany <span dir="ltr"><<a href="mailto:kcc@google.com" target="_blank">kcc@google.com</a>></span> wrote:<br></div><div class="gmail_extra"><div class="gmail_quote">
<div class="im">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: kcc<br>
Date: Fri Oct 19 01:20:53 2012<br>
New Revision: 166267<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=166267&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=166267&view=rev</a><br>
Log:<br>
[asan] make sure asan erases old unused allocas after it created a new one. This became important after the recent move from ModulePass to FunctionPass because no cleanup is happening after asan pass any more.<br></blockquote>

<div><br></div></div><div>We should almost certainly run a few passes after asan. instcombine, gvn, instcombine, and simplifycfg would be my baseline to experiment with (and compare compile times of). GVN is likely the most expensive, and it might be acceptable to just do instcombine + simplifycfg.</div>
</div></div></blockquote><div><br></div><div>We run a whole bunch of optimization passes after the Msan pass. It indeed helps.</div><div>I tried doing that after Asan and got these SPEC results:</div><div><br></div><div> spec                            no-opt        opt             diff (<1 means improvement)</div>
<div><div>       400.perlbench,      1026.00,      1052.00,         1.03</div><div>           401.bzip2,       876.00,       864.00,         0.99</div><div>             403.gcc,       538.00,       536.00,         1.00</div>
<div>             429.mcf,       593.00,       588.00,         0.99</div><div>           445.gobmk,       838.00,       843.00,         1.01</div><div>           456.hmmer,      1271.00,      1292.00,         1.02</div><div>
           458.sjeng,       921.00,       891.00,         0.97</div><div>      462.libquantum,       496.00,       492.00,         0.99</div><div>         464.h264ref,      1150.00,      1147.00,         1.00</div><div>         471.omnetpp,       592.00,       587.00,         0.99</div>
<div>           473.astar,       680.00,       695.00,         1.02</div><div>       483.xalancbmk,       570.00,       570.00,         1.00</div><div>            433.milc,       683.00,       664.00,         0.97</div><div>
            444.namd,       635.00,       635.00,         1.00</div><div>          447.dealII,       625.00,       626.00,         1.00</div><div>          450.soplex,       360.00,       357.00,         0.99</div><div>          453.povray,       422.00,       417.00,         0.99</div>
<div>             470.lbm,       389.00,       415.00,         1.07</div><div>         482.sphinx3,       931.00,       925.00,         0.99</div></div><div><br></div><div>It deserves more tuning and experiments, but I don't expect a large gain here. </div>
<div><br></div><div>--kcc </div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_extra"><div class="gmail_quote">
<div><br></div><div>Don't get me wrong, this change is still a good idea -- you can eliminate these allocas more cheaply than anything else.</div><div><div class="h5"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<br>
Modified:<br>
    llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp<br>
    llvm/trunk/test/Instrumentation/AddressSanitizer/basic.ll<br>
<br>
Modified: llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp?rev=166267&r1=166266&r2=166267&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp?rev=166267&r1=166266&r2=166267&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp Fri Oct 19 01:20:53 2012<br>
@@ -1148,6 +1148,10 @@<br>
     }<br>
   }<br>
<br>
+  // We are done. Remove the old unused alloca instructions.<br>
+  for (size_t i = 0, n = AllocaVec.size(); i < n; i++)<br>
+    AllocaVec[i]->eraseFromParent();<br>
+<br>
   if (ClDebugStack) {<br>
     DEBUG(dbgs() << F);<br>
   }<br>
<br>
Modified: llvm/trunk/test/Instrumentation/AddressSanitizer/basic.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/AddressSanitizer/basic.ll?rev=166267&r1=166266&r2=166267&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/AddressSanitizer/basic.ll?rev=166267&r1=166266&r2=166267&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/test/Instrumentation/AddressSanitizer/basic.ll (original)<br>
+++ llvm/trunk/test/Instrumentation/AddressSanitizer/basic.ll Fri Oct 19 01:20:53 2012<br>
@@ -69,3 +69,23 @@<br>
   store i32 42, i32* %a<br>
   ret void<br>
 }<br>
+<br>
+; Check that asan leaves just one alloca.<br>
+<br>
+declare void @alloca_test_use([10 x i8]*)<br>
+define void @alloca_test() address_safety {<br>
+entry:<br>
+  %x = alloca [10 x i8], align 1<br>
+  %y = alloca [10 x i8], align 1<br>
+  %z = alloca [10 x i8], align 1<br>
+  call void @alloca_test_use([10 x i8]* %x)<br>
+  call void @alloca_test_use([10 x i8]* %y)<br>
+  call void @alloca_test_use([10 x i8]* %z)<br>
+  ret void<br>
+}<br>
+<br>
+; CHECK: define void @alloca_test()<br>
+; CHECK: = alloca<br>
+; CHECK-NOT: = alloca<br>
+; CHECK: ret void<br>
+<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div></div><br></div>
</blockquote></div><br>