blob: f9c6205bc19fd114d979a0edf066a4d82e0f4b85 [file] [log] [blame]
Wesley Pecka70f28c2010-02-23 19:15:24 +00001; Ensure that the FSL instrinsic instruction generate single FSL instructions
2; at the machine level. Additionally, ensure that dynamic values use the
3; dynamic version of the instructions and that constant values use the
4; constant version of the instructions.
5;
6; RUN: llc < %s -march=mblaze | FileCheck %s
7
8declare i32 @llvm.mblaze.fsl.get(i32 %port)
9declare i32 @llvm.mblaze.fsl.aget(i32 %port)
10declare i32 @llvm.mblaze.fsl.cget(i32 %port)
11declare i32 @llvm.mblaze.fsl.caget(i32 %port)
12declare i32 @llvm.mblaze.fsl.eget(i32 %port)
13declare i32 @llvm.mblaze.fsl.eaget(i32 %port)
14declare i32 @llvm.mblaze.fsl.ecget(i32 %port)
15declare i32 @llvm.mblaze.fsl.ecaget(i32 %port)
16declare i32 @llvm.mblaze.fsl.nget(i32 %port)
17declare i32 @llvm.mblaze.fsl.naget(i32 %port)
18declare i32 @llvm.mblaze.fsl.ncget(i32 %port)
19declare i32 @llvm.mblaze.fsl.ncaget(i32 %port)
20declare i32 @llvm.mblaze.fsl.neget(i32 %port)
21declare i32 @llvm.mblaze.fsl.neaget(i32 %port)
22declare i32 @llvm.mblaze.fsl.necget(i32 %port)
23declare i32 @llvm.mblaze.fsl.necaget(i32 %port)
24declare i32 @llvm.mblaze.fsl.tget(i32 %port)
25declare i32 @llvm.mblaze.fsl.taget(i32 %port)
26declare i32 @llvm.mblaze.fsl.tcget(i32 %port)
27declare i32 @llvm.mblaze.fsl.tcaget(i32 %port)
28declare i32 @llvm.mblaze.fsl.teget(i32 %port)
29declare i32 @llvm.mblaze.fsl.teaget(i32 %port)
30declare i32 @llvm.mblaze.fsl.tecget(i32 %port)
31declare i32 @llvm.mblaze.fsl.tecaget(i32 %port)
32declare i32 @llvm.mblaze.fsl.tnget(i32 %port)
33declare i32 @llvm.mblaze.fsl.tnaget(i32 %port)
34declare i32 @llvm.mblaze.fsl.tncget(i32 %port)
35declare i32 @llvm.mblaze.fsl.tncaget(i32 %port)
36declare i32 @llvm.mblaze.fsl.tneget(i32 %port)
37declare i32 @llvm.mblaze.fsl.tneaget(i32 %port)
38declare i32 @llvm.mblaze.fsl.tnecget(i32 %port)
39declare i32 @llvm.mblaze.fsl.tnecaget(i32 %port)
40
41declare void @llvm.mblaze.fsl.put(i32 %value, i32 %port)
42declare void @llvm.mblaze.fsl.aput(i32 %value, i32 %port)
43declare void @llvm.mblaze.fsl.cput(i32 %value, i32 %port)
44declare void @llvm.mblaze.fsl.caput(i32 %value, i32 %port)
45declare void @llvm.mblaze.fsl.nput(i32 %value, i32 %port)
46declare void @llvm.mblaze.fsl.naput(i32 %value, i32 %port)
47declare void @llvm.mblaze.fsl.ncput(i32 %value, i32 %port)
48declare void @llvm.mblaze.fsl.ncaput(i32 %value, i32 %port)
49declare void @llvm.mblaze.fsl.tput(i32 %port)
50declare void @llvm.mblaze.fsl.taput(i32 %port)
51declare void @llvm.mblaze.fsl.tcput(i32 %port)
52declare void @llvm.mblaze.fsl.tcaput(i32 %port)
53declare void @llvm.mblaze.fsl.tnput(i32 %port)
54declare void @llvm.mblaze.fsl.tnaput(i32 %port)
55declare void @llvm.mblaze.fsl.tncput(i32 %port)
56declare void @llvm.mblaze.fsl.tncaput(i32 %port)
57
58define i32 @fsl_get(i32 %port)
59{
60 ; CHECK: fsl_get:
61 %v0 = call i32 @llvm.mblaze.fsl.get(i32 %port)
62 ; CHECK: getd
63 %v1 = call i32 @llvm.mblaze.fsl.aget(i32 %port)
64 ; CHECK-NEXT: agetd
65 %v2 = call i32 @llvm.mblaze.fsl.cget(i32 %port)
66 ; CHECK-NEXT: cgetd
67 %v3 = call i32 @llvm.mblaze.fsl.caget(i32 %port)
68 ; CHECK-NEXT: cagetd
69 %v4 = call i32 @llvm.mblaze.fsl.eget(i32 %port)
70 ; CHECK-NEXT: egetd
71 %v5 = call i32 @llvm.mblaze.fsl.eaget(i32 %port)
72 ; CHECK-NEXT: eagetd
73 %v6 = call i32 @llvm.mblaze.fsl.ecget(i32 %port)
74 ; CHECK-NEXT: ecgetd
75 %v7 = call i32 @llvm.mblaze.fsl.ecaget(i32 %port)
76 ; CHECK-NEXT: ecagetd
77 %v8 = call i32 @llvm.mblaze.fsl.nget(i32 %port)
78 ; CHECK-NEXT: ngetd
79 %v9 = call i32 @llvm.mblaze.fsl.naget(i32 %port)
80 ; CHECK-NEXT: nagetd
81 %v10 = call i32 @llvm.mblaze.fsl.ncget(i32 %port)
82 ; CHECK-NEXT: ncgetd
83 %v11 = call i32 @llvm.mblaze.fsl.ncaget(i32 %port)
84 ; CHECK-NEXT: ncagetd
85 %v12 = call i32 @llvm.mblaze.fsl.neget(i32 %port)
86 ; CHECK-NEXT: negetd
87 %v13 = call i32 @llvm.mblaze.fsl.neaget(i32 %port)
88 ; CHECK-NEXT: neagetd
89 %v14 = call i32 @llvm.mblaze.fsl.necget(i32 %port)
90 ; CHECK-NEXT: necgetd
91 %v15 = call i32 @llvm.mblaze.fsl.necaget(i32 %port)
92 ; CHECK-NEXT: necagetd
93 %v16 = call i32 @llvm.mblaze.fsl.tget(i32 %port)
94 ; CHECK-NEXT: tgetd
95 %v17 = call i32 @llvm.mblaze.fsl.taget(i32 %port)
96 ; CHECK-NEXT: tagetd
97 %v18 = call i32 @llvm.mblaze.fsl.tcget(i32 %port)
98 ; CHECK-NEXT: tcgetd
99 %v19 = call i32 @llvm.mblaze.fsl.tcaget(i32 %port)
100 ; CHECK-NEXT: tcagetd
101 %v20 = call i32 @llvm.mblaze.fsl.teget(i32 %port)
102 ; CHECK-NEXT: tegetd
103 %v21 = call i32 @llvm.mblaze.fsl.teaget(i32 %port)
104 ; CHECK-NEXT: teagetd
105 %v22 = call i32 @llvm.mblaze.fsl.tecget(i32 %port)
106 ; CHECK-NEXT: tecgetd
107 %v23 = call i32 @llvm.mblaze.fsl.tecaget(i32 %port)
108 ; CHECK-NEXT: tecagetd
109 %v24 = call i32 @llvm.mblaze.fsl.tnget(i32 %port)
110 ; CHECK-NEXT: tngetd
111 %v25 = call i32 @llvm.mblaze.fsl.tnaget(i32 %port)
112 ; CHECK-NEXT: tnagetd
113 %v26 = call i32 @llvm.mblaze.fsl.tncget(i32 %port)
114 ; CHECK-NEXT: tncgetd
115 %v27 = call i32 @llvm.mblaze.fsl.tncaget(i32 %port)
116 ; CHECK-NEXT: tncagetd
117 %v28 = call i32 @llvm.mblaze.fsl.tneget(i32 %port)
118 ; CHECK-NEXT: tnegetd
119 %v29 = call i32 @llvm.mblaze.fsl.tneaget(i32 %port)
120 ; CHECK-NEXT: tneagetd
121 %v30 = call i32 @llvm.mblaze.fsl.tnecget(i32 %port)
122 ; CHECK-NEXT: tnecgetd
123 %v31 = call i32 @llvm.mblaze.fsl.tnecaget(i32 %port)
124 ; CHECK-NEXT: tnecagetd
125 ret i32 1
126 ; CHECK: rtsd
127}
128
129define i32 @fslc_get()
130{
131 ; CHECK: fslc_get:
132 %v0 = call i32 @llvm.mblaze.fsl.get(i32 1)
133 ; CHECK: get
134 %v1 = call i32 @llvm.mblaze.fsl.aget(i32 1)
135 ; CHECK-NOT: agetd
136 ; CHECK: aget
137 %v2 = call i32 @llvm.mblaze.fsl.cget(i32 1)
138 ; CHECK-NOT: cgetd
139 ; CHECK: cget
140 %v3 = call i32 @llvm.mblaze.fsl.caget(i32 1)
141 ; CHECK-NOT: cagetd
142 ; CHECK: caget
143 %v4 = call i32 @llvm.mblaze.fsl.eget(i32 1)
144 ; CHECK-NOT: egetd
145 ; CHECK: eget
146 %v5 = call i32 @llvm.mblaze.fsl.eaget(i32 1)
147 ; CHECK-NOT: eagetd
148 ; CHECK: eaget
149 %v6 = call i32 @llvm.mblaze.fsl.ecget(i32 1)
150 ; CHECK-NOT: ecgetd
151 ; CHECK: ecget
152 %v7 = call i32 @llvm.mblaze.fsl.ecaget(i32 1)
153 ; CHECK-NOT: ecagetd
154 ; CHECK: ecaget
155 %v8 = call i32 @llvm.mblaze.fsl.nget(i32 1)
156 ; CHECK-NOT: ngetd
157 ; CHECK: nget
158 %v9 = call i32 @llvm.mblaze.fsl.naget(i32 1)
159 ; CHECK-NOT: nagetd
160 ; CHECK: naget
161 %v10 = call i32 @llvm.mblaze.fsl.ncget(i32 1)
162 ; CHECK-NOT: ncgetd
163 ; CHECK: ncget
164 %v11 = call i32 @llvm.mblaze.fsl.ncaget(i32 1)
165 ; CHECK-NOT: ncagetd
166 ; CHECK: ncaget
167 %v12 = call i32 @llvm.mblaze.fsl.neget(i32 1)
168 ; CHECK-NOT: negetd
169 ; CHECK: neget
170 %v13 = call i32 @llvm.mblaze.fsl.neaget(i32 1)
171 ; CHECK-NOT: neagetd
172 ; CHECK: neaget
173 %v14 = call i32 @llvm.mblaze.fsl.necget(i32 1)
174 ; CHECK-NOT: necgetd
175 ; CHECK: necget
176 %v15 = call i32 @llvm.mblaze.fsl.necaget(i32 1)
177 ; CHECK-NOT: necagetd
178 ; CHECK: necaget
179 %v16 = call i32 @llvm.mblaze.fsl.tget(i32 1)
180 ; CHECK-NOT: tgetd
181 ; CHECK: tget
182 %v17 = call i32 @llvm.mblaze.fsl.taget(i32 1)
183 ; CHECK-NOT: tagetd
184 ; CHECK: taget
185 %v18 = call i32 @llvm.mblaze.fsl.tcget(i32 1)
186 ; CHECK-NOT: tcgetd
187 ; CHECK: tcget
188 %v19 = call i32 @llvm.mblaze.fsl.tcaget(i32 1)
189 ; CHECK-NOT: tcagetd
190 ; CHECK: tcaget
191 %v20 = call i32 @llvm.mblaze.fsl.teget(i32 1)
192 ; CHECK-NOT: tegetd
193 ; CHECK: teget
194 %v21 = call i32 @llvm.mblaze.fsl.teaget(i32 1)
195 ; CHECK-NOT: teagetd
196 ; CHECK: teaget
197 %v22 = call i32 @llvm.mblaze.fsl.tecget(i32 1)
198 ; CHECK-NOT: tecgetd
199 ; CHECK: tecget
200 %v23 = call i32 @llvm.mblaze.fsl.tecaget(i32 1)
201 ; CHECK-NOT: tecagetd
202 ; CHECK: tecaget
203 %v24 = call i32 @llvm.mblaze.fsl.tnget(i32 1)
204 ; CHECK-NOT: tngetd
205 ; CHECK: tnget
206 %v25 = call i32 @llvm.mblaze.fsl.tnaget(i32 1)
207 ; CHECK-NOT: tnagetd
208 ; CHECK: tnaget
209 %v26 = call i32 @llvm.mblaze.fsl.tncget(i32 1)
210 ; CHECK-NOT: tncgetd
211 ; CHECK: tncget
212 %v27 = call i32 @llvm.mblaze.fsl.tncaget(i32 1)
213 ; CHECK-NOT: tncagetd
214 ; CHECK: tncaget
215 %v28 = call i32 @llvm.mblaze.fsl.tneget(i32 1)
216 ; CHECK-NOT: tnegetd
217 ; CHECK: tneget
218 %v29 = call i32 @llvm.mblaze.fsl.tneaget(i32 1)
219 ; CHECK-NOT: tneagetd
220 ; CHECK: tneaget
221 %v30 = call i32 @llvm.mblaze.fsl.tnecget(i32 1)
222 ; CHECK-NOT: tnecgetd
223 ; CHECK: tnecget
224 %v31 = call i32 @llvm.mblaze.fsl.tnecaget(i32 1)
225 ; CHECK-NOT: tnecagetd
226 ; CHECK: tnecaget
227 ret i32 1
228 ; CHECK: rtsd
229}
230
231define void @putfsl(i32 %value, i32 %port)
232{
233 ; CHECK: putfsl:
234 call void @llvm.mblaze.fsl.put(i32 %value, i32 %port)
235 ; CHECK: putd
236 call void @llvm.mblaze.fsl.aput(i32 %value, i32 %port)
237 ; CHECK-NEXT: aputd
238 call void @llvm.mblaze.fsl.cput(i32 %value, i32 %port)
239 ; CHECK-NEXT: cputd
240 call void @llvm.mblaze.fsl.caput(i32 %value, i32 %port)
241 ; CHECK-NEXT: caputd
242 call void @llvm.mblaze.fsl.nput(i32 %value, i32 %port)
243 ; CHECK-NEXT: nputd
244 call void @llvm.mblaze.fsl.naput(i32 %value, i32 %port)
245 ; CHECK-NEXT: naputd
246 call void @llvm.mblaze.fsl.ncput(i32 %value, i32 %port)
247 ; CHECK-NEXT: ncputd
248 call void @llvm.mblaze.fsl.ncaput(i32 %value, i32 %port)
249 ; CHECK-NEXT: ncaputd
250 call void @llvm.mblaze.fsl.tput(i32 %port)
251 ; CHECK-NEXT: tputd
252 call void @llvm.mblaze.fsl.taput(i32 %port)
253 ; CHECK-NEXT: taputd
254 call void @llvm.mblaze.fsl.tcput(i32 %port)
255 ; CHECK-NEXT: tcputd
256 call void @llvm.mblaze.fsl.tcaput(i32 %port)
257 ; CHECK-NEXT: tcaputd
258 call void @llvm.mblaze.fsl.tnput(i32 %port)
259 ; CHECK-NEXT: tnputd
260 call void @llvm.mblaze.fsl.tnaput(i32 %port)
261 ; CHECK-NEXT: tnaputd
262 call void @llvm.mblaze.fsl.tncput(i32 %port)
263 ; CHECK-NEXT: tncputd
264 call void @llvm.mblaze.fsl.tncaput(i32 %port)
265 ; CHECK-NEXT: tncaputd
266 ret void
267 ; CHECK: rtsd
268}
269
270define void @putfsl_const(i32 %value)
271{
272 ; CHECK: putfsl_const:
273 call void @llvm.mblaze.fsl.put(i32 %value, i32 1)
274 ; CHECK-NOT: putd
275 ; CHECK: put
276 call void @llvm.mblaze.fsl.aput(i32 %value, i32 1)
277 ; CHECK-NOT: aputd
278 ; CHECK: aput
279 call void @llvm.mblaze.fsl.cput(i32 %value, i32 1)
280 ; CHECK-NOT: cputd
281 ; CHECK: cput
282 call void @llvm.mblaze.fsl.caput(i32 %value, i32 1)
283 ; CHECK-NOT: caputd
284 ; CHECK: caput
285 call void @llvm.mblaze.fsl.nput(i32 %value, i32 1)
286 ; CHECK-NOT: nputd
287 ; CHECK: nput
288 call void @llvm.mblaze.fsl.naput(i32 %value, i32 1)
289 ; CHECK-NOT: naputd
290 ; CHECK: naput
291 call void @llvm.mblaze.fsl.ncput(i32 %value, i32 1)
292 ; CHECK-NOT: ncputd
293 ; CHECK: ncput
294 call void @llvm.mblaze.fsl.ncaput(i32 %value, i32 1)
295 ; CHECK-NOT: ncaputd
296 ; CHECK: ncaput
297 call void @llvm.mblaze.fsl.tput(i32 1)
298 ; CHECK-NOT: tputd
299 ; CHECK: tput
300 call void @llvm.mblaze.fsl.taput(i32 1)
301 ; CHECK-NOT: taputd
302 ; CHECK: taput
303 call void @llvm.mblaze.fsl.tcput(i32 1)
304 ; CHECK-NOT: tcputd
305 ; CHECK: tcput
306 call void @llvm.mblaze.fsl.tcaput(i32 1)
307 ; CHECK-NOT: tcaputd
308 ; CHECK: tcaput
309 call void @llvm.mblaze.fsl.tnput(i32 1)
310 ; CHECK-NOT: tnputd
311 ; CHECK: tnput
312 call void @llvm.mblaze.fsl.tnaput(i32 1)
313 ; CHECK-NOT: tnaputd
314 ; CHECK: tnaput
315 call void @llvm.mblaze.fsl.tncput(i32 1)
316 ; CHECK-NOT: tncputd
317 ; CHECK: tncput
318 call void @llvm.mblaze.fsl.tncaput(i32 1)
319 ; CHECK-NOT: tncaputd
320 ; CHECK: tncaput
321 ret void
322 ; CHECK: rtsd
323}