Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Transforms / SimplifyCFG / 2003-08-17-FoldSwitch.ll
blob8788de455d42886b43d8ba78bf78a17e55b2589f
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -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:  common.ret:
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:  common.ret:
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