[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