blob: 244e1c9689add972e73238e2f07f99f0aad31989 [file] [log] [blame]
Matt Arsenault2a495972014-11-23 02:57:54 +00001; RUN: llc -march=r600 -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
Matt Arsenault470acd82014-04-15 22:28:39 +00003
Matt Arsenault2a495972014-11-23 02:57:54 +00004; FUNC-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 Arsenault2a495972014-11-23 02:57:54 +00009
10; EG: VTX_READ_8
11; EG: AND_INT
Matt Arsenault470acd82014-04-15 22:28:39 +000012define 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
Matt Arsenault2a495972014-11-23 02:57:54 +000018; FUNC-LABEL: {{^}}local_copy_i1_to_i1:
Matt Arsenaultb7ebdff2014-11-23 02:57:50 +000019; SI: ds_read_u8
20; SI: v_and_b32_e32 v{{[0-9]+}}, 1
21; SI: ds_write_b8
22; SI: s_endpgm
Matt Arsenault2a495972014-11-23 02:57:54 +000023
24; EG: LDS_UBYTE_READ_RET
25; EG: AND_INT
26; EG: LDS_BYTE_WRITE
Matt Arsenaultb7ebdff2014-11-23 02:57:50 +000027define 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
Matt Arsenault2a495972014-11-23 02:57:54 +000033; FUNC-LABEL: {{^}}constant_copy_i1_to_i1:
Matt Arsenaultb7ebdff2014-11-23 02:57:50 +000034; SI: buffer_load_ubyte
35; SI: v_and_b32_e32 v{{[0-9]+}}, 1
36; SI: buffer_store_byte
37; SI: s_endpgm
Matt Arsenault2a495972014-11-23 02:57:54 +000038
39; EG: VTX_READ_8
40; EG: AND_INT
Matt Arsenaultb7ebdff2014-11-23 02:57:50 +000041define 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
Matt Arsenault2a495972014-11-23 02:57:54 +000047; FUNC-LABEL: {{^}}global_sextload_i1_to_i32:
Matt Arsenault79db0a72014-11-23 02:57:49 +000048; SI: buffer_load_ubyte
49; SI: v_bfe_i32
Tom Stellard326d6ec2014-11-05 14:50:53 +000050; SI: buffer_store_dword
51; SI: s_endpgm
Matt Arsenault2a495972014-11-23 02:57:54 +000052
53; EG: VTX_READ_8
54; EG: BFE_INT
Matt Arsenault470acd82014-04-15 22:28:39 +000055define 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
Matt Arsenault2a495972014-11-23 02:57:54 +000062; FUNC-LABEL: {{^}}global_zextload_i1_to_i32:
Tom Stellard326d6ec2014-11-05 14:50:53 +000063; SI: buffer_load_ubyte
64; SI: buffer_store_dword
65; SI: s_endpgm
Matt Arsenault2a495972014-11-23 02:57:54 +000066
Matt Arsenault470acd82014-04-15 22:28:39 +000067define 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
Matt Arsenault2a495972014-11-23 02:57:54 +000074; FUNC-LABEL: {{^}}global_sextload_i1_to_i64:
Matt Arsenault79db0a72014-11-23 02:57:49 +000075; SI: buffer_load_ubyte
76; SI: v_bfe_i32
Tom Stellard326d6ec2014-11-05 14:50:53 +000077; SI: buffer_store_dwordx2
78; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +000079define 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
Matt Arsenault2a495972014-11-23 02:57:54 +000086; FUNC-LABEL: {{^}}global_zextload_i1_to_i64:
Tom Stellard326d6ec2014-11-05 14:50:53 +000087; SI: buffer_load_ubyte
Matt Arsenault79db0a72014-11-23 02:57:49 +000088; SI: v_mov_b32_e32 {{v[0-9]+}}, 0
Tom Stellard326d6ec2014-11-05 14:50:53 +000089; SI: buffer_store_dwordx2
90; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +000091define 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
Matt Arsenault2a495972014-11-23 02:57:54 +000098; FUNC-LABEL: {{^}}i1_arg:
Tom Stellard326d6ec2014-11-05 14:50:53 +000099; SI: buffer_load_ubyte
100; SI: v_and_b32_e32
101; SI: buffer_store_byte
102; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +0000103define 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
Matt Arsenault2a495972014-11-23 02:57:54 +0000108; FUNC-LABEL: {{^}}i1_arg_zext_i32:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000109; SI: buffer_load_ubyte
110; SI: buffer_store_dword
111; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +0000112define 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
Matt Arsenault2a495972014-11-23 02:57:54 +0000118; FUNC-LABEL: {{^}}i1_arg_zext_i64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000119; SI: buffer_load_ubyte
120; SI: buffer_store_dwordx2
121; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +0000122define 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
Matt Arsenault2a495972014-11-23 02:57:54 +0000128; FUNC-LABEL: {{^}}i1_arg_sext_i32:
Matt Arsenault79db0a72014-11-23 02:57:49 +0000129; SI: buffer_load_ubyte
Tom Stellard326d6ec2014-11-05 14:50:53 +0000130; SI: buffer_store_dword
131; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +0000132define 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
Matt Arsenault2a495972014-11-23 02:57:54 +0000138; FUNC-LABEL: {{^}}i1_arg_sext_i64:
Matt Arsenault79db0a72014-11-23 02:57:49 +0000139; SI: buffer_load_ubyte
140; SI: v_bfe_i32
141; SI: v_ashrrev_i32
Tom Stellard326d6ec2014-11-05 14:50:53 +0000142; SI: buffer_store_dwordx2
143; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +0000144define 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}