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