<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>