1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck --check-prefixes=GCN,SDAG %s 3; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck --check-prefixes=GCN,GISEL %s 4 5define amdgpu_ps void @prefetch_data_sgpr_base_sgpr_len(ptr addrspace(4) inreg %ptr, i32 inreg %len) { 6; GCN-LABEL: prefetch_data_sgpr_base_sgpr_len: 7; GCN: ; %bb.0: ; %entry 8; GCN-NEXT: s_prefetch_data s[0:1], 0x0, s2, 0 9; GCN-NEXT: s_endpgm 10entry: 11 tail call void @llvm.amdgcn.s.prefetch.data.p4(ptr addrspace(4) %ptr, i32 %len) 12 ret void 13} 14 15define amdgpu_ps void @prefetch_data_sgpr_imm_base_sgpr_len(ptr addrspace(4) inreg %ptr, i32 inreg %len) { 16; GCN-LABEL: prefetch_data_sgpr_imm_base_sgpr_len: 17; GCN: ; %bb.0: ; %entry 18; GCN-NEXT: s_prefetch_data s[0:1], 0x200, s2, 0 19; GCN-NEXT: s_endpgm 20entry: 21 %gep = getelementptr i32, ptr addrspace(4) %ptr, i32 128 22 tail call void @llvm.amdgcn.s.prefetch.data.p4(ptr addrspace(4) %gep, i32 %len) 23 ret void 24} 25 26define amdgpu_ps void @prefetch_data_sgpr_base_imm_len(ptr addrspace(4) inreg %ptr) { 27; GCN-LABEL: prefetch_data_sgpr_base_imm_len: 28; GCN: ; %bb.0: ; %entry 29; GCN-NEXT: s_prefetch_data s[0:1], 0x0, null, 31 30; GCN-NEXT: s_endpgm 31entry: 32 tail call void @llvm.amdgcn.s.prefetch.data.p4(ptr addrspace(4) %ptr, i32 31) 33 ret void 34} 35 36define amdgpu_ps void @prefetch_data_sgpr_imm_base_imm_len(ptr addrspace(4) inreg %ptr) { 37; GCN-LABEL: prefetch_data_sgpr_imm_base_imm_len: 38; GCN: ; %bb.0: ; %entry 39; GCN-NEXT: s_prefetch_data s[0:1], 0x200, null, 31 40; GCN-NEXT: s_endpgm 41entry: 42 %gep = getelementptr i32, ptr addrspace(4) %ptr, i32 128 43 tail call void @llvm.amdgcn.s.prefetch.data.p4(ptr addrspace(4) %gep, i32 31) 44 ret void 45} 46 47define amdgpu_ps void @prefetch_data_vgpr_base_sgpr_len(ptr addrspace(4) %ptr, i32 inreg %len) { 48; GCN-LABEL: prefetch_data_vgpr_base_sgpr_len: 49; GCN: ; %bb.0: ; %entry 50; GCN-NEXT: v_readfirstlane_b32 s2, v0 51; GCN-NEXT: v_readfirstlane_b32 s3, v1 52; GCN-NEXT: s_prefetch_data s[2:3], 0x0, s0, 0 53; GCN-NEXT: s_endpgm 54entry: 55 tail call void @llvm.amdgcn.s.prefetch.data.p4(ptr addrspace(4) %ptr, i32 %len) 56 ret void 57} 58 59define amdgpu_ps void @prefetch_data_vgpr_imm_base_sgpr_len(ptr addrspace(4) %ptr, i32 inreg %len) { 60; SDAG-LABEL: prefetch_data_vgpr_imm_base_sgpr_len: 61; SDAG: ; %bb.0: ; %entry 62; SDAG-NEXT: v_readfirstlane_b32 s2, v0 63; SDAG-NEXT: v_readfirstlane_b32 s3, v1 64; SDAG-NEXT: s_prefetch_data s[2:3], 0x200, s0, 0 65; SDAG-NEXT: s_endpgm 66; 67; GISEL-LABEL: prefetch_data_vgpr_imm_base_sgpr_len: 68; GISEL: ; %bb.0: ; %entry 69; GISEL-NEXT: v_add_co_u32 v0, vcc_lo, 0x200, v0 70; GISEL-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo 71; GISEL-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 72; GISEL-NEXT: v_readfirstlane_b32 s2, v0 73; GISEL-NEXT: v_readfirstlane_b32 s3, v1 74; GISEL-NEXT: s_prefetch_data s[2:3], 0x0, s0, 0 75; GISEL-NEXT: s_endpgm 76entry: 77 %gep = getelementptr i32, ptr addrspace(4) %ptr, i32 128 78 tail call void @llvm.amdgcn.s.prefetch.data.p4(ptr addrspace(4) %gep, i32 %len) 79 ret void 80} 81 82define amdgpu_ps void @prefetch_data_sgpr_base_vgpr_len(ptr addrspace(4) inreg %ptr, i32 %len) { 83; GCN-LABEL: prefetch_data_sgpr_base_vgpr_len: 84; GCN: ; %bb.0: ; %entry 85; GCN-NEXT: v_readfirstlane_b32 s2, v0 86; GCN-NEXT: s_prefetch_data s[0:1], 0x0, s2, 0 87; GCN-NEXT: s_endpgm 88entry: 89 tail call void @llvm.amdgcn.s.prefetch.data.p4(ptr addrspace(4) %ptr, i32 %len) 90 ret void 91} 92 93define amdgpu_ps void @prefetch_data_sgpr_base_imm_len_global(ptr addrspace(1) inreg %ptr) { 94; GCN-LABEL: prefetch_data_sgpr_base_imm_len_global: 95; GCN: ; %bb.0: ; %entry 96; GCN-NEXT: s_prefetch_data s[0:1], 0x0, null, 31 97; GCN-NEXT: s_endpgm 98entry: 99 tail call void @llvm.amdgcn.s.prefetch.data.p1(ptr addrspace(1) %ptr, i32 31) 100 ret void 101} 102 103define amdgpu_ps void @prefetch_data_sgpr_base_imm_len_flat(ptr inreg %ptr) { 104; GCN-LABEL: prefetch_data_sgpr_base_imm_len_flat: 105; GCN: ; %bb.0: ; %entry 106; GCN-NEXT: s_prefetch_data s[0:1], 0x0, null, 31 107; GCN-NEXT: s_endpgm 108entry: 109 tail call void @llvm.amdgcn.s.prefetch.data.p0(ptr %ptr, i32 31) 110 ret void 111} 112 113define amdgpu_ps void @prefetch_data_vgpr_base_imm_len(ptr addrspace(4) %ptr) { 114; GCN-LABEL: prefetch_data_vgpr_base_imm_len: 115; GCN: ; %bb.0: ; %entry 116; GCN-NEXT: v_readfirstlane_b32 s0, v0 117; GCN-NEXT: v_readfirstlane_b32 s1, v1 118; GCN-NEXT: s_prefetch_data s[0:1], 0x0, null, 0 119; GCN-NEXT: s_endpgm 120entry: 121 tail call void @llvm.amdgcn.s.prefetch.data.p4(ptr addrspace(4) %ptr, i32 0) 122 ret void 123} 124 125declare void @llvm.amdgcn.s.prefetch.data.p4(ptr addrspace(4) %ptr, i32 %len) 126declare void @llvm.amdgcn.s.prefetch.data.p1(ptr addrspace(1) %ptr, i32 %len) 127declare void @llvm.amdgcn.s.prefetch.data.p0(ptr %ptr, i32 %len) 128