blob: 0ca49fde3e7bf93547e32c2b9c919882155323d1 [file] [log] [blame]
Tom Stellard49f8bfd2015-01-06 18:00:21 +00001; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
Marek Olsak75170772015-01-27 17:27:15 +00002; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
Matt Arsenault2a495972014-11-23 02:57:54 +00003; RUN: llc -march=r600 -mcpu=cypress -verify-machineinstrs < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
Matt Arsenault470acd82014-04-15 22:28:39 +00004
Matt Arsenault2a495972014-11-23 02:57:54 +00005; FUNC-LABEL: {{^}}global_copy_i1_to_i1:
Tom Stellard326d6ec2014-11-05 14:50:53 +00006; SI: buffer_load_ubyte
7; SI: v_and_b32_e32 v{{[0-9]+}}, 1
8; SI: buffer_store_byte
9; SI: s_endpgm
Matt Arsenault2a495972014-11-23 02:57:54 +000010
11; EG: VTX_READ_8
12; EG: AND_INT
Matt Arsenault470acd82014-04-15 22:28:39 +000013define void @global_copy_i1_to_i1(i1 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
David Blaikiea79ac142015-02-27 21:17:42 +000014 %load = load i1, i1 addrspace(1)* %in
Matt Arsenault470acd82014-04-15 22:28:39 +000015 store i1 %load, i1 addrspace(1)* %out, align 1
16 ret void
17}
18
Matt Arsenault2a495972014-11-23 02:57:54 +000019; FUNC-LABEL: {{^}}local_copy_i1_to_i1:
Matt Arsenaultb7ebdff2014-11-23 02:57:50 +000020; SI: ds_read_u8
21; SI: v_and_b32_e32 v{{[0-9]+}}, 1
22; SI: ds_write_b8
23; SI: s_endpgm
Matt Arsenault2a495972014-11-23 02:57:54 +000024
25; EG: LDS_UBYTE_READ_RET
26; EG: AND_INT
27; EG: LDS_BYTE_WRITE
Matt Arsenaultb7ebdff2014-11-23 02:57:50 +000028define void @local_copy_i1_to_i1(i1 addrspace(3)* %out, i1 addrspace(3)* %in) nounwind {
David Blaikiea79ac142015-02-27 21:17:42 +000029 %load = load i1, i1 addrspace(3)* %in
Matt Arsenaultb7ebdff2014-11-23 02:57:50 +000030 store i1 %load, i1 addrspace(3)* %out, align 1
31 ret void
32}
33
Matt Arsenault2a495972014-11-23 02:57:54 +000034; FUNC-LABEL: {{^}}constant_copy_i1_to_i1:
Matt Arsenaultb7ebdff2014-11-23 02:57:50 +000035; SI: buffer_load_ubyte
36; SI: v_and_b32_e32 v{{[0-9]+}}, 1
37; SI: buffer_store_byte
38; SI: s_endpgm
Matt Arsenault2a495972014-11-23 02:57:54 +000039
40; EG: VTX_READ_8
41; EG: AND_INT
Matt Arsenaultb7ebdff2014-11-23 02:57:50 +000042define void @constant_copy_i1_to_i1(i1 addrspace(1)* %out, i1 addrspace(2)* %in) nounwind {
David Blaikiea79ac142015-02-27 21:17:42 +000043 %load = load i1, i1 addrspace(2)* %in
Matt Arsenaultb7ebdff2014-11-23 02:57:50 +000044 store i1 %load, i1 addrspace(1)* %out, align 1
45 ret void
46}
47
Matt Arsenault2a495972014-11-23 02:57:54 +000048; FUNC-LABEL: {{^}}global_sextload_i1_to_i32:
Matt Arsenault79db0a72014-11-23 02:57:49 +000049; SI: buffer_load_ubyte
50; SI: v_bfe_i32
Tom Stellard326d6ec2014-11-05 14:50:53 +000051; SI: buffer_store_dword
52; SI: s_endpgm
Matt Arsenault2a495972014-11-23 02:57:54 +000053
54; EG: VTX_READ_8
55; EG: BFE_INT
Matt Arsenault470acd82014-04-15 22:28:39 +000056define void @global_sextload_i1_to_i32(i32 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
David Blaikiea79ac142015-02-27 21:17:42 +000057 %load = load i1, i1 addrspace(1)* %in
Matt Arsenault470acd82014-04-15 22:28:39 +000058 %ext = sext i1 %load to i32
59 store i32 %ext, i32 addrspace(1)* %out, align 4
60 ret void
61}
62
Matt Arsenault2a495972014-11-23 02:57:54 +000063; FUNC-LABEL: {{^}}global_zextload_i1_to_i32:
Tom Stellard326d6ec2014-11-05 14:50:53 +000064; SI: buffer_load_ubyte
65; SI: buffer_store_dword
66; SI: s_endpgm
Matt Arsenault2a495972014-11-23 02:57:54 +000067
Matt Arsenault470acd82014-04-15 22:28:39 +000068define void @global_zextload_i1_to_i32(i32 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
David Blaikiea79ac142015-02-27 21:17:42 +000069 %load = load i1, i1 addrspace(1)* %in
Matt Arsenault470acd82014-04-15 22:28:39 +000070 %ext = zext i1 %load to i32
71 store i32 %ext, i32 addrspace(1)* %out, align 4
72 ret void
73}
74
Matt Arsenault2a495972014-11-23 02:57:54 +000075; FUNC-LABEL: {{^}}global_sextload_i1_to_i64:
Matt Arsenault79db0a72014-11-23 02:57:49 +000076; SI: buffer_load_ubyte
77; SI: v_bfe_i32
Tom Stellard326d6ec2014-11-05 14:50:53 +000078; SI: buffer_store_dwordx2
79; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +000080define void @global_sextload_i1_to_i64(i64 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
David Blaikiea79ac142015-02-27 21:17:42 +000081 %load = load i1, i1 addrspace(1)* %in
Matt Arsenault470acd82014-04-15 22:28:39 +000082 %ext = sext i1 %load to i64
83 store i64 %ext, i64 addrspace(1)* %out, align 4
84 ret void
85}
86
Matt Arsenault2a495972014-11-23 02:57:54 +000087; FUNC-LABEL: {{^}}global_zextload_i1_to_i64:
Tom Stellard326d6ec2014-11-05 14:50:53 +000088; SI: buffer_load_ubyte
Matt Arsenault79db0a72014-11-23 02:57:49 +000089; SI: v_mov_b32_e32 {{v[0-9]+}}, 0
Tom Stellard326d6ec2014-11-05 14:50:53 +000090; SI: buffer_store_dwordx2
91; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +000092define void @global_zextload_i1_to_i64(i64 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
David Blaikiea79ac142015-02-27 21:17:42 +000093 %load = load i1, i1 addrspace(1)* %in
Matt Arsenault470acd82014-04-15 22:28:39 +000094 %ext = zext i1 %load to i64
95 store i64 %ext, i64 addrspace(1)* %out, align 4
96 ret void
97}
98
Matt Arsenault2a495972014-11-23 02:57:54 +000099; FUNC-LABEL: {{^}}i1_arg:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000100; SI: buffer_load_ubyte
101; SI: v_and_b32_e32
102; SI: buffer_store_byte
103; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +0000104define void @i1_arg(i1 addrspace(1)* %out, i1 %x) nounwind {
105 store i1 %x, i1 addrspace(1)* %out, align 1
106 ret void
107}
108
Matt Arsenault2a495972014-11-23 02:57:54 +0000109; FUNC-LABEL: {{^}}i1_arg_zext_i32:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000110; SI: buffer_load_ubyte
111; SI: buffer_store_dword
112; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +0000113define void @i1_arg_zext_i32(i32 addrspace(1)* %out, i1 %x) nounwind {
114 %ext = zext i1 %x to i32
115 store i32 %ext, i32 addrspace(1)* %out, align 4
116 ret void
117}
118
Matt Arsenault2a495972014-11-23 02:57:54 +0000119; FUNC-LABEL: {{^}}i1_arg_zext_i64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000120; SI: buffer_load_ubyte
121; SI: buffer_store_dwordx2
122; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +0000123define void @i1_arg_zext_i64(i64 addrspace(1)* %out, i1 %x) nounwind {
124 %ext = zext i1 %x to i64
125 store i64 %ext, i64 addrspace(1)* %out, align 8
126 ret void
127}
128
Matt Arsenault2a495972014-11-23 02:57:54 +0000129; FUNC-LABEL: {{^}}i1_arg_sext_i32:
Matt Arsenault79db0a72014-11-23 02:57:49 +0000130; SI: buffer_load_ubyte
Tom Stellard326d6ec2014-11-05 14:50:53 +0000131; SI: buffer_store_dword
132; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +0000133define void @i1_arg_sext_i32(i32 addrspace(1)* %out, i1 %x) nounwind {
134 %ext = sext i1 %x to i32
135 store i32 %ext, i32addrspace(1)* %out, align 4
136 ret void
137}
138
Matt Arsenault2a495972014-11-23 02:57:54 +0000139; FUNC-LABEL: {{^}}i1_arg_sext_i64:
Matt Arsenault79db0a72014-11-23 02:57:49 +0000140; SI: buffer_load_ubyte
141; SI: v_bfe_i32
142; SI: v_ashrrev_i32
Tom Stellard326d6ec2014-11-05 14:50:53 +0000143; SI: buffer_store_dwordx2
144; SI: s_endpgm
Matt Arsenault470acd82014-04-15 22:28:39 +0000145define void @i1_arg_sext_i64(i64 addrspace(1)* %out, i1 %x) nounwind {
146 %ext = sext i1 %x to i64
147 store i64 %ext, i64 addrspace(1)* %out, align 8
148 ret void
149}