blob: 90a9aa4d95b7dde979c0be159f0a0a1cbac7d7c2 [file] [log] [blame]
Joerg Sonnenbergerfa736742017-03-26 06:44:08 +00001; RUN: opt -S -latesimplifycfg -mtriple=arm -relocation-model=static < %s | FileCheck %s --check-prefix=CHECK --check-prefix=ENABLE
2; RUN: opt -S -latesimplifycfg -mtriple=arm -relocation-model=pic < %s | FileCheck %s --check-prefix=CHECK --check-prefix=ENABLE
3; RUN: opt -S -latesimplifycfg -mtriple=arm -relocation-model=ropi < %s | FileCheck %s --check-prefix=CHECK --check-prefix=DISABLE
4; RUN: opt -S -latesimplifycfg -mtriple=arm -relocation-model=rwpi < %s | FileCheck %s --check-prefix=CHECK --check-prefix=DISABLE
5; RUN: opt -S -latesimplifycfg -mtriple=arm -relocation-model=ropi-rwpi < %s | FileCheck %s --check-prefix=CHECK --check-prefix=DISABLE
Oliver Stannard4df1cc02016-10-07 08:48:24 +00006
7; CHECK: @{{.*}} = private unnamed_addr constant [3 x i32] [i32 1234, i32 5678, i32 15532]
8; ENABLE: @{{.*}} = private unnamed_addr constant [3 x i32*] [i32* @c1, i32* @c2, i32* @c3]
9; DISABLE-NOT: @{{.*}} = private unnamed_addr constant [3 x i32*] [i32* @c1, i32* @c2, i32* @c3]
10; ENABLE: @{{.*}} = private unnamed_addr constant [3 x i32*] [i32* @g1, i32* @g2, i32* @g3]
11; DISABLE-NOT: @{{.*}} = private unnamed_addr constant [3 x i32*] [i32* @g1, i32* @g2, i32* @g3]
12; ENABLE: @{{.*}} = private unnamed_addr constant [3 x i32 (i32, i32)*] [i32 (i32, i32)* @f1, i32 (i32, i32)* @f2, i32 (i32, i32)* @f3]
13; DISABLE-NOT: @{{.*}} = private unnamed_addr constant [3 x i32 (i32, i32)*] [i32 (i32, i32)* @f1, i32 (i32, i32)* @f2, i32 (i32, i32)* @f3]
14
15target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
16target triple = "armv7a--none-eabi"
17
18define i32 @test1(i32 %n) {
19entry:
20 switch i32 %n, label %sw.default [
21 i32 0, label %sw.bb
22 i32 1, label %sw.bb1
23 i32 2, label %sw.bb2
24 ]
25
26sw.bb:
27 br label %return
28
29sw.bb1:
30 br label %return
31
32sw.bb2:
33 br label %return
34
35sw.default:
36 br label %return
37
38return:
39 %retval.0 = phi i32 [ 15498, %sw.default ], [ 15532, %sw.bb2 ], [ 5678, %sw.bb1 ], [ 1234, %sw.bb ]
40 ret i32 %retval.0
41}
42
43@c1 = external constant i32, align 4
44@c2 = external constant i32, align 4
45@c3 = external constant i32, align 4
46@c4 = external constant i32, align 4
47
48
49define i32* @test2(i32 %n) {
50entry:
51 switch i32 %n, label %sw.default [
52 i32 0, label %sw.bb
53 i32 1, label %sw.bb1
54 i32 2, label %sw.bb2
55 ]
56
57sw.bb:
58 br label %return
59
60sw.bb1:
61 br label %return
62
63sw.bb2:
64 br label %return
65
66sw.default:
67 br label %return
68
69return:
70 %retval.0 = phi i32* [ @c4, %sw.default ], [ @c3, %sw.bb2 ], [ @c2, %sw.bb1 ], [ @c1, %sw.bb ]
71 ret i32* %retval.0
72}
73
74@g1 = external global i32, align 4
75@g2 = external global i32, align 4
76@g3 = external global i32, align 4
77@g4 = external global i32, align 4
78
79define i32* @test3(i32 %n) {
80entry:
81 switch i32 %n, label %sw.default [
82 i32 0, label %sw.bb
83 i32 1, label %sw.bb1
84 i32 2, label %sw.bb2
85 ]
86
87sw.bb:
88 br label %return
89
90sw.bb1:
91 br label %return
92
93sw.bb2:
94 br label %return
95
96sw.default:
97 br label %return
98
99return:
100 %retval.0 = phi i32* [ @g4, %sw.default ], [ @g3, %sw.bb2 ], [ @g2, %sw.bb1 ], [ @g1, %sw.bb ]
101 ret i32* %retval.0
102}
103
104declare i32 @f1(i32, i32)
105declare i32 @f2(i32, i32)
106declare i32 @f3(i32, i32)
107declare i32 @f4(i32, i32)
108declare i32 @f5(i32, i32)
109
110define i32 @test4(i32 %a, i32 %b, i32 %c) {
111entry:
112 %cmp = icmp eq i32 %a, 1
113 br i1 %cmp, label %cond.end11, label %cond.false
114
115cond.false:
116 %cmp1 = icmp eq i32 %a, 2
117 br i1 %cmp1, label %cond.end11, label %cond.false3
118
119cond.false3:
120 %cmp4 = icmp eq i32 %a, 3
121 br i1 %cmp4, label %cond.end11, label %cond.false6
122
123cond.false6:
124 %cmp7 = icmp eq i32 %a, 4
125 %cond = select i1 %cmp7, i32 (i32, i32)* @f4, i32 (i32, i32)* @f5
126 br label %cond.end11
127
128cond.end11:
129 %cond12 = phi i32 (i32, i32)* [ @f1, %entry ], [ @f2, %cond.false ], [ %cond, %cond.false6 ], [ @f3, %cond.false3 ]
130 %call = call i32 %cond12(i32 %b, i32 %c) #2
131 ret i32 %call
132}