[MIParser] Set RegClassOrRegBank during instruction parsing
[llvm-complete.git] / test / Transforms / SimplifyCFG / 2003-08-17-FoldSwitch.ll
bloba81e7a6caaa317560b8653e9c45885ef1300ea85
1 ; NOTE: Assertions have been autogenerated by update_test_checks.py
2 ; RUN: opt < %s -simplifycfg -S | FileCheck %s
4 ; Test normal folding
5 define i32 @test1() {
6 ; CHECK-LABEL: @test1(
7 ; CHECK-NEXT:  TheDest:
8 ; CHECK-NEXT:    ret i32 1234
10   switch i32 5, label %Default [
11   i32 0, label %Foo
12   i32 1, label %Bar
13   i32 2, label %Baz
14   i32 5, label %TheDest
15   ]
16 Default:
17   ret i32 -1
18 Foo:
19   ret i32 -2
20 Bar:
21   ret i32 -3
22 Baz:
23   ret i32 -4
24 TheDest:
25   ret i32 1234
28 ; Test folding to default dest
29 define i32 @test2() {
30 ; CHECK-LABEL: @test2(
31 ; CHECK-NEXT:  Default:
32 ; CHECK-NEXT:    ret i32 1234
34   switch i32 3, label %Default [
35   i32 0, label %Foo
36   i32 1, label %Bar
37   i32 2, label %Baz
38   i32 5, label %TheDest
39   ]
40 Default:
41   ret i32 1234
42 Foo:
43   ret i32 -2
44 Bar:
45   ret i32 -5
46 Baz:
47   ret i32 -6
48 TheDest:
49   ret i32 -8
52 ; Test folding all to same dest
53 define i32 @test3(i1 %C) {
54 ; CHECK-LABEL: @test3(
55 ; CHECK-NEXT:  TheDest:
56 ; CHECK-NEXT:    ret i32 1234
58   br i1 %C, label %Start, label %TheDest
59 Start:          ; preds = %0
60   switch i32 3, label %TheDest [
61   i32 0, label %TheDest
62   i32 1, label %TheDest
63   i32 2, label %TheDest
64   i32 5, label %TheDest
65   ]
66 TheDest:
67   ret i32 1234
70 ; Test folding switch -> branch
71 define i32 @test4(i32 %C) {
72 ; CHECK-LABEL: @test4(
73 ; CHECK-NEXT:  L1:
74 ; CHECK-NEXT:    [[COND:%.*]] = icmp eq i32 %C, 0
75 ; CHECK-NEXT:    [[DOT:%.*]] = select i1 [[COND]], i32 1, i32 0
76 ; CHECK-NEXT:    ret i32 [[DOT]]
78   switch i32 %C, label %L1 [
79   i32 0, label %L2
80   ]
81 L1:
82   ret i32 0
83 L2:
84   ret i32 1
87 ; Can fold into a cond branch!
88 define i32 @test5(i32 %C) {
89 ; CHECK-LABEL: @test5(
90 ; CHECK-NEXT:  L1:
91 ; CHECK-NEXT:    [[COND:%.*]] = icmp eq i32 %C, 0
92 ; CHECK-NEXT:    [[DOT:%.*]] = select i1 [[COND]], i32 1, i32 0
93 ; CHECK-NEXT:    ret i32 [[DOT]]
95   switch i32 %C, label %L1 [
96   i32 0, label %L2
97   i32 123, label %L1
98   ]
99 L1:
100   ret i32 0
102   ret i32 1