1 ; 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.
6 ; RUN: llc -O3 < %s -march=mblaze | FileCheck %s
8 declare i32 @llvm.mblaze.fsl.get(i32 %port)
9 declare i32 @llvm.mblaze.fsl.aget(i32 %port)
10 declare i32 @llvm.mblaze.fsl.cget(i32 %port)
11 declare i32 @llvm.mblaze.fsl.caget(i32 %port)
12 declare i32 @llvm.mblaze.fsl.eget(i32 %port)
13 declare i32 @llvm.mblaze.fsl.eaget(i32 %port)
14 declare i32 @llvm.mblaze.fsl.ecget(i32 %port)
15 declare i32 @llvm.mblaze.fsl.ecaget(i32 %port)
16 declare i32 @llvm.mblaze.fsl.nget(i32 %port)
17 declare i32 @llvm.mblaze.fsl.naget(i32 %port)
18 declare i32 @llvm.mblaze.fsl.ncget(i32 %port)
19 declare i32 @llvm.mblaze.fsl.ncaget(i32 %port)
20 declare i32 @llvm.mblaze.fsl.neget(i32 %port)
21 declare i32 @llvm.mblaze.fsl.neaget(i32 %port)
22 declare i32 @llvm.mblaze.fsl.necget(i32 %port)
23 declare i32 @llvm.mblaze.fsl.necaget(i32 %port)
24 declare i32 @llvm.mblaze.fsl.tget(i32 %port)
25 declare i32 @llvm.mblaze.fsl.taget(i32 %port)
26 declare i32 @llvm.mblaze.fsl.tcget(i32 %port)
27 declare i32 @llvm.mblaze.fsl.tcaget(i32 %port)
28 declare i32 @llvm.mblaze.fsl.teget(i32 %port)
29 declare i32 @llvm.mblaze.fsl.teaget(i32 %port)
30 declare i32 @llvm.mblaze.fsl.tecget(i32 %port)
31 declare i32 @llvm.mblaze.fsl.tecaget(i32 %port)
32 declare i32 @llvm.mblaze.fsl.tnget(i32 %port)
33 declare i32 @llvm.mblaze.fsl.tnaget(i32 %port)
34 declare i32 @llvm.mblaze.fsl.tncget(i32 %port)
35 declare i32 @llvm.mblaze.fsl.tncaget(i32 %port)
36 declare i32 @llvm.mblaze.fsl.tneget(i32 %port)
37 declare i32 @llvm.mblaze.fsl.tneaget(i32 %port)
38 declare i32 @llvm.mblaze.fsl.tnecget(i32 %port)
39 declare i32 @llvm.mblaze.fsl.tnecaget(i32 %port)
41 declare void @llvm.mblaze.fsl.put(i32 %value, i32 %port)
42 declare void @llvm.mblaze.fsl.aput(i32 %value, i32 %port)
43 declare void @llvm.mblaze.fsl.cput(i32 %value, i32 %port)
44 declare void @llvm.mblaze.fsl.caput(i32 %value, i32 %port)
45 declare void @llvm.mblaze.fsl.nput(i32 %value, i32 %port)
46 declare void @llvm.mblaze.fsl.naput(i32 %value, i32 %port)
47 declare void @llvm.mblaze.fsl.ncput(i32 %value, i32 %port)
48 declare void @llvm.mblaze.fsl.ncaput(i32 %value, i32 %port)
49 declare void @llvm.mblaze.fsl.tput(i32 %port)
50 declare void @llvm.mblaze.fsl.taput(i32 %port)
51 declare void @llvm.mblaze.fsl.tcput(i32 %port)
52 declare void @llvm.mblaze.fsl.tcaput(i32 %port)
53 declare void @llvm.mblaze.fsl.tnput(i32 %port)
54 declare void @llvm.mblaze.fsl.tnaput(i32 %port)
55 declare void @llvm.mblaze.fsl.tncput(i32 %port)
56 declare void @llvm.mblaze.fsl.tncaput(i32 %port)
58 define void @fsl_get(i32 %port) {
60 %v0 = call i32 @llvm.mblaze.fsl.get(i32 %port)
62 %v1 = call i32 @llvm.mblaze.fsl.aget(i32 %port)
64 %v2 = call i32 @llvm.mblaze.fsl.cget(i32 %port)
66 %v3 = call i32 @llvm.mblaze.fsl.caget(i32 %port)
68 %v4 = call i32 @llvm.mblaze.fsl.eget(i32 %port)
70 %v5 = call i32 @llvm.mblaze.fsl.eaget(i32 %port)
72 %v6 = call i32 @llvm.mblaze.fsl.ecget(i32 %port)
74 %v7 = call i32 @llvm.mblaze.fsl.ecaget(i32 %port)
76 %v8 = call i32 @llvm.mblaze.fsl.nget(i32 %port)
78 %v9 = call i32 @llvm.mblaze.fsl.naget(i32 %port)
80 %v10 = call i32 @llvm.mblaze.fsl.ncget(i32 %port)
82 %v11 = call i32 @llvm.mblaze.fsl.ncaget(i32 %port)
84 %v12 = call i32 @llvm.mblaze.fsl.neget(i32 %port)
86 %v13 = call i32 @llvm.mblaze.fsl.neaget(i32 %port)
88 %v14 = call i32 @llvm.mblaze.fsl.necget(i32 %port)
90 %v15 = call i32 @llvm.mblaze.fsl.necaget(i32 %port)
91 ; CHECK-NEXT: necagetd
92 %v16 = call i32 @llvm.mblaze.fsl.tget(i32 %port)
94 %v17 = call i32 @llvm.mblaze.fsl.taget(i32 %port)
96 %v18 = call i32 @llvm.mblaze.fsl.tcget(i32 %port)
98 %v19 = call i32 @llvm.mblaze.fsl.tcaget(i32 %port)
100 %v20 = call i32 @llvm.mblaze.fsl.teget(i32 %port)
102 %v21 = call i32 @llvm.mblaze.fsl.teaget(i32 %port)
103 ; CHECK-NEXT: teagetd
104 %v22 = call i32 @llvm.mblaze.fsl.tecget(i32 %port)
105 ; CHECK-NEXT: tecgetd
106 %v23 = call i32 @llvm.mblaze.fsl.tecaget(i32 %port)
107 ; CHECK-NEXT: tecagetd
108 %v24 = call i32 @llvm.mblaze.fsl.tnget(i32 %port)
110 %v25 = call i32 @llvm.mblaze.fsl.tnaget(i32 %port)
111 ; CHECK-NEXT: tnagetd
112 %v26 = call i32 @llvm.mblaze.fsl.tncget(i32 %port)
113 ; CHECK-NEXT: tncgetd
114 %v27 = call i32 @llvm.mblaze.fsl.tncaget(i32 %port)
115 ; CHECK-NEXT: tncagetd
116 %v28 = call i32 @llvm.mblaze.fsl.tneget(i32 %port)
117 ; CHECK-NEXT: tnegetd
118 %v29 = call i32 @llvm.mblaze.fsl.tneaget(i32 %port)
119 ; CHECK-NEXT: tneagetd
120 %v30 = call i32 @llvm.mblaze.fsl.tnecget(i32 %port)
121 ; CHECK-NEXT: tnecgetd
122 %v31 = call i32 @llvm.mblaze.fsl.tnecaget(i32 %port)
123 ; CHECK-NEXT: tnecagetd
128 define void @fslc_get() {
130 %v0 = call i32 @llvm.mblaze.fsl.get(i32 1)
132 %v1 = call i32 @llvm.mblaze.fsl.aget(i32 1)
135 %v2 = call i32 @llvm.mblaze.fsl.cget(i32 1)
138 %v3 = call i32 @llvm.mblaze.fsl.caget(i32 1)
141 %v4 = call i32 @llvm.mblaze.fsl.eget(i32 1)
144 %v5 = call i32 @llvm.mblaze.fsl.eaget(i32 1)
147 %v6 = call i32 @llvm.mblaze.fsl.ecget(i32 1)
150 %v7 = call i32 @llvm.mblaze.fsl.ecaget(i32 1)
153 %v8 = call i32 @llvm.mblaze.fsl.nget(i32 1)
156 %v9 = call i32 @llvm.mblaze.fsl.naget(i32 1)
159 %v10 = call i32 @llvm.mblaze.fsl.ncget(i32 1)
162 %v11 = call i32 @llvm.mblaze.fsl.ncaget(i32 1)
165 %v12 = call i32 @llvm.mblaze.fsl.neget(i32 1)
168 %v13 = call i32 @llvm.mblaze.fsl.neaget(i32 1)
171 %v14 = call i32 @llvm.mblaze.fsl.necget(i32 1)
174 %v15 = call i32 @llvm.mblaze.fsl.necaget(i32 1)
175 ; CHECK-NOT: necagetd
177 %v16 = call i32 @llvm.mblaze.fsl.tget(i32 1)
180 %v17 = call i32 @llvm.mblaze.fsl.taget(i32 1)
183 %v18 = call i32 @llvm.mblaze.fsl.tcget(i32 1)
186 %v19 = call i32 @llvm.mblaze.fsl.tcaget(i32 1)
189 %v20 = call i32 @llvm.mblaze.fsl.teget(i32 1)
192 %v21 = call i32 @llvm.mblaze.fsl.teaget(i32 1)
195 %v22 = call i32 @llvm.mblaze.fsl.tecget(i32 1)
198 %v23 = call i32 @llvm.mblaze.fsl.tecaget(i32 1)
199 ; CHECK-NOT: tecagetd
201 %v24 = call i32 @llvm.mblaze.fsl.tnget(i32 1)
204 %v25 = call i32 @llvm.mblaze.fsl.tnaget(i32 1)
207 %v26 = call i32 @llvm.mblaze.fsl.tncget(i32 1)
210 %v27 = call i32 @llvm.mblaze.fsl.tncaget(i32 1)
211 ; CHECK-NOT: tncagetd
213 %v28 = call i32 @llvm.mblaze.fsl.tneget(i32 1)
216 %v29 = call i32 @llvm.mblaze.fsl.tneaget(i32 1)
217 ; CHECK-NOT: tneagetd
219 %v30 = call i32 @llvm.mblaze.fsl.tnecget(i32 1)
220 ; CHECK-NOT: tnecgetd
222 %v31 = call i32 @llvm.mblaze.fsl.tnecaget(i32 1)
223 ; CHECK-NOT: tnecagetd
229 define void @putfsl(i32 %value, i32 %port) {
231 call void @llvm.mblaze.fsl.put(i32 %value, i32 %port)
233 call void @llvm.mblaze.fsl.aput(i32 %value, i32 %port)
235 call void @llvm.mblaze.fsl.cput(i32 %value, i32 %port)
237 call void @llvm.mblaze.fsl.caput(i32 %value, i32 %port)
239 call void @llvm.mblaze.fsl.nput(i32 %value, i32 %port)
241 call void @llvm.mblaze.fsl.naput(i32 %value, i32 %port)
243 call void @llvm.mblaze.fsl.ncput(i32 %value, i32 %port)
245 call void @llvm.mblaze.fsl.ncaput(i32 %value, i32 %port)
246 ; CHECK-NEXT: ncaputd
247 call void @llvm.mblaze.fsl.tput(i32 %port)
249 call void @llvm.mblaze.fsl.taput(i32 %port)
251 call void @llvm.mblaze.fsl.tcput(i32 %port)
253 call void @llvm.mblaze.fsl.tcaput(i32 %port)
254 ; CHECK-NEXT: tcaputd
255 call void @llvm.mblaze.fsl.tnput(i32 %port)
257 call void @llvm.mblaze.fsl.tnaput(i32 %port)
258 ; CHECK-NEXT: tnaputd
259 call void @llvm.mblaze.fsl.tncput(i32 %port)
260 ; CHECK-NEXT: tncputd
261 call void @llvm.mblaze.fsl.tncaput(i32 %port)
262 ; CHECK-NEXT: tncaputd
267 define void @putfsl_const(i32 %value) {
268 ; CHECK: putfsl_const:
269 call void @llvm.mblaze.fsl.put(i32 %value, i32 1)
272 call void @llvm.mblaze.fsl.aput(i32 %value, i32 1)
275 call void @llvm.mblaze.fsl.cput(i32 %value, i32 1)
278 call void @llvm.mblaze.fsl.caput(i32 %value, i32 1)
281 call void @llvm.mblaze.fsl.nput(i32 %value, i32 1)
284 call void @llvm.mblaze.fsl.naput(i32 %value, i32 1)
287 call void @llvm.mblaze.fsl.ncput(i32 %value, i32 1)
290 call void @llvm.mblaze.fsl.ncaput(i32 %value, i32 1)
293 call void @llvm.mblaze.fsl.tput(i32 1)
296 call void @llvm.mblaze.fsl.taput(i32 1)
299 call void @llvm.mblaze.fsl.tcput(i32 1)
302 call void @llvm.mblaze.fsl.tcaput(i32 1)
305 call void @llvm.mblaze.fsl.tnput(i32 1)
308 call void @llvm.mblaze.fsl.tnaput(i32 1)
311 call void @llvm.mblaze.fsl.tncput(i32 1)
314 call void @llvm.mblaze.fsl.tncaput(i32 1)
315 ; CHECK-NOT: tncaputd