<p dir="ltr"><br>
On Oct 11, 2014 12:24 PM, "Benjamin Kramer" <<a href="mailto:benny.kra@googlemail.com">benny.kra@googlemail.com</a>> wrote:<br>
><br>
> Author: d0k<br>
> Date: Sat Oct 11 14:13:01 2014<br>
> New Revision: 219575<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=219575&view=rev">http://llvm.org/viewvc/llvm-project?rev=219575&view=rev</a><br>
> Log:<br>
> AssumptionTracker: Don't create temporary CallbackVHs.<br>
><br>
> Those are expensive to create in cold cache scenarios. NFC.<br>
><br>
> Modified:<br>
> llvm/trunk/include/llvm/Analysis/AssumptionTracker.h<br>
> llvm/trunk/lib/Analysis/AssumptionTracker.cpp<br>
><br>
> Modified: llvm/trunk/include/llvm/Analysis/AssumptionTracker.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/AssumptionTracker.h?rev=219575&r1=219574&r2=219575&view=diff">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/AssumptionTracker.h?rev=219575&r1=219574&r2=219575&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/include/llvm/Analysis/AssumptionTracker.h (original)<br>
> +++ llvm/trunk/include/llvm/Analysis/AssumptionTracker.h Sat Oct 11 14:13:01 2014<br>
> @@ -99,7 +99,7 @@ public:<br>
> typedef iterator_range<assumption_iterator> assumption_range;<br>
><br>
> inline assumption_range assumptions(Function *F) {<br>
> - FunctionCallsMap::iterator I = CachedAssumeCalls.find(F);<br>
> + FunctionCallsMap::iterator I = CachedAssumeCalls.find_as(F);<br>
> if (I == CachedAssumeCalls.end()) {<br>
> I = scanFunction(F);<br>
> }<br>
><br>
> Modified: llvm/trunk/lib/Analysis/AssumptionTracker.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/AssumptionTracker.cpp?rev=219575&r1=219574&r2=219575&view=diff">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/AssumptionTracker.cpp?rev=219575&r1=219574&r2=219575&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/Analysis/AssumptionTracker.cpp (original)<br>
> +++ llvm/trunk/lib/Analysis/AssumptionTracker.cpp Sat Oct 11 14:13:01 2014<br>
> @@ -29,12 +29,14 @@ void AssumptionTracker::FunctionCallback<br>
> }<br>
><br>
> void AssumptionTracker::forgetCachedAssumptions(Function *F) {<br>
> - CachedAssumeCalls.erase(F);<br>
> + auto I = CachedAssumeCalls.find_as(F);<br>
> + if (I != CachedAssumeCalls.end())<br>
> + CachedAssumeCalls.erase(I);</p>
<p dir="ltr">Could/should we add an erase_as? (Or is there any way we can avoid having the *_as variants and just have the basic ones to heterogenous lookup/removal/etc)</p>
<p dir="ltr">> }<br>
><br>
> void AssumptionTracker::CallCallbackVH::deleted() {<br>
> assert(F && "delete callback called on dummy handle");<br>
> - FunctionCallsMap::iterator I = AT->CachedAssumeCalls.find(F);<br>
> + FunctionCallsMap::iterator I = AT->CachedAssumeCalls.find_as(F);<br>
> assert(I != AT->CachedAssumeCalls.end() &&<br>
> "Function cleared from the map without removing the values?");<br>
><br>
> @@ -88,7 +90,7 @@ void AssumptionTracker::registerAssumpti<br>
> Function *F = CI->getParent()->getParent();<br>
> assert(F && "Cannot register @llvm.assume call not in a function");<br>
><br>
> - FunctionCallsMap::iterator I = CachedAssumeCalls.find(F);<br>
> + FunctionCallsMap::iterator I = CachedAssumeCalls.find_as(F);<br>
> if (I == CachedAssumeCalls.end()) {<br>
> // If this function has not already been scanned, then don't do anything<br>
> // here. This intrinsic will be found, if it still exists, if the list of<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</p>