2003-09-16 15:29:54 +00:00
|
|
|
; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis | not grep switch
|
2003-08-17 20:19:31 +00:00
|
|
|
|
|
|
|
int %test1() { ; Test normal folding
|
|
|
|
switch uint 5, label %Default [
|
|
|
|
uint 0, label %Foo
|
|
|
|
uint 1, label %Bar
|
|
|
|
uint 2, label %Baz
|
|
|
|
uint 5, label %TheDest
|
|
|
|
]
|
|
|
|
Default:ret int -1
|
|
|
|
Foo: ret int -2
|
|
|
|
Bar: ret int -3
|
|
|
|
Baz: ret int -4
|
|
|
|
TheDest:ret int 1234
|
|
|
|
}
|
|
|
|
|
|
|
|
int %test2() { ; Test folding to default dest
|
|
|
|
switch uint 3, label %Default [
|
|
|
|
uint 0, label %Foo
|
|
|
|
uint 1, label %Bar
|
|
|
|
uint 2, label %Baz
|
|
|
|
uint 5, label %TheDest
|
|
|
|
]
|
|
|
|
Default:ret int 1234
|
|
|
|
Foo: ret int -2
|
|
|
|
Bar: ret int -5
|
|
|
|
Baz: ret int -6
|
|
|
|
TheDest:ret int -8
|
|
|
|
}
|
|
|
|
|
|
|
|
int %test3(bool %C) { ; Test folding all to same dest
|
|
|
|
br bool %C, label %Start, label %TheDest
|
|
|
|
Start:
|
|
|
|
switch uint 3, label %TheDest [
|
|
|
|
uint 0, label %TheDest
|
|
|
|
uint 1, label %TheDest
|
|
|
|
uint 2, label %TheDest
|
|
|
|
uint 5, label %TheDest
|
|
|
|
]
|
|
|
|
TheDest: ret int 1234
|
|
|
|
}
|
|
|
|
|
|
|
|
int %test4(uint %C) { ; Test folding switch -> branch
|
|
|
|
switch uint %C, label %L1 [
|
|
|
|
uint 0, label %L2
|
|
|
|
]
|
|
|
|
L1: ret int 0
|
|
|
|
L2: ret int 1
|
|
|
|
}
|
2003-08-23 23:17:59 +00:00
|
|
|
|
|
|
|
int %test5(uint %C) {
|
|
|
|
switch uint %C, label %L1 [ ; Can fold into a cond branch!
|
|
|
|
uint 0, label %L2
|
|
|
|
uint 123, label %L1
|
|
|
|
]
|
|
|
|
L1: ret int 0
|
|
|
|
L2: ret int 1
|
|
|
|
}
|
|
|
|
|
|
|
|
|