Add XCore intrinsic for settw instruction.
[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 void @llvm.xcore.setd.p1i8(i8 addrspace(1)* %r, i32 %value)
13 declare void @llvm.xcore.setc.p1i8(i8 addrspace(1)* %r, i32 %value)
14 declare i32 @llvm.xcore.inshr.p1i8(i8 addrspace(1)* %r, i32 %value)
15 declare i32 @llvm.xcore.outshr.p1i8(i8 addrspace(1)* %r, i32 %value)
16 declare void @llvm.xcore.setpt.p1i8(i8 addrspace(1)* %r, i32 %value)
17 declare i32 @llvm.xcore.getts.p1i8(i8 addrspace(1)* %r)
18 declare void @llvm.xcore.syncr.p1i8(i8 addrspace(1)* %r)
19 declare void @llvm.xcore.settw.p1i8(i8 addrspace(1)* %r, i32 %value)
20
21 define i8 addrspace(1)* @getr() {
22 ; CHECK: getr:
23 ; CHECK: getr r0, 5
24         %result = call i8 addrspace(1)* @llvm.xcore.getr.p1i8(i32 5)
25         ret i8 addrspace(1)* %result
26 }
27
28 define void @freer(i8 addrspace(1)* %r) {
29 ; CHECK: freer:
30 ; CHECK: freer res[r0]
31         call void @llvm.xcore.freer.p1i8(i8 addrspace(1)* %r)
32         ret void
33 }
34
35 define i32 @in(i8 addrspace(1)* %r) {
36 ; CHECK: in:
37 ; CHECK: in r0, res[r0]
38         %result = call i32 @llvm.xcore.in.p1i8(i8 addrspace(1)* %r)
39         ret i32 %result
40 }
41
42 define i32 @int(i8 addrspace(1)* %r) {
43 ; CHECK: int:
44 ; CHECK: int r0, res[r0]
45         %result = call i32 @llvm.xcore.int.p1i8(i8 addrspace(1)* %r)
46         ret i32 %result
47 }
48
49 define i32 @inct(i8 addrspace(1)* %r) {
50 ; CHECK: inct:
51 ; CHECK: inct r0, res[r0]
52         %result = call i32 @llvm.xcore.inct.p1i8(i8 addrspace(1)* %r)
53         ret i32 %result
54 }
55
56 define void @out(i8 addrspace(1)* %r, i32 %value) {
57 ; CHECK: out:
58 ; CHECK: out res[r0], r1
59         call void @llvm.xcore.out.p1i8(i8 addrspace(1)* %r, i32 %value)
60         ret void
61 }
62
63 define void @outt(i8 addrspace(1)* %r, i32 %value) {
64 ; CHECK: outt:
65 ; CHECK: outt res[r0], r1
66         call void @llvm.xcore.outt.p1i8(i8 addrspace(1)* %r, i32 %value)
67         ret void
68 }
69
70 define void @outct(i8 addrspace(1)* %r, i32 %value) {
71 ; CHECK: outct:
72 ; CHECK: outct res[r0], r1
73         call void @llvm.xcore.outct.p1i8(i8 addrspace(1)* %r, i32 %value)
74         ret void
75 }
76
77 define void @outcti(i8 addrspace(1)* %r) {
78 ; CHECK: outcti:
79 ; CHECK: outct res[r0], 11
80         call void @llvm.xcore.outct.p1i8(i8 addrspace(1)* %r, i32 11)
81         ret void
82 }
83
84 define void @chkct(i8 addrspace(1)* %r, i32 %value) {
85 ; CHECK: chkct:
86 ; CHECK: chkct res[r0], r1
87         call void @llvm.xcore.chkct.p1i8(i8 addrspace(1)* %r, i32 %value)
88         ret void
89 }
90
91 define void @chkcti(i8 addrspace(1)* %r) {
92 ; CHECK: chkcti:
93 ; CHECK: chkct res[r0], 11
94         call void @llvm.xcore.chkct.p1i8(i8 addrspace(1)* %r, i32 11)
95         ret void
96 }
97
98 define void @setd(i8 addrspace(1)* %r, i32 %value) {
99 ; CHECK: setd:
100 ; CHECK: setd res[r0], r1
101         call void @llvm.xcore.setd.p1i8(i8 addrspace(1)* %r, i32 %value)
102         ret void
103 }
104
105 define void @setc(i8 addrspace(1)* %r, i32 %value) {
106 ; CHECK: setc:
107 ; CHECK: setc res[r0], r1
108         call void @llvm.xcore.setc.p1i8(i8 addrspace(1)* %r, i32 %value)
109         ret void
110 }
111
112 define void @setci(i8 addrspace(1)* %r) {
113 ; CHECK: setci:
114 ; CHECK: setc res[r0], 2
115         call void @llvm.xcore.setc.p1i8(i8 addrspace(1)* %r, i32 2)
116         ret void
117 }
118
119 define i32 @inshr(i32 %value, i8 addrspace(1)* %r) {
120 ; CHECK: inshr:
121 ; CHECK: inshr r0, res[r1]
122         %result = call i32 @llvm.xcore.inshr.p1i8(i8 addrspace(1)* %r, i32 %value)
123         ret i32 %result
124 }
125
126 define i32 @outshr(i32 %value, i8 addrspace(1)* %r) {
127 ; CHECK: outshr:
128 ; CHECK: outshr res[r1], r0
129         %result = call i32 @llvm.xcore.outshr.p1i8(i8 addrspace(1)* %r, i32 %value)
130         ret i32 %result
131 }
132
133 define void @setpt(i8 addrspace(1)* %r, i32 %value) {
134 ; CHECK: setpt:
135 ; CHECK: setpt res[r0], r1
136         call void @llvm.xcore.setpt.p1i8(i8 addrspace(1)* %r, i32 %value)
137         ret void
138 }
139
140 define i32 @getts(i8 addrspace(1)* %r) {
141 ; CHECK: getts:
142 ; CHECK: getts r0, res[r0]
143         %result = call i32 @llvm.xcore.getts.p1i8(i8 addrspace(1)* %r)
144         ret i32 %result
145 }
146
147 define void @syncr(i8 addrspace(1)* %r) {
148 ; CHECK: syncr:
149 ; CHECK: syncr res[r0]
150         call void @llvm.xcore.syncr.p1i8(i8 addrspace(1)* %r)
151         ret void
152 }
153
154 define void @settw(i8 addrspace(1)* %r, i32 %value) {
155 ; CHECK: settw:
156 ; CHECK: settw res[r0], r1
157         call void @llvm.xcore.settw.p1i8(i8 addrspace(1)* %r, i32 %value)
158         ret void
159 }