1; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
2; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
3; RUN: llc -march=r600 -mcpu=cypress < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
4
5; FUNC-LABEL: {{^}}anyext_load_i8:
6; SI: buffer_load_dword v{{[0-9]+}}
7; SI: buffer_store_dword v{{[0-9]+}}
8
9; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+.[XYZW]]],
10; EG: VTX_READ_32 [[VAL]]
11define void @anyext_load_i8(i8 addrspace(1)* nocapture noalias %out, i8 addrspace(1)* nocapture noalias %src) nounwind {
12  %cast = bitcast i8 addrspace(1)* %src to i32 addrspace(1)*
13  %load = load i32, i32 addrspace(1)* %cast
14  %x = bitcast i32 %load to <4 x i8>
15  %castOut = bitcast i8 addrspace(1)* %out to <4 x i8> addrspace(1)*
16  store <4 x i8> %x, <4 x i8> addrspace(1)* %castOut
17  ret void
18}
19
20; FUNC-LABEL: {{^}}anyext_load_i16:
21; SI: buffer_load_dword v{{[0-9]+}}
22; SI: buffer_store_dword v{{[0-9]+}}
23
24; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+.[XYZW]]],
25; EG: VTX_READ_32 [[VAL]]
26define void @anyext_load_i16(i16 addrspace(1)* nocapture noalias %out, i16 addrspace(1)* nocapture noalias %src) nounwind {
27  %cast = bitcast i16 addrspace(1)* %src to i32 addrspace(1)*
28  %load = load i32, i32 addrspace(1)* %cast
29  %x = bitcast i32 %load to <2 x i16>
30  %castOut = bitcast i16 addrspace(1)* %out to <2 x i16> addrspace(1)*
31  store <2 x i16> %x, <2 x i16> addrspace(1)* %castOut
32  ret void
33}
34
35; FUNC-LABEL: {{^}}anyext_load_lds_i8:
36; SI: ds_read_b32 v{{[0-9]+}}
37; SI: ds_write_b32 v{{[0-9]+}}
38
39; EG: LDS_READ_RET {{.*}}, [[VAL:T[0-9]+.[XYZW]]]
40; EG: LDS_WRITE * [[VAL]]
41define void @anyext_load_lds_i8(i8 addrspace(3)* nocapture noalias %out, i8 addrspace(3)* nocapture noalias %src) nounwind {
42  %cast = bitcast i8 addrspace(3)* %src to i32 addrspace(3)*
43  %load = load i32, i32 addrspace(3)* %cast
44  %x = bitcast i32 %load to <4 x i8>
45  %castOut = bitcast i8 addrspace(3)* %out to <4 x i8> addrspace(3)*
46  store <4 x i8> %x, <4 x i8> addrspace(3)* %castOut
47  ret void
48}
49
50; FUNC-LABEL: {{^}}anyext_load_lds_i16:
51; SI: ds_read_b32 v{{[0-9]+}}
52; SI: ds_write_b32 v{{[0-9]+}}
53
54; EG: LDS_READ_RET {{.*}}, [[VAL:T[0-9]+.[XYZW]]]
55; EG: LDS_WRITE * [[VAL]]
56define void @anyext_load_lds_i16(i16 addrspace(3)* nocapture noalias %out, i16 addrspace(3)* nocapture noalias %src) nounwind {
57  %cast = bitcast i16 addrspace(3)* %src to i32 addrspace(3)*
58  %load = load i32, i32 addrspace(3)* %cast
59  %x = bitcast i32 %load to <2 x i16>
60  %castOut = bitcast i16 addrspace(3)* %out to <2 x i16> addrspace(3)*
61  store <2 x i16> %x, <2 x i16> addrspace(3)* %castOut
62  ret void
63}
64