1b50d00e3a56f730341676f269250a3a1b7c998c
[oota-llvm.git] / test / CodeGen / XCore / resources.ll
1 ; RUN: llc -march=xcore < %s | FileCheck %s
2
3 declare i8 addrspace(1)* @llvm.xcore.getr.p1i8(i32 %type)
4 declare void @llvm.xcore.freer.p1i8(i8 addrspace(1)* %r)
5 declare i32 @llvm.xcore.in.p1i8(i8 addrspace(1)* %r)
6 declare i32 @llvm.xcore.int.p1i8(i8 addrspace(1)* %r)
7 declare i32 @llvm.xcore.inct.p1i8(i8 addrspace(1)* %r)
8 declare void @llvm.xcore.out.p1i8(i8 addrspace(1)* %r, i32 %value)
9 declare void @llvm.xcore.outt.p1i8(i8 addrspace(1)* %r, i32 %value)
10 declare void @llvm.xcore.outct.p1i8(i8 addrspace(1)* %r, i32 %value)
11 declare void @llvm.xcore.chkct.p1i8(i8 addrspace(1)* %r, i32 %value)
12 declare i32 @llvm.xcore.testct.p1i8(i8 addrspace(1)* %r)
13 declare i32 @llvm.xcore.testwct.p1i8(i8 addrspace(1)* %r)
14 declare void @llvm.xcore.setd.p1i8(i8 addrspace(1)* %r, i32 %value)
15 declare void @llvm.xcore.setc.p1i8(i8 addrspace(1)* %r, i32 %value)
16 declare i32 @llvm.xcore.inshr.p1i8(i8 addrspace(1)* %r, i32 %value)
17 declare i32 @llvm.xcore.outshr.p1i8(i8 addrspace(1)* %r, i32 %value)
18 declare void @llvm.xcore.setpt.p1i8(i8 addrspace(1)* %r, i32 %value)
19 declare i32 @llvm.xcore.getts.p1i8(i8 addrspace(1)* %r)
20 declare void @llvm.xcore.syncr.p1i8(i8 addrspace(1)* %r)
21 declare void @llvm.xcore.settw.p1i8(i8 addrspace(1)* %r, i32 %value)
22 declare void @llvm.xcore.setv.p1i8(i8 addrspace(1)* %r, i8* %p)
23 declare void @llvm.xcore.setev.p1i8(i8 addrspace(1)* %r, i8* %p)
24 declare void @llvm.xcore.edu.p1i8(i8 addrspace(1)* %r)
25 declare void @llvm.xcore.eeu.p1i8(i8 addrspace(1)* %r)
26 declare void @llvm.xcore.setclk.p1i8.p1i8(i8 addrspace(1)* %a, i8 addrspace(1)* %b)
27 declare void @llvm.xcore.setrdy.p1i8.p1i8(i8 addrspace(1)* %a, i8 addrspace(1)* %b)
28 declare void @llvm.xcore.setpsc.p1i8(i8 addrspace(1)* %r, i32 %value)
29 declare i32 @llvm.xcore.peek.p1i8(i8 addrspace(1)* %r)
30 declare i32 @llvm.xcore.endin.p1i8(i8 addrspace(1)* %r)
31
32 define i8 addrspace(1)* @getr() {
33 ; CHECK-LABEL: getr:
34 ; CHECK: getr r0, 5
35         %result = call i8 addrspace(1)* @llvm.xcore.getr.p1i8(i32 5)
36         ret i8 addrspace(1)* %result
37 }
38
39 define void @freer(i8 addrspace(1)* %r) {
40 ; CHECK-LABEL: freer:
41 ; CHECK: freer res[r0]
42         call void @llvm.xcore.freer.p1i8(i8 addrspace(1)* %r)
43         ret void
44 }
45
46 define i32 @in(i8 addrspace(1)* %r) {
47 ; CHECK-LABEL: in:
48 ; CHECK: in r0, res[r0]
49         %result = call i32 @llvm.xcore.in.p1i8(i8 addrspace(1)* %r)
50         ret i32 %result
51 }
52
53 define i32 @int(i8 addrspace(1)* %r) {
54 ; CHECK-LABEL: int:
55 ; CHECK: int r0, res[r0]
56         %result = call i32 @llvm.xcore.int.p1i8(i8 addrspace(1)* %r)
57         ret i32 %result
58 }
59
60 define i32 @inct(i8 addrspace(1)* %r) {
61 ; CHECK-LABEL: inct:
62 ; CHECK: inct r0, res[r0]
63         %result = call i32 @llvm.xcore.inct.p1i8(i8 addrspace(1)* %r)
64         ret i32 %result
65 }
66
67 define void @out(i8 addrspace(1)* %r, i32 %value) {
68 ; CHECK-LABEL: out:
69 ; CHECK: out res[r0], r1
70         call void @llvm.xcore.out.p1i8(i8 addrspace(1)* %r, i32 %value)
71         ret void
72 }
73
74 define void @outt(i8 addrspace(1)* %r, i32 %value) {
75 ; CHECK-LABEL: outt:
76 ; CHECK: outt res[r0], r1
77         call void @llvm.xcore.outt.p1i8(i8 addrspace(1)* %r, i32 %value)
78         ret void
79 }
80
81 define void @outct(i8 addrspace(1)* %r, i32 %value) {
82 ; CHECK-LABEL: outct:
83 ; CHECK: outct res[r0], r1
84         call void @llvm.xcore.outct.p1i8(i8 addrspace(1)* %r, i32 %value)
85         ret void
86 }
87
88 define void @outcti(i8 addrspace(1)* %r) {
89 ; CHECK-LABEL: outcti:
90 ; CHECK: outct res[r0], 11
91         call void @llvm.xcore.outct.p1i8(i8 addrspace(1)* %r, i32 11)
92         ret void
93 }
94
95 define void @chkct(i8 addrspace(1)* %r, i32 %value) {
96 ; CHECK-LABEL: chkct:
97 ; CHECK: chkct res[r0], r1
98         call void @llvm.xcore.chkct.p1i8(i8 addrspace(1)* %r, i32 %value)
99         ret void
100 }
101
102 define void @chkcti(i8 addrspace(1)* %r) {
103 ; CHECK-LABEL: chkcti:
104 ; CHECK: chkct res[r0], 11
105         call void @llvm.xcore.chkct.p1i8(i8 addrspace(1)* %r, i32 11)
106         ret void
107 }
108
109 define void @setd(i8 addrspace(1)* %r, i32 %value) {
110 ; CHECK-LABEL: setd:
111 ; CHECK: setd res[r0], r1
112         call void @llvm.xcore.setd.p1i8(i8 addrspace(1)* %r, i32 %value)
113         ret void
114 }
115
116 define void @setc(i8 addrspace(1)* %r, i32 %value) {
117 ; CHECK-LABEL: setc:
118 ; CHECK: setc res[r0], r1
119         call void @llvm.xcore.setc.p1i8(i8 addrspace(1)* %r, i32 %value)
120         ret void
121 }
122
123 define void @setci(i8 addrspace(1)* %r) {
124 ; CHECK-LABEL: setci:
125 ; CHECK: setc res[r0], 2
126         call void @llvm.xcore.setc.p1i8(i8 addrspace(1)* %r, i32 2)
127         ret void
128 }
129
130 define i32 @inshr(i32 %value, i8 addrspace(1)* %r) {
131 ; CHECK-LABEL: inshr:
132 ; CHECK: inshr r0, res[r1]
133         %result = call i32 @llvm.xcore.inshr.p1i8(i8 addrspace(1)* %r, i32 %value)
134         ret i32 %result
135 }
136
137 define i32 @outshr(i32 %value, i8 addrspace(1)* %r) {
138 ; CHECK-LABEL: outshr:
139 ; CHECK: outshr res[r1], r0
140         %result = call i32 @llvm.xcore.outshr.p1i8(i8 addrspace(1)* %r, i32 %value)
141         ret i32 %result
142 }
143
144 define void @setpt(i8 addrspace(1)* %r, i32 %value) {
145 ; CHECK-LABEL: setpt:
146 ; CHECK: setpt res[r0], r1
147         call void @llvm.xcore.setpt.p1i8(i8 addrspace(1)* %r, i32 %value)
148         ret void
149 }
150
151 define i32 @getts(i8 addrspace(1)* %r) {
152 ; CHECK-LABEL: getts:
153 ; CHECK: getts r0, res[r0]
154         %result = call i32 @llvm.xcore.getts.p1i8(i8 addrspace(1)* %r)
155         ret i32 %result
156 }
157
158 define void @syncr(i8 addrspace(1)* %r) {
159 ; CHECK-LABEL: syncr:
160 ; CHECK: syncr res[r0]
161         call void @llvm.xcore.syncr.p1i8(i8 addrspace(1)* %r)
162         ret void
163 }
164
165 define void @settw(i8 addrspace(1)* %r, i32 %value) {
166 ; CHECK-LABEL: settw:
167 ; CHECK: settw res[r0], r1
168         call void @llvm.xcore.settw.p1i8(i8 addrspace(1)* %r, i32 %value)
169         ret void
170 }
171
172 define void @setv(i8 addrspace(1)* %r, i8* %p) {
173 ; CHECK-LABEL: setv:
174 ; CHECK: mov r11, r1
175 ; CHECK-NEXT: setv res[r0], r11
176         call void @llvm.xcore.setv.p1i8(i8 addrspace(1)* %r, i8* %p)
177         ret void
178 }
179
180 define void @setev(i8 addrspace(1)* %r, i8* %p) {
181 ; CHECK-LABEL: setev:
182 ; CHECK: mov r11, r1
183 ; CHECK-NEXT: setev res[r0], r11
184         call void @llvm.xcore.setev.p1i8(i8 addrspace(1)* %r, i8* %p)
185         ret void
186 }
187
188 define void @edu(i8 addrspace(1)* %r) {
189 ; CHECK-LABEL: edu:
190 ; CHECK: edu res[r0]
191         call void @llvm.xcore.edu.p1i8(i8 addrspace(1)* %r)
192         ret void
193 }
194
195 define void @eeu(i8 addrspace(1)* %r) {
196 ; CHECK-LABEL: eeu:
197 ; CHECK: eeu res[r0]
198         call void @llvm.xcore.eeu.p1i8(i8 addrspace(1)* %r)
199         ret void
200 }
201
202 define void @setclk(i8 addrspace(1)* %a, i8 addrspace(1)* %b) {
203 ; CHECK: setclk
204 ; CHECK: setclk res[r0], r1
205         call void @llvm.xcore.setclk.p1i8.p1i8(i8 addrspace(1)* %a, i8 addrspace(1)* %b)
206         ret void
207 }
208
209 define void @setrdy(i8 addrspace(1)* %a, i8 addrspace(1)* %b) {
210 ; CHECK: setrdy
211 ; CHECK: setrdy res[r0], r1
212         call void @llvm.xcore.setrdy.p1i8.p1i8(i8 addrspace(1)* %a, i8 addrspace(1)* %b)
213         ret void
214 }
215
216 define void @setpsc(i8 addrspace(1)* %r, i32 %value) {
217 ; CHECK: setpsc
218 ; CHECK: setpsc res[r0], r1
219         call void @llvm.xcore.setpsc.p1i8(i8 addrspace(1)* %r, i32 %value)
220         ret void
221 }
222
223 define i32 @peek(i8 addrspace(1)* %r) {
224 ; CHECK-LABEL: peek:
225 ; CHECK: peek r0, res[r0]
226         %result = call i32 @llvm.xcore.peek.p1i8(i8 addrspace(1)* %r)
227         ret i32 %result
228 }
229
230 define i32 @endin(i8 addrspace(1)* %r) {
231 ; CHECK-LABEL: endin:
232 ; CHECK: endin r0, res[r0]
233         %result = call i32 @llvm.xcore.endin.p1i8(i8 addrspace(1)* %r)
234         ret i32 %result
235 }
236
237 define i32 @testct(i8 addrspace(1)* %r) {
238 ; CHECK-LABEL: testct:
239 ; CHECK: testct r0, res[r0]
240         %result = call i32 @llvm.xcore.testct.p1i8(i8 addrspace(1)* %r)
241         ret i32 %result
242 }
243
244 define i32 @testwct(i8 addrspace(1)* %r) {
245 ; CHECK-LABEL: testwct:
246 ; CHECK: testwct r0, res[r0]
247         %result = call i32 @llvm.xcore.testwct.p1i8(i8 addrspace(1)* %r)
248         ret i32 %result
249 }