[LLVMdev] RFC: canonical icmp predicates?

Philip Reames listmail at philipreames.com
Mon Apr 27 16:16:06 PDT 2015


Actually, ignore this.  At least one of the cases I had thought I'd 
tested as not working is now working as expected.  I'm suspecting I went 
wrong somewhere in my analysis.  Until I figure out where, it's not 
worth discussing

Philip

On 04/27/2015 04:05 PM, Philip Reames wrote:
> I ran into an issue where we are missing optimization opportunities by 
> not recognizing that:
> $cmp1 = icmp eq i8* %p, null
> br i1 %cmp1, label %is_null,  label %not_null
>
> Is equivalent to:
> $cmp1 = icmp ne i8* %p, null
> br i1 %cmp1, label %not_null,  label %is_null
>
> We do recognize and exploit this in GVN.  However, that leaves us with 
> a pass ordering problem where other passes are less effective. The 
> biggest impact in practice appears to be on jump threading (missed 
> optimizations) and unswitching (wasted compile time unswitching 
> conditions which are actually known outside the loop).
>
> I can see two ways of approaching this and would value feedback about 
> which is the right one.
>
> Option 1 - We can teach EarlyCSE, & JumpThreading to specifically 
> optimize this pattern.  This doesn't solve the general pass ordering 
> problem, but it does give us far more chances to exploit the 
> equivalent control flow for each run of the optimization pipeline 
> (e.g. each round of inlining iteration).
>
> Option 2 - We could teach InstCombine to canonicalize one form into 
> the other.  On the surface, this seems like the "right" answer, but it 
> also seems too easy.  I suspect there's a reason this approach hasn't 
> been done and that I simply don't know what it is.  :)
>
> The only thing I could come up with is that inverting the branch 
> direction might perturb code placement for compilations without 
> profiling data.  Is that the concern?
>
> Philip
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev




More information about the llvm-dev mailing list