blob: 1378cf70f252a441df0e6669f584c725f9622eb6 [file] [log] [blame]
Tom Stellard919bb6b2014-04-29 23:12:53 +00001; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs< %s | FileCheck -check-prefix=SI %s
Matt Arsenault470acd82014-04-15 22:28:39 +00002
3
Tom Stellard79243d92014-10-01 17:15:17 +00004; SI-LABEL: {{^}}global_copy_i1_to_i1:
Tom Stellard326d6ec2014-11-05 14:50:53 +00005; SI: buffer_load_ubyte
6; SI: v_and_b32_e32 v{{[0-9]+}}, 1
7; SI: buffer_store_byte
8; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +00009define void @global_copy_i1_to_i1(i1 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
10 %load = load i1 addrspace(1)* %in
11 store i1 %load, i1 addrspace(1)* %out, align 1
12 ret void
13}
14
Tom Stellard79243d92014-10-01 17:15:17 +000015; SI-LABEL: {{^}}global_sextload_i1_to_i32:
Matt Arsenault79db0a72014-11-23 02:57:49 +000016; SI: buffer_load_ubyte
17; SI: v_bfe_i32
Tom Stellard326d6ec2014-11-05 14:50:53 +000018; SI: buffer_store_dword
19; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +000020define void @global_sextload_i1_to_i32(i32 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
21 %load = load i1 addrspace(1)* %in
22 %ext = sext i1 %load to i32
23 store i32 %ext, i32 addrspace(1)* %out, align 4
24 ret void
25}
26
Tom Stellard79243d92014-10-01 17:15:17 +000027; SI-LABEL: {{^}}global_zextload_i1_to_i32:
Tom Stellard326d6ec2014-11-05 14:50:53 +000028; SI: buffer_load_ubyte
29; SI: buffer_store_dword
30; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +000031define void @global_zextload_i1_to_i32(i32 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
32 %load = load i1 addrspace(1)* %in
33 %ext = zext i1 %load to i32
34 store i32 %ext, i32 addrspace(1)* %out, align 4
35 ret void
36}
37
Tom Stellard79243d92014-10-01 17:15:17 +000038; SI-LABEL: {{^}}global_sextload_i1_to_i64:
Matt Arsenault79db0a72014-11-23 02:57:49 +000039; SI: buffer_load_ubyte
40; SI: v_bfe_i32
Tom Stellard326d6ec2014-11-05 14:50:53 +000041; SI: buffer_store_dwordx2
42; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +000043define void @global_sextload_i1_to_i64(i64 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
44 %load = load i1 addrspace(1)* %in
45 %ext = sext i1 %load to i64
46 store i64 %ext, i64 addrspace(1)* %out, align 4
47 ret void
48}
49
Tom Stellard79243d92014-10-01 17:15:17 +000050; SI-LABEL: {{^}}global_zextload_i1_to_i64:
Tom Stellard326d6ec2014-11-05 14:50:53 +000051; SI: buffer_load_ubyte
Matt Arsenault79db0a72014-11-23 02:57:49 +000052; SI: v_mov_b32_e32 {{v[0-9]+}}, 0
Tom Stellard326d6ec2014-11-05 14:50:53 +000053; SI: buffer_store_dwordx2
54; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +000055define void @global_zextload_i1_to_i64(i64 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
56 %load = load i1 addrspace(1)* %in
57 %ext = zext i1 %load to i64
58 store i64 %ext, i64 addrspace(1)* %out, align 4
59 ret void
60}
61
Tom Stellard79243d92014-10-01 17:15:17 +000062; SI-LABEL: {{^}}i1_arg:
Tom Stellard326d6ec2014-11-05 14:50:53 +000063; SI: buffer_load_ubyte
64; SI: v_and_b32_e32
65; SI: buffer_store_byte
66; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +000067define void @i1_arg(i1 addrspace(1)* %out, i1 %x) nounwind {
68 store i1 %x, i1 addrspace(1)* %out, align 1
69 ret void
70}
71
Tom Stellard79243d92014-10-01 17:15:17 +000072; SI-LABEL: {{^}}i1_arg_zext_i32:
Tom Stellard326d6ec2014-11-05 14:50:53 +000073; SI: buffer_load_ubyte
74; SI: buffer_store_dword
75; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +000076define void @i1_arg_zext_i32(i32 addrspace(1)* %out, i1 %x) nounwind {
77 %ext = zext i1 %x to i32
78 store i32 %ext, i32 addrspace(1)* %out, align 4
79 ret void
80}
81
Tom Stellard79243d92014-10-01 17:15:17 +000082; SI-LABEL: {{^}}i1_arg_zext_i64:
Tom Stellard326d6ec2014-11-05 14:50:53 +000083; SI: buffer_load_ubyte
84; SI: buffer_store_dwordx2
85; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +000086define void @i1_arg_zext_i64(i64 addrspace(1)* %out, i1 %x) nounwind {
87 %ext = zext i1 %x to i64
88 store i64 %ext, i64 addrspace(1)* %out, align 8
89 ret void
90}
91
Tom Stellard79243d92014-10-01 17:15:17 +000092; SI-LABEL: {{^}}i1_arg_sext_i32:
Matt Arsenault79db0a72014-11-23 02:57:49 +000093; SI: buffer_load_ubyte
Tom Stellard326d6ec2014-11-05 14:50:53 +000094; SI: buffer_store_dword
95; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +000096define void @i1_arg_sext_i32(i32 addrspace(1)* %out, i1 %x) nounwind {
97 %ext = sext i1 %x to i32
98 store i32 %ext, i32addrspace(1)* %out, align 4
99 ret void
100}
101
Tom Stellard79243d92014-10-01 17:15:17 +0000102; SI-LABEL: {{^}}i1_arg_sext_i64:
Matt Arsenault79db0a72014-11-23 02:57:49 +0000103; SI: buffer_load_ubyte
104; SI: v_bfe_i32
105; SI: v_ashrrev_i32
Tom Stellard326d6ec2014-11-05 14:50:53 +0000106; SI: buffer_store_dwordx2
107; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +0000108define void @i1_arg_sext_i64(i64 addrspace(1)* %out, i1 %x) nounwind {
109 %ext = sext i1 %x to i64
110 store i64 %ext, i64 addrspace(1)* %out, align 8
111 ret void
112}