[LLVMdev] Switch instruction optimization
Paweł Bylica
pawel.bylica at ibs.org.pl
Fri Dec 20 06:33:24 PST 2013
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ł
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131220/d31fb630/attachment.html>
More information about the llvm-dev
mailing list