mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-24 13:33:37 +02:00
c27e49ae48
An unreachable default destination can be exploited by other optimizations and allows for more efficient lowering. Both the SDag switch lowering and LowerSwitch can exploit unreachable defaults. Also make TurnSwitchRangeICmp handle switches with unreachable default. This is kind of separate change, but it cannot be tested without the change above, and I don't want to land the change above without this since that would regress other tests. Differential Revision: http://reviews.llvm.org/D6471 llvm-svn: 227125
38 lines
814 B
LLVM
38 lines
814 B
LLVM
; RUN: opt < %s -simplifycfg -S | FileCheck %s
|
|
|
|
; int foo1_with_default(int a) {
|
|
; switch(a) {
|
|
; case 10:
|
|
; return 10;
|
|
; case 20:
|
|
; return 2;
|
|
; }
|
|
; return 4;
|
|
; }
|
|
|
|
define i32 @foo1_with_default(i32 %a) {
|
|
; CHECK-LABEL: @foo1_with_default
|
|
; CHECK: %switch.selectcmp = icmp eq i32 %a, 20
|
|
; CHECK-NEXT: %switch.select = select i1 %switch.selectcmp, i32 2, i32 4
|
|
; CHECK-NEXT: %switch.selectcmp1 = icmp eq i32 %a, 10
|
|
; CHECK-NEXT: %switch.select2 = select i1 %switch.selectcmp1, i32 10, i32 %switch.select
|
|
entry:
|
|
switch i32 %a, label %sw.epilog [
|
|
i32 10, label %sw.bb
|
|
i32 20, label %sw.bb1
|
|
]
|
|
|
|
sw.bb:
|
|
br label %return
|
|
|
|
sw.bb1:
|
|
br label %return
|
|
|
|
sw.epilog:
|
|
br label %return
|
|
|
|
return:
|
|
%retval.0 = phi i32 [ 4, %sw.epilog ], [ 2, %sw.bb1 ], [ 10, %sw.bb ]
|
|
ret i32 %retval.0
|
|
}
|