1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=SI-NOHSA -check-prefix=FUNC %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=amdgcn-amdhsa -mcpu=kaveri -verify-machineinstrs < %s | FileCheck -check-prefix=FUNC -check-prefix=CI-HSA -check-prefix=SI %s 3*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=SI-NOHSA -check-prefix=FUNC %s 4*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; FIXME: This seems to not ever actually become an extload 7*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}global_anyext_load_i8: 8*9880d681SAndroid Build Coastguard Worker; GCN: buffer_load_dword v{{[0-9]+}} 9*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword v{{[0-9]+}} 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+.[XYZW]]], 12*9880d681SAndroid Build Coastguard Worker; EG: VTX_READ_32 [[VAL]] 13*9880d681SAndroid Build Coastguard Workerdefine void @global_anyext_load_i8(i8 addrspace(1)* nocapture noalias %out, i8 addrspace(1)* nocapture noalias %src) nounwind { 14*9880d681SAndroid Build Coastguard Worker %cast = bitcast i8 addrspace(1)* %src to i32 addrspace(1)* 15*9880d681SAndroid Build Coastguard Worker %load = load i32, i32 addrspace(1)* %cast 16*9880d681SAndroid Build Coastguard Worker %x = bitcast i32 %load to <4 x i8> 17*9880d681SAndroid Build Coastguard Worker %castOut = bitcast i8 addrspace(1)* %out to <4 x i8> addrspace(1)* 18*9880d681SAndroid Build Coastguard Worker store <4 x i8> %x, <4 x i8> addrspace(1)* %castOut 19*9880d681SAndroid Build Coastguard Worker ret void 20*9880d681SAndroid Build Coastguard Worker} 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}global_anyext_load_i16: 23*9880d681SAndroid Build Coastguard Worker; GCN: buffer_load_dword v{{[0-9]+}} 24*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword v{{[0-9]+}} 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker; EG: MEM_RAT_CACHELESS STORE_RAW [[VAL:T[0-9]+.[XYZW]]], 27*9880d681SAndroid Build Coastguard Worker; EG: VTX_READ_32 [[VAL]] 28*9880d681SAndroid Build Coastguard Workerdefine void @global_anyext_load_i16(i16 addrspace(1)* nocapture noalias %out, i16 addrspace(1)* nocapture noalias %src) nounwind { 29*9880d681SAndroid Build Coastguard Worker %cast = bitcast i16 addrspace(1)* %src to i32 addrspace(1)* 30*9880d681SAndroid Build Coastguard Worker %load = load i32, i32 addrspace(1)* %cast 31*9880d681SAndroid Build Coastguard Worker %x = bitcast i32 %load to <2 x i16> 32*9880d681SAndroid Build Coastguard Worker %castOut = bitcast i16 addrspace(1)* %out to <2 x i16> addrspace(1)* 33*9880d681SAndroid Build Coastguard Worker store <2 x i16> %x, <2 x i16> addrspace(1)* %castOut 34*9880d681SAndroid Build Coastguard Worker ret void 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_anyext_load_i8: 38*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b32 v{{[0-9]+}} 39*9880d681SAndroid Build Coastguard Worker; GCN: ds_write_b32 v{{[0-9]+}} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET {{.*}}, [[VAL:T[0-9]+.[XYZW]]] 42*9880d681SAndroid Build Coastguard Worker; EG: LDS_WRITE * [[VAL]] 43*9880d681SAndroid Build Coastguard Workerdefine void @local_anyext_load_i8(i8 addrspace(3)* nocapture noalias %out, i8 addrspace(3)* nocapture noalias %src) nounwind { 44*9880d681SAndroid Build Coastguard Worker %cast = bitcast i8 addrspace(3)* %src to i32 addrspace(3)* 45*9880d681SAndroid Build Coastguard Worker %load = load i32, i32 addrspace(3)* %cast 46*9880d681SAndroid Build Coastguard Worker %x = bitcast i32 %load to <4 x i8> 47*9880d681SAndroid Build Coastguard Worker %castOut = bitcast i8 addrspace(3)* %out to <4 x i8> addrspace(3)* 48*9880d681SAndroid Build Coastguard Worker store <4 x i8> %x, <4 x i8> addrspace(3)* %castOut 49*9880d681SAndroid Build Coastguard Worker ret void 50*9880d681SAndroid Build Coastguard Worker} 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_anyext_load_i16: 53*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b32 v{{[0-9]+}} 54*9880d681SAndroid Build Coastguard Worker; GCN: ds_write_b32 v{{[0-9]+}} 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET {{.*}}, [[VAL:T[0-9]+.[XYZW]]] 57*9880d681SAndroid Build Coastguard Worker; EG: LDS_WRITE * [[VAL]] 58*9880d681SAndroid Build Coastguard Workerdefine void @local_anyext_load_i16(i16 addrspace(3)* nocapture noalias %out, i16 addrspace(3)* nocapture noalias %src) nounwind { 59*9880d681SAndroid Build Coastguard Worker %cast = bitcast i16 addrspace(3)* %src to i32 addrspace(3)* 60*9880d681SAndroid Build Coastguard Worker %load = load i32, i32 addrspace(3)* %cast 61*9880d681SAndroid Build Coastguard Worker %x = bitcast i32 %load to <2 x i16> 62*9880d681SAndroid Build Coastguard Worker %castOut = bitcast i16 addrspace(3)* %out to <2 x i16> addrspace(3)* 63*9880d681SAndroid Build Coastguard Worker store <2 x i16> %x, <2 x i16> addrspace(3)* %castOut 64*9880d681SAndroid Build Coastguard Worker ret void 65*9880d681SAndroid Build Coastguard Worker} 66