• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc -march=mipsel -mcpu=mips32r6 -relocation-model=static \
2; RUN:     -disable-mips-delay-filler < %s | FileCheck %s -check-prefix=STATIC32
3; RUN: llc -march=mipsel -mcpu=mips64r6 -relocation-model=pic -target-abi n64 \
4; RUN:     -disable-mips-delay-filler < %s | FileCheck %s -check-prefix=PIC
5
6; Function Attrs: nounwind
7define void @l()  {
8entry:
9; PIC: jalrc $25
10  %call = tail call i32 @k()
11; PIC: jalrc $25
12  %call1 = tail call i32 @j()
13  %cmp = icmp eq i32 %call, %call1
14; CHECK: bnec
15  br i1 %cmp, label %if.then, label %if.end
16
17if.then:                                          ; preds = %entry:
18; STATIC: nop
19; STATIC: jal
20; PIC: jalrc $25
21  tail call void @f(i32 signext -2)
22  br label %if.end
23
24if.end:                                           ; preds = %if.then, %entry
25; CHECK: jrc  $ra
26  ret void
27}
28
29declare i32 @k()
30
31declare i32 @j()
32
33declare void @f(i32 signext)
34
35; Function Attrs: define void @l2()  {
36define void @l2()  {
37entry:
38; PIC: jalrc $25
39  %call = tail call i32 @k()
40; PIC: jalrc $25
41  %call1 = tail call i32 @i()
42  %cmp = icmp eq i32 %call, %call1
43; CHECK: beqc
44  br i1 %cmp, label %if.end, label %if.then
45
46if.then:                                          ; preds = %entry:
47; STATIC: nop
48; STATIC: jal
49; PIC: jalrc $25
50  tail call void @f(i32 signext -1)
51  br label %if.end
52
53if.end:                                           ; preds = %entry, %if.then
54; CHECK: jrc  $ra
55  ret void
56}
57
58declare i32 @i()
59
60; Function Attrs: nounwind
61define void @l3()  {
62entry:
63; PIC: jalrc $25
64  %call = tail call i32 @k()
65  %cmp = icmp slt i32 %call, 0
66; CHECK: bgez
67  br i1 %cmp, label %if.then, label %if.end
68
69if.then:                                          ; preds = %entry:
70; STATIC: nop
71; STATIC: jal
72; PIC: jalrc $25
73  tail call void @f(i32 signext 0)
74  br label %if.end
75
76if.end:                                           ; preds = %if.then, %entry
77; CHECK: jrc $ra
78  ret void
79}
80
81; Function Attrs: nounwind
82define void @l4()  {
83entry:
84  %call = tail call i32 @k()
85  %cmp = icmp slt i32 %call, 1
86; CHECK: bgtzc
87  br i1 %cmp, label %if.then, label %if.end
88
89if.then:                                          ; preds = %entry:
90; STATIC: nop
91; STATIC: jal
92  tail call void @f(i32 signext 1)
93  br label %if.end
94
95if.end:                                           ; preds = %if.then, %entry
96; CHECK: jrc $ra
97  ret void
98}
99
100; Function Attrs: nounwind
101define void @l5()  {
102entry:
103; PIC: jalrc $25
104  %call = tail call i32 @k()
105; PIC: jalrc $25
106  %cmp = icmp sgt i32 %call, 0
107; CHECK: blezc
108  br i1 %cmp, label %if.then, label %if.end
109
110if.then:                                          ; preds = %entry:
111; STATIC: nop
112; STATIC: jal
113; PIC: jalrc $25
114  tail call void @f(i32 signext 2)
115  br label %if.end
116
117if.end:                                           ; preds = %if.then, %entry
118; CHECK: jrc  $ra
119  ret void
120}
121
122; Function Attrs: nounwind
123define void @l6()  {
124entry:
125; PIC: jalrc $25
126  %call = tail call i32 @k()
127; PIC: jalrc $25
128  %cmp = icmp sgt i32 %call, -1
129; CHECK: bltzc
130  br i1 %cmp, label %if.then, label %if.end
131
132if.then:                                          ; preds = %entry:
133; STATIC: nop
134; STATIC: jal
135; PIC: jalrc $25
136  tail call void @f(i32 signext 3)
137  br label %if.end
138
139if.end:                                           ; preds = %if.then, %entry
140; CHECK: jrc $ra
141  ret void
142}
143
144; Function Attrs: nounwind
145define void @l7()  {
146entry:
147; PIC: jalrc $25
148  %call = tail call i32 @k()
149  %cmp = icmp eq i32 %call, 0
150; CHECK: bnezc
151  br i1 %cmp, label %if.then, label %if.end
152
153if.then:                                          ; preds = %entry:
154; STATIC: nop
155; STATIC: jal
156; PIC: jalrc $25
157  tail call void @f(i32 signext 4)
158  br label %if.end
159
160if.end:                                           ; preds = %if.then, %entry
161; CHECK: jrc  $ra
162  ret void
163}
164
165; Function Attrs: nounwind
166define void @l8()  {
167entry:
168; PIC: jalrc $25
169  %call = tail call i32 @k()
170  %cmp = icmp eq i32 %call, 0
171; CHECK: beqzc
172  br i1 %cmp, label %if.end, label %if.then
173
174if.then:                                          ; preds = %entry:
175; STATIC: nop
176; STATIC: jal
177; PIC: jalrc $25
178  tail call void @f(i32 signext 5)
179  br label %if.end
180
181if.end:                                           ; preds = %entry, %if.then
182; CHECK: jrc  $ra
183  ret void
184}
185
186define i32 @l9(i8* ()* %i) #0 {
187entry:
188  %i.addr = alloca i8* ()*, align 4
189  store i8* ()* %i, i8* ()** %i.addr, align 4
190; STATIC32: jal
191; STATIC32: nop
192; PIC: jalrc $25
193  %call = call i32 @k()
194; PIC: jalrc $25
195  %cmp = icmp ne i32 %call, 0
196; CHECK: beqzc
197  br i1 %cmp, label %if.then, label %if.end
198
199if.then:                                          ; preds = %entry
200  %0 = load i8* ()*, i8* ()** %i.addr, align 4
201; CHECK: jalrc $25
202  %call1 = call i8* %0()
203  br label %if.end
204
205if.end:                                           ; preds = %if.then, %entry
206; CHECK: jrc $ra
207  ret i32 -1
208}
209