1*a6322941SStanislav Mekhanoshin; RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX9 %s 2*a6322941SStanislav Mekhanoshin; RUN: llc -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX10 %s 3*a6322941SStanislav Mekhanoshin 4*a6322941SStanislav Mekhanoshin; GCN-LABEL: flat_inst_offset: 5*a6322941SStanislav Mekhanoshin; GFX9: flat_load_dword v{{[0-9]+}}, v[{{[0-9:]+}}] offset:4 6*a6322941SStanislav Mekhanoshin; GFX9: flat_store_dword v[{{[0-9:]+}}], v{{[0-9]+}} offset:4 7*a6322941SStanislav Mekhanoshin; GFX10: flat_load_dword v{{[0-9]+}}, v[{{[0-9:]+}}]{{$}} 8*a6322941SStanislav Mekhanoshin; GFX10: flat_store_dword v[{{[0-9:]+}}], v{{[0-9]+}}{{$}} 9*a6322941SStanislav Mekhanoshindefine void @flat_inst_offset(i32* nocapture %p) { 10*a6322941SStanislav Mekhanoshin %gep = getelementptr inbounds i32, i32* %p, i64 1 11*a6322941SStanislav Mekhanoshin %load = load i32, i32* %gep, align 4 12*a6322941SStanislav Mekhanoshin %inc = add nsw i32 %load, 1 13*a6322941SStanislav Mekhanoshin store i32 %inc, i32* %gep, align 4 14*a6322941SStanislav Mekhanoshin ret void 15*a6322941SStanislav Mekhanoshin} 16*a6322941SStanislav Mekhanoshin 17*a6322941SStanislav Mekhanoshin; GCN-LABEL: global_inst_offset: 18*a6322941SStanislav Mekhanoshin; GCN: global_load_dword v{{[0-9]+}}, v[{{[0-9:]+}}], off offset:4 19*a6322941SStanislav Mekhanoshin; GCN: global_store_dword v[{{[0-9:]+}}], v{{[0-9]+}}, off offset:4 20*a6322941SStanislav Mekhanoshindefine void @global_inst_offset(i32 addrspace(1)* nocapture %p) { 21*a6322941SStanislav Mekhanoshin %gep = getelementptr inbounds i32, i32 addrspace(1)* %p, i64 1 22*a6322941SStanislav Mekhanoshin %load = load i32, i32 addrspace(1)* %gep, align 4 23*a6322941SStanislav Mekhanoshin %inc = add nsw i32 %load, 1 24*a6322941SStanislav Mekhanoshin store i32 %inc, i32 addrspace(1)* %gep, align 4 25*a6322941SStanislav Mekhanoshin ret void 26*a6322941SStanislav Mekhanoshin} 27*a6322941SStanislav Mekhanoshin 28*a6322941SStanislav Mekhanoshin; GCN-LABEL: load_i16_lo: 29*a6322941SStanislav Mekhanoshin; GFX9: flat_load_short_d16 v{{[0-9]+}}, v[{{[0-9:]+}}] offset:8{{$}} 30*a6322941SStanislav Mekhanoshin; GFX10: flat_load_short_d16 v{{[0-9]+}}, v[{{[0-9:]+}}]{{$}} 31*a6322941SStanislav Mekhanoshindefine amdgpu_kernel void @load_i16_lo(i16* %arg, <2 x i16>* %out) { 32*a6322941SStanislav Mekhanoshin %gep = getelementptr inbounds i16, i16* %arg, i32 4 33*a6322941SStanislav Mekhanoshin %ld = load i16, i16* %gep, align 2 34*a6322941SStanislav Mekhanoshin %vec = insertelement <2 x i16> <i16 undef, i16 0>, i16 %ld, i32 0 35*a6322941SStanislav Mekhanoshin %v = add <2 x i16> %vec, %vec 36*a6322941SStanislav Mekhanoshin store <2 x i16> %v, <2 x i16>* %out, align 4 37*a6322941SStanislav Mekhanoshin ret void 38*a6322941SStanislav Mekhanoshin} 39*a6322941SStanislav Mekhanoshin 40*a6322941SStanislav Mekhanoshin; GCN-LABEL: load_i16_hi: 41*a6322941SStanislav Mekhanoshin; GFX9: flat_load_short_d16_hi v{{[0-9]+}}, v[{{[0-9:]+}}] offset:8{{$}} 42*a6322941SStanislav Mekhanoshin; GFX10: flat_load_short_d16_hi v{{[0-9]+}}, v[{{[0-9:]+}}]{{$}} 43*a6322941SStanislav Mekhanoshindefine amdgpu_kernel void @load_i16_hi(i16* %arg, <2 x i16>* %out) { 44*a6322941SStanislav Mekhanoshin %gep = getelementptr inbounds i16, i16* %arg, i32 4 45*a6322941SStanislav Mekhanoshin %ld = load i16, i16* %gep, align 2 46*a6322941SStanislav Mekhanoshin %vec = insertelement <2 x i16> <i16 0, i16 undef>, i16 %ld, i32 1 47*a6322941SStanislav Mekhanoshin %v = add <2 x i16> %vec, %vec 48*a6322941SStanislav Mekhanoshin store <2 x i16> %v, <2 x i16>* %out, align 4 49*a6322941SStanislav Mekhanoshin ret void 50*a6322941SStanislav Mekhanoshin} 51*a6322941SStanislav Mekhanoshin 52*a6322941SStanislav Mekhanoshin; GCN-LABEL: load_half_lo: 53*a6322941SStanislav Mekhanoshin; GFX9: flat_load_short_d16 v{{[0-9]+}}, v[{{[0-9:]+}}] offset:8{{$}} 54*a6322941SStanislav Mekhanoshin; GFX10: flat_load_short_d16 v{{[0-9]+}}, v[{{[0-9:]+}}]{{$}} 55*a6322941SStanislav Mekhanoshindefine amdgpu_kernel void @load_half_lo(half* %arg, <2 x half>* %out) { 56*a6322941SStanislav Mekhanoshin %gep = getelementptr inbounds half, half* %arg, i32 4 57*a6322941SStanislav Mekhanoshin %ld = load half, half* %gep, align 2 58*a6322941SStanislav Mekhanoshin %vec = insertelement <2 x half> <half undef, half 0xH0000>, half %ld, i32 0 59*a6322941SStanislav Mekhanoshin %v = fadd <2 x half> %vec, %vec 60*a6322941SStanislav Mekhanoshin store <2 x half> %v, <2 x half>* %out, align 4 61*a6322941SStanislav Mekhanoshin ret void 62*a6322941SStanislav Mekhanoshin} 63*a6322941SStanislav Mekhanoshin 64*a6322941SStanislav Mekhanoshin; GCN-LABEL: load_half_hi: 65*a6322941SStanislav Mekhanoshin; GFX9: flat_load_short_d16_hi v{{[0-9]+}}, v[{{[0-9:]+}}] offset:8{{$}} 66*a6322941SStanislav Mekhanoshin; GFX10: flat_load_short_d16_hi v{{[0-9]+}}, v[{{[0-9:]+}}]{{$}} 67*a6322941SStanislav Mekhanoshindefine amdgpu_kernel void @load_half_hi(half* %arg, <2 x half>* %out) { 68*a6322941SStanislav Mekhanoshin %gep = getelementptr inbounds half, half* %arg, i32 4 69*a6322941SStanislav Mekhanoshin %ld = load half, half* %gep, align 2 70*a6322941SStanislav Mekhanoshin %vec = insertelement <2 x half> <half 0xH0000, half undef>, half %ld, i32 1 71*a6322941SStanislav Mekhanoshin %v = fadd <2 x half> %vec, %vec 72*a6322941SStanislav Mekhanoshin store <2 x half> %v, <2 x half>* %out, align 4 73*a6322941SStanislav Mekhanoshin ret void 74*a6322941SStanislav Mekhanoshin} 75*a6322941SStanislav Mekhanoshin 76*a6322941SStanislav Mekhanoshin; GCN-LABEL: load_float_lo: 77*a6322941SStanislav Mekhanoshin; GFX9: flat_load_dword v{{[0-9]+}}, v[{{[0-9:]+}}] offset:16{{$}} 78*a6322941SStanislav Mekhanoshin; GFX10: flat_load_dword v{{[0-9]+}}, v[{{[0-9:]+}}]{{$}} 79*a6322941SStanislav Mekhanoshindefine amdgpu_kernel void @load_float_lo(float* %arg, float* %out) { 80*a6322941SStanislav Mekhanoshin %gep = getelementptr inbounds float, float* %arg, i32 4 81*a6322941SStanislav Mekhanoshin %ld = load float, float* %gep, align 4 82*a6322941SStanislav Mekhanoshin %v = fadd float %ld, %ld 83*a6322941SStanislav Mekhanoshin store float %v, float* %out, align 4 84*a6322941SStanislav Mekhanoshin ret void 85*a6322941SStanislav Mekhanoshin} 86