brintos

brintos / llvm-project-archived public Read only

0
0
Text · 38.9 KiB · a5a70bb Raw
951 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1250 < %s | FileCheck --check-prefixes=GCN,GFX1250,GL2-ONLY %s3; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1250 -mattr=+safe-smem-prefetch < %s | FileCheck --check-prefixes=GCN,SPREFETCH,GFX1250-SPREFETCH,GFX1250-SPREFETCH-SDAG %s4; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1250 -mattr=+safe-cu-prefetch < %s | FileCheck --check-prefixes=GCN,GFX1250,SAFE-CU %s5; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck --check-prefixes=GCN,NOSPREFETCH %s6; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1200 -mattr=+safe-smem-prefetch < %s | FileCheck --check-prefixes=GCN,SPREFETCH,GFX12-SPREFETCH,SPREFETCH-SDAG %s7; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1100 < %s | FileCheck --check-prefixes=GCN,NOSPREFETCH %s8; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1250 < %s | FileCheck --check-prefixes=GCN,GFX1250,GL2-ONLY %s9; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1250 -mattr=+safe-smem-prefetch < %s | FileCheck --check-prefixes=GCN,SPREFETCH,GFX1250-SPREFETCH,GFX1250-SPREFETCH-GISEL %s10; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1250 -mattr=+safe-cu-prefetch < %s | FileCheck --check-prefixes=GCN,GFX1250,SAFE-CU %s11; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck --check-prefixes=GCN,NOSPREFETCH %s12; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1200 -mattr=+safe-smem-prefetch < %s | FileCheck --check-prefixes=GCN,SPREFETCH,GFX12-SPREFETCH,SPREFETCH-GISEL %s13; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1100 < %s | FileCheck --check-prefixes=GCN,NOSPREFETCH %s14 15; Scalar data prefetch16 17define amdgpu_ps void @prefetch_data_sgpr(ptr addrspace(4) inreg %ptr) {18; GFX1250-LABEL: prefetch_data_sgpr:19; GFX1250:       ; %bb.0: ; %entry20; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 121; GFX1250-NEXT:    v_mov_b32_e32 v0, 022; GFX1250-NEXT:    global_prefetch_b8 v0, s[0:1] scope:SCOPE_SYS23; GFX1250-NEXT:    s_endpgm24;25; GFX1250-SPREFETCH-LABEL: prefetch_data_sgpr:26; GFX1250-SPREFETCH:       ; %bb.0: ; %entry27; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 128; GFX1250-SPREFETCH-NEXT:    s_prefetch_data s[0:1], 0x0, null, 029; GFX1250-SPREFETCH-NEXT:    s_endpgm30;31; NOSPREFETCH-LABEL: prefetch_data_sgpr:32; NOSPREFETCH:       ; %bb.0: ; %entry33; NOSPREFETCH-NEXT:    s_endpgm34;35; GFX12-SPREFETCH-LABEL: prefetch_data_sgpr:36; GFX12-SPREFETCH:       ; %bb.0: ; %entry37; GFX12-SPREFETCH-NEXT:    s_prefetch_data s[0:1], 0x0, null, 038; GFX12-SPREFETCH-NEXT:    s_endpgm39entry:40  tail call void @llvm.prefetch.p4(ptr addrspace(4) %ptr, i32 0, i32 0, i32 1)41  ret void42}43 44define amdgpu_ps void @prefetch_data_sgpr_offset(ptr addrspace(4) inreg %ptr) {45; GFX1250-LABEL: prefetch_data_sgpr_offset:46; GFX1250:       ; %bb.0: ; %entry47; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 148; GFX1250-NEXT:    v_mov_b32_e32 v0, 049; GFX1250-NEXT:    global_prefetch_b8 v0, s[0:1] offset:512 scope:SCOPE_SYS50; GFX1250-NEXT:    s_endpgm51;52; GFX1250-SPREFETCH-LABEL: prefetch_data_sgpr_offset:53; GFX1250-SPREFETCH:       ; %bb.0: ; %entry54; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 155; GFX1250-SPREFETCH-NEXT:    s_prefetch_data s[0:1], 0x200, null, 056; GFX1250-SPREFETCH-NEXT:    s_endpgm57;58; NOSPREFETCH-LABEL: prefetch_data_sgpr_offset:59; NOSPREFETCH:       ; %bb.0: ; %entry60; NOSPREFETCH-NEXT:    s_endpgm61;62; GFX12-SPREFETCH-LABEL: prefetch_data_sgpr_offset:63; GFX12-SPREFETCH:       ; %bb.0: ; %entry64; GFX12-SPREFETCH-NEXT:    s_prefetch_data s[0:1], 0x200, null, 065; GFX12-SPREFETCH-NEXT:    s_endpgm66entry:67  %gep = getelementptr float, ptr addrspace(4) %ptr, i32 12868  tail call void @llvm.prefetch.p4(ptr addrspace(4) %gep, i32 0, i32 0, i32 1)69  ret void70}71 72; Check large offsets73 74define amdgpu_ps void @prefetch_data_sgpr_max_offset(ptr addrspace(4) inreg %ptr) {75; GFX1250-LABEL: prefetch_data_sgpr_max_offset:76; GFX1250:       ; %bb.0: ; %entry77; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 178; GFX1250-NEXT:    v_mov_b32_e32 v0, 079; GFX1250-NEXT:    global_prefetch_b8 v0, s[0:1] offset:8388607 scope:SCOPE_SYS80; GFX1250-NEXT:    s_endpgm81;82; GFX1250-SPREFETCH-LABEL: prefetch_data_sgpr_max_offset:83; GFX1250-SPREFETCH:       ; %bb.0: ; %entry84; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 185; GFX1250-SPREFETCH-NEXT:    s_prefetch_data s[0:1], 0x7fffff, null, 086; GFX1250-SPREFETCH-NEXT:    s_endpgm87;88; NOSPREFETCH-LABEL: prefetch_data_sgpr_max_offset:89; NOSPREFETCH:       ; %bb.0: ; %entry90; NOSPREFETCH-NEXT:    s_endpgm91;92; GFX12-SPREFETCH-LABEL: prefetch_data_sgpr_max_offset:93; GFX12-SPREFETCH:       ; %bb.0: ; %entry94; GFX12-SPREFETCH-NEXT:    s_prefetch_data s[0:1], 0x7fffff, null, 095; GFX12-SPREFETCH-NEXT:    s_endpgm96entry:97  %gep = getelementptr i8, ptr addrspace(4) %ptr, i32 838860798  tail call void @llvm.prefetch.p4(ptr addrspace(4) %gep, i32 0, i32 0, i32 1)99  ret void100}101 102define amdgpu_ps void @prefetch_data_sgpr_min_offset(ptr addrspace(4) inreg %ptr) {103; GFX1250-LABEL: prefetch_data_sgpr_min_offset:104; GFX1250:       ; %bb.0: ; %entry105; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1106; GFX1250-NEXT:    v_mov_b32_e32 v0, 0107; GFX1250-NEXT:    global_prefetch_b8 v0, s[0:1] offset:-8388608 scope:SCOPE_SYS108; GFX1250-NEXT:    s_endpgm109;110; GFX1250-SPREFETCH-SDAG-LABEL: prefetch_data_sgpr_min_offset:111; GFX1250-SPREFETCH-SDAG:       ; %bb.0: ; %entry112; GFX1250-SPREFETCH-SDAG-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1113; GFX1250-SPREFETCH-SDAG-NEXT:    s_mov_b64 s[2:3], 0xffffffffff800000114; GFX1250-SPREFETCH-SDAG-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)115; GFX1250-SPREFETCH-SDAG-NEXT:    s_add_nc_u64 s[0:1], s[0:1], s[2:3]116; GFX1250-SPREFETCH-SDAG-NEXT:    s_prefetch_data s[0:1], 0x0, null, 0117; GFX1250-SPREFETCH-SDAG-NEXT:    s_endpgm118;119; NOSPREFETCH-LABEL: prefetch_data_sgpr_min_offset:120; NOSPREFETCH:       ; %bb.0: ; %entry121; NOSPREFETCH-NEXT:    s_endpgm122;123; SPREFETCH-SDAG-LABEL: prefetch_data_sgpr_min_offset:124; SPREFETCH-SDAG:       ; %bb.0: ; %entry125; SPREFETCH-SDAG-NEXT:    s_mov_b32 s2, 0xff800000126; SPREFETCH-SDAG-NEXT:    s_mov_b32 s3, -1127; SPREFETCH-SDAG-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)128; SPREFETCH-SDAG-NEXT:    s_add_nc_u64 s[0:1], s[0:1], s[2:3]129; SPREFETCH-SDAG-NEXT:    s_prefetch_data s[0:1], 0x0, null, 0130; SPREFETCH-SDAG-NEXT:    s_endpgm131;132; GFX1250-SPREFETCH-GISEL-LABEL: prefetch_data_sgpr_min_offset:133; GFX1250-SPREFETCH-GISEL:       ; %bb.0: ; %entry134; GFX1250-SPREFETCH-GISEL-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1135; GFX1250-SPREFETCH-GISEL-NEXT:    s_add_co_u32 s0, s0, 0xff800000136; GFX1250-SPREFETCH-GISEL-NEXT:    s_add_co_ci_u32 s1, s1, -1137; GFX1250-SPREFETCH-GISEL-NEXT:    s_prefetch_data s[0:1], 0x0, null, 0138; GFX1250-SPREFETCH-GISEL-NEXT:    s_endpgm139;140; SPREFETCH-GISEL-LABEL: prefetch_data_sgpr_min_offset:141; SPREFETCH-GISEL:       ; %bb.0: ; %entry142; SPREFETCH-GISEL-NEXT:    s_add_co_u32 s0, s0, 0xff800000143; SPREFETCH-GISEL-NEXT:    s_add_co_ci_u32 s1, s1, -1144; SPREFETCH-GISEL-NEXT:    s_prefetch_data s[0:1], 0x0, null, 0145; SPREFETCH-GISEL-NEXT:    s_endpgm146entry:147  %gep = getelementptr i8, ptr addrspace(4) %ptr, i32 -8388608148  tail call void @llvm.prefetch.p4(ptr addrspace(4) %gep, i32 0, i32 0, i32 1)149  ret void150}151 152define amdgpu_ps void @prefetch_data_sgpr_too_large_offset(ptr addrspace(4) inreg %ptr) {153; GFX1250-LABEL: prefetch_data_sgpr_too_large_offset:154; GFX1250:       ; %bb.0: ; %entry155; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1156; GFX1250-NEXT:    v_mov_b32_e32 v0, 0x800000157; GFX1250-NEXT:    global_prefetch_b8 v0, s[0:1] scope:SCOPE_SYS158; GFX1250-NEXT:    s_endpgm159;160; GFX1250-SPREFETCH-SDAG-LABEL: prefetch_data_sgpr_too_large_offset:161; GFX1250-SPREFETCH-SDAG:       ; %bb.0: ; %entry162; GFX1250-SPREFETCH-SDAG-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1163; GFX1250-SPREFETCH-SDAG-NEXT:    s_add_nc_u64 s[0:1], s[0:1], 0x800000164; GFX1250-SPREFETCH-SDAG-NEXT:    s_prefetch_data s[0:1], 0x0, null, 0165; GFX1250-SPREFETCH-SDAG-NEXT:    s_endpgm166;167; NOSPREFETCH-LABEL: prefetch_data_sgpr_too_large_offset:168; NOSPREFETCH:       ; %bb.0: ; %entry169; NOSPREFETCH-NEXT:    s_endpgm170;171; SPREFETCH-SDAG-LABEL: prefetch_data_sgpr_too_large_offset:172; SPREFETCH-SDAG:       ; %bb.0: ; %entry173; SPREFETCH-SDAG-NEXT:    s_add_nc_u64 s[0:1], s[0:1], 0x800000174; SPREFETCH-SDAG-NEXT:    s_prefetch_data s[0:1], 0x0, null, 0175; SPREFETCH-SDAG-NEXT:    s_endpgm176;177; GFX1250-SPREFETCH-GISEL-LABEL: prefetch_data_sgpr_too_large_offset:178; GFX1250-SPREFETCH-GISEL:       ; %bb.0: ; %entry179; GFX1250-SPREFETCH-GISEL-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1180; GFX1250-SPREFETCH-GISEL-NEXT:    s_add_co_u32 s0, s0, 0x800000181; GFX1250-SPREFETCH-GISEL-NEXT:    s_add_co_ci_u32 s1, s1, 0182; GFX1250-SPREFETCH-GISEL-NEXT:    s_prefetch_data s[0:1], 0x0, null, 0183; GFX1250-SPREFETCH-GISEL-NEXT:    s_endpgm184;185; SPREFETCH-GISEL-LABEL: prefetch_data_sgpr_too_large_offset:186; SPREFETCH-GISEL:       ; %bb.0: ; %entry187; SPREFETCH-GISEL-NEXT:    s_add_co_u32 s0, s0, 0x800000188; SPREFETCH-GISEL-NEXT:    s_add_co_ci_u32 s1, s1, 0189; SPREFETCH-GISEL-NEXT:    s_prefetch_data s[0:1], 0x0, null, 0190; SPREFETCH-GISEL-NEXT:    s_endpgm191entry:192  %gep = getelementptr i8, ptr addrspace(4) %ptr, i32 8388608193  tail call void @llvm.prefetch.p4(ptr addrspace(4) %gep, i32 0, i32 0, i32 1)194  ret void195}196 197; Check divergent address198 199define amdgpu_ps void @prefetch_data_vgpr_global(ptr addrspace(1) %ptr) {200; GFX1250-LABEL: prefetch_data_vgpr_global:201; GFX1250:       ; %bb.0: ; %entry202; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1203; GFX1250-NEXT:    global_prefetch_b8 v[0:1], off scope:SCOPE_SYS204; GFX1250-NEXT:    s_endpgm205;206; GFX1250-SPREFETCH-LABEL: prefetch_data_vgpr_global:207; GFX1250-SPREFETCH:       ; %bb.0: ; %entry208; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1209; GFX1250-SPREFETCH-NEXT:    global_prefetch_b8 v[0:1], off scope:SCOPE_SYS210; GFX1250-SPREFETCH-NEXT:    s_endpgm211;212; NOSPREFETCH-LABEL: prefetch_data_vgpr_global:213; NOSPREFETCH:       ; %bb.0: ; %entry214; NOSPREFETCH-NEXT:    s_endpgm215;216; GFX12-SPREFETCH-LABEL: prefetch_data_vgpr_global:217; GFX12-SPREFETCH:       ; %bb.0: ; %entry218; GFX12-SPREFETCH-NEXT:    s_endpgm219entry:220  tail call void @llvm.prefetch.p1(ptr addrspace(1) %ptr, i32 0, i32 0, i32 1)221  ret void222}223 224define amdgpu_ps void @prefetch_data_vgpr_flat(ptr %ptr) {225; GFX1250-LABEL: prefetch_data_vgpr_flat:226; GFX1250:       ; %bb.0: ; %entry227; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1228; GFX1250-NEXT:    flat_prefetch_b8 v[0:1] scope:SCOPE_SYS229; GFX1250-NEXT:    s_endpgm230;231; GFX1250-SPREFETCH-LABEL: prefetch_data_vgpr_flat:232; GFX1250-SPREFETCH:       ; %bb.0: ; %entry233; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1234; GFX1250-SPREFETCH-NEXT:    flat_prefetch_b8 v[0:1] scope:SCOPE_SYS235; GFX1250-SPREFETCH-NEXT:    s_endpgm236;237; NOSPREFETCH-LABEL: prefetch_data_vgpr_flat:238; NOSPREFETCH:       ; %bb.0: ; %entry239; NOSPREFETCH-NEXT:    s_endpgm240;241; GFX12-SPREFETCH-LABEL: prefetch_data_vgpr_flat:242; GFX12-SPREFETCH:       ; %bb.0: ; %entry243; GFX12-SPREFETCH-NEXT:    s_endpgm244entry:245  tail call void @llvm.prefetch.pf(ptr %ptr, i32 0, i32 0, i32 1)246  ret void247}248 249define amdgpu_ps void @prefetch_data_sgpr_vgpr_offset_global(ptr addrspace(1) inreg %ptr, i32 %offset) {250; GFX1250-LABEL: prefetch_data_sgpr_vgpr_offset_global:251; GFX1250:       ; %bb.0: ; %entry252; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1253; GFX1250-NEXT:    global_prefetch_b8 v0, s[0:1] scope:SCOPE_SYS254; GFX1250-NEXT:    s_endpgm255;256; GFX1250-SPREFETCH-LABEL: prefetch_data_sgpr_vgpr_offset_global:257; GFX1250-SPREFETCH:       ; %bb.0: ; %entry258; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1259; GFX1250-SPREFETCH-NEXT:    global_prefetch_b8 v0, s[0:1] scope:SCOPE_SYS260; GFX1250-SPREFETCH-NEXT:    s_endpgm261;262; NOSPREFETCH-LABEL: prefetch_data_sgpr_vgpr_offset_global:263; NOSPREFETCH:       ; %bb.0: ; %entry264; NOSPREFETCH-NEXT:    s_endpgm265;266; GFX12-SPREFETCH-LABEL: prefetch_data_sgpr_vgpr_offset_global:267; GFX12-SPREFETCH:       ; %bb.0: ; %entry268; GFX12-SPREFETCH-NEXT:    s_endpgm269; GFX12-LABEL: prefetch_data_sgpr_vgpr_offset_global:270; GFX12:       ; %bb.0: ; %entry271; GFX12-NEXT:    s_endpgm272; GFX11-LABEL: prefetch_data_sgpr_vgpr_offset_global:273; GFX11:       ; %bb.0: ; %entry274; GFX11-NEXT:    s_endpgm275entry:276  %gep = getelementptr i8, ptr addrspace(1) %ptr, i32 %offset277  tail call void @llvm.prefetch.p1(ptr addrspace(1) %gep, i32 0, i32 0, i32 1)278  ret void279}280 281define amdgpu_ps void @prefetch_data_sgpr_vgpr_offset_flat(ptr inreg %ptr, i32 %offset) {282; GFX1250-LABEL: prefetch_data_sgpr_vgpr_offset_flat:283; GFX1250:       ; %bb.0: ; %entry284; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1285; GFX1250-NEXT:    flat_prefetch_b8 v0, s[0:1] offset:128 scope:SCOPE_SYS286; GFX1250-NEXT:    s_endpgm287;288; GFX1250-SPREFETCH-LABEL: prefetch_data_sgpr_vgpr_offset_flat:289; GFX1250-SPREFETCH:       ; %bb.0: ; %entry290; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1291; GFX1250-SPREFETCH-NEXT:    flat_prefetch_b8 v0, s[0:1] offset:128 scope:SCOPE_SYS292; GFX1250-SPREFETCH-NEXT:    s_endpgm293;294; NOSPREFETCH-LABEL: prefetch_data_sgpr_vgpr_offset_flat:295; NOSPREFETCH:       ; %bb.0: ; %entry296; NOSPREFETCH-NEXT:    s_endpgm297;298; GFX12-SPREFETCH-LABEL: prefetch_data_sgpr_vgpr_offset_flat:299; GFX12-SPREFETCH:       ; %bb.0: ; %entry300; GFX12-SPREFETCH-NEXT:    s_endpgm301; GFX12-LABEL: prefetch_data_sgpr_vgpr_offset_flat:302; GFX12:       ; %bb.0: ; %entry303; GFX12-NEXT:    s_endpgm304; GFX11-LABEL: prefetch_data_sgpr_vgpr_offset_flat:305; GFX11:       ; %bb.0: ; %entry306; GFX11-NEXT:    s_endpgm307entry:308  %gep1 = getelementptr i8, ptr %ptr, i32 %offset309  %gep2 = getelementptr i8, ptr %gep1, i32 128310  tail call void @llvm.prefetch.pf(ptr %gep2, i32 0, i32 0, i32 1)311  ret void312}313 314; Check LDS and Scratch, we cannot prefetch it315 316define amdgpu_ps void @prefetch_data_lds(ptr addrspace(3) inreg %ptr) {317; GFX1250-LABEL: prefetch_data_lds:318; GFX1250:       ; %bb.0: ; %entry319; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1320; GFX1250-NEXT:    s_endpgm321;322; GFX1250-SPREFETCH-LABEL: prefetch_data_lds:323; GFX1250-SPREFETCH:       ; %bb.0: ; %entry324; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1325; GFX1250-SPREFETCH-NEXT:    s_endpgm326;327; NOSPREFETCH-LABEL: prefetch_data_lds:328; NOSPREFETCH:       ; %bb.0: ; %entry329; NOSPREFETCH-NEXT:    s_endpgm330;331; GFX12-SPREFETCH-LABEL: prefetch_data_lds:332; GFX12-SPREFETCH:       ; %bb.0: ; %entry333; GFX12-SPREFETCH-NEXT:    s_endpgm334entry:335  tail call void @llvm.prefetch.p3(ptr addrspace(3) %ptr, i32 0, i32 0, i32 1)336  ret void337}338 339define amdgpu_ps void @prefetch_data_scratch(ptr addrspace(5) inreg %ptr) {340; GFX1250-LABEL: prefetch_data_scratch:341; GFX1250:       ; %bb.0: ; %entry342; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1343; GFX1250-NEXT:    s_endpgm344;345; GFX1250-SPREFETCH-LABEL: prefetch_data_scratch:346; GFX1250-SPREFETCH:       ; %bb.0: ; %entry347; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1348; GFX1250-SPREFETCH-NEXT:    s_endpgm349;350; NOSPREFETCH-LABEL: prefetch_data_scratch:351; NOSPREFETCH:       ; %bb.0: ; %entry352; NOSPREFETCH-NEXT:    s_endpgm353;354; GFX12-SPREFETCH-LABEL: prefetch_data_scratch:355; GFX12-SPREFETCH:       ; %bb.0: ; %entry356; GFX12-SPREFETCH-NEXT:    s_endpgm357entry:358  tail call void @llvm.prefetch.p5(ptr addrspace(5) %ptr, i32 0, i32 0, i32 1)359  ret void360}361 362; Check supported address spaces363 364define amdgpu_ps void @prefetch_data_sgpr_flat(ptr inreg %ptr) {365; GFX1250-LABEL: prefetch_data_sgpr_flat:366; GFX1250:       ; %bb.0: ; %entry367; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1368; GFX1250-NEXT:    v_mov_b32_e32 v0, 0369; GFX1250-NEXT:    flat_prefetch_b8 v0, s[0:1] scope:SCOPE_SYS370; GFX1250-NEXT:    s_endpgm371;372; GFX1250-SPREFETCH-LABEL: prefetch_data_sgpr_flat:373; GFX1250-SPREFETCH:       ; %bb.0: ; %entry374; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1375; GFX1250-SPREFETCH-NEXT:    s_prefetch_data s[0:1], 0x0, null, 0376; GFX1250-SPREFETCH-NEXT:    s_endpgm377;378; NOSPREFETCH-LABEL: prefetch_data_sgpr_flat:379; NOSPREFETCH:       ; %bb.0: ; %entry380; NOSPREFETCH-NEXT:    s_endpgm381;382; GFX12-SPREFETCH-LABEL: prefetch_data_sgpr_flat:383; GFX12-SPREFETCH:       ; %bb.0: ; %entry384; GFX12-SPREFETCH-NEXT:    s_prefetch_data s[0:1], 0x0, null, 0385; GFX12-SPREFETCH-NEXT:    s_endpgm386entry:387  tail call void @llvm.prefetch.pf(ptr %ptr, i32 0, i32 0, i32 1)388  ret void389}390 391define amdgpu_ps void @prefetch_data_sgpr_global(ptr addrspace(1) inreg %ptr) {392; GFX1250-LABEL: prefetch_data_sgpr_global:393; GFX1250:       ; %bb.0: ; %entry394; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1395; GFX1250-NEXT:    v_mov_b32_e32 v0, 0396; GFX1250-NEXT:    global_prefetch_b8 v0, s[0:1] scope:SCOPE_SYS397; GFX1250-NEXT:    s_endpgm398;399; GFX1250-SPREFETCH-LABEL: prefetch_data_sgpr_global:400; GFX1250-SPREFETCH:       ; %bb.0: ; %entry401; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1402; GFX1250-SPREFETCH-NEXT:    s_prefetch_data s[0:1], 0x0, null, 0403; GFX1250-SPREFETCH-NEXT:    s_endpgm404;405; NOSPREFETCH-LABEL: prefetch_data_sgpr_global:406; NOSPREFETCH:       ; %bb.0: ; %entry407; NOSPREFETCH-NEXT:    s_endpgm408;409; GFX12-SPREFETCH-LABEL: prefetch_data_sgpr_global:410; GFX12-SPREFETCH:       ; %bb.0: ; %entry411; GFX12-SPREFETCH-NEXT:    s_prefetch_data s[0:1], 0x0, null, 0412; GFX12-SPREFETCH-NEXT:    s_endpgm413entry:414  tail call void @llvm.prefetch.p1(ptr addrspace(1) %ptr, i32 0, i32 0, i32 1)415  ret void416}417 418define amdgpu_ps void @prefetch_data_sgpr_constant_32bit(ptr addrspace(6) inreg %ptr) {419; GFX1250-LABEL: prefetch_data_sgpr_constant_32bit:420; GFX1250:       ; %bb.0: ; %entry421; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1422; GFX1250-NEXT:    s_endpgm423;424; GFX1250-SPREFETCH-LABEL: prefetch_data_sgpr_constant_32bit:425; GFX1250-SPREFETCH:       ; %bb.0: ; %entry426; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1427; GFX1250-SPREFETCH-NEXT:    s_mov_b32 s1, 0428; GFX1250-SPREFETCH-NEXT:    s_prefetch_data s[0:1], 0x0, null, 0429; GFX1250-SPREFETCH-NEXT:    s_endpgm430;431; NOSPREFETCH-LABEL: prefetch_data_sgpr_constant_32bit:432; NOSPREFETCH:       ; %bb.0: ; %entry433; NOSPREFETCH-NEXT:    s_endpgm434;435; GFX12-SPREFETCH-LABEL: prefetch_data_sgpr_constant_32bit:436; GFX12-SPREFETCH:       ; %bb.0: ; %entry437; GFX12-SPREFETCH-NEXT:    s_mov_b32 s1, 0438; GFX12-SPREFETCH-NEXT:    s_prefetch_data s[0:1], 0x0, null, 0439; GFX12-SPREFETCH-NEXT:    s_endpgm440entry:441  tail call void @llvm.prefetch.p6(ptr addrspace(6) %ptr, i32 0, i32 0, i32 1)442  ret void443}444 445; I$ prefetch446 447define amdgpu_ps void @prefetch_inst_sgpr(ptr addrspace(4) inreg %ptr) {448; GFX1250-LABEL: prefetch_inst_sgpr:449; GFX1250:       ; %bb.0: ; %entry450; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1451; GFX1250-NEXT:    s_endpgm452;453; GFX1250-SPREFETCH-LABEL: prefetch_inst_sgpr:454; GFX1250-SPREFETCH:       ; %bb.0: ; %entry455; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1456; GFX1250-SPREFETCH-NEXT:    s_prefetch_inst s[0:1], 0x0, null, 0457; GFX1250-SPREFETCH-NEXT:    s_endpgm458;459; NOSPREFETCH-LABEL: prefetch_inst_sgpr:460; NOSPREFETCH:       ; %bb.0: ; %entry461; NOSPREFETCH-NEXT:    s_endpgm462;463; GFX12-SPREFETCH-LABEL: prefetch_inst_sgpr:464; GFX12-SPREFETCH:       ; %bb.0: ; %entry465; GFX12-SPREFETCH-NEXT:    s_prefetch_inst s[0:1], 0x0, null, 0466; GFX12-SPREFETCH-NEXT:    s_endpgm467entry:468  tail call void @llvm.prefetch.p4(ptr addrspace(4) %ptr, i32 0, i32 0, i32 0)469  ret void470}471 472define amdgpu_ps void @prefetch_inst_sgpr_offset(ptr addrspace(4) inreg %ptr) {473; GFX1250-LABEL: prefetch_inst_sgpr_offset:474; GFX1250:       ; %bb.0: ; %entry475; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1476; GFX1250-NEXT:    s_endpgm477;478; GFX1250-SPREFETCH-LABEL: prefetch_inst_sgpr_offset:479; GFX1250-SPREFETCH:       ; %bb.0: ; %entry480; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1481; GFX1250-SPREFETCH-NEXT:    s_prefetch_inst s[0:1], 0x80, null, 0482; GFX1250-SPREFETCH-NEXT:    s_endpgm483;484; NOSPREFETCH-LABEL: prefetch_inst_sgpr_offset:485; NOSPREFETCH:       ; %bb.0: ; %entry486; NOSPREFETCH-NEXT:    s_endpgm487;488; GFX12-SPREFETCH-LABEL: prefetch_inst_sgpr_offset:489; GFX12-SPREFETCH:       ; %bb.0: ; %entry490; GFX12-SPREFETCH-NEXT:    s_prefetch_inst s[0:1], 0x80, null, 0491; GFX12-SPREFETCH-NEXT:    s_endpgm492entry:493  %gep = getelementptr i8, ptr addrspace(4) %ptr, i32 128494  tail call void @llvm.prefetch.p4(ptr addrspace(4) %gep, i32 0, i32 0, i32 0)495  ret void496}497 498; Check large offsets499 500define amdgpu_ps void @prefetch_inst_sgpr_max_offset(ptr addrspace(4) inreg %ptr) {501; GFX1250-LABEL: prefetch_inst_sgpr_max_offset:502; GFX1250:       ; %bb.0: ; %entry503; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1504; GFX1250-NEXT:    s_endpgm505;506; GFX1250-SPREFETCH-LABEL: prefetch_inst_sgpr_max_offset:507; GFX1250-SPREFETCH:       ; %bb.0: ; %entry508; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1509; GFX1250-SPREFETCH-NEXT:    s_prefetch_inst s[0:1], 0x7fffff, null, 0510; GFX1250-SPREFETCH-NEXT:    s_endpgm511;512; NOSPREFETCH-LABEL: prefetch_inst_sgpr_max_offset:513; NOSPREFETCH:       ; %bb.0: ; %entry514; NOSPREFETCH-NEXT:    s_endpgm515;516; GFX12-SPREFETCH-LABEL: prefetch_inst_sgpr_max_offset:517; GFX12-SPREFETCH:       ; %bb.0: ; %entry518; GFX12-SPREFETCH-NEXT:    s_prefetch_inst s[0:1], 0x7fffff, null, 0519; GFX12-SPREFETCH-NEXT:    s_endpgm520entry:521  %gep = getelementptr i8, ptr addrspace(4) %ptr, i32 8388607522  tail call void @llvm.prefetch.p4(ptr addrspace(4) %gep, i32 0, i32 0, i32 0)523  ret void524}525 526define amdgpu_ps void @prefetch_inst_sgpr_min_offset(ptr addrspace(4) inreg %ptr) {527; GFX1250-LABEL: prefetch_inst_sgpr_min_offset:528; GFX1250:       ; %bb.0: ; %entry529; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1530; GFX1250-NEXT:    s_endpgm531;532; GFX1250-SPREFETCH-SDAG-LABEL: prefetch_inst_sgpr_min_offset:533; GFX1250-SPREFETCH-SDAG:       ; %bb.0: ; %entry534; GFX1250-SPREFETCH-SDAG-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1535; GFX1250-SPREFETCH-SDAG-NEXT:    s_mov_b64 s[2:3], 0xffffffffff800000536; GFX1250-SPREFETCH-SDAG-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)537; GFX1250-SPREFETCH-SDAG-NEXT:    s_add_nc_u64 s[0:1], s[0:1], s[2:3]538; GFX1250-SPREFETCH-SDAG-NEXT:    s_prefetch_inst s[0:1], 0x0, null, 0539; GFX1250-SPREFETCH-SDAG-NEXT:    s_endpgm540;541; NOSPREFETCH-LABEL: prefetch_inst_sgpr_min_offset:542; NOSPREFETCH:       ; %bb.0: ; %entry543; NOSPREFETCH-NEXT:    s_endpgm544;545; SPREFETCH-SDAG-LABEL: prefetch_inst_sgpr_min_offset:546; SPREFETCH-SDAG:       ; %bb.0: ; %entry547; SPREFETCH-SDAG-NEXT:    s_mov_b32 s2, 0xff800000548; SPREFETCH-SDAG-NEXT:    s_mov_b32 s3, -1549; SPREFETCH-SDAG-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)550; SPREFETCH-SDAG-NEXT:    s_add_nc_u64 s[0:1], s[0:1], s[2:3]551; SPREFETCH-SDAG-NEXT:    s_prefetch_inst s[0:1], 0x0, null, 0552; SPREFETCH-SDAG-NEXT:    s_endpgm553;554; GFX1250-SPREFETCH-GISEL-LABEL: prefetch_inst_sgpr_min_offset:555; GFX1250-SPREFETCH-GISEL:       ; %bb.0: ; %entry556; GFX1250-SPREFETCH-GISEL-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1557; GFX1250-SPREFETCH-GISEL-NEXT:    s_add_co_u32 s0, s0, 0xff800000558; GFX1250-SPREFETCH-GISEL-NEXT:    s_add_co_ci_u32 s1, s1, -1559; GFX1250-SPREFETCH-GISEL-NEXT:    s_prefetch_inst s[0:1], 0x0, null, 0560; GFX1250-SPREFETCH-GISEL-NEXT:    s_endpgm561;562; SPREFETCH-GISEL-LABEL: prefetch_inst_sgpr_min_offset:563; SPREFETCH-GISEL:       ; %bb.0: ; %entry564; SPREFETCH-GISEL-NEXT:    s_add_co_u32 s0, s0, 0xff800000565; SPREFETCH-GISEL-NEXT:    s_add_co_ci_u32 s1, s1, -1566; SPREFETCH-GISEL-NEXT:    s_prefetch_inst s[0:1], 0x0, null, 0567; SPREFETCH-GISEL-NEXT:    s_endpgm568entry:569  %gep = getelementptr i8, ptr addrspace(4) %ptr, i32 -8388608570  tail call void @llvm.prefetch.p4(ptr addrspace(4) %gep, i32 0, i32 0, i32 0)571  ret void572}573 574define amdgpu_ps void @prefetch_inst_sgpr_too_large_offset(ptr addrspace(4) inreg %ptr) {575; GFX1250-LABEL: prefetch_inst_sgpr_too_large_offset:576; GFX1250:       ; %bb.0: ; %entry577; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1578; GFX1250-NEXT:    s_endpgm579;580; GFX1250-SPREFETCH-SDAG-LABEL: prefetch_inst_sgpr_too_large_offset:581; GFX1250-SPREFETCH-SDAG:       ; %bb.0: ; %entry582; GFX1250-SPREFETCH-SDAG-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1583; GFX1250-SPREFETCH-SDAG-NEXT:    s_add_nc_u64 s[0:1], s[0:1], 0x800000584; GFX1250-SPREFETCH-SDAG-NEXT:    s_prefetch_inst s[0:1], 0x0, null, 0585; GFX1250-SPREFETCH-SDAG-NEXT:    s_endpgm586;587; NOSPREFETCH-LABEL: prefetch_inst_sgpr_too_large_offset:588; NOSPREFETCH:       ; %bb.0: ; %entry589; NOSPREFETCH-NEXT:    s_endpgm590;591; SPREFETCH-SDAG-LABEL: prefetch_inst_sgpr_too_large_offset:592; SPREFETCH-SDAG:       ; %bb.0: ; %entry593; SPREFETCH-SDAG-NEXT:    s_add_nc_u64 s[0:1], s[0:1], 0x800000594; SPREFETCH-SDAG-NEXT:    s_prefetch_inst s[0:1], 0x0, null, 0595; SPREFETCH-SDAG-NEXT:    s_endpgm596;597; GFX1250-SPREFETCH-GISEL-LABEL: prefetch_inst_sgpr_too_large_offset:598; GFX1250-SPREFETCH-GISEL:       ; %bb.0: ; %entry599; GFX1250-SPREFETCH-GISEL-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1600; GFX1250-SPREFETCH-GISEL-NEXT:    s_add_co_u32 s0, s0, 0x800000601; GFX1250-SPREFETCH-GISEL-NEXT:    s_add_co_ci_u32 s1, s1, 0602; GFX1250-SPREFETCH-GISEL-NEXT:    s_prefetch_inst s[0:1], 0x0, null, 0603; GFX1250-SPREFETCH-GISEL-NEXT:    s_endpgm604;605; SPREFETCH-GISEL-LABEL: prefetch_inst_sgpr_too_large_offset:606; SPREFETCH-GISEL:       ; %bb.0: ; %entry607; SPREFETCH-GISEL-NEXT:    s_add_co_u32 s0, s0, 0x800000608; SPREFETCH-GISEL-NEXT:    s_add_co_ci_u32 s1, s1, 0609; SPREFETCH-GISEL-NEXT:    s_prefetch_inst s[0:1], 0x0, null, 0610; SPREFETCH-GISEL-NEXT:    s_endpgm611entry:612  %gep = getelementptr i8, ptr addrspace(4) %ptr, i32 8388608613  tail call void @llvm.prefetch.p4(ptr addrspace(4) %gep, i32 0, i32 0, i32 0)614  ret void615}616 617; Check cache locality618 619define amdgpu_ps void @prefetch_data_vgpr_flat_dev(ptr %ptr) {620; GFX1250-LABEL: prefetch_data_vgpr_flat_dev:621; GFX1250:       ; %bb.0: ; %entry622; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1623; GFX1250-NEXT:    flat_prefetch_b8 v[0:1] scope:SCOPE_DEV624; GFX1250-NEXT:    s_endpgm625;626; GFX1250-SPREFETCH-LABEL: prefetch_data_vgpr_flat_dev:627; GFX1250-SPREFETCH:       ; %bb.0: ; %entry628; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1629; GFX1250-SPREFETCH-NEXT:    flat_prefetch_b8 v[0:1] scope:SCOPE_DEV630; GFX1250-SPREFETCH-NEXT:    s_endpgm631;632; NOSPREFETCH-LABEL: prefetch_data_vgpr_flat_dev:633; NOSPREFETCH:       ; %bb.0: ; %entry634; NOSPREFETCH-NEXT:    s_endpgm635;636; GFX12-SPREFETCH-LABEL: prefetch_data_vgpr_flat_dev:637; GFX12-SPREFETCH:       ; %bb.0: ; %entry638; GFX12-SPREFETCH-NEXT:    s_endpgm639entry:640  tail call void @llvm.prefetch.pf(ptr %ptr, i32 0, i32 1, i32 1)641  ret void642}643 644define amdgpu_ps void @prefetch_data_vgpr_flat_se(ptr %ptr) {645; GFX1250-LABEL: prefetch_data_vgpr_flat_se:646; GFX1250:       ; %bb.0: ; %entry647; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1648; GFX1250-NEXT:    flat_prefetch_b8 v[0:1] scope:SCOPE_SE649; GFX1250-NEXT:    s_endpgm650;651; GFX1250-SPREFETCH-LABEL: prefetch_data_vgpr_flat_se:652; GFX1250-SPREFETCH:       ; %bb.0: ; %entry653; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1654; GFX1250-SPREFETCH-NEXT:    flat_prefetch_b8 v[0:1] scope:SCOPE_SE655; GFX1250-SPREFETCH-NEXT:    s_endpgm656;657; NOSPREFETCH-LABEL: prefetch_data_vgpr_flat_se:658; NOSPREFETCH:       ; %bb.0: ; %entry659; NOSPREFETCH-NEXT:    s_endpgm660;661; GFX12-SPREFETCH-LABEL: prefetch_data_vgpr_flat_se:662; GFX12-SPREFETCH:       ; %bb.0: ; %entry663; GFX12-SPREFETCH-NEXT:    s_endpgm664entry:665  tail call void @llvm.prefetch.pf(ptr %ptr, i32 0, i32 2, i32 1)666  ret void667}668 669define amdgpu_ps void @prefetch_data_vgpr_flat_cu(ptr %ptr) {670; GL2-ONLY-LABEL: prefetch_data_vgpr_flat_cu:671; GL2-ONLY:       ; %bb.0: ; %entry672; GL2-ONLY-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1673; GL2-ONLY-NEXT:    flat_prefetch_b8 v[0:1] scope:SCOPE_SE674; GL2-ONLY-NEXT:    s_endpgm675;676; GFX1250-SPREFETCH-LABEL: prefetch_data_vgpr_flat_cu:677; GFX1250-SPREFETCH:       ; %bb.0: ; %entry678; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1679; GFX1250-SPREFETCH-NEXT:    flat_prefetch_b8 v[0:1] scope:SCOPE_SE680; GFX1250-SPREFETCH-NEXT:    s_endpgm681;682; SAFE-CU-LABEL: prefetch_data_vgpr_flat_cu:683; SAFE-CU:       ; %bb.0: ; %entry684; SAFE-CU-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1685; SAFE-CU-NEXT:    flat_prefetch_b8 v[0:1]686; SAFE-CU-NEXT:    s_endpgm687;688; NOSPREFETCH-LABEL: prefetch_data_vgpr_flat_cu:689; NOSPREFETCH:       ; %bb.0: ; %entry690; NOSPREFETCH-NEXT:    s_endpgm691;692; GFX12-SPREFETCH-LABEL: prefetch_data_vgpr_flat_cu:693; GFX12-SPREFETCH:       ; %bb.0: ; %entry694; GFX12-SPREFETCH-NEXT:    s_endpgm695entry:696  tail call void @llvm.prefetch.pf(ptr %ptr, i32 0, i32 3, i32 1)697  ret void698}699 700; flat offset701 702define amdgpu_ps void @prefetch_data_vgpr_flat_offset(ptr %ptr) {703; GFX1250-LABEL: prefetch_data_vgpr_flat_offset:704; GFX1250:       ; %bb.0: ; %entry705; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1706; GFX1250-NEXT:    flat_prefetch_b8 v[0:1] offset:512 scope:SCOPE_SYS707; GFX1250-NEXT:    s_endpgm708;709; GFX1250-SPREFETCH-LABEL: prefetch_data_vgpr_flat_offset:710; GFX1250-SPREFETCH:       ; %bb.0: ; %entry711; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1712; GFX1250-SPREFETCH-NEXT:    flat_prefetch_b8 v[0:1] offset:512 scope:SCOPE_SYS713; GFX1250-SPREFETCH-NEXT:    s_endpgm714;715; NOSPREFETCH-LABEL: prefetch_data_vgpr_flat_offset:716; NOSPREFETCH:       ; %bb.0: ; %entry717; NOSPREFETCH-NEXT:    s_endpgm718;719; GFX12-SPREFETCH-LABEL: prefetch_data_vgpr_flat_offset:720; GFX12-SPREFETCH:       ; %bb.0: ; %entry721; GFX12-SPREFETCH-NEXT:    s_endpgm722entry:723  %gep = getelementptr float, ptr %ptr, i32 128724  tail call void @llvm.prefetch.pf(ptr %gep, i32 0, i32 0, i32 1)725  ret void726}727 728define amdgpu_ps void @prefetch_data_vgpr_global_offset(ptr addrspace(1) %ptr) {729; GFX1250-LABEL: prefetch_data_vgpr_global_offset:730; GFX1250:       ; %bb.0: ; %entry731; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1732; GFX1250-NEXT:    global_prefetch_b8 v[0:1], off offset:512 scope:SCOPE_SYS733; GFX1250-NEXT:    s_endpgm734;735; GFX1250-SPREFETCH-LABEL: prefetch_data_vgpr_global_offset:736; GFX1250-SPREFETCH:       ; %bb.0: ; %entry737; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1738; GFX1250-SPREFETCH-NEXT:    global_prefetch_b8 v[0:1], off offset:512 scope:SCOPE_SYS739; GFX1250-SPREFETCH-NEXT:    s_endpgm740;741; NOSPREFETCH-LABEL: prefetch_data_vgpr_global_offset:742; NOSPREFETCH:       ; %bb.0: ; %entry743; NOSPREFETCH-NEXT:    s_endpgm744;745; GFX12-SPREFETCH-LABEL: prefetch_data_vgpr_global_offset:746; GFX12-SPREFETCH:       ; %bb.0: ; %entry747; GFX12-SPREFETCH-NEXT:    s_endpgm748entry:749  %gep = getelementptr float, ptr addrspace(1) %ptr, i32 128750  tail call void @llvm.prefetch.p1(ptr addrspace(1) %gep, i32 0, i32 0, i32 1)751  ret void752}753 754define amdgpu_ps void @prefetch_data_vgpr_global_saddr(ptr addrspace(1) inreg %ptr, i32 %voffset) {755; GFX1250-LABEL: prefetch_data_vgpr_global_saddr:756; GFX1250:       ; %bb.0: ; %entry757; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1758; GFX1250-NEXT:    global_prefetch_b8 v0, s[0:1] scope:SCOPE_SYS759; GFX1250-NEXT:    s_endpgm760;761; GFX1250-SPREFETCH-LABEL: prefetch_data_vgpr_global_saddr:762; GFX1250-SPREFETCH:       ; %bb.0: ; %entry763; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1764; GFX1250-SPREFETCH-NEXT:    global_prefetch_b8 v0, s[0:1] scope:SCOPE_SYS765; GFX1250-SPREFETCH-NEXT:    s_endpgm766;767; NOSPREFETCH-LABEL: prefetch_data_vgpr_global_saddr:768; NOSPREFETCH:       ; %bb.0: ; %entry769; NOSPREFETCH-NEXT:    s_endpgm770;771; GFX12-SPREFETCH-LABEL: prefetch_data_vgpr_global_saddr:772; GFX12-SPREFETCH:       ; %bb.0: ; %entry773; GFX12-SPREFETCH-NEXT:    s_endpgm774entry:775  %gep = getelementptr i8, ptr addrspace(1) %ptr, i32 %voffset776  tail call void @llvm.prefetch.p1(ptr addrspace(1) %gep, i32 0, i32 0, i32 1)777  ret void778}779 780define amdgpu_ps void @prefetch_data_vgpr_global_saddr_offset(ptr addrspace(1) inreg %ptr, i32 %voffset) {781; GFX1250-LABEL: prefetch_data_vgpr_global_saddr_offset:782; GFX1250:       ; %bb.0: ; %entry783; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1784; GFX1250-NEXT:    global_prefetch_b8 v0, s[0:1] offset:128 scope:SCOPE_SYS785; GFX1250-NEXT:    s_endpgm786;787; GFX1250-SPREFETCH-LABEL: prefetch_data_vgpr_global_saddr_offset:788; GFX1250-SPREFETCH:       ; %bb.0: ; %entry789; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1790; GFX1250-SPREFETCH-NEXT:    global_prefetch_b8 v0, s[0:1] offset:128 scope:SCOPE_SYS791; GFX1250-SPREFETCH-NEXT:    s_endpgm792;793; NOSPREFETCH-LABEL: prefetch_data_vgpr_global_saddr_offset:794; NOSPREFETCH:       ; %bb.0: ; %entry795; NOSPREFETCH-NEXT:    s_endpgm796;797; GFX12-SPREFETCH-LABEL: prefetch_data_vgpr_global_saddr_offset:798; GFX12-SPREFETCH:       ; %bb.0: ; %entry799; GFX12-SPREFETCH-NEXT:    s_endpgm800entry:801  %gep1 = getelementptr i8, ptr addrspace(1) %ptr, i32 %voffset802  %gep2 = getelementptr i8, ptr addrspace(1) %gep1, i32 128803  tail call void @llvm.prefetch.p1(ptr addrspace(1) %gep2, i32 0, i32 0, i32 1)804  ret void805}806 807; Cannot prefetch I$ with flat or global instructions.808 809define amdgpu_ps void @prefetch_inst_vgpr_global(ptr addrspace(1) %ptr) {810; GFX1250-LABEL: prefetch_inst_vgpr_global:811; GFX1250:       ; %bb.0: ; %entry812; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1813; GFX1250-NEXT:    s_endpgm814;815; GFX1250-SPREFETCH-LABEL: prefetch_inst_vgpr_global:816; GFX1250-SPREFETCH:       ; %bb.0: ; %entry817; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1818; GFX1250-SPREFETCH-NEXT:    s_endpgm819;820; NOSPREFETCH-LABEL: prefetch_inst_vgpr_global:821; NOSPREFETCH:       ; %bb.0: ; %entry822; NOSPREFETCH-NEXT:    s_endpgm823;824; GFX12-SPREFETCH-LABEL: prefetch_inst_vgpr_global:825; GFX12-SPREFETCH:       ; %bb.0: ; %entry826; GFX12-SPREFETCH-NEXT:    s_endpgm827entry:828  tail call void @llvm.prefetch.p1(ptr addrspace(1) %ptr, i32 0, i32 0, i32 0)829  ret void830}831 832define amdgpu_ps void @prefetch_inst_vgpr_flat(ptr %ptr) {833; GFX1250-LABEL: prefetch_inst_vgpr_flat:834; GFX1250:       ; %bb.0: ; %entry835; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1836; GFX1250-NEXT:    s_endpgm837;838; GFX1250-SPREFETCH-LABEL: prefetch_inst_vgpr_flat:839; GFX1250-SPREFETCH:       ; %bb.0: ; %entry840; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1841; GFX1250-SPREFETCH-NEXT:    s_endpgm842;843; NOSPREFETCH-LABEL: prefetch_inst_vgpr_flat:844; NOSPREFETCH:       ; %bb.0: ; %entry845; NOSPREFETCH-NEXT:    s_endpgm846;847; GFX12-SPREFETCH-LABEL: prefetch_inst_vgpr_flat:848; GFX12-SPREFETCH:       ; %bb.0: ; %entry849; GFX12-SPREFETCH-NEXT:    s_endpgm850entry:851  tail call void @llvm.prefetch.pf(ptr %ptr, i32 0, i32 0, i32 0)852  ret void853}854 855; Force vector prefetch for uniform address with rw = 1 argument.856 857define amdgpu_ps void @prefetch_data_sgpr_flat_force_vector(ptr inreg %ptr) {858; GFX1250-LABEL: prefetch_data_sgpr_flat_force_vector:859; GFX1250:       ; %bb.0: ; %entry860; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1861; GFX1250-NEXT:    v_mov_b32_e32 v0, 0862; GFX1250-NEXT:    flat_prefetch_b8 v0, s[0:1] scope:SCOPE_SYS863; GFX1250-NEXT:    s_endpgm864;865; GFX1250-SPREFETCH-LABEL: prefetch_data_sgpr_flat_force_vector:866; GFX1250-SPREFETCH:       ; %bb.0: ; %entry867; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1868; GFX1250-SPREFETCH-NEXT:    v_mov_b32_e32 v0, 0869; GFX1250-SPREFETCH-NEXT:    flat_prefetch_b8 v0, s[0:1] scope:SCOPE_SYS870; GFX1250-SPREFETCH-NEXT:    s_endpgm871;872; NOSPREFETCH-LABEL: prefetch_data_sgpr_flat_force_vector:873; NOSPREFETCH:       ; %bb.0: ; %entry874; NOSPREFETCH-NEXT:    s_endpgm875;876; GFX12-SPREFETCH-LABEL: prefetch_data_sgpr_flat_force_vector:877; GFX12-SPREFETCH:       ; %bb.0: ; %entry878; GFX12-SPREFETCH-NEXT:    s_prefetch_data s[0:1], 0x0, null, 0879; GFX12-SPREFETCH-NEXT:    s_endpgm880entry:881  tail call void @llvm.prefetch.pf(ptr %ptr, i32 1, i32 0, i32 1)882  ret void883}884 885define amdgpu_ps void @prefetch_data_sgpr_global_force_vector(ptr addrspace(1) inreg %ptr) {886; GFX1250-LABEL: prefetch_data_sgpr_global_force_vector:887; GFX1250:       ; %bb.0: ; %entry888; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1889; GFX1250-NEXT:    v_mov_b32_e32 v0, 0890; GFX1250-NEXT:    global_prefetch_b8 v0, s[0:1] scope:SCOPE_SYS891; GFX1250-NEXT:    s_endpgm892;893; GFX1250-SPREFETCH-LABEL: prefetch_data_sgpr_global_force_vector:894; GFX1250-SPREFETCH:       ; %bb.0: ; %entry895; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1896; GFX1250-SPREFETCH-NEXT:    v_mov_b32_e32 v0, 0897; GFX1250-SPREFETCH-NEXT:    global_prefetch_b8 v0, s[0:1] scope:SCOPE_SYS898; GFX1250-SPREFETCH-NEXT:    s_endpgm899;900; NOSPREFETCH-LABEL: prefetch_data_sgpr_global_force_vector:901; NOSPREFETCH:       ; %bb.0: ; %entry902; NOSPREFETCH-NEXT:    s_endpgm903;904; GFX12-SPREFETCH-LABEL: prefetch_data_sgpr_global_force_vector:905; GFX12-SPREFETCH:       ; %bb.0: ; %entry906; GFX12-SPREFETCH-NEXT:    s_prefetch_data s[0:1], 0x0, null, 0907; GFX12-SPREFETCH-NEXT:    s_endpgm908entry:909  tail call void @llvm.prefetch.p1(ptr addrspace(1) %ptr, i32 1, i32 0, i32 1)910  ret void911}912 913define amdgpu_ps void @prefetch_data_sgpr_global_saddr_force_vector(ptr addrspace(1) inreg %ptr) {914; GFX1250-LABEL: prefetch_data_sgpr_global_saddr_force_vector:915; GFX1250:       ; %bb.0: ; %entry916; GFX1250-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1917; GFX1250-NEXT:    v_mov_b32_e32 v0, 0918; GFX1250-NEXT:    global_prefetch_b8 v0, s[0:1] offset:1024 scope:SCOPE_SYS919; GFX1250-NEXT:    s_endpgm920;921; GFX1250-SPREFETCH-LABEL: prefetch_data_sgpr_global_saddr_force_vector:922; GFX1250-SPREFETCH:       ; %bb.0: ; %entry923; GFX1250-SPREFETCH-NEXT:    s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1924; GFX1250-SPREFETCH-NEXT:    v_mov_b32_e32 v0, 0925; GFX1250-SPREFETCH-NEXT:    global_prefetch_b8 v0, s[0:1] offset:1024 scope:SCOPE_SYS926; GFX1250-SPREFETCH-NEXT:    s_endpgm927;928; NOSPREFETCH-LABEL: prefetch_data_sgpr_global_saddr_force_vector:929; NOSPREFETCH:       ; %bb.0: ; %entry930; NOSPREFETCH-NEXT:    s_endpgm931;932; GFX12-SPREFETCH-LABEL: prefetch_data_sgpr_global_saddr_force_vector:933; GFX12-SPREFETCH:       ; %bb.0: ; %entry934; GFX12-SPREFETCH-NEXT:    s_prefetch_data s[0:1], 0x400, null, 0935; GFX12-SPREFETCH-NEXT:    s_endpgm936entry:937  %gep = getelementptr i8, ptr addrspace(1) %ptr, i32 1024938  tail call void @llvm.prefetch.p1(ptr addrspace(1) %gep, i32 1, i32 0, i32 1)939  ret void940}941 942declare void @llvm.prefetch.pf(ptr nocapture readonly, i32, i32, i32)943declare void @llvm.prefetch.p1(ptr addrspace(1) nocapture readonly, i32, i32, i32)944declare void @llvm.prefetch.p3(ptr addrspace(3) nocapture readonly, i32, i32, i32)945declare void @llvm.prefetch.p4(ptr addrspace(4) nocapture readonly, i32, i32, i32)946declare void @llvm.prefetch.p5(ptr addrspace(5) nocapture readonly, i32, i32, i32)947declare void @llvm.prefetch.p6(ptr addrspace(6) nocapture readonly, i32, i32, i32)948;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:949; GCN: {{.*}}950; SPREFETCH: {{.*}}951