blob: a7b8e86220aae9bb9a05b6aa6c9365619385e046 [file] [log] [blame]
Matt Arsenaultd1097a32016-06-02 19:54:26 +00001; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=SI-NOHSA -check-prefix=FUNC %s
2; RUN: llc -mtriple=amdgcn-amdhsa -mcpu=kaveri -verify-machineinstrs < %s | FileCheck -check-prefix=FUNC -check-prefix=CI-HSA -check-prefix=SI %s
Matt Arsenault7aad8fd2017-01-24 22:02:15 +00003; RUN: llc -march=amdgcn -mcpu=tonga -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -check-prefix=SI-NOHSA -check-prefix=FUNC %s
Matt Arsenaultd1097a32016-06-02 19:54:26 +00004; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
Matt Arsenault00a0d6f2013-11-13 02:39:07 +00005
Matt Arsenaultd1097a32016-06-02 19:54:26 +00006; FIXME: This seems to not ever actually become an extload
7; FUNC-LABEL: {{^}}global_anyext_load_i8:
8; GCN: buffer_load_dword v{{[0-9]+}}
9; GCN: buffer_store_dword v{{[0-9]+}}
Matt Arsenaultd85e5a12016-02-22 21:04:23 +000010
Tim Northover3007ba02015-01-21 23:17:19 +000011; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+.[XYZW]]],
12; EG: VTX_READ_32 [[VAL]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000013define amdgpu_kernel void @global_anyext_load_i8(i8 addrspace(1)* nocapture noalias %out, i8 addrspace(1)* nocapture noalias %src) nounwind {
Matt Arsenault00a0d6f2013-11-13 02:39:07 +000014 %cast = bitcast i8 addrspace(1)* %src to i32 addrspace(1)*
Matt Arsenaultd85e5a12016-02-22 21:04:23 +000015 %load = load i32, i32 addrspace(1)* %cast
Matt Arsenault00a0d6f2013-11-13 02:39:07 +000016 %x = bitcast i32 %load to <4 x i8>
17 %castOut = bitcast i8 addrspace(1)* %out to <4 x i8> addrspace(1)*
Matt Arsenaultd85e5a12016-02-22 21:04:23 +000018 store <4 x i8> %x, <4 x i8> addrspace(1)* %castOut
Matt Arsenault00a0d6f2013-11-13 02:39:07 +000019 ret void
20}
21
Matt Arsenaultd1097a32016-06-02 19:54:26 +000022; FUNC-LABEL: {{^}}global_anyext_load_i16:
23; GCN: buffer_load_dword v{{[0-9]+}}
24; GCN: buffer_store_dword v{{[0-9]+}}
Matt Arsenaultd85e5a12016-02-22 21:04:23 +000025
Tim Northover3007ba02015-01-21 23:17:19 +000026; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+.[XYZW]]],
27; EG: VTX_READ_32 [[VAL]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000028define amdgpu_kernel void @global_anyext_load_i16(i16 addrspace(1)* nocapture noalias %out, i16 addrspace(1)* nocapture noalias %src) nounwind {
Matt Arsenault00a0d6f2013-11-13 02:39:07 +000029 %cast = bitcast i16 addrspace(1)* %src to i32 addrspace(1)*
Matt Arsenaultd85e5a12016-02-22 21:04:23 +000030 %load = load i32, i32 addrspace(1)* %cast
Matt Arsenault00a0d6f2013-11-13 02:39:07 +000031 %x = bitcast i32 %load to <2 x i16>
32 %castOut = bitcast i16 addrspace(1)* %out to <2 x i16> addrspace(1)*
Matt Arsenaultd85e5a12016-02-22 21:04:23 +000033 store <2 x i16> %x, <2 x i16> addrspace(1)* %castOut
Matt Arsenault00a0d6f2013-11-13 02:39:07 +000034 ret void
35}
36
Matt Arsenaultd1097a32016-06-02 19:54:26 +000037; FUNC-LABEL: {{^}}local_anyext_load_i8:
38; GCN: ds_read_b32 v{{[0-9]+}}
39; GCN: ds_write_b32 v{{[0-9]+}}
Matt Arsenaultd85e5a12016-02-22 21:04:23 +000040
Tim Northover3007ba02015-01-21 23:17:19 +000041; EG: LDS_READ_RET {{.*}}, [[VAL:T[0-9]+.[XYZW]]]
42; EG: LDS_WRITE * [[VAL]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000043define amdgpu_kernel void @local_anyext_load_i8(i8 addrspace(3)* nocapture noalias %out, i8 addrspace(3)* nocapture noalias %src) nounwind {
Matt Arsenault00a0d6f2013-11-13 02:39:07 +000044 %cast = bitcast i8 addrspace(3)* %src to i32 addrspace(3)*
Matt Arsenaultd85e5a12016-02-22 21:04:23 +000045 %load = load i32, i32 addrspace(3)* %cast
Matt Arsenault00a0d6f2013-11-13 02:39:07 +000046 %x = bitcast i32 %load to <4 x i8>
47 %castOut = bitcast i8 addrspace(3)* %out to <4 x i8> addrspace(3)*
Matt Arsenaultd85e5a12016-02-22 21:04:23 +000048 store <4 x i8> %x, <4 x i8> addrspace(3)* %castOut
Matt Arsenault00a0d6f2013-11-13 02:39:07 +000049 ret void
50}
51
Matt Arsenaultd1097a32016-06-02 19:54:26 +000052; FUNC-LABEL: {{^}}local_anyext_load_i16:
53; GCN: ds_read_b32 v{{[0-9]+}}
54; GCN: ds_write_b32 v{{[0-9]+}}
Matt Arsenaultd85e5a12016-02-22 21:04:23 +000055
Tim Northover3007ba02015-01-21 23:17:19 +000056; EG: LDS_READ_RET {{.*}}, [[VAL:T[0-9]+.[XYZW]]]
57; EG: LDS_WRITE * [[VAL]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000058define amdgpu_kernel void @local_anyext_load_i16(i16 addrspace(3)* nocapture noalias %out, i16 addrspace(3)* nocapture noalias %src) nounwind {
Matt Arsenault00a0d6f2013-11-13 02:39:07 +000059 %cast = bitcast i16 addrspace(3)* %src to i32 addrspace(3)*
Matt Arsenaultd85e5a12016-02-22 21:04:23 +000060 %load = load i32, i32 addrspace(3)* %cast
Matt Arsenault00a0d6f2013-11-13 02:39:07 +000061 %x = bitcast i32 %load to <2 x i16>
62 %castOut = bitcast i16 addrspace(3)* %out to <2 x i16> addrspace(3)*
Matt Arsenaultd85e5a12016-02-22 21:04:23 +000063 store <2 x i16> %x, <2 x i16> addrspace(3)* %castOut
Matt Arsenault00a0d6f2013-11-13 02:39:07 +000064 ret void
65}