476 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn < %s | FileCheck -check-prefix=GCN %s3; RUN: llc -mtriple=amdgcn -O0 < %s | FileCheck -check-prefix=GCN_DBG %s4 5define amdgpu_kernel void @test_loop(ptr addrspace(3) %ptr, i32 %n) nounwind {6; GCN-LABEL: test_loop:7; GCN: ; %bb.0: ; %entry8; GCN-NEXT: s_load_dword s0, s[4:5], 0xa9; GCN-NEXT: s_waitcnt lgkmcnt(0)10; GCN-NEXT: s_cmp_eq_u32 s0, -111; GCN-NEXT: s_cbranch_scc1 .LBB0_312; GCN-NEXT: ; %bb.1: ; %for.body.preheader13; GCN-NEXT: s_load_dword s0, s[4:5], 0x914; GCN-NEXT: s_waitcnt lgkmcnt(0)15; GCN-NEXT: s_addk_i32 s0, 0x8016; GCN-NEXT: s_and_b64 vcc, exec, -117; GCN-NEXT: s_mov_b32 m0, -118; GCN-NEXT: .LBB0_2: ; %for.body19; GCN-NEXT: ; =>This Inner Loop Header: Depth=120; GCN-NEXT: v_mov_b32_e32 v0, s021; GCN-NEXT: ds_read_b32 v1, v022; GCN-NEXT: s_waitcnt lgkmcnt(0)23; GCN-NEXT: v_add_f32_e32 v1, 1.0, v124; GCN-NEXT: ds_write_b32 v0, v125; GCN-NEXT: s_add_i32 s0, s0, 426; GCN-NEXT: s_mov_b64 vcc, vcc27; GCN-NEXT: s_cbranch_vccnz .LBB0_228; GCN-NEXT: .LBB0_3: ; %for.exit29; GCN-NEXT: s_endpgm30;31; GCN_DBG-LABEL: test_loop:32; GCN_DBG: ; %bb.0: ; %entry33; GCN_DBG-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD034; GCN_DBG-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD135; GCN_DBG-NEXT: s_mov_b32 s14, -136; GCN_DBG-NEXT: s_mov_b32 s15, 0xe8f00037; GCN_DBG-NEXT: s_add_u32 s12, s12, s1138; GCN_DBG-NEXT: s_addc_u32 s13, s13, 039; GCN_DBG-NEXT: s_load_dword s0, s[4:5], 0x940; GCN_DBG-NEXT: ; implicit-def: $vgpr2 : SGPR spill to VGPR lane41; GCN_DBG-NEXT: s_waitcnt lgkmcnt(0)42; GCN_DBG-NEXT: v_writelane_b32 v2, s0, 043; GCN_DBG-NEXT: s_load_dword s1, s[4:5], 0xa44; GCN_DBG-NEXT: s_mov_b32 s0, 045; GCN_DBG-NEXT: s_mov_b32 s2, -146; GCN_DBG-NEXT: s_waitcnt lgkmcnt(0)47; GCN_DBG-NEXT: s_cmp_lg_u32 s1, s248; GCN_DBG-NEXT: v_writelane_b32 v2, s0, 149; GCN_DBG-NEXT: s_mov_b64 s[6:7], exec50; GCN_DBG-NEXT: s_mov_b64 exec, -151; GCN_DBG-NEXT: buffer_store_dword v2, off, s[12:15], 0 ; 4-byte Folded Spill52; GCN_DBG-NEXT: s_mov_b64 exec, s[6:7]53; GCN_DBG-NEXT: s_cbranch_scc1 .LBB0_254; GCN_DBG-NEXT: ; %bb.1: ; %for.exit55; GCN_DBG-NEXT: s_endpgm56; GCN_DBG-NEXT: .LBB0_2: ; %for.body57; GCN_DBG-NEXT: ; =>This Inner Loop Header: Depth=158; GCN_DBG-NEXT: s_or_saveexec_b64 s[6:7], -159; GCN_DBG-NEXT: s_waitcnt expcnt(0)60; GCN_DBG-NEXT: buffer_load_dword v2, off, s[12:15], 0 ; 4-byte Folded Reload61; GCN_DBG-NEXT: s_mov_b64 exec, s[6:7]62; GCN_DBG-NEXT: s_waitcnt vmcnt(0)63; GCN_DBG-NEXT: v_readlane_b32 s0, v2, 164; GCN_DBG-NEXT: v_readlane_b32 s2, v2, 065; GCN_DBG-NEXT: s_mov_b32 s1, 266; GCN_DBG-NEXT: s_lshl_b32 s1, s0, s167; GCN_DBG-NEXT: s_add_i32 s1, s1, s268; GCN_DBG-NEXT: s_mov_b32 s2, 0x8069; GCN_DBG-NEXT: s_add_i32 s1, s1, s270; GCN_DBG-NEXT: s_mov_b32 m0, -171; GCN_DBG-NEXT: v_mov_b32_e32 v0, s172; GCN_DBG-NEXT: ds_read_b32 v0, v073; GCN_DBG-NEXT: s_mov_b32 s2, 1.074; GCN_DBG-NEXT: s_waitcnt lgkmcnt(0)75; GCN_DBG-NEXT: v_add_f32_e64 v1, v0, s276; GCN_DBG-NEXT: s_mov_b32 m0, -177; GCN_DBG-NEXT: v_mov_b32_e32 v0, s178; GCN_DBG-NEXT: ds_write_b32 v0, v179; GCN_DBG-NEXT: s_mov_b32 s1, 180; GCN_DBG-NEXT: s_add_i32 s0, s0, s181; GCN_DBG-NEXT: s_mov_b64 s[2:3], -182; GCN_DBG-NEXT: s_and_b64 vcc, exec, s[2:3]83; GCN_DBG-NEXT: v_writelane_b32 v2, s0, 184; GCN_DBG-NEXT: s_or_saveexec_b64 s[6:7], -185; GCN_DBG-NEXT: buffer_store_dword v2, off, s[12:15], 0 ; 4-byte Folded Spill86; GCN_DBG-NEXT: s_mov_b64 exec, s[6:7]87; GCN_DBG-NEXT: s_cbranch_vccnz .LBB0_288; GCN_DBG-NEXT: ; %bb.3: ; %DummyReturnBlock89; GCN_DBG-NEXT: s_endpgm90entry:91 %cmp = icmp eq i32 %n, -192 br i1 %cmp, label %for.exit, label %for.body93 94for.exit:95 ret void96 97for.body:98 %indvar = phi i32 [ %inc, %for.body ], [ 0, %entry ]99 %tmp = add i32 %indvar, 32100 %arrayidx = getelementptr float, ptr addrspace(3) %ptr, i32 %tmp101 %vecload = load float, ptr addrspace(3) %arrayidx, align 4102 %add = fadd float %vecload, 1.0103 store float %add, ptr addrspace(3) %arrayidx, align 8104 %inc = add i32 %indvar, 1105 br label %for.body106}107 108define amdgpu_kernel void @loop_const_true(ptr addrspace(3) %ptr, i32 %n) nounwind {109; GCN-LABEL: loop_const_true:110; GCN: ; %bb.0: ; %entry111; GCN-NEXT: s_load_dword s0, s[4:5], 0x9112; GCN-NEXT: s_waitcnt lgkmcnt(0)113; GCN-NEXT: s_addk_i32 s0, 0x80114; GCN-NEXT: s_and_b64 vcc, exec, -1115; GCN-NEXT: s_mov_b32 m0, -1116; GCN-NEXT: .LBB1_1: ; %for.body117; GCN-NEXT: ; =>This Inner Loop Header: Depth=1118; GCN-NEXT: v_mov_b32_e32 v0, s0119; GCN-NEXT: ds_read_b32 v1, v0120; GCN-NEXT: s_waitcnt lgkmcnt(0)121; GCN-NEXT: v_add_f32_e32 v1, 1.0, v1122; GCN-NEXT: ds_write_b32 v0, v1123; GCN-NEXT: s_add_i32 s0, s0, 4124; GCN-NEXT: s_mov_b64 vcc, vcc125; GCN-NEXT: s_cbranch_vccnz .LBB1_1126; GCN-NEXT: ; %bb.2: ; %DummyReturnBlock127; GCN-NEXT: s_endpgm128;129; GCN_DBG-LABEL: loop_const_true:130; GCN_DBG: ; %bb.0: ; %entry131; GCN_DBG-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD0132; GCN_DBG-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD1133; GCN_DBG-NEXT: s_mov_b32 s14, -1134; GCN_DBG-NEXT: s_mov_b32 s15, 0xe8f000135; GCN_DBG-NEXT: s_add_u32 s12, s12, s11136; GCN_DBG-NEXT: s_addc_u32 s13, s13, 0137; GCN_DBG-NEXT: s_load_dword s0, s[4:5], 0x9138; GCN_DBG-NEXT: ; implicit-def: $vgpr2 : SGPR spill to VGPR lane139; GCN_DBG-NEXT: s_waitcnt lgkmcnt(0)140; GCN_DBG-NEXT: v_writelane_b32 v2, s0, 0141; GCN_DBG-NEXT: s_mov_b32 s0, 0142; GCN_DBG-NEXT: v_writelane_b32 v2, s0, 1143; GCN_DBG-NEXT: s_or_saveexec_b64 s[6:7], -1144; GCN_DBG-NEXT: buffer_store_dword v2, off, s[12:15], 0 ; 4-byte Folded Spill145; GCN_DBG-NEXT: s_mov_b64 exec, s[6:7]146; GCN_DBG-NEXT: s_branch .LBB1_2147; GCN_DBG-NEXT: .LBB1_1: ; %for.exit148; GCN_DBG-NEXT: s_endpgm149; GCN_DBG-NEXT: .LBB1_2: ; %for.body150; GCN_DBG-NEXT: ; =>This Inner Loop Header: Depth=1151; GCN_DBG-NEXT: s_or_saveexec_b64 s[6:7], -1152; GCN_DBG-NEXT: s_waitcnt expcnt(0)153; GCN_DBG-NEXT: buffer_load_dword v2, off, s[12:15], 0 ; 4-byte Folded Reload154; GCN_DBG-NEXT: s_mov_b64 exec, s[6:7]155; GCN_DBG-NEXT: s_waitcnt vmcnt(0)156; GCN_DBG-NEXT: v_readlane_b32 s0, v2, 1157; GCN_DBG-NEXT: v_readlane_b32 s2, v2, 0158; GCN_DBG-NEXT: s_mov_b32 s1, 2159; GCN_DBG-NEXT: s_lshl_b32 s1, s0, s1160; GCN_DBG-NEXT: s_add_i32 s1, s1, s2161; GCN_DBG-NEXT: s_mov_b32 s2, 0x80162; GCN_DBG-NEXT: s_add_i32 s1, s1, s2163; GCN_DBG-NEXT: s_mov_b32 m0, -1164; GCN_DBG-NEXT: v_mov_b32_e32 v0, s1165; GCN_DBG-NEXT: ds_read_b32 v0, v0166; GCN_DBG-NEXT: s_mov_b32 s2, 1.0167; GCN_DBG-NEXT: s_waitcnt lgkmcnt(0)168; GCN_DBG-NEXT: v_add_f32_e64 v1, v0, s2169; GCN_DBG-NEXT: s_mov_b32 m0, -1170; GCN_DBG-NEXT: v_mov_b32_e32 v0, s1171; GCN_DBG-NEXT: ds_write_b32 v0, v1172; GCN_DBG-NEXT: s_mov_b32 s1, 1173; GCN_DBG-NEXT: s_add_i32 s0, s0, s1174; GCN_DBG-NEXT: s_mov_b64 s[2:3], 0175; GCN_DBG-NEXT: s_and_b64 vcc, exec, s[2:3]176; GCN_DBG-NEXT: v_writelane_b32 v2, s0, 1177; GCN_DBG-NEXT: s_or_saveexec_b64 s[6:7], -1178; GCN_DBG-NEXT: buffer_store_dword v2, off, s[12:15], 0 ; 4-byte Folded Spill179; GCN_DBG-NEXT: s_mov_b64 exec, s[6:7]180; GCN_DBG-NEXT: s_cbranch_vccnz .LBB1_1181; GCN_DBG-NEXT: s_branch .LBB1_2182entry:183 br label %for.body184 185for.exit:186 ret void187 188for.body:189 %indvar = phi i32 [ %inc, %for.body ], [ 0, %entry ]190 %tmp = add i32 %indvar, 32191 %arrayidx = getelementptr float, ptr addrspace(3) %ptr, i32 %tmp192 %vecload = load float, ptr addrspace(3) %arrayidx, align 4193 %add = fadd float %vecload, 1.0194 store float %add, ptr addrspace(3) %arrayidx, align 8195 %inc = add i32 %indvar, 1196 br i1 true, label %for.body, label %for.exit197}198 199define amdgpu_kernel void @loop_const_false(ptr addrspace(3) %ptr, i32 %n) nounwind {200; GCN-LABEL: loop_const_false:201; GCN: ; %bb.0: ; %entry202; GCN-NEXT: s_load_dword s0, s[4:5], 0x9203; GCN-NEXT: s_waitcnt lgkmcnt(0)204; GCN-NEXT: v_mov_b32_e32 v0, s0205; GCN-NEXT: s_mov_b32 m0, -1206; GCN-NEXT: ds_read_b32 v1, v0 offset:128207; GCN-NEXT: s_waitcnt lgkmcnt(0)208; GCN-NEXT: v_add_f32_e32 v1, 1.0, v1209; GCN-NEXT: ds_write_b32 v0, v1 offset:128210; GCN-NEXT: s_endpgm211;212; GCN_DBG-LABEL: loop_const_false:213; GCN_DBG: ; %bb.0: ; %entry214; GCN_DBG-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD0215; GCN_DBG-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD1216; GCN_DBG-NEXT: s_mov_b32 s14, -1217; GCN_DBG-NEXT: s_mov_b32 s15, 0xe8f000218; GCN_DBG-NEXT: s_add_u32 s12, s12, s11219; GCN_DBG-NEXT: s_addc_u32 s13, s13, 0220; GCN_DBG-NEXT: s_load_dword s0, s[4:5], 0x9221; GCN_DBG-NEXT: ; implicit-def: $vgpr2 : SGPR spill to VGPR lane222; GCN_DBG-NEXT: s_waitcnt lgkmcnt(0)223; GCN_DBG-NEXT: v_writelane_b32 v2, s0, 0224; GCN_DBG-NEXT: s_mov_b32 s0, 0225; GCN_DBG-NEXT: v_writelane_b32 v2, s0, 1226; GCN_DBG-NEXT: s_or_saveexec_b64 s[6:7], -1227; GCN_DBG-NEXT: buffer_store_dword v2, off, s[12:15], 0 ; 4-byte Folded Spill228; GCN_DBG-NEXT: s_mov_b64 exec, s[6:7]229; GCN_DBG-NEXT: s_branch .LBB2_2230; GCN_DBG-NEXT: .LBB2_1: ; %for.exit231; GCN_DBG-NEXT: s_endpgm232; GCN_DBG-NEXT: .LBB2_2: ; %for.body233; GCN_DBG-NEXT: ; =>This Inner Loop Header: Depth=1234; GCN_DBG-NEXT: s_or_saveexec_b64 s[6:7], -1235; GCN_DBG-NEXT: s_waitcnt expcnt(0)236; GCN_DBG-NEXT: buffer_load_dword v2, off, s[12:15], 0 ; 4-byte Folded Reload237; GCN_DBG-NEXT: s_mov_b64 exec, s[6:7]238; GCN_DBG-NEXT: s_waitcnt vmcnt(0)239; GCN_DBG-NEXT: v_readlane_b32 s0, v2, 1240; GCN_DBG-NEXT: v_readlane_b32 s2, v2, 0241; GCN_DBG-NEXT: s_mov_b32 s1, 2242; GCN_DBG-NEXT: s_lshl_b32 s1, s0, s1243; GCN_DBG-NEXT: s_add_i32 s1, s1, s2244; GCN_DBG-NEXT: s_mov_b32 s2, 0x80245; GCN_DBG-NEXT: s_add_i32 s1, s1, s2246; GCN_DBG-NEXT: s_mov_b32 m0, -1247; GCN_DBG-NEXT: v_mov_b32_e32 v0, s1248; GCN_DBG-NEXT: ds_read_b32 v0, v0249; GCN_DBG-NEXT: s_mov_b32 s2, 1.0250; GCN_DBG-NEXT: s_waitcnt lgkmcnt(0)251; GCN_DBG-NEXT: v_add_f32_e64 v1, v0, s2252; GCN_DBG-NEXT: s_mov_b32 m0, -1253; GCN_DBG-NEXT: v_mov_b32_e32 v0, s1254; GCN_DBG-NEXT: ds_write_b32 v0, v1255; GCN_DBG-NEXT: s_mov_b32 s1, 1256; GCN_DBG-NEXT: s_add_i32 s0, s0, s1257; GCN_DBG-NEXT: s_mov_b64 s[2:3], -1258; GCN_DBG-NEXT: s_and_b64 vcc, exec, s[2:3]259; GCN_DBG-NEXT: v_writelane_b32 v2, s0, 1260; GCN_DBG-NEXT: s_or_saveexec_b64 s[6:7], -1261; GCN_DBG-NEXT: buffer_store_dword v2, off, s[12:15], 0 ; 4-byte Folded Spill262; GCN_DBG-NEXT: s_mov_b64 exec, s[6:7]263; GCN_DBG-NEXT: s_cbranch_vccnz .LBB2_1264; GCN_DBG-NEXT: s_branch .LBB2_2265entry:266 br label %for.body267 268for.exit:269 ret void270 271; XXX - Should there be an S_ENDPGM?272for.body:273 %indvar = phi i32 [ %inc, %for.body ], [ 0, %entry ]274 %tmp = add i32 %indvar, 32275 %arrayidx = getelementptr float, ptr addrspace(3) %ptr, i32 %tmp276 %vecload = load float, ptr addrspace(3) %arrayidx, align 4277 %add = fadd float %vecload, 1.0278 store float %add, ptr addrspace(3) %arrayidx, align 8279 %inc = add i32 %indvar, 1280 br i1 false, label %for.body, label %for.exit281}282 283define amdgpu_kernel void @loop_const_undef(ptr addrspace(3) %ptr, i32 %n) nounwind {284; GCN-LABEL: loop_const_undef:285; GCN: ; %bb.0: ; %entry286; GCN-NEXT: s_load_dword s0, s[4:5], 0x9287; GCN-NEXT: s_waitcnt lgkmcnt(0)288; GCN-NEXT: v_mov_b32_e32 v0, s0289; GCN-NEXT: s_mov_b32 m0, -1290; GCN-NEXT: ds_read_b32 v1, v0 offset:128291; GCN-NEXT: s_waitcnt lgkmcnt(0)292; GCN-NEXT: v_add_f32_e32 v1, 1.0, v1293; GCN-NEXT: ds_write_b32 v0, v1 offset:128294; GCN-NEXT: s_endpgm295;296; GCN_DBG-LABEL: loop_const_undef:297; GCN_DBG: ; %bb.0: ; %entry298; GCN_DBG-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD0299; GCN_DBG-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD1300; GCN_DBG-NEXT: s_mov_b32 s14, -1301; GCN_DBG-NEXT: s_mov_b32 s15, 0xe8f000302; GCN_DBG-NEXT: s_add_u32 s12, s12, s11303; GCN_DBG-NEXT: s_addc_u32 s13, s13, 0304; GCN_DBG-NEXT: s_load_dword s0, s[4:5], 0x9305; GCN_DBG-NEXT: ; implicit-def: $vgpr2 : SGPR spill to VGPR lane306; GCN_DBG-NEXT: s_waitcnt lgkmcnt(0)307; GCN_DBG-NEXT: v_writelane_b32 v2, s0, 0308; GCN_DBG-NEXT: s_mov_b32 s0, 0309; GCN_DBG-NEXT: v_writelane_b32 v2, s0, 1310; GCN_DBG-NEXT: s_or_saveexec_b64 s[6:7], -1311; GCN_DBG-NEXT: buffer_store_dword v2, off, s[12:15], 0 ; 4-byte Folded Spill312; GCN_DBG-NEXT: s_mov_b64 exec, s[6:7]313; GCN_DBG-NEXT: s_branch .LBB3_2314; GCN_DBG-NEXT: .LBB3_1: ; %for.exit315; GCN_DBG-NEXT: s_endpgm316; GCN_DBG-NEXT: .LBB3_2: ; %for.body317; GCN_DBG-NEXT: ; =>This Inner Loop Header: Depth=1318; GCN_DBG-NEXT: s_or_saveexec_b64 s[6:7], -1319; GCN_DBG-NEXT: s_waitcnt expcnt(0)320; GCN_DBG-NEXT: buffer_load_dword v2, off, s[12:15], 0 ; 4-byte Folded Reload321; GCN_DBG-NEXT: s_mov_b64 exec, s[6:7]322; GCN_DBG-NEXT: s_waitcnt vmcnt(0)323; GCN_DBG-NEXT: v_readlane_b32 s0, v2, 1324; GCN_DBG-NEXT: v_readlane_b32 s2, v2, 0325; GCN_DBG-NEXT: s_mov_b32 s1, 2326; GCN_DBG-NEXT: s_lshl_b32 s1, s0, s1327; GCN_DBG-NEXT: s_add_i32 s1, s1, s2328; GCN_DBG-NEXT: s_mov_b32 s2, 0x80329; GCN_DBG-NEXT: s_add_i32 s1, s1, s2330; GCN_DBG-NEXT: s_mov_b32 m0, -1331; GCN_DBG-NEXT: v_mov_b32_e32 v0, s1332; GCN_DBG-NEXT: ds_read_b32 v0, v0333; GCN_DBG-NEXT: s_mov_b32 s2, 1.0334; GCN_DBG-NEXT: s_waitcnt lgkmcnt(0)335; GCN_DBG-NEXT: v_add_f32_e64 v1, v0, s2336; GCN_DBG-NEXT: s_mov_b32 m0, -1337; GCN_DBG-NEXT: v_mov_b32_e32 v0, s1338; GCN_DBG-NEXT: ds_write_b32 v0, v1339; GCN_DBG-NEXT: s_mov_b32 s1, 1340; GCN_DBG-NEXT: s_add_i32 s0, s0, s1341; GCN_DBG-NEXT: v_writelane_b32 v2, s0, 1342; GCN_DBG-NEXT: s_or_saveexec_b64 s[6:7], -1343; GCN_DBG-NEXT: buffer_store_dword v2, off, s[12:15], 0 ; 4-byte Folded Spill344; GCN_DBG-NEXT: s_mov_b64 exec, s[6:7]345; GCN_DBG-NEXT: s_cbranch_scc1 .LBB3_1346; GCN_DBG-NEXT: s_branch .LBB3_2347entry:348 br label %for.body349 350for.exit:351 ret void352 353; XXX - Should there be an s_endpgm?354for.body:355 %indvar = phi i32 [ %inc, %for.body ], [ 0, %entry ]356 %tmp = add i32 %indvar, 32357 %arrayidx = getelementptr float, ptr addrspace(3) %ptr, i32 %tmp358 %vecload = load float, ptr addrspace(3) %arrayidx, align 4359 %add = fadd float %vecload, 1.0360 store float %add, ptr addrspace(3) %arrayidx, align 8361 %inc = add i32 %indvar, 1362 br i1 poison, label %for.body, label %for.exit363}364 365define amdgpu_kernel void @loop_arg_0(ptr addrspace(3) %ptr, i32 %n) nounwind {366; GCN-LABEL: loop_arg_0:367; GCN: ; %bb.0: ; %entry368; GCN-NEXT: v_mov_b32_e32 v0, 0369; GCN-NEXT: s_mov_b32 m0, -1370; GCN-NEXT: ds_read_u8 v0, v0371; GCN-NEXT: s_load_dword s4, s[4:5], 0x9372; GCN-NEXT: s_waitcnt lgkmcnt(0)373; GCN-NEXT: v_readfirstlane_b32 s0, v0374; GCN-NEXT: s_bitcmp1_b32 s0, 0375; GCN-NEXT: s_cselect_b64 s[0:1], -1, 0376; GCN-NEXT: s_xor_b64 s[2:3], s[0:1], -1377; GCN-NEXT: s_add_i32 s0, s4, 0x80378; GCN-NEXT: s_and_b64 vcc, exec, s[2:3]379; GCN-NEXT: .LBB4_1: ; %for.body380; GCN-NEXT: ; =>This Inner Loop Header: Depth=1381; GCN-NEXT: v_mov_b32_e32 v0, s0382; GCN-NEXT: ds_read_b32 v1, v0383; GCN-NEXT: s_waitcnt lgkmcnt(0)384; GCN-NEXT: v_add_f32_e32 v1, 1.0, v1385; GCN-NEXT: ds_write_b32 v0, v1386; GCN-NEXT: s_add_i32 s0, s0, 4387; GCN-NEXT: s_mov_b64 vcc, vcc388; GCN-NEXT: s_cbranch_vccz .LBB4_1389; GCN-NEXT: ; %bb.2: ; %for.exit390; GCN-NEXT: s_endpgm391;392; GCN_DBG-LABEL: loop_arg_0:393; GCN_DBG: ; %bb.0: ; %entry394; GCN_DBG-NEXT: s_mov_b32 s12, SCRATCH_RSRC_DWORD0395; GCN_DBG-NEXT: s_mov_b32 s13, SCRATCH_RSRC_DWORD1396; GCN_DBG-NEXT: s_mov_b32 s14, -1397; GCN_DBG-NEXT: s_mov_b32 s15, 0xe8f000398; GCN_DBG-NEXT: s_add_u32 s12, s12, s11399; GCN_DBG-NEXT: s_addc_u32 s13, s13, 0400; GCN_DBG-NEXT: s_load_dword s0, s[4:5], 0x9401; GCN_DBG-NEXT: ; implicit-def: $vgpr2 : SGPR spill to VGPR lane402; GCN_DBG-NEXT: s_waitcnt lgkmcnt(0)403; GCN_DBG-NEXT: v_writelane_b32 v2, s0, 0404; GCN_DBG-NEXT: v_mov_b32_e32 v0, 0405; GCN_DBG-NEXT: s_mov_b32 m0, -1406; GCN_DBG-NEXT: ds_read_u8 v0, v0407; GCN_DBG-NEXT: s_waitcnt lgkmcnt(0)408; GCN_DBG-NEXT: v_readfirstlane_b32 s0, v0409; GCN_DBG-NEXT: s_and_b32 s0, 1, s0410; GCN_DBG-NEXT: s_cmp_eq_u32 s0, 1411; GCN_DBG-NEXT: s_cselect_b64 s[0:1], -1, 0412; GCN_DBG-NEXT: s_mov_b64 s[2:3], -1413; GCN_DBG-NEXT: s_xor_b64 s[0:1], s[0:1], s[2:3]414; GCN_DBG-NEXT: v_writelane_b32 v2, s0, 1415; GCN_DBG-NEXT: v_writelane_b32 v2, s1, 2416; GCN_DBG-NEXT: s_mov_b32 s0, 0417; GCN_DBG-NEXT: v_writelane_b32 v2, s0, 3418; GCN_DBG-NEXT: s_or_saveexec_b64 s[6:7], -1419; GCN_DBG-NEXT: buffer_store_dword v2, off, s[12:15], 0 ; 4-byte Folded Spill420; GCN_DBG-NEXT: s_mov_b64 exec, s[6:7]421; GCN_DBG-NEXT: s_branch .LBB4_2422; GCN_DBG-NEXT: .LBB4_1: ; %for.exit423; GCN_DBG-NEXT: s_endpgm424; GCN_DBG-NEXT: .LBB4_2: ; %for.body425; GCN_DBG-NEXT: ; =>This Inner Loop Header: Depth=1426; GCN_DBG-NEXT: s_or_saveexec_b64 s[6:7], -1427; GCN_DBG-NEXT: s_waitcnt expcnt(0)428; GCN_DBG-NEXT: buffer_load_dword v2, off, s[12:15], 0 ; 4-byte Folded Reload429; GCN_DBG-NEXT: s_mov_b64 exec, s[6:7]430; GCN_DBG-NEXT: s_waitcnt vmcnt(0)431; GCN_DBG-NEXT: v_readlane_b32 s0, v2, 3432; GCN_DBG-NEXT: v_readlane_b32 s2, v2, 1433; GCN_DBG-NEXT: v_readlane_b32 s3, v2, 2434; GCN_DBG-NEXT: v_readlane_b32 s4, v2, 0435; GCN_DBG-NEXT: s_mov_b32 s1, 2436; GCN_DBG-NEXT: s_lshl_b32 s1, s0, s1437; GCN_DBG-NEXT: s_add_i32 s1, s1, s4438; GCN_DBG-NEXT: s_mov_b32 s4, 0x80439; GCN_DBG-NEXT: s_add_i32 s1, s1, s4440; GCN_DBG-NEXT: s_mov_b32 m0, -1441; GCN_DBG-NEXT: v_mov_b32_e32 v0, s1442; GCN_DBG-NEXT: ds_read_b32 v0, v0443; GCN_DBG-NEXT: s_mov_b32 s4, 1.0444; GCN_DBG-NEXT: s_waitcnt lgkmcnt(0)445; GCN_DBG-NEXT: v_add_f32_e64 v1, v0, s4446; GCN_DBG-NEXT: s_mov_b32 m0, -1447; GCN_DBG-NEXT: v_mov_b32_e32 v0, s1448; GCN_DBG-NEXT: ds_write_b32 v0, v1449; GCN_DBG-NEXT: s_mov_b32 s1, 1450; GCN_DBG-NEXT: s_add_i32 s0, s0, s1451; GCN_DBG-NEXT: s_and_b64 vcc, exec, s[2:3]452; GCN_DBG-NEXT: v_writelane_b32 v2, s0, 3453; GCN_DBG-NEXT: s_or_saveexec_b64 s[6:7], -1454; GCN_DBG-NEXT: buffer_store_dword v2, off, s[12:15], 0 ; 4-byte Folded Spill455; GCN_DBG-NEXT: s_mov_b64 exec, s[6:7]456; GCN_DBG-NEXT: s_cbranch_vccnz .LBB4_1457; GCN_DBG-NEXT: s_branch .LBB4_2458entry:459 %cond = load volatile i1, ptr addrspace(3) null460 br label %for.body461 462for.exit:463 ret void464 465for.body:466 %indvar = phi i32 [ %inc, %for.body ], [ 0, %entry ]467 %tmp = add i32 %indvar, 32468 %arrayidx = getelementptr float, ptr addrspace(3) %ptr, i32 %tmp469 %vecload = load float, ptr addrspace(3) %arrayidx, align 4470 %add = fadd float %vecload, 1.0471 store float %add, ptr addrspace(3) %arrayidx, align 8472 %inc = add i32 %indvar, 1473 br i1 %cond, label %for.body, label %for.exit474}475 476