1 ; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs< %s | FileCheck -check-prefix=SI %s
3 ; SI-LABEL: {{^}}global_copy_i1_to_i1:
4 ; SI: buffer_load_ubyte
5 ; SI: v_and_b32_e32 v{{[0-9]+}}, 1
6 ; SI: buffer_store_byte
8 define void @global_copy_i1_to_i1(i1 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
9 %load = load i1 addrspace(1)* %in
10 store i1 %load, i1 addrspace(1)* %out, align 1
14 ; SI-LABEL: {{^}}local_copy_i1_to_i1:
16 ; SI: v_and_b32_e32 v{{[0-9]+}}, 1
19 define void @local_copy_i1_to_i1(i1 addrspace(3)* %out, i1 addrspace(3)* %in) nounwind {
20 %load = load i1 addrspace(3)* %in
21 store i1 %load, i1 addrspace(3)* %out, align 1
25 ; SI-LABEL: {{^}}constant_copy_i1_to_i1:
26 ; SI: buffer_load_ubyte
27 ; SI: v_and_b32_e32 v{{[0-9]+}}, 1
28 ; SI: buffer_store_byte
30 define void @constant_copy_i1_to_i1(i1 addrspace(1)* %out, i1 addrspace(2)* %in) nounwind {
31 %load = load i1 addrspace(2)* %in
32 store i1 %load, i1 addrspace(1)* %out, align 1
36 ; SI-LABEL: {{^}}global_sextload_i1_to_i32:
37 ; SI: buffer_load_ubyte
39 ; SI: buffer_store_dword
41 define void @global_sextload_i1_to_i32(i32 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
42 %load = load i1 addrspace(1)* %in
43 %ext = sext i1 %load to i32
44 store i32 %ext, i32 addrspace(1)* %out, align 4
48 ; SI-LABEL: {{^}}global_zextload_i1_to_i32:
49 ; SI: buffer_load_ubyte
50 ; SI: buffer_store_dword
52 define void @global_zextload_i1_to_i32(i32 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
53 %load = load i1 addrspace(1)* %in
54 %ext = zext i1 %load to i32
55 store i32 %ext, i32 addrspace(1)* %out, align 4
59 ; SI-LABEL: {{^}}global_sextload_i1_to_i64:
60 ; SI: buffer_load_ubyte
62 ; SI: buffer_store_dwordx2
64 define void @global_sextload_i1_to_i64(i64 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
65 %load = load i1 addrspace(1)* %in
66 %ext = sext i1 %load to i64
67 store i64 %ext, i64 addrspace(1)* %out, align 4
71 ; SI-LABEL: {{^}}global_zextload_i1_to_i64:
72 ; SI: buffer_load_ubyte
73 ; SI: v_mov_b32_e32 {{v[0-9]+}}, 0
74 ; SI: buffer_store_dwordx2
76 define void @global_zextload_i1_to_i64(i64 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
77 %load = load i1 addrspace(1)* %in
78 %ext = zext i1 %load to i64
79 store i64 %ext, i64 addrspace(1)* %out, align 4
83 ; SI-LABEL: {{^}}i1_arg:
84 ; SI: buffer_load_ubyte
86 ; SI: buffer_store_byte
88 define void @i1_arg(i1 addrspace(1)* %out, i1 %x) nounwind {
89 store i1 %x, i1 addrspace(1)* %out, align 1
93 ; SI-LABEL: {{^}}i1_arg_zext_i32:
94 ; SI: buffer_load_ubyte
95 ; SI: buffer_store_dword
97 define void @i1_arg_zext_i32(i32 addrspace(1)* %out, i1 %x) nounwind {
98 %ext = zext i1 %x to i32
99 store i32 %ext, i32 addrspace(1)* %out, align 4
103 ; SI-LABEL: {{^}}i1_arg_zext_i64:
104 ; SI: buffer_load_ubyte
105 ; SI: buffer_store_dwordx2
107 define void @i1_arg_zext_i64(i64 addrspace(1)* %out, i1 %x) nounwind {
108 %ext = zext i1 %x to i64
109 store i64 %ext, i64 addrspace(1)* %out, align 8
113 ; SI-LABEL: {{^}}i1_arg_sext_i32:
114 ; SI: buffer_load_ubyte
115 ; SI: buffer_store_dword
117 define void @i1_arg_sext_i32(i32 addrspace(1)* %out, i1 %x) nounwind {
118 %ext = sext i1 %x to i32
119 store i32 %ext, i32addrspace(1)* %out, align 4
123 ; SI-LABEL: {{^}}i1_arg_sext_i64:
124 ; SI: buffer_load_ubyte
127 ; SI: buffer_store_dwordx2
129 define void @i1_arg_sext_i64(i64 addrspace(1)* %out, i1 %x) nounwind {
130 %ext = sext i1 %x to i64
131 store i64 %ext, i64 addrspace(1)* %out, align 8