1; RUN: llc -march=xcore < %s | FileCheck %s
2
3declare i32 @llvm.xcore.int.p1i8(i8 addrspace(1)* %r)
4declare i32 @llvm.xcore.inct.p1i8(i8 addrspace(1)* %r)
5declare i32 @llvm.xcore.testct.p1i8(i8 addrspace(1)* %r)
6declare i32 @llvm.xcore.testwct.p1i8(i8 addrspace(1)* %r)
7declare i32 @llvm.xcore.getts.p1i8(i8 addrspace(1)* %r)
8declare void @llvm.xcore.outt.p1i8(i8 addrspace(1)* %r, i32 %value)
9declare void @llvm.xcore.outct.p1i8(i8 addrspace(1)* %r, i32 %value)
10declare void @llvm.xcore.chkct.p1i8(i8 addrspace(1)* %r, i32 %value)
11declare void @llvm.xcore.setpt.p1i8(i8 addrspace(1)* %r, i32 %value)
12
13define i32 @int(i8 addrspace(1)* %r) nounwind {
14; CHECK-LABEL: int:
15; CHECK: int r0, res[r0]
16; CHECK-NEXT: retsp 0
17	%result = call i32 @llvm.xcore.int.p1i8(i8 addrspace(1)* %r)
18	%trunc = and i32 %result, 255
19	ret i32 %trunc
20}
21
22define i32 @inct(i8 addrspace(1)* %r) nounwind {
23; CHECK-LABEL: inct:
24; CHECK: inct r0, res[r0]
25; CHECK-NEXT: retsp 0
26	%result = call i32 @llvm.xcore.inct.p1i8(i8 addrspace(1)* %r)
27	%trunc = and i32 %result, 255
28	ret i32 %trunc
29}
30
31define i32 @testct(i8 addrspace(1)* %r) nounwind {
32; CHECK-LABEL: testct:
33; CHECK: testct r0, res[r0]
34; CHECK-NEXT: retsp 0
35	%result = call i32 @llvm.xcore.testct.p1i8(i8 addrspace(1)* %r)
36	%trunc = and i32 %result, 1
37	ret i32 %trunc
38}
39
40define i32 @testwct(i8 addrspace(1)* %r) nounwind {
41; CHECK-LABEL: testwct:
42; CHECK: testwct r0, res[r0]
43; CHECK-NEXT: retsp 0
44	%result = call i32 @llvm.xcore.testwct.p1i8(i8 addrspace(1)* %r)
45	%trunc = and i32 %result, 7
46	ret i32 %trunc
47}
48
49define i32 @getts(i8 addrspace(1)* %r) nounwind {
50; CHECK-LABEL: getts:
51; CHECK: getts r0, res[r0]
52; CHECK-NEXT: retsp 0
53	%result = call i32 @llvm.xcore.getts.p1i8(i8 addrspace(1)* %r)
54	%trunc = and i32 %result, 65535
55	ret i32 %result
56}
57
58define void @outt(i8 addrspace(1)* %r, i32 %value) nounwind {
59; CHECK-LABEL: outt:
60; CHECK-NOT: zext
61; CHECK: outt res[r0], r1
62; CHECK-NEXT: retsp 0
63	%trunc = and i32 %value, 255
64	call void @llvm.xcore.outt.p1i8(i8 addrspace(1)* %r, i32 %trunc)
65	ret void
66}
67
68define void @outct(i8 addrspace(1)* %r, i32 %value) nounwind {
69; CHECK-LABEL: outct:
70; CHECK-NOT: zext
71; CHECK: outct res[r0], r1
72	%trunc = and i32 %value, 255
73	call void @llvm.xcore.outct.p1i8(i8 addrspace(1)* %r, i32 %trunc)
74	ret void
75}
76
77define void @chkct(i8 addrspace(1)* %r, i32 %value) nounwind {
78; CHECK-LABEL: chkct:
79; CHECK-NOT: zext
80; CHECK: chkct res[r0], r1
81	%trunc = and i32 %value, 255
82	call void @llvm.xcore.chkct.p1i8(i8 addrspace(1)* %r, i32 %trunc)
83	ret void
84}
85
86define void @setpt(i8 addrspace(1)* %r, i32 %value) nounwind {
87; CHECK-LABEL: setpt:
88; CHECK-NOT: zext
89; CHECK: setpt res[r0], r1
90	%trunc = and i32 %value, 65535
91	call void @llvm.xcore.setpt.p1i8(i8 addrspace(1)* %r, i32 %trunc)
92	ret void
93}
94