676 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -amdgpu-loop-prefetch < %s | FileCheck --check-prefix=GFX12 %s3; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -amdgpu-loop-prefetch -mattr=+safe-smem-prefetch < %s | FileCheck --check-prefix=GFX12-SPREFETCH %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx1250 -amdgpu-loop-prefetch < %s | FileCheck --check-prefix=GFX1250 %s5 6define amdgpu_kernel void @copy_flat(ptr nocapture %d, ptr nocapture readonly %s, i32 %n) {7; GFX12-LABEL: copy_flat:8; GFX12: ; %bb.0: ; %entry9; GFX12-NEXT: s_load_b32 s6, s[4:5], 0x3410; GFX12-NEXT: s_wait_kmcnt 0x011; GFX12-NEXT: s_cmp_eq_u32 s6, 012; GFX12-NEXT: s_cbranch_scc1 .LBB0_313; GFX12-NEXT: ; %bb.1: ; %for.body.preheader14; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x2415; GFX12-NEXT: s_movk_i32 s4, 0xff5016; GFX12-NEXT: s_mov_b32 s5, -117; GFX12-NEXT: s_wait_kmcnt 0x018; GFX12-NEXT: s_add_nc_u64 s[2:3], s[2:3], 0xb019; GFX12-NEXT: .LBB0_2: ; %for.body20; GFX12-NEXT: ; =>This Inner Loop Header: Depth=121; GFX12-NEXT: s_delay_alu instid0(SALU_CYCLE_1)22; GFX12-NEXT: s_add_nc_u64 s[8:9], s[2:3], s[4:5]23; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)24; GFX12-NEXT: v_dual_mov_b32 v5, s1 :: v_dual_mov_b32 v4, s025; GFX12-NEXT: v_dual_mov_b32 v0, s8 :: v_dual_mov_b32 v1, s926; GFX12-NEXT: s_add_co_i32 s6, s6, -127; GFX12-NEXT: s_add_nc_u64 s[2:3], s[2:3], 1628; GFX12-NEXT: s_cmp_lg_u32 s6, 029; GFX12-NEXT: s_add_nc_u64 s[0:1], s[0:1], 1630; GFX12-NEXT: flat_load_b128 v[0:3], v[0:1]31; GFX12-NEXT: s_wait_loadcnt_dscnt 0x032; GFX12-NEXT: flat_store_b128 v[4:5], v[0:3]33; GFX12-NEXT: s_cbranch_scc1 .LBB0_234; GFX12-NEXT: .LBB0_3: ; %for.end35; GFX12-NEXT: s_endpgm36;37; GFX12-SPREFETCH-LABEL: copy_flat:38; GFX12-SPREFETCH: ; %bb.0: ; %entry39; GFX12-SPREFETCH-NEXT: s_load_b32 s6, s[4:5], 0x3440; GFX12-SPREFETCH-NEXT: s_wait_kmcnt 0x041; GFX12-SPREFETCH-NEXT: s_cmp_eq_u32 s6, 042; GFX12-SPREFETCH-NEXT: s_cbranch_scc1 .LBB0_343; GFX12-SPREFETCH-NEXT: ; %bb.1: ; %for.body.preheader44; GFX12-SPREFETCH-NEXT: s_load_b128 s[0:3], s[4:5], 0x2445; GFX12-SPREFETCH-NEXT: s_movk_i32 s4, 0xff5046; GFX12-SPREFETCH-NEXT: s_mov_b32 s5, -147; GFX12-SPREFETCH-NEXT: s_wait_kmcnt 0x048; GFX12-SPREFETCH-NEXT: s_add_nc_u64 s[2:3], s[2:3], 0xb049; GFX12-SPREFETCH-NEXT: .LBB0_2: ; %for.body50; GFX12-SPREFETCH-NEXT: ; =>This Inner Loop Header: Depth=151; GFX12-SPREFETCH-NEXT: s_delay_alu instid0(SALU_CYCLE_1)52; GFX12-SPREFETCH-NEXT: s_add_nc_u64 s[8:9], s[2:3], s[4:5]53; GFX12-SPREFETCH-NEXT: s_prefetch_data s[2:3], 0x0, null, 054; GFX12-SPREFETCH-NEXT: v_dual_mov_b32 v0, s8 :: v_dual_mov_b32 v1, s955; GFX12-SPREFETCH-NEXT: v_dual_mov_b32 v5, s1 :: v_dual_mov_b32 v4, s056; GFX12-SPREFETCH-NEXT: s_add_co_i32 s6, s6, -157; GFX12-SPREFETCH-NEXT: s_add_nc_u64 s[2:3], s[2:3], 1658; GFX12-SPREFETCH-NEXT: flat_load_b128 v[0:3], v[0:1]59; GFX12-SPREFETCH-NEXT: s_cmp_lg_u32 s6, 060; GFX12-SPREFETCH-NEXT: s_add_nc_u64 s[0:1], s[0:1], 1661; GFX12-SPREFETCH-NEXT: s_wait_loadcnt_dscnt 0x062; GFX12-SPREFETCH-NEXT: flat_store_b128 v[4:5], v[0:3]63; GFX12-SPREFETCH-NEXT: s_cbranch_scc1 .LBB0_264; GFX12-SPREFETCH-NEXT: .LBB0_3: ; %for.end65; GFX12-SPREFETCH-NEXT: s_endpgm66;67; GFX1250-LABEL: copy_flat:68; GFX1250: ; %bb.0: ; %entry69; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 170; GFX1250-NEXT: s_load_b32 s6, s[4:5], 0x3471; GFX1250-NEXT: s_wait_kmcnt 0x072; GFX1250-NEXT: s_cmp_eq_u32 s6, 073; GFX1250-NEXT: s_cbranch_scc1 .LBB0_374; GFX1250-NEXT: ; %bb.1: ; %for.body.preheader75; GFX1250-NEXT: s_load_b128 s[0:3], s[4:5], 0x2476; GFX1250-NEXT: v_mov_b32_e32 v0, 077; GFX1250-NEXT: s_wait_kmcnt 0x078; GFX1250-NEXT: s_add_nc_u64 s[2:3], s[2:3], 0xb079; GFX1250-NEXT: .LBB0_2: ; %for.body80; GFX1250-NEXT: ; =>This Inner Loop Header: Depth=181; GFX1250-NEXT: flat_load_b128 v[2:5], v0, s[2:3] offset:-17682; GFX1250-NEXT: flat_prefetch_b8 v0, s[2:3] scope:SCOPE_SE83; GFX1250-NEXT: s_add_co_i32 s6, s6, -184; GFX1250-NEXT: s_wait_xcnt 0x085; GFX1250-NEXT: s_add_nc_u64 s[2:3], s[2:3], 1686; GFX1250-NEXT: s_cmp_lg_u32 s6, 087; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x088; GFX1250-NEXT: flat_store_b128 v0, v[2:5], s[0:1]89; GFX1250-NEXT: s_wait_xcnt 0x090; GFX1250-NEXT: s_add_nc_u64 s[0:1], s[0:1], 1691; GFX1250-NEXT: s_cbranch_scc1 .LBB0_292; GFX1250-NEXT: .LBB0_3: ; %for.end93; GFX1250-NEXT: s_endpgm94entry:95 %cmp6.not = icmp eq i32 %n, 096 br i1 %cmp6.not, label %for.end, label %for.body97 98for.body: ; preds = %entry, %for.body99 %i.07 = phi i32 [ %inc, %for.body ], [ 0, %entry ]100 %idxprom = zext i32 %i.07 to i64101 %arrayidx = getelementptr inbounds <4 x i32>, ptr %s, i64 %idxprom102 %ld = load <4 x i32>, ptr %arrayidx, align 4103 %arrayidx2 = getelementptr inbounds <4 x i32>, ptr %d, i64 %idxprom104 store <4 x i32> %ld, ptr %arrayidx2, align 4105 %inc = add nuw i32 %i.07, 1106 %exitcond.not = icmp eq i32 %inc, %n107 br i1 %exitcond.not, label %for.end, label %for.body108 109for.end: ; preds = %for.body, %entry110 ret void111}112 113define amdgpu_kernel void @copy_global(ptr addrspace(1) nocapture %d, ptr addrspace(1) nocapture readonly %s, i32 %n) {114; GFX12-LABEL: copy_global:115; GFX12: ; %bb.0: ; %entry116; GFX12-NEXT: s_load_b32 s6, s[4:5], 0x34117; GFX12-NEXT: s_wait_kmcnt 0x0118; GFX12-NEXT: s_cmp_eq_u32 s6, 0119; GFX12-NEXT: s_cbranch_scc1 .LBB1_3120; GFX12-NEXT: ; %bb.1: ; %for.body.preheader121; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x24122; GFX12-NEXT: v_mov_b32_e32 v0, 0123; GFX12-NEXT: s_wait_kmcnt 0x0124; GFX12-NEXT: s_add_nc_u64 s[2:3], s[2:3], 0xb0125; GFX12-NEXT: .LBB1_2: ; %for.body126; GFX12-NEXT: ; =>This Inner Loop Header: Depth=1127; GFX12-NEXT: global_load_b128 v[1:4], v0, s[2:3] offset:-176128; GFX12-NEXT: s_add_co_i32 s6, s6, -1129; GFX12-NEXT: s_add_nc_u64 s[2:3], s[2:3], 16130; GFX12-NEXT: s_cmp_lg_u32 s6, 0131; GFX12-NEXT: s_wait_loadcnt 0x0132; GFX12-NEXT: global_store_b128 v0, v[1:4], s[0:1]133; GFX12-NEXT: s_add_nc_u64 s[0:1], s[0:1], 16134; GFX12-NEXT: s_cbranch_scc1 .LBB1_2135; GFX12-NEXT: .LBB1_3: ; %for.end136; GFX12-NEXT: s_endpgm137;138; GFX12-SPREFETCH-LABEL: copy_global:139; GFX12-SPREFETCH: ; %bb.0: ; %entry140; GFX12-SPREFETCH-NEXT: s_load_b32 s6, s[4:5], 0x34141; GFX12-SPREFETCH-NEXT: s_wait_kmcnt 0x0142; GFX12-SPREFETCH-NEXT: s_cmp_eq_u32 s6, 0143; GFX12-SPREFETCH-NEXT: s_cbranch_scc1 .LBB1_3144; GFX12-SPREFETCH-NEXT: ; %bb.1: ; %for.body.preheader145; GFX12-SPREFETCH-NEXT: s_load_b128 s[0:3], s[4:5], 0x24146; GFX12-SPREFETCH-NEXT: v_mov_b32_e32 v0, 0147; GFX12-SPREFETCH-NEXT: s_wait_kmcnt 0x0148; GFX12-SPREFETCH-NEXT: s_add_nc_u64 s[2:3], s[2:3], 0xb0149; GFX12-SPREFETCH-NEXT: .LBB1_2: ; %for.body150; GFX12-SPREFETCH-NEXT: ; =>This Inner Loop Header: Depth=1151; GFX12-SPREFETCH-NEXT: global_load_b128 v[1:4], v0, s[2:3] offset:-176152; GFX12-SPREFETCH-NEXT: s_prefetch_data s[2:3], 0x0, null, 0153; GFX12-SPREFETCH-NEXT: s_add_co_i32 s6, s6, -1154; GFX12-SPREFETCH-NEXT: s_add_nc_u64 s[2:3], s[2:3], 16155; GFX12-SPREFETCH-NEXT: s_cmp_lg_u32 s6, 0156; GFX12-SPREFETCH-NEXT: s_wait_loadcnt 0x0157; GFX12-SPREFETCH-NEXT: global_store_b128 v0, v[1:4], s[0:1]158; GFX12-SPREFETCH-NEXT: s_add_nc_u64 s[0:1], s[0:1], 16159; GFX12-SPREFETCH-NEXT: s_cbranch_scc1 .LBB1_2160; GFX12-SPREFETCH-NEXT: .LBB1_3: ; %for.end161; GFX12-SPREFETCH-NEXT: s_endpgm162;163; GFX1250-LABEL: copy_global:164; GFX1250: ; %bb.0: ; %entry165; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1166; GFX1250-NEXT: s_load_b32 s6, s[4:5], 0x34167; GFX1250-NEXT: s_wait_kmcnt 0x0168; GFX1250-NEXT: s_cmp_eq_u32 s6, 0169; GFX1250-NEXT: s_cbranch_scc1 .LBB1_3170; GFX1250-NEXT: ; %bb.1: ; %for.body.preheader171; GFX1250-NEXT: s_load_b128 s[0:3], s[4:5], 0x24172; GFX1250-NEXT: v_mov_b32_e32 v0, 0173; GFX1250-NEXT: s_wait_kmcnt 0x0174; GFX1250-NEXT: s_add_nc_u64 s[2:3], s[2:3], 0xb0175; GFX1250-NEXT: .LBB1_2: ; %for.body176; GFX1250-NEXT: ; =>This Inner Loop Header: Depth=1177; GFX1250-NEXT: global_load_b128 v[2:5], v0, s[2:3] offset:-176178; GFX1250-NEXT: global_prefetch_b8 v0, s[2:3] scope:SCOPE_SE179; GFX1250-NEXT: s_add_co_i32 s6, s6, -1180; GFX1250-NEXT: s_wait_xcnt 0x0181; GFX1250-NEXT: s_add_nc_u64 s[2:3], s[2:3], 16182; GFX1250-NEXT: s_cmp_lg_u32 s6, 0183; GFX1250-NEXT: s_wait_loadcnt 0x0184; GFX1250-NEXT: global_store_b128 v0, v[2:5], s[0:1]185; GFX1250-NEXT: s_wait_xcnt 0x0186; GFX1250-NEXT: s_add_nc_u64 s[0:1], s[0:1], 16187; GFX1250-NEXT: s_cbranch_scc1 .LBB1_2188; GFX1250-NEXT: .LBB1_3: ; %for.end189; GFX1250-NEXT: s_endpgm190entry:191 %cmp6.not = icmp eq i32 %n, 0192 br i1 %cmp6.not, label %for.end, label %for.body193 194for.body: ; preds = %entry, %for.body195 %i.07 = phi i32 [ %inc, %for.body ], [ 0, %entry ]196 %idxprom = zext i32 %i.07 to i64197 %arrayidx = getelementptr inbounds <4 x i32>, ptr addrspace(1) %s, i64 %idxprom198 %ld = load <4 x i32>, ptr addrspace(1) %arrayidx, align 4199 %arrayidx2 = getelementptr inbounds <4 x i32>, ptr addrspace(1) %d, i64 %idxprom200 store <4 x i32> %ld, ptr addrspace(1) %arrayidx2, align 4201 %inc = add nuw i32 %i.07, 1202 %exitcond.not = icmp eq i32 %inc, %n203 br i1 %exitcond.not, label %for.end, label %for.body204 205for.end: ; preds = %for.body, %entry206 ret void207}208 209define amdgpu_kernel void @copy_constant(ptr addrspace(1) nocapture %d, ptr addrspace(4) nocapture readonly %s, i32 %n) {210; GFX12-LABEL: copy_constant:211; GFX12: ; %bb.0: ; %entry212; GFX12-NEXT: s_load_b32 s6, s[4:5], 0x34213; GFX12-NEXT: s_wait_kmcnt 0x0214; GFX12-NEXT: s_cmp_eq_u32 s6, 0215; GFX12-NEXT: s_cbranch_scc1 .LBB2_3216; GFX12-NEXT: ; %bb.1: ; %for.body.preheader217; GFX12-NEXT: s_load_b128 s[0:3], s[4:5], 0x24218; GFX12-NEXT: v_mov_b32_e32 v0, 0219; GFX12-NEXT: .LBB2_2: ; %for.body220; GFX12-NEXT: ; =>This Inner Loop Header: Depth=1221; GFX12-NEXT: s_wait_kmcnt 0x0222; GFX12-NEXT: s_load_b128 s[8:11], s[2:3], 0x0223; GFX12-NEXT: s_add_co_i32 s6, s6, -1224; GFX12-NEXT: s_add_nc_u64 s[2:3], s[2:3], 16225; GFX12-NEXT: s_cmp_lg_u32 s6, 0226; GFX12-NEXT: s_wait_kmcnt 0x0227; GFX12-NEXT: v_dual_mov_b32 v1, s8 :: v_dual_mov_b32 v2, s9228; GFX12-NEXT: v_dual_mov_b32 v3, s10 :: v_dual_mov_b32 v4, s11229; GFX12-NEXT: global_store_b128 v0, v[1:4], s[0:1]230; GFX12-NEXT: s_add_nc_u64 s[0:1], s[0:1], 16231; GFX12-NEXT: s_cbranch_scc1 .LBB2_2232; GFX12-NEXT: .LBB2_3: ; %for.end233; GFX12-NEXT: s_endpgm234;235; GFX12-SPREFETCH-LABEL: copy_constant:236; GFX12-SPREFETCH: ; %bb.0: ; %entry237; GFX12-SPREFETCH-NEXT: s_load_b32 s6, s[4:5], 0x34238; GFX12-SPREFETCH-NEXT: s_wait_kmcnt 0x0239; GFX12-SPREFETCH-NEXT: s_cmp_eq_u32 s6, 0240; GFX12-SPREFETCH-NEXT: s_cbranch_scc1 .LBB2_3241; GFX12-SPREFETCH-NEXT: ; %bb.1: ; %for.body.preheader242; GFX12-SPREFETCH-NEXT: s_load_b128 s[0:3], s[4:5], 0x24243; GFX12-SPREFETCH-NEXT: v_mov_b32_e32 v0, 0244; GFX12-SPREFETCH-NEXT: .LBB2_2: ; %for.body245; GFX12-SPREFETCH-NEXT: ; =>This Inner Loop Header: Depth=1246; GFX12-SPREFETCH-NEXT: s_wait_kmcnt 0x0247; GFX12-SPREFETCH-NEXT: s_load_b128 s[8:11], s[2:3], 0x0248; GFX12-SPREFETCH-NEXT: s_prefetch_data s[2:3], 0xb0, null, 0249; GFX12-SPREFETCH-NEXT: s_add_co_i32 s6, s6, -1250; GFX12-SPREFETCH-NEXT: s_add_nc_u64 s[2:3], s[2:3], 16251; GFX12-SPREFETCH-NEXT: s_cmp_lg_u32 s6, 0252; GFX12-SPREFETCH-NEXT: s_wait_kmcnt 0x0253; GFX12-SPREFETCH-NEXT: v_dual_mov_b32 v1, s8 :: v_dual_mov_b32 v2, s9254; GFX12-SPREFETCH-NEXT: v_dual_mov_b32 v3, s10 :: v_dual_mov_b32 v4, s11255; GFX12-SPREFETCH-NEXT: global_store_b128 v0, v[1:4], s[0:1]256; GFX12-SPREFETCH-NEXT: s_add_nc_u64 s[0:1], s[0:1], 16257; GFX12-SPREFETCH-NEXT: s_cbranch_scc1 .LBB2_2258; GFX12-SPREFETCH-NEXT: .LBB2_3: ; %for.end259; GFX12-SPREFETCH-NEXT: s_endpgm260;261; GFX1250-LABEL: copy_constant:262; GFX1250: ; %bb.0: ; %entry263; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1264; GFX1250-NEXT: s_load_b32 s6, s[4:5], 0x34265; GFX1250-NEXT: s_wait_kmcnt 0x0266; GFX1250-NEXT: s_cmp_eq_u32 s6, 0267; GFX1250-NEXT: s_cbranch_scc1 .LBB2_3268; GFX1250-NEXT: ; %bb.1: ; %for.body.preheader269; GFX1250-NEXT: s_load_b128 s[0:3], s[4:5], 0x24270; GFX1250-NEXT: v_mov_b32_e32 v0, 0271; GFX1250-NEXT: .LBB2_2: ; %for.body272; GFX1250-NEXT: ; =>This Inner Loop Header: Depth=1273; GFX1250-NEXT: s_wait_kmcnt 0x0274; GFX1250-NEXT: global_prefetch_b8 v0, s[2:3] offset:176 scope:SCOPE_SE275; GFX1250-NEXT: s_load_b128 s[8:11], s[2:3], 0x0276; GFX1250-NEXT: s_add_co_i32 s6, s6, -1277; GFX1250-NEXT: s_wait_xcnt 0x0278; GFX1250-NEXT: s_add_nc_u64 s[2:3], s[2:3], 16279; GFX1250-NEXT: s_cmp_lg_u32 s6, 0280; GFX1250-NEXT: s_wait_kmcnt 0x0281; GFX1250-NEXT: v_mov_b64_e32 v[2:3], s[8:9]282; GFX1250-NEXT: v_mov_b64_e32 v[4:5], s[10:11]283; GFX1250-NEXT: global_store_b128 v0, v[2:5], s[0:1]284; GFX1250-NEXT: s_wait_xcnt 0x0285; GFX1250-NEXT: s_add_nc_u64 s[0:1], s[0:1], 16286; GFX1250-NEXT: s_cbranch_scc1 .LBB2_2287; GFX1250-NEXT: .LBB2_3: ; %for.end288; GFX1250-NEXT: s_endpgm289entry:290 %cmp6.not = icmp eq i32 %n, 0291 br i1 %cmp6.not, label %for.end, label %for.body292 293for.body: ; preds = %entry, %for.body294 %i.07 = phi i32 [ %inc, %for.body ], [ 0, %entry ]295 %idxprom = zext i32 %i.07 to i64296 %arrayidx = getelementptr inbounds <4 x i32>, ptr addrspace(4) %s, i64 %idxprom297 %ld = load <4 x i32>, ptr addrspace(4) %arrayidx, align 4298 %arrayidx2 = getelementptr inbounds <4 x i32>, ptr addrspace(1) %d, i64 %idxprom299 store <4 x i32> %ld, ptr addrspace(1) %arrayidx2, align 4300 %inc = add nuw i32 %i.07, 1301 %exitcond.not = icmp eq i32 %inc, %n302 br i1 %exitcond.not, label %for.end, label %for.body303 304for.end: ; preds = %for.body, %entry305 ret void306}307 308define amdgpu_kernel void @copy_local(ptr addrspace(3) nocapture %d, ptr addrspace(3) nocapture readonly %s, i32 %n) {309; GFX12-LABEL: copy_local:310; GFX12: ; %bb.0: ; %entry311; GFX12-NEXT: s_load_b96 s[0:2], s[4:5], 0x24312; GFX12-NEXT: s_wait_kmcnt 0x0313; GFX12-NEXT: s_cmp_eq_u32 s2, 0314; GFX12-NEXT: s_cbranch_scc1 .LBB3_2315; GFX12-NEXT: .LBB3_1: ; %for.body316; GFX12-NEXT: ; =>This Inner Loop Header: Depth=1317; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)318; GFX12-NEXT: v_mov_b32_e32 v2, s1319; GFX12-NEXT: v_mov_b32_e32 v4, s0320; GFX12-NEXT: s_add_co_i32 s2, s2, -1321; GFX12-NEXT: s_add_co_i32 s0, s0, 16322; GFX12-NEXT: s_add_co_i32 s1, s1, 16323; GFX12-NEXT: ds_load_2addr_b32 v[0:1], v2 offset0:2 offset1:3324; GFX12-NEXT: ds_load_2addr_b32 v[2:3], v2 offset1:1325; GFX12-NEXT: s_cmp_lg_u32 s2, 0326; GFX12-NEXT: s_wait_dscnt 0x1327; GFX12-NEXT: ds_store_2addr_b32 v4, v0, v1 offset0:2 offset1:3328; GFX12-NEXT: s_wait_dscnt 0x1329; GFX12-NEXT: ds_store_2addr_b32 v4, v2, v3 offset1:1330; GFX12-NEXT: s_cbranch_scc1 .LBB3_1331; GFX12-NEXT: .LBB3_2: ; %for.end332; GFX12-NEXT: s_endpgm333;334; GFX12-SPREFETCH-LABEL: copy_local:335; GFX12-SPREFETCH: ; %bb.0: ; %entry336; GFX12-SPREFETCH-NEXT: s_load_b96 s[0:2], s[4:5], 0x24337; GFX12-SPREFETCH-NEXT: s_wait_kmcnt 0x0338; GFX12-SPREFETCH-NEXT: s_cmp_eq_u32 s2, 0339; GFX12-SPREFETCH-NEXT: s_cbranch_scc1 .LBB3_2340; GFX12-SPREFETCH-NEXT: .LBB3_1: ; %for.body341; GFX12-SPREFETCH-NEXT: ; =>This Inner Loop Header: Depth=1342; GFX12-SPREFETCH-NEXT: s_wait_alu depctr_sa_sdst(0)343; GFX12-SPREFETCH-NEXT: v_mov_b32_e32 v2, s1344; GFX12-SPREFETCH-NEXT: v_mov_b32_e32 v4, s0345; GFX12-SPREFETCH-NEXT: s_add_co_i32 s2, s2, -1346; GFX12-SPREFETCH-NEXT: s_add_co_i32 s0, s0, 16347; GFX12-SPREFETCH-NEXT: s_add_co_i32 s1, s1, 16348; GFX12-SPREFETCH-NEXT: ds_load_2addr_b32 v[0:1], v2 offset0:2 offset1:3349; GFX12-SPREFETCH-NEXT: ds_load_2addr_b32 v[2:3], v2 offset1:1350; GFX12-SPREFETCH-NEXT: s_cmp_lg_u32 s2, 0351; GFX12-SPREFETCH-NEXT: s_wait_dscnt 0x1352; GFX12-SPREFETCH-NEXT: ds_store_2addr_b32 v4, v0, v1 offset0:2 offset1:3353; GFX12-SPREFETCH-NEXT: s_wait_dscnt 0x1354; GFX12-SPREFETCH-NEXT: ds_store_2addr_b32 v4, v2, v3 offset1:1355; GFX12-SPREFETCH-NEXT: s_cbranch_scc1 .LBB3_1356; GFX12-SPREFETCH-NEXT: .LBB3_2: ; %for.end357; GFX12-SPREFETCH-NEXT: s_endpgm358;359; GFX1250-LABEL: copy_local:360; GFX1250: ; %bb.0: ; %entry361; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1362; GFX1250-NEXT: s_load_b96 s[0:2], s[4:5], 0x24363; GFX1250-NEXT: s_wait_kmcnt 0x0364; GFX1250-NEXT: s_cmp_eq_u32 s2, 0365; GFX1250-NEXT: s_cbranch_scc1 .LBB3_2366; GFX1250-NEXT: .LBB3_1: ; %for.body367; GFX1250-NEXT: ; =>This Inner Loop Header: Depth=1368; GFX1250-NEXT: v_dual_mov_b32 v2, s1 :: v_dual_mov_b32 v4, s0369; GFX1250-NEXT: s_add_co_i32 s2, s2, -1370; GFX1250-NEXT: s_add_co_i32 s0, s0, 16371; GFX1250-NEXT: s_add_co_i32 s1, s1, 16372; GFX1250-NEXT: ds_load_2addr_b32 v[0:1], v2 offset0:2 offset1:3373; GFX1250-NEXT: ds_load_2addr_b32 v[2:3], v2 offset1:1374; GFX1250-NEXT: s_cmp_lg_u32 s2, 0375; GFX1250-NEXT: s_wait_dscnt 0x1376; GFX1250-NEXT: ds_store_2addr_b32 v4, v0, v1 offset0:2 offset1:3377; GFX1250-NEXT: s_wait_dscnt 0x1378; GFX1250-NEXT: ds_store_2addr_b32 v4, v2, v3 offset1:1379; GFX1250-NEXT: s_cbranch_scc1 .LBB3_1380; GFX1250-NEXT: .LBB3_2: ; %for.end381; GFX1250-NEXT: s_endpgm382entry:383 %cmp6.not = icmp eq i32 %n, 0384 br i1 %cmp6.not, label %for.end, label %for.body385 386for.body: ; preds = %entry, %for.body387 %i.07 = phi i32 [ %inc, %for.body ], [ 0, %entry ]388 %idxprom = zext i32 %i.07 to i64389 %arrayidx = getelementptr inbounds <4 x i32>, ptr addrspace(3) %s, i64 %idxprom390 %ld = load <4 x i32>, ptr addrspace(3) %arrayidx, align 4391 %arrayidx2 = getelementptr inbounds <4 x i32>, ptr addrspace(3) %d, i64 %idxprom392 store <4 x i32> %ld, ptr addrspace(3) %arrayidx2, align 4393 %inc = add nuw i32 %i.07, 1394 %exitcond.not = icmp eq i32 %inc, %n395 br i1 %exitcond.not, label %for.end, label %for.body396 397for.end: ; preds = %for.body, %entry398 ret void399}400 401define amdgpu_kernel void @copy_flat_divergent(ptr nocapture %d, ptr nocapture readonly %s, i32 %n) {402; GFX12-LABEL: copy_flat_divergent:403; GFX12: ; %bb.0: ; %entry404; GFX12-NEXT: s_load_b32 s0, s[4:5], 0x34405; GFX12-NEXT: s_wait_kmcnt 0x0406; GFX12-NEXT: s_cmp_eq_u32 s0, 0407; GFX12-NEXT: s_cbranch_scc1 .LBB4_3408; GFX12-NEXT: ; %bb.1: ; %for.body.preheader409; GFX12-NEXT: s_load_b128 s[4:7], s[4:5], 0x24410; GFX12-NEXT: v_and_b32_e32 v0, 0x3ff, v0411; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)412; GFX12-NEXT: v_lshlrev_b32_e32 v0, 4, v0413; GFX12-NEXT: s_wait_kmcnt 0x0414; GFX12-NEXT: v_add_co_u32 v2, s1, s6, v0415; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_3)416; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, s7, 0, s1417; GFX12-NEXT: v_add_co_u32 v0, s1, s4, v0418; GFX12-NEXT: v_add_co_u32 v2, vcc_lo, 0xb0, v2419; GFX12-NEXT: s_wait_alu depctr_va_sdst(0)420; GFX12-NEXT: v_add_co_ci_u32_e64 v1, null, s5, 0, s1421; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo422; GFX12-NEXT: .LBB4_2: ; %for.body423; GFX12-NEXT: ; =>This Inner Loop Header: Depth=1424; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)425; GFX12-NEXT: v_add_co_u32 v4, vcc_lo, 0xffffff50, v2426; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)427; GFX12-NEXT: v_add_co_ci_u32_e64 v5, null, -1, v3, vcc_lo428; GFX12-NEXT: v_add_co_u32 v2, vcc_lo, v2, 16429; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)430; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo431; GFX12-NEXT: flat_load_b128 v[4:7], v[4:5]432; GFX12-NEXT: s_add_co_i32 s0, s0, -1433; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)434; GFX12-NEXT: s_cmp_lg_u32 s0, 0435; GFX12-NEXT: s_wait_loadcnt_dscnt 0x0436; GFX12-NEXT: flat_store_b128 v[0:1], v[4:7]437; GFX12-NEXT: v_add_co_u32 v0, vcc_lo, v0, 16438; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)439; GFX12-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo440; GFX12-NEXT: s_cbranch_scc1 .LBB4_2441; GFX12-NEXT: .LBB4_3: ; %for.end442; GFX12-NEXT: s_endpgm443;444; GFX12-SPREFETCH-LABEL: copy_flat_divergent:445; GFX12-SPREFETCH: ; %bb.0: ; %entry446; GFX12-SPREFETCH-NEXT: s_load_b32 s0, s[4:5], 0x34447; GFX12-SPREFETCH-NEXT: s_wait_kmcnt 0x0448; GFX12-SPREFETCH-NEXT: s_cmp_eq_u32 s0, 0449; GFX12-SPREFETCH-NEXT: s_cbranch_scc1 .LBB4_3450; GFX12-SPREFETCH-NEXT: ; %bb.1: ; %for.body.preheader451; GFX12-SPREFETCH-NEXT: s_load_b128 s[4:7], s[4:5], 0x24452; GFX12-SPREFETCH-NEXT: v_and_b32_e32 v0, 0x3ff, v0453; GFX12-SPREFETCH-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)454; GFX12-SPREFETCH-NEXT: v_lshlrev_b32_e32 v0, 4, v0455; GFX12-SPREFETCH-NEXT: s_wait_kmcnt 0x0456; GFX12-SPREFETCH-NEXT: v_add_co_u32 v2, s1, s6, v0457; GFX12-SPREFETCH-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_3)458; GFX12-SPREFETCH-NEXT: v_add_co_ci_u32_e64 v3, null, s7, 0, s1459; GFX12-SPREFETCH-NEXT: v_add_co_u32 v0, s1, s4, v0460; GFX12-SPREFETCH-NEXT: v_add_co_u32 v2, vcc_lo, 0xb0, v2461; GFX12-SPREFETCH-NEXT: s_wait_alu depctr_va_sdst(0)462; GFX12-SPREFETCH-NEXT: v_add_co_ci_u32_e64 v1, null, s5, 0, s1463; GFX12-SPREFETCH-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo464; GFX12-SPREFETCH-NEXT: .LBB4_2: ; %for.body465; GFX12-SPREFETCH-NEXT: ; =>This Inner Loop Header: Depth=1466; GFX12-SPREFETCH-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)467; GFX12-SPREFETCH-NEXT: v_add_co_u32 v4, vcc_lo, 0xffffff50, v2468; GFX12-SPREFETCH-NEXT: s_wait_alu depctr_va_vcc(0)469; GFX12-SPREFETCH-NEXT: v_add_co_ci_u32_e64 v5, null, -1, v3, vcc_lo470; GFX12-SPREFETCH-NEXT: v_add_co_u32 v2, vcc_lo, v2, 16471; GFX12-SPREFETCH-NEXT: s_wait_alu depctr_va_vcc(0)472; GFX12-SPREFETCH-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo473; GFX12-SPREFETCH-NEXT: flat_load_b128 v[4:7], v[4:5]474; GFX12-SPREFETCH-NEXT: s_add_co_i32 s0, s0, -1475; GFX12-SPREFETCH-NEXT: s_wait_alu depctr_sa_sdst(0)476; GFX12-SPREFETCH-NEXT: s_cmp_lg_u32 s0, 0477; GFX12-SPREFETCH-NEXT: s_wait_loadcnt_dscnt 0x0478; GFX12-SPREFETCH-NEXT: flat_store_b128 v[0:1], v[4:7]479; GFX12-SPREFETCH-NEXT: v_add_co_u32 v0, vcc_lo, v0, 16480; GFX12-SPREFETCH-NEXT: s_wait_alu depctr_va_vcc(0)481; GFX12-SPREFETCH-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo482; GFX12-SPREFETCH-NEXT: s_cbranch_scc1 .LBB4_2483; GFX12-SPREFETCH-NEXT: .LBB4_3: ; %for.end484; GFX12-SPREFETCH-NEXT: s_endpgm485;486; GFX1250-LABEL: copy_flat_divergent:487; GFX1250: ; %bb.0: ; %entry488; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1489; GFX1250-NEXT: s_load_b32 s2, s[4:5], 0x34490; GFX1250-NEXT: s_wait_kmcnt 0x0491; GFX1250-NEXT: s_cmp_eq_u32 s2, 0492; GFX1250-NEXT: s_cbranch_scc1 .LBB4_3493; GFX1250-NEXT: ; %bb.1: ; %for.body.preheader494; GFX1250-NEXT: s_load_b128 s[8:11], s[4:5], 0x24495; GFX1250-NEXT: v_and_b32_e32 v0, 0x3ff, v0496; GFX1250-NEXT: v_mov_b32_e32 v1, 0497; GFX1250-NEXT: s_mov_b64 s[0:1], 0xffffffffffffff50498; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)499; GFX1250-NEXT: v_lshlrev_b32_e32 v0, 4, v0500; GFX1250-NEXT: s_wait_kmcnt 0x0501; GFX1250-NEXT: v_add_nc_u64_e32 v[2:3], s[10:11], v[0:1]502; GFX1250-NEXT: v_add_nc_u64_e32 v[0:1], s[8:9], v[0:1]503; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_2)504; GFX1250-NEXT: v_add_nc_u64_e32 v[2:3], 0xb0, v[2:3]505; GFX1250-NEXT: .LBB4_2: ; %for.body506; GFX1250-NEXT: ; =>This Inner Loop Header: Depth=1507; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(SALU_CYCLE_1)508; GFX1250-NEXT: v_add_nc_u64_e32 v[4:5], s[0:1], v[2:3]509; GFX1250-NEXT: flat_prefetch_b8 v[2:3] scope:SCOPE_SE510; GFX1250-NEXT: v_add_nc_u64_e32 v[2:3], 16, v[2:3]511; GFX1250-NEXT: s_add_co_i32 s2, s2, -1512; GFX1250-NEXT: s_cmp_lg_u32 s2, 0513; GFX1250-NEXT: flat_load_b128 v[4:7], v[4:5]514; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0515; GFX1250-NEXT: flat_store_b128 v[0:1], v[4:7]516; GFX1250-NEXT: s_wait_xcnt 0x0517; GFX1250-NEXT: v_add_nc_u64_e32 v[0:1], 16, v[0:1]518; GFX1250-NEXT: s_cbranch_scc1 .LBB4_2519; GFX1250-NEXT: .LBB4_3: ; %for.end520; GFX1250-NEXT: s_endpgm521entry:522 %tid = call i32 @llvm.amdgcn.workitem.id.x()523 %s.tid = getelementptr inbounds <4 x i32>, ptr %s, i32 %tid524 %d.tid = getelementptr inbounds <4 x i32>, ptr %d, i32 %tid525 %cmp6.not = icmp eq i32 %n, 0526 br i1 %cmp6.not, label %for.end, label %for.body527 528for.body: ; preds = %entry, %for.body529 %i.07 = phi i32 [ %inc, %for.body ], [ 0, %entry ]530 %idxprom = zext i32 %i.07 to i64531 %arrayidx = getelementptr inbounds <4 x i32>, ptr %s.tid, i64 %idxprom532 %ld = load <4 x i32>, ptr %arrayidx, align 4533 %arrayidx2 = getelementptr inbounds <4 x i32>, ptr %d.tid, i64 %idxprom534 store <4 x i32> %ld, ptr %arrayidx2, align 4535 %inc = add nuw i32 %i.07, 1536 %exitcond.not = icmp eq i32 %inc, %n537 br i1 %exitcond.not, label %for.end, label %for.body538 539for.end: ; preds = %for.body, %entry540 ret void541}542 543define amdgpu_kernel void @copy_global_divergent(ptr addrspace(1) nocapture %d, ptr addrspace(1) nocapture readonly %s, i32 %n) {544; GFX12-LABEL: copy_global_divergent:545; GFX12: ; %bb.0: ; %entry546; GFX12-NEXT: s_load_b32 s0, s[4:5], 0x34547; GFX12-NEXT: s_wait_kmcnt 0x0548; GFX12-NEXT: s_cmp_eq_u32 s0, 0549; GFX12-NEXT: s_cbranch_scc1 .LBB5_3550; GFX12-NEXT: ; %bb.1: ; %for.body.preheader551; GFX12-NEXT: s_load_b128 s[4:7], s[4:5], 0x24552; GFX12-NEXT: v_and_b32_e32 v0, 0x3ff, v0553; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)554; GFX12-NEXT: v_lshlrev_b32_e32 v0, 4, v0555; GFX12-NEXT: s_wait_kmcnt 0x0556; GFX12-NEXT: v_add_co_u32 v2, s1, s6, v0557; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_3)558; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, s7, 0, s1559; GFX12-NEXT: v_add_co_u32 v0, s1, s4, v0560; GFX12-NEXT: v_add_co_u32 v2, vcc_lo, 0xb0, v2561; GFX12-NEXT: s_wait_alu depctr_va_sdst(0)562; GFX12-NEXT: v_add_co_ci_u32_e64 v1, null, s5, 0, s1563; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo564; GFX12-NEXT: .LBB5_2: ; %for.body565; GFX12-NEXT: ; =>This Inner Loop Header: Depth=1566; GFX12-NEXT: global_load_b128 v[4:7], v[2:3], off offset:-176567; GFX12-NEXT: v_add_co_u32 v2, vcc_lo, v2, 16568; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)569; GFX12-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo570; GFX12-NEXT: s_add_co_i32 s0, s0, -1571; GFX12-NEXT: s_wait_alu depctr_sa_sdst(0)572; GFX12-NEXT: s_cmp_lg_u32 s0, 0573; GFX12-NEXT: s_wait_loadcnt 0x0574; GFX12-NEXT: global_store_b128 v[0:1], v[4:7], off575; GFX12-NEXT: v_add_co_u32 v0, vcc_lo, v0, 16576; GFX12-NEXT: s_wait_alu depctr_va_vcc(0)577; GFX12-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo578; GFX12-NEXT: s_cbranch_scc1 .LBB5_2579; GFX12-NEXT: .LBB5_3: ; %for.end580; GFX12-NEXT: s_endpgm581;582; GFX12-SPREFETCH-LABEL: copy_global_divergent:583; GFX12-SPREFETCH: ; %bb.0: ; %entry584; GFX12-SPREFETCH-NEXT: s_load_b32 s0, s[4:5], 0x34585; GFX12-SPREFETCH-NEXT: s_wait_kmcnt 0x0586; GFX12-SPREFETCH-NEXT: s_cmp_eq_u32 s0, 0587; GFX12-SPREFETCH-NEXT: s_cbranch_scc1 .LBB5_3588; GFX12-SPREFETCH-NEXT: ; %bb.1: ; %for.body.preheader589; GFX12-SPREFETCH-NEXT: s_load_b128 s[4:7], s[4:5], 0x24590; GFX12-SPREFETCH-NEXT: v_and_b32_e32 v0, 0x3ff, v0591; GFX12-SPREFETCH-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)592; GFX12-SPREFETCH-NEXT: v_lshlrev_b32_e32 v0, 4, v0593; GFX12-SPREFETCH-NEXT: s_wait_kmcnt 0x0594; GFX12-SPREFETCH-NEXT: v_add_co_u32 v2, s1, s6, v0595; GFX12-SPREFETCH-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_3)596; GFX12-SPREFETCH-NEXT: v_add_co_ci_u32_e64 v3, null, s7, 0, s1597; GFX12-SPREFETCH-NEXT: v_add_co_u32 v0, s1, s4, v0598; GFX12-SPREFETCH-NEXT: v_add_co_u32 v2, vcc_lo, 0xb0, v2599; GFX12-SPREFETCH-NEXT: s_wait_alu depctr_va_sdst(0)600; GFX12-SPREFETCH-NEXT: v_add_co_ci_u32_e64 v1, null, s5, 0, s1601; GFX12-SPREFETCH-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo602; GFX12-SPREFETCH-NEXT: .LBB5_2: ; %for.body603; GFX12-SPREFETCH-NEXT: ; =>This Inner Loop Header: Depth=1604; GFX12-SPREFETCH-NEXT: global_load_b128 v[4:7], v[2:3], off offset:-176605; GFX12-SPREFETCH-NEXT: v_add_co_u32 v2, vcc_lo, v2, 16606; GFX12-SPREFETCH-NEXT: s_wait_alu depctr_va_vcc(0)607; GFX12-SPREFETCH-NEXT: v_add_co_ci_u32_e64 v3, null, 0, v3, vcc_lo608; GFX12-SPREFETCH-NEXT: s_add_co_i32 s0, s0, -1609; GFX12-SPREFETCH-NEXT: s_wait_alu depctr_sa_sdst(0)610; GFX12-SPREFETCH-NEXT: s_cmp_lg_u32 s0, 0611; GFX12-SPREFETCH-NEXT: s_wait_loadcnt 0x0612; GFX12-SPREFETCH-NEXT: global_store_b128 v[0:1], v[4:7], off613; GFX12-SPREFETCH-NEXT: v_add_co_u32 v0, vcc_lo, v0, 16614; GFX12-SPREFETCH-NEXT: s_wait_alu depctr_va_vcc(0)615; GFX12-SPREFETCH-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo616; GFX12-SPREFETCH-NEXT: s_cbranch_scc1 .LBB5_2617; GFX12-SPREFETCH-NEXT: .LBB5_3: ; %for.end618; GFX12-SPREFETCH-NEXT: s_endpgm619;620; GFX1250-LABEL: copy_global_divergent:621; GFX1250: ; %bb.0: ; %entry622; GFX1250-NEXT: s_setreg_imm32_b32 hwreg(HW_REG_WAVE_MODE, 25, 1), 1623; GFX1250-NEXT: s_load_b32 s0, s[4:5], 0x34624; GFX1250-NEXT: s_wait_kmcnt 0x0625; GFX1250-NEXT: s_cmp_eq_u32 s0, 0626; GFX1250-NEXT: s_cbranch_scc1 .LBB5_3627; GFX1250-NEXT: ; %bb.1: ; %for.body.preheader628; GFX1250-NEXT: s_load_b128 s[8:11], s[4:5], 0x24629; GFX1250-NEXT: v_and_b32_e32 v0, 0x3ff, v0630; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)631; GFX1250-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_lshlrev_b32 v0, 4, v0632; GFX1250-NEXT: s_wait_kmcnt 0x0633; GFX1250-NEXT: v_add_nc_u64_e32 v[2:3], s[10:11], v[0:1]634; GFX1250-NEXT: v_add_nc_u64_e32 v[0:1], s[8:9], v[0:1]635; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_2)636; GFX1250-NEXT: v_add_nc_u64_e32 v[2:3], 0xb0, v[2:3]637; GFX1250-NEXT: .LBB5_2: ; %for.body638; GFX1250-NEXT: ; =>This Inner Loop Header: Depth=1639; GFX1250-NEXT: global_load_b128 v[4:7], v[2:3], off offset:-176640; GFX1250-NEXT: global_prefetch_b8 v[2:3], off scope:SCOPE_SE641; GFX1250-NEXT: s_wait_xcnt 0x0642; GFX1250-NEXT: v_add_nc_u64_e32 v[2:3], 16, v[2:3]643; GFX1250-NEXT: s_add_co_i32 s0, s0, -1644; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1)645; GFX1250-NEXT: s_cmp_lg_u32 s0, 0646; GFX1250-NEXT: s_wait_loadcnt 0x0647; GFX1250-NEXT: global_store_b128 v[0:1], v[4:7], off648; GFX1250-NEXT: s_wait_xcnt 0x0649; GFX1250-NEXT: v_add_nc_u64_e32 v[0:1], 16, v[0:1]650; GFX1250-NEXT: s_cbranch_scc1 .LBB5_2651; GFX1250-NEXT: .LBB5_3: ; %for.end652; GFX1250-NEXT: s_endpgm653entry:654 %tid = call i32 @llvm.amdgcn.workitem.id.x()655 %s.tid = getelementptr inbounds <4 x i32>, ptr addrspace(1) %s, i32 %tid656 %d.tid = getelementptr inbounds <4 x i32>, ptr addrspace(1) %d, i32 %tid657 %cmp6.not = icmp eq i32 %n, 0658 br i1 %cmp6.not, label %for.end, label %for.body659 660for.body: ; preds = %entry, %for.body661 %i.07 = phi i32 [ %inc, %for.body ], [ 0, %entry ]662 %idxprom = zext i32 %i.07 to i64663 %arrayidx = getelementptr inbounds <4 x i32>, ptr addrspace(1) %s.tid, i64 %idxprom664 %ld = load <4 x i32>, ptr addrspace(1) %arrayidx, align 4665 %arrayidx2 = getelementptr inbounds <4 x i32>, ptr addrspace(1) %d.tid, i64 %idxprom666 store <4 x i32> %ld, ptr addrspace(1) %arrayidx2, align 4667 %inc = add nuw i32 %i.07, 1668 %exitcond.not = icmp eq i32 %inc, %n669 br i1 %exitcond.not, label %for.end, label %for.body670 671for.end: ; preds = %for.body, %entry672 ret void673}674 675declare i32 @llvm.amdgcn.workitem.id.x()676