]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/R600/load-i1.ll
Vendor import of llvm RELEASE_360/rc1 tag r226102 (effectively, 3.6.0 RC1):
[FreeBSD/FreeBSD.git] / test / CodeGen / R600 / load-i1.ll
1 ; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
2 ; RUN: llc -march=r600 -mcpu=cypress -verify-machineinstrs < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
3
4 ; FUNC-LABEL: {{^}}global_copy_i1_to_i1:
5 ; SI: buffer_load_ubyte
6 ; SI: v_and_b32_e32 v{{[0-9]+}}, 1
7 ; SI: buffer_store_byte
8 ; SI: s_endpgm
9
10 ; EG: VTX_READ_8
11 ; EG: AND_INT
12 define void @global_copy_i1_to_i1(i1 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
13   %load = load i1 addrspace(1)* %in
14   store i1 %load, i1 addrspace(1)* %out, align 1
15   ret void
16 }
17
18 ; FUNC-LABEL: {{^}}local_copy_i1_to_i1:
19 ; SI: ds_read_u8
20 ; SI: v_and_b32_e32 v{{[0-9]+}}, 1
21 ; SI: ds_write_b8
22 ; SI: s_endpgm
23
24 ; EG: LDS_UBYTE_READ_RET
25 ; EG: AND_INT
26 ; EG: LDS_BYTE_WRITE
27 define void @local_copy_i1_to_i1(i1 addrspace(3)* %out, i1 addrspace(3)* %in) nounwind {
28   %load = load i1 addrspace(3)* %in
29   store i1 %load, i1 addrspace(3)* %out, align 1
30   ret void
31 }
32
33 ; FUNC-LABEL: {{^}}constant_copy_i1_to_i1:
34 ; SI: buffer_load_ubyte
35 ; SI: v_and_b32_e32 v{{[0-9]+}}, 1
36 ; SI: buffer_store_byte
37 ; SI: s_endpgm
38
39 ; EG: VTX_READ_8
40 ; EG: AND_INT
41 define void @constant_copy_i1_to_i1(i1 addrspace(1)* %out, i1 addrspace(2)* %in) nounwind {
42   %load = load i1 addrspace(2)* %in
43   store i1 %load, i1 addrspace(1)* %out, align 1
44   ret void
45 }
46
47 ; FUNC-LABEL: {{^}}global_sextload_i1_to_i32:
48 ; SI: buffer_load_ubyte
49 ; SI: v_bfe_i32
50 ; SI: buffer_store_dword
51 ; SI: s_endpgm
52
53 ; EG: VTX_READ_8
54 ; EG: BFE_INT
55 define void @global_sextload_i1_to_i32(i32 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
56   %load = load i1 addrspace(1)* %in
57   %ext = sext i1 %load to i32
58   store i32 %ext, i32 addrspace(1)* %out, align 4
59   ret void
60 }
61
62 ; FUNC-LABEL: {{^}}global_zextload_i1_to_i32:
63 ; SI: buffer_load_ubyte
64 ; SI: buffer_store_dword
65 ; SI: s_endpgm
66
67 define void @global_zextload_i1_to_i32(i32 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
68   %load = load i1 addrspace(1)* %in
69   %ext = zext i1 %load to i32
70   store i32 %ext, i32 addrspace(1)* %out, align 4
71   ret void
72 }
73
74 ; FUNC-LABEL: {{^}}global_sextload_i1_to_i64:
75 ; SI: buffer_load_ubyte
76 ; SI: v_bfe_i32
77 ; SI: buffer_store_dwordx2
78 ; SI: s_endpgm
79 define void @global_sextload_i1_to_i64(i64 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
80   %load = load i1 addrspace(1)* %in
81   %ext = sext i1 %load to i64
82   store i64 %ext, i64 addrspace(1)* %out, align 4
83   ret void
84 }
85
86 ; FUNC-LABEL: {{^}}global_zextload_i1_to_i64:
87 ; SI: buffer_load_ubyte
88 ; SI: v_mov_b32_e32 {{v[0-9]+}}, 0
89 ; SI: buffer_store_dwordx2
90 ; SI: s_endpgm
91 define void @global_zextload_i1_to_i64(i64 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
92   %load = load i1 addrspace(1)* %in
93   %ext = zext i1 %load to i64
94   store i64 %ext, i64 addrspace(1)* %out, align 4
95   ret void
96 }
97
98 ; FUNC-LABEL: {{^}}i1_arg:
99 ; SI: buffer_load_ubyte
100 ; SI: v_and_b32_e32
101 ; SI: buffer_store_byte
102 ; SI: s_endpgm
103 define void @i1_arg(i1 addrspace(1)* %out, i1 %x) nounwind {
104   store i1 %x, i1 addrspace(1)* %out, align 1
105   ret void
106 }
107
108 ; FUNC-LABEL: {{^}}i1_arg_zext_i32:
109 ; SI: buffer_load_ubyte
110 ; SI: buffer_store_dword
111 ; SI: s_endpgm
112 define void @i1_arg_zext_i32(i32 addrspace(1)* %out, i1 %x) nounwind {
113   %ext = zext i1 %x to i32
114   store i32 %ext, i32 addrspace(1)* %out, align 4
115   ret void
116 }
117
118 ; FUNC-LABEL: {{^}}i1_arg_zext_i64:
119 ; SI: buffer_load_ubyte
120 ; SI: buffer_store_dwordx2
121 ; SI: s_endpgm
122 define void @i1_arg_zext_i64(i64 addrspace(1)* %out, i1 %x) nounwind {
123   %ext = zext i1 %x to i64
124   store i64 %ext, i64 addrspace(1)* %out, align 8
125   ret void
126 }
127
128 ; FUNC-LABEL: {{^}}i1_arg_sext_i32:
129 ; SI: buffer_load_ubyte
130 ; SI: buffer_store_dword
131 ; SI: s_endpgm
132 define void @i1_arg_sext_i32(i32 addrspace(1)* %out, i1 %x) nounwind {
133   %ext = sext i1 %x to i32
134   store i32 %ext, i32addrspace(1)* %out, align 4
135   ret void
136 }
137
138 ; FUNC-LABEL: {{^}}i1_arg_sext_i64:
139 ; SI: buffer_load_ubyte
140 ; SI: v_bfe_i32
141 ; SI: v_ashrrev_i32
142 ; SI: buffer_store_dwordx2
143 ; SI: s_endpgm
144 define void @i1_arg_sext_i64(i64 addrspace(1)* %out, i1 %x) nounwind {
145   %ext = sext i1 %x to i64
146   store i64 %ext, i64 addrspace(1)* %out, align 8
147   ret void
148 }