brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · 96b71cf Raw
114 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck --check-prefix=GISEL %s3; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck --check-prefix=SDAG %s4 5define amdgpu_kernel void @buffer_ptr_vector_ops(ptr addrspace(1) %somewhere) {6; GISEL-LABEL: buffer_ptr_vector_ops:7; GISEL:       ; %bb.0: ; %main_body8; GISEL-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x249; GISEL-NEXT:    v_mov_b32_e32 v8, 010; GISEL-NEXT:    s_waitcnt lgkmcnt(0)11; GISEL-NEXT:    s_load_dwordx8 s[0:7], s[8:9], 0x012; GISEL-NEXT:    s_waitcnt lgkmcnt(0)13; GISEL-NEXT:    v_mov_b32_e32 v0, s014; GISEL-NEXT:    v_mov_b32_e32 v4, s415; GISEL-NEXT:    v_mov_b32_e32 v1, s116; GISEL-NEXT:    v_mov_b32_e32 v2, s217; GISEL-NEXT:    v_mov_b32_e32 v3, s318; GISEL-NEXT:    v_mov_b32_e32 v5, s519; GISEL-NEXT:    v_mov_b32_e32 v6, s620; GISEL-NEXT:    v_mov_b32_e32 v7, s721; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[4:7], 022; GISEL-NEXT:    global_store_dwordx4 v8, v[4:7], s[8:9] offset:3223; GISEL-NEXT:    global_store_dwordx4 v8, v[0:3], s[8:9] offset:4824; GISEL-NEXT:    s_endpgm25;26; SDAG-LABEL: buffer_ptr_vector_ops:27; SDAG:       ; %bb.0: ; %main_body28; SDAG-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x2429; SDAG-NEXT:    v_mov_b32_e32 v8, 030; SDAG-NEXT:    s_waitcnt lgkmcnt(0)31; SDAG-NEXT:    s_load_dwordx8 s[0:7], s[8:9], 0x032; SDAG-NEXT:    s_waitcnt lgkmcnt(0)33; SDAG-NEXT:    v_mov_b32_e32 v0, s034; SDAG-NEXT:    v_mov_b32_e32 v1, s135; SDAG-NEXT:    v_mov_b32_e32 v2, s236; SDAG-NEXT:    v_mov_b32_e32 v3, s337; SDAG-NEXT:    v_mov_b32_e32 v4, s438; SDAG-NEXT:    v_mov_b32_e32 v5, s539; SDAG-NEXT:    v_mov_b32_e32 v6, s640; SDAG-NEXT:    v_mov_b32_e32 v7, s741; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[4:7], 042; SDAG-NEXT:    global_store_dwordx4 v8, v[0:3], s[8:9] offset:4843; SDAG-NEXT:    global_store_dwordx4 v8, v[4:7], s[8:9] offset:3244; SDAG-NEXT:    s_endpgm45main_body:46  %buffers = load <2 x ptr addrspace(8)>, ptr addrspace(1) %somewhere47  %buf1 = extractelement <2 x ptr addrspace(8)> %buffers, i32 048  %buf2 = extractelement <2 x ptr addrspace(8)> %buffers, i32 149  %buf1.int = ptrtoint ptr addrspace(8) %buf1 to i12850  %buf1.vec = bitcast i128 %buf1.int to <4 x i32>51  call void @llvm.amdgcn.raw.ptr.buffer.store.v4i32(<4 x i32> %buf1.vec, ptr addrspace(8) %buf2, i32 0, i32 0, i32 0)52  %shuffled = shufflevector <2 x ptr addrspace(8)> %buffers, <2 x ptr addrspace(8)> poison, <2 x i32> <i32 1, i32 0>53  %somewhere.next = getelementptr <2 x ptr addrspace(8)>, ptr addrspace(1) %somewhere, i64 154  store <2 x ptr addrspace(8)> %shuffled, ptr addrspace(1) %somewhere.next55  ret void56}57 58%fat_buffer_struct = type {ptr addrspace(8), i32}59 60define amdgpu_kernel void @buffer_structs(%fat_buffer_struct %arg, ptr addrspace(1) %dest) {61; GISEL-LABEL: buffer_structs:62; GISEL:       ; %bb.0: ; %main_body63; GISEL-NEXT:    s_load_dword s6, s[4:5], 0x3464; GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2465; GISEL-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x4466; GISEL-NEXT:    v_mov_b32_e32 v5, 067; GISEL-NEXT:    s_waitcnt lgkmcnt(0)68; GISEL-NEXT:    s_ashr_i32 s7, s6, 3169; GISEL-NEXT:    s_lshl_b64 s[4:5], s[6:7], 570; GISEL-NEXT:    s_add_u32 s4, s8, s471; GISEL-NEXT:    v_mov_b32_e32 v0, s072; GISEL-NEXT:    v_mov_b32_e32 v4, s673; GISEL-NEXT:    s_addc_u32 s5, s9, s574; GISEL-NEXT:    v_mov_b32_e32 v1, s175; GISEL-NEXT:    v_mov_b32_e32 v2, s276; GISEL-NEXT:    v_mov_b32_e32 v3, s377; GISEL-NEXT:    buffer_store_dword v4, v4, s[0:3], 0 offen78; GISEL-NEXT:    global_store_dwordx4 v5, v[0:3], s[4:5]79; GISEL-NEXT:    global_store_dword v5, v4, s[4:5] offset:1680; GISEL-NEXT:    s_endpgm81;82; SDAG-LABEL: buffer_structs:83; SDAG:       ; %bb.0: ; %main_body84; SDAG-NEXT:    s_load_dword s6, s[4:5], 0x3485; SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x2486; SDAG-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0x4487; SDAG-NEXT:    v_mov_b32_e32 v4, 088; SDAG-NEXT:    s_waitcnt lgkmcnt(0)89; SDAG-NEXT:    s_ashr_i32 s7, s6, 3190; SDAG-NEXT:    s_lshl_b64 s[4:5], s[6:7], 591; SDAG-NEXT:    s_add_u32 s4, s8, s492; SDAG-NEXT:    v_mov_b32_e32 v0, s693; SDAG-NEXT:    s_addc_u32 s5, s9, s594; SDAG-NEXT:    buffer_store_dword v0, v0, s[0:3], 0 offen95; SDAG-NEXT:    global_store_dword v4, v0, s[4:5] offset:1696; SDAG-NEXT:    v_mov_b32_e32 v0, s097; SDAG-NEXT:    v_mov_b32_e32 v1, s198; SDAG-NEXT:    v_mov_b32_e32 v2, s299; SDAG-NEXT:    v_mov_b32_e32 v3, s3100; SDAG-NEXT:    global_store_dwordx4 v4, v[0:3], s[4:5]101; SDAG-NEXT:    s_endpgm102main_body:103  %buffer = extractvalue %fat_buffer_struct %arg, 0104  %offset = extractvalue %fat_buffer_struct %arg, 1105  call void @llvm.amdgcn.raw.ptr.buffer.store.i32(i32 %offset, ptr addrspace(8) %buffer, i32 %offset, i32 0, i32 0)106  ; Confirm the alignment of this struct is 32 bytes107  %dest.next = getelementptr %fat_buffer_struct, ptr addrspace(1) %dest, i32 %offset108  store %fat_buffer_struct %arg, ptr addrspace(1) %dest.next109  ret void110}111 112declare void @llvm.amdgcn.raw.ptr.buffer.store.i32(i32, ptr addrspace(8), i32, i32, i32 immarg)113declare void @llvm.amdgcn.raw.ptr.buffer.store.v4i32(<4 x i32>, ptr addrspace(8), i32, i32, i32 immarg)114