<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Thanks John.  It looks like a slight speedup, with an overall reduction of memory usage on Cocoa.h of about 0.2 megabytes (I'm looking at the reduction of allocated bytes).<div><div><br><div><div>On Feb 9, 2011, at 6:21 PM, John McCall wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Feb 9, 2011, at 3:56 PM, Ted Kremenek wrote:</div><blockquote type="cite"><div>Was there a noticeable impact on compile-time?  Memory use?</div></blockquote><div><br></div>"Before my patch" is r125182.  "After my patch" is r125185.  All measurements except one are the median of 3 approximately similar results as generated on a not-very-reliable, not-hardly-quiescent laptop.<br><div><br></div><div><b>Cocoa_h.m</b> creates 35700 Stmts/Exprs and 85258 Decls.  On a 64-bit platform, this is a theoretical memory savings of 285,600 bytes for Stmts/Exprs and 682,064 bytes for Decls.</div><div>  - <b>Before</b> my patch, it allocated 13,008,896 bytes, of which it used 12,449,976, with the remainder being lost to e.g. alignment padding.</div><div>    A Release build completed 1000 runs (I'm not sure why I did 1000 runs) on my machine with the following characteristics:</div><div><div>    daysthatwere:clang rjmccall$ runN 1000 ../../Release/bin/clang -fsyntax-only INPUTS/Cocoa_h.m</div><div>    name<span class="Apple-tab-span" style="white-space:pre">        </span>  avg  <span class="Apple-tab-span" style="white-space:pre">   </span>  min  <span class="Apple-tab-span" style="white-space:pre">   </span>  med  <span class="Apple-tab-span" style="white-space:pre">   </span>  max  <span class="Apple-tab-span" style="white-space:pre">   </span>   SD  <span class="Apple-tab-span" style="white-space:pre">   </span> total </div><div>    user<span class="Apple-tab-span" style="white-space:pre">  </span> 0.3246<span class="Apple-tab-span" style="white-space:pre">     </span> 0.3215<span class="Apple-tab-span" style="white-space:pre">     </span> 0.3247<span class="Apple-tab-span" style="white-space:pre">     </span> 0.3328<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0014<span class="Apple-tab-span" style="white-space:pre">     </span>324.5585</div><div>    sys<span class="Apple-tab-span" style="white-space:pre">       </span> 0.0771<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0662<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0819<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0898<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0068<span class="Apple-tab-span" style="white-space:pre">     </span>77.1401</div><div>    wall<span class="Apple-tab-span" style="white-space:pre">       </span> 0.4064<span class="Apple-tab-span" style="white-space:pre">     </span> 0.3954<span class="Apple-tab-span" style="white-space:pre">     </span> 0.4088<span class="Apple-tab-span" style="white-space:pre">     </span> 0.4440<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0071<span class="Apple-tab-span" style="white-space:pre">     </span>406.4173</div><div><br></div><div>  - <b>After</b> my patch, it allocated 12,779,520 bytes, of which it used 12,164,576.  This is a memory savings of 284,400 bytes (used).  1,328,392 bytes of Stmt/Expr nodes were allocated overall.</div></div></div></div></blockquote><div><br></div><div>The memory savings I see from your numbers is 13,008,896 - 12,779,520 = 229,376 (from the total allocated bytes).  Isn't this the actual memory savings (not 284,400)?</div><br><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div><div>    A Release build completed 100 runs on my machine with the following characteristics:</div><div><div>    daysthatwere:clang rjmccall$ runN 100 ../../Release/bin/clang -fsyntax-only INPUTS/Cocoa_h.m</div><div>    name<span class="Apple-tab-span" style="white-space:pre">   </span>  avg  <span class="Apple-tab-span" style="white-space:pre">   </span>  min  <span class="Apple-tab-span" style="white-space:pre">   </span>  med  <span class="Apple-tab-span" style="white-space:pre">   </span>  max  <span class="Apple-tab-span" style="white-space:pre">   </span>   SD  <span class="Apple-tab-span" style="white-space:pre">   </span> total </div><div>    user<span class="Apple-tab-span" style="white-space:pre">  </span> 0.3175<span class="Apple-tab-span" style="white-space:pre">     </span> 0.3147<span class="Apple-tab-span" style="white-space:pre">     </span> 0.3172<span class="Apple-tab-span" style="white-space:pre">     </span> 0.3247<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0019<span class="Apple-tab-span" style="white-space:pre">     </span>31.7507</div><div>    sys<span class="Apple-tab-span" style="white-space:pre">        </span> 0.0770<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0682<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0780<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0895<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0061<span class="Apple-tab-span" style="white-space:pre">     </span> 7.6987</div><div>    wall<span class="Apple-tab-span" style="white-space:pre">       </span> 0.3994<span class="Apple-tab-span" style="white-space:pre">     </span> 0.3886<span class="Apple-tab-span" style="white-space:pre">     </span> 0.3990<span class="Apple-tab-span" style="white-space:pre">     </span> 0.4162<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0073<span class="Apple-tab-span" style="white-space:pre">     </span>39.9351</div><div><br></div></div><div></div><div><br></div><div><b>all_std_headers.cpp</b> creates 69666 Stmts/Exprs and 35101 Decls.  On a 64-bit platform, this is a theoretical memory savings of 557,328 bytes for Stmts/Exprs and 280,808 bytes for Decls.</div><div>  - <b>Before</b> my patch, it allocated 12,705,792 bytes, of which it used 12,174,357.</div><div>    A Release build completed 100 runs on my machine with the following characteristics:</div><div><div>    daysthatwere:clang rjmccall$ runN 100 ../../Release/bin/clang -fsyntax-only INPUTS/all-std-headers.cpp </div><div>    name<span class="Apple-tab-span" style="white-space:pre">     </span>  avg  <span class="Apple-tab-span" style="white-space:pre">   </span>  min  <span class="Apple-tab-span" style="white-space:pre">   </span>  med  <span class="Apple-tab-span" style="white-space:pre">   </span>  max  <span class="Apple-tab-span" style="white-space:pre">   </span>   SD  <span class="Apple-tab-span" style="white-space:pre">   </span> total </div><div>    user<span class="Apple-tab-span" style="white-space:pre">  </span> 0.3725<span class="Apple-tab-span" style="white-space:pre">     </span> 0.3692<span class="Apple-tab-span" style="white-space:pre">     </span> 0.3727<span class="Apple-tab-span" style="white-space:pre">     </span> 0.3765<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0015<span class="Apple-tab-span" style="white-space:pre">     </span>37.2507</div><div>    sys<span class="Apple-tab-span" style="white-space:pre">        </span> 0.0474<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0394<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0480<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0463<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0056<span class="Apple-tab-span" style="white-space:pre">     </span> 4.7440</div><div>    wall<span class="Apple-tab-span" style="white-space:pre">       </span> 0.4237<span class="Apple-tab-span" style="white-space:pre">     </span> 0.4131<span class="Apple-tab-span" style="white-space:pre">     </span> 0.4261<span class="Apple-tab-span" style="white-space:pre">     </span> 0.4322<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0065<span class="Apple-tab-span" style="white-space:pre">     </span>42.3729</div></div><div><br></div><div><div>  - <b>After</b> my patch, it allocated 12,214,272 bytes, of which it used 11,618,501.  This is a memory savings of 555,856 bytes (used).  2,917,712 bytes of Stmt/Expr nodes were allocated overall.</div></div></div></div></div></blockquote><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div><div><div>    A Release build completed 100 runs on my machine with the following characteristics:</div><div></div></div></div><div><div>    daysthatwere:clang rjmccall$ runN 100 ../../Release/bin/clang -fsyntax-only INPUTS/all-std-headers.cpp </div><div><div>    name<span class="Apple-tab-span" style="white-space:pre">    </span>  avg  <span class="Apple-tab-span" style="white-space:pre">   </span>  min  <span class="Apple-tab-span" style="white-space:pre">   </span>  med  <span class="Apple-tab-span" style="white-space:pre">   </span>  max  <span class="Apple-tab-span" style="white-space:pre">   </span>   SD  <span class="Apple-tab-span" style="white-space:pre">   </span> total </div><div>    user<span class="Apple-tab-span" style="white-space:pre">  </span> 0.3684<span class="Apple-tab-span" style="white-space:pre">     </span> 0.3657<span class="Apple-tab-span" style="white-space:pre">     </span> 0.3672<span class="Apple-tab-span" style="white-space:pre">     </span> 0.3705<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0017<span class="Apple-tab-span" style="white-space:pre">     </span>36.8390</div><div>    sys<span class="Apple-tab-span" style="white-space:pre">        </span> 0.0431<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0358<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0410<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0522<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0078<span class="Apple-tab-span" style="white-space:pre">     </span> 4.3079</div><div>    wall<span class="Apple-tab-span" style="white-space:pre">       </span> 0.4160<span class="Apple-tab-span" style="white-space:pre">     </span> 0.4069<span class="Apple-tab-span" style="white-space:pre">     </span> 0.4119<span class="Apple-tab-span" style="white-space:pre">     </span> 0.4265<span class="Apple-tab-span" style="white-space:pre">     </span> 0.0086<span class="Apple-tab-span" style="white-space:pre">     </span>41.5987</div><div><br></div></div></div><div>So if I didn't completely kill any scientific validity with biased selection in my efforts to get around quiescence problems, this is a modest optimization in running time and a fairly significant optimization of memory usage.  Of course, processing headers only stresses the creation of an AST, not queries against it, so (say) a static-analyzer benchmark might be worthwhile.</div></div></div></blockquote><br></div><div>A benchmark on the static analyzer could be worthwhile.  My expectation is that the difference will be lost in the noise.</div><br></div></div></body></html>