[LLVMdev] Switch instruction optimization

Philip Reames listmail at philipreames.com
Fri Dec 20 09:30:58 PST 2013


On first glance, this looks like it should be handled by 
ForwardSwitchConditionToPHI in SimplifyCFG. (Note: That's a guess.  I'm 
reading the code for the first time.) I'd suggest filling a bug with all 
of the options you're running with.  We really should catch this case.

Well, really there's two missed optimization cases here.  Even without 
the case value forwarding, label_case2 and label_case3 are redundant.

Philip

On 12/20/13 6:33 AM, Pawe? Bylica wrote:
> Hello there,
>
> I have a high level code which would look like that in C++:
>
> enum E { A, B, C };
>
> E int2e(long i) {
>     switch(i) {
>         case 0: return A;
>         case 1: return B;
>         case 2: return C;
>         default: return A;
>     }
> }
>
> It is compiled to this IR with O3 optimization:
>
> define i64 @int2e(i64 %i_arg) #0 {
> entry:
>   switch i64 %i_arg, label %label_case1 [
>     i64 2, label %label_case3
>     i64 1, label %label_case2
>   ]
>
> label_case1:                              ; preds = %entry, 
> %label_case3, %label_case2
>   %merge = phi i64 [ %i_arg, %label_case2 ], [ %i_arg, %label_case3 ], 
> [ 0, %entry ]
>   ret i64 %merge
>
> label_case2:                              ; preds = %entry
>   br label %label_case1
>
> label_case3:                              ; preds = %entry
>   br label %label_case1
> }
>
> In the result IR `phi` instruction has 3 branches, but two first of 
> them returns the same value. Shouln't it be optimized?
>
> - Pawe?
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131220/3d2d2b9f/attachment.html>


More information about the llvm-dev mailing list