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
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
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
18 ; FUNC-LABEL: {{^}}local_copy_i1_to_i1:
20 ; SI: v_and_b32_e32 v{{[0-9]+}}, 1
24 ; EG: LDS_UBYTE_READ_RET
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
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
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
47 ; FUNC-LABEL: {{^}}global_sextload_i1_to_i32:
48 ; SI: buffer_load_ubyte
50 ; SI: buffer_store_dword
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
62 ; FUNC-LABEL: {{^}}global_zextload_i1_to_i32:
63 ; SI: buffer_load_ubyte
64 ; SI: buffer_store_dword
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
74 ; FUNC-LABEL: {{^}}global_sextload_i1_to_i64:
75 ; SI: buffer_load_ubyte
77 ; SI: buffer_store_dwordx2
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
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
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
98 ; FUNC-LABEL: {{^}}i1_arg:
99 ; SI: buffer_load_ubyte
101 ; SI: buffer_store_byte
103 define void @i1_arg(i1 addrspace(1)* %out, i1 %x) nounwind {
104 store i1 %x, i1 addrspace(1)* %out, align 1
108 ; FUNC-LABEL: {{^}}i1_arg_zext_i32:
109 ; SI: buffer_load_ubyte
110 ; SI: buffer_store_dword
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
118 ; FUNC-LABEL: {{^}}i1_arg_zext_i64:
119 ; SI: buffer_load_ubyte
120 ; SI: buffer_store_dwordx2
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
128 ; FUNC-LABEL: {{^}}i1_arg_sext_i32:
129 ; SI: buffer_load_ubyte
130 ; SI: buffer_store_dword
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
138 ; FUNC-LABEL: {{^}}i1_arg_sext_i64:
139 ; SI: buffer_load_ubyte
142 ; SI: buffer_store_dwordx2
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