103 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1100 < %s | FileCheck -check-prefix=SDAG %s3; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1100 < %s | FileCheck -check-prefix=GISEL %s4 5; Check that in strict OOB mode for buffers (relaxed-buffer-oob-mode attribute not set) the underaligned loads and stores get split.6; FIXME: The loads/stores do not get split (extend amdgpu-lower-buffer-fat-pointers?).7 8define amdgpu_ps void @split_underaligned_load(ptr addrspace(7) inreg %p, ptr addrspace(7) inreg %p2) #0 {9; CHECK-LABEL: split_underaligned_load:10; CHECK: ; %bb.0: ; %entry11; CHECK-NEXT: v_mov_b32_e32 v0, s412; CHECK-NEXT: v_mov_b32_e32 v2, s913; CHECK-NEXT: s_mov_b32 s15, s814; CHECK-NEXT: s_mov_b32 s14, s715; CHECK-NEXT: s_mov_b32 s13, s616; CHECK-NEXT: buffer_load_b64 v[0:1], v0, s[0:3], 0 offen17; CHECK-NEXT: s_mov_b32 s12, s518; CHECK-NEXT: s_waitcnt vmcnt(0)19; CHECK-NEXT: buffer_store_b64 v[0:1], v2, s[12:15], 0 offen20; CHECK-NEXT: s_endpgm21; SDAG-LABEL: split_underaligned_load:22; SDAG: ; %bb.0: ; %entry23; SDAG-NEXT: v_mov_b32_e32 v0, s424; SDAG-NEXT: v_mov_b32_e32 v2, s925; SDAG-NEXT: s_mov_b32 s15, s826; SDAG-NEXT: s_mov_b32 s14, s727; SDAG-NEXT: s_mov_b32 s13, s628; SDAG-NEXT: buffer_load_b64 v[0:1], v0, s[0:3], 0 offen29; SDAG-NEXT: s_mov_b32 s12, s530; SDAG-NEXT: s_waitcnt vmcnt(0)31; SDAG-NEXT: buffer_store_b64 v[0:1], v2, s[12:15], 0 offen32; SDAG-NEXT: s_endpgm33;34; GISEL-LABEL: split_underaligned_load:35; GISEL: ; %bb.0: ; %entry36; GISEL-NEXT: v_mov_b32_e32 v0, s437; GISEL-NEXT: v_mov_b32_e32 v2, s938; GISEL-NEXT: s_mov_b32 s12, s539; GISEL-NEXT: s_mov_b32 s13, s640; GISEL-NEXT: s_mov_b32 s14, s741; GISEL-NEXT: buffer_load_b64 v[0:1], v0, s[0:3], 0 offen42; GISEL-NEXT: s_mov_b32 s15, s843; GISEL-NEXT: s_waitcnt vmcnt(0)44; GISEL-NEXT: buffer_store_b64 v[0:1], v2, s[12:15], 0 offen45; GISEL-NEXT: s_endpgm46entry:47 %gep = getelementptr i8, ptr addrspace(7) %p, i32 048 %ld = load i64, ptr addrspace(7) %gep, align 449 50 %gep2 = getelementptr i8, ptr addrspace(7) %p2, i32 051 store i64 %ld, ptr addrspace(7) %gep2, align 452 ret void53}54 55; Check that in strict OOB mode for buffers (relaxed-buffer-oob-mode attribute not set) the naturally aligned loads and stores do not get split.56 57define amdgpu_ps void @do_not_split_aligned_load(ptr addrspace(7) inreg %p, ptr addrspace(7) inreg %p2) #0 {58; CHECK-LABEL: do_not_split_aligned_load:59; CHECK: ; %bb.0: ; %entry60; CHECK-NEXT: v_mov_b32_e32 v0, s461; CHECK-NEXT: v_mov_b32_e32 v2, s962; CHECK-NEXT: s_mov_b32 s15, s863; CHECK-NEXT: s_mov_b32 s14, s764; CHECK-NEXT: s_mov_b32 s13, s665; CHECK-NEXT: buffer_load_b64 v[0:1], v0, s[0:3], 0 offen66; CHECK-NEXT: s_mov_b32 s12, s567; CHECK-NEXT: s_waitcnt vmcnt(0)68; CHECK-NEXT: buffer_store_b64 v[0:1], v2, s[12:15], 0 offen69; CHECK-NEXT: s_endpgm70; SDAG-LABEL: do_not_split_aligned_load:71; SDAG: ; %bb.0: ; %entry72; SDAG-NEXT: v_mov_b32_e32 v0, s473; SDAG-NEXT: v_mov_b32_e32 v2, s974; SDAG-NEXT: s_mov_b32 s15, s875; SDAG-NEXT: s_mov_b32 s14, s776; SDAG-NEXT: s_mov_b32 s13, s677; SDAG-NEXT: buffer_load_b64 v[0:1], v0, s[0:3], 0 offen78; SDAG-NEXT: s_mov_b32 s12, s579; SDAG-NEXT: s_waitcnt vmcnt(0)80; SDAG-NEXT: buffer_store_b64 v[0:1], v2, s[12:15], 0 offen81; SDAG-NEXT: s_endpgm82;83; GISEL-LABEL: do_not_split_aligned_load:84; GISEL: ; %bb.0: ; %entry85; GISEL-NEXT: v_mov_b32_e32 v0, s486; GISEL-NEXT: v_mov_b32_e32 v2, s987; GISEL-NEXT: s_mov_b32 s12, s588; GISEL-NEXT: s_mov_b32 s13, s689; GISEL-NEXT: s_mov_b32 s14, s790; GISEL-NEXT: buffer_load_b64 v[0:1], v0, s[0:3], 0 offen91; GISEL-NEXT: s_mov_b32 s15, s892; GISEL-NEXT: s_waitcnt vmcnt(0)93; GISEL-NEXT: buffer_store_b64 v[0:1], v2, s[12:15], 0 offen94; GISEL-NEXT: s_endpgm95entry:96 %gep = getelementptr i8, ptr addrspace(7) %p, i32 097 %ld = load i64, ptr addrspace(7) %gep, align 898 99 %gep2 = getelementptr i8, ptr addrspace(7) %p2, i32 0100 store i64 %ld, ptr addrspace(7) %gep2, align 8101 ret void102}103