3229 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc -mtriple=amdgcn -mcpu=tonga -global-isel=0 < %s | FileCheck -check-prefixes=GFX8DAGISEL %s3; RUN: llc -mtriple=amdgcn -mcpu=tonga -global-isel=1 < %s | FileCheck -check-prefixes=GFX8GISEL %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -global-isel=0 < %s | FileCheck -check-prefixes=GFX9DAGISEL %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -global-isel=1 < %s | FileCheck -check-prefixes=GFX9GISEL %s6; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -global-isel=0 -mattr=+wavefrontsize64 < %s | FileCheck -check-prefixes=GFX10DAGISEL,GFX1064DAGISEL %s7; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -global-isel=1 -mattr=+wavefrontsize64 < %s | FileCheck -check-prefixes=GFX10GISEL,GFX1064GISEL %s8; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -global-isel=0 < %s | FileCheck -check-prefixes=GFX10DAGISEL,GFX1032DAGISEL %s9; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -global-isel=1 < %s | FileCheck -check-prefixes=GFX10GISEL,GFX1032GISEL %s10; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -global-isel=0 -mattr=+wavefrontsize64 < %s | FileCheck -check-prefixes=GFX11DAGISEL,GFX1164DAGISEL %s11; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -global-isel=1 -mattr=+wavefrontsize64 < %s | FileCheck -check-prefixes=GFX11GISEL,GFX1164GISEL %s12; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -global-isel=0 < %s | FileCheck -check-prefixes=GFX11DAGISEL,GFX1132DAGISEL %s13; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -global-isel=1 < %s | FileCheck -check-prefixes=GFX11GISEL,GFX1132GISEL %s14; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -global-isel=0 < %s | FileCheck -check-prefixes=GFX12DAGISEL %s15 16define amdgpu_kernel void @uniform_value(ptr addrspace(1) %out, i32 %in) {17; GFX8DAGISEL-LABEL: uniform_value:18; GFX8DAGISEL: ; %bb.0: ; %entry19; GFX8DAGISEL-NEXT: s_load_dword s6, s[4:5], 0x2c20; GFX8DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2421; GFX8DAGISEL-NEXT: s_mov_b64 s[2:3], exec22; GFX8DAGISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]23; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)24; GFX8DAGISEL-NEXT: s_sub_i32 s3, 0, s625; GFX8DAGISEL-NEXT: s_mul_i32 s2, s3, s226; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s027; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s128; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s229; GFX8DAGISEL-NEXT: flat_store_dword v[0:1], v230; GFX8DAGISEL-NEXT: s_endpgm31;32; GFX8GISEL-LABEL: uniform_value:33; GFX8GISEL: ; %bb.0: ; %entry34; GFX8GISEL-NEXT: s_load_dword s6, s[4:5], 0x2c35; GFX8GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2436; GFX8GISEL-NEXT: s_mov_b64 s[2:3], exec37; GFX8GISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]38; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)39; GFX8GISEL-NEXT: s_sub_i32 s3, 0, s640; GFX8GISEL-NEXT: s_mul_i32 s2, s3, s241; GFX8GISEL-NEXT: v_mov_b32_e32 v0, s042; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s243; GFX8GISEL-NEXT: v_mov_b32_e32 v1, s144; GFX8GISEL-NEXT: flat_store_dword v[0:1], v245; GFX8GISEL-NEXT: s_endpgm46;47; GFX9DAGISEL-LABEL: uniform_value:48; GFX9DAGISEL: ; %bb.0: ; %entry49; GFX9DAGISEL-NEXT: s_load_dword s6, s[4:5], 0x2c50; GFX9DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2451; GFX9DAGISEL-NEXT: s_mov_b64 s[2:3], exec52; GFX9DAGISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]53; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, 054; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)55; GFX9DAGISEL-NEXT: s_sub_i32 s3, 0, s656; GFX9DAGISEL-NEXT: s_mul_i32 s2, s3, s257; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, s258; GFX9DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]59; GFX9DAGISEL-NEXT: s_endpgm60;61; GFX9GISEL-LABEL: uniform_value:62; GFX9GISEL: ; %bb.0: ; %entry63; GFX9GISEL-NEXT: s_load_dword s6, s[4:5], 0x2c64; GFX9GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2465; GFX9GISEL-NEXT: s_mov_b64 s[2:3], exec66; GFX9GISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]67; GFX9GISEL-NEXT: v_mov_b32_e32 v1, 068; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)69; GFX9GISEL-NEXT: s_sub_i32 s3, 0, s670; GFX9GISEL-NEXT: s_mul_i32 s2, s3, s271; GFX9GISEL-NEXT: v_mov_b32_e32 v0, s272; GFX9GISEL-NEXT: global_store_dword v1, v0, s[0:1]73; GFX9GISEL-NEXT: s_endpgm74;75; GFX1064DAGISEL-LABEL: uniform_value:76; GFX1064DAGISEL: ; %bb.0: ; %entry77; GFX1064DAGISEL-NEXT: s_clause 0x178; GFX1064DAGISEL-NEXT: s_load_dword s6, s[4:5], 0x2c79; GFX1064DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2480; GFX1064DAGISEL-NEXT: s_mov_b64 s[2:3], exec81; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, 082; GFX1064DAGISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]83; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)84; GFX1064DAGISEL-NEXT: s_sub_i32 s3, 0, s685; GFX1064DAGISEL-NEXT: s_mul_i32 s2, s3, s286; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, s287; GFX1064DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]88; GFX1064DAGISEL-NEXT: s_endpgm89;90; GFX1064GISEL-LABEL: uniform_value:91; GFX1064GISEL: ; %bb.0: ; %entry92; GFX1064GISEL-NEXT: s_clause 0x193; GFX1064GISEL-NEXT: s_load_dword s6, s[4:5], 0x2c94; GFX1064GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2495; GFX1064GISEL-NEXT: s_mov_b64 s[2:3], exec96; GFX1064GISEL-NEXT: v_mov_b32_e32 v1, 097; GFX1064GISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]98; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)99; GFX1064GISEL-NEXT: s_sub_i32 s3, 0, s6100; GFX1064GISEL-NEXT: s_mul_i32 s2, s3, s2101; GFX1064GISEL-NEXT: v_mov_b32_e32 v0, s2102; GFX1064GISEL-NEXT: global_store_dword v1, v0, s[0:1]103; GFX1064GISEL-NEXT: s_endpgm104;105; GFX1032DAGISEL-LABEL: uniform_value:106; GFX1032DAGISEL: ; %bb.0: ; %entry107; GFX1032DAGISEL-NEXT: s_clause 0x1108; GFX1032DAGISEL-NEXT: s_load_dword s2, s[4:5], 0x2c109; GFX1032DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24110; GFX1032DAGISEL-NEXT: s_mov_b32 s3, exec_lo111; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, 0112; GFX1032DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s3113; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)114; GFX1032DAGISEL-NEXT: s_sub_i32 s2, 0, s2115; GFX1032DAGISEL-NEXT: s_mul_i32 s2, s2, s3116; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, s2117; GFX1032DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]118; GFX1032DAGISEL-NEXT: s_endpgm119;120; GFX1032GISEL-LABEL: uniform_value:121; GFX1032GISEL: ; %bb.0: ; %entry122; GFX1032GISEL-NEXT: s_clause 0x1123; GFX1032GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c124; GFX1032GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24125; GFX1032GISEL-NEXT: s_mov_b32 s3, exec_lo126; GFX1032GISEL-NEXT: v_mov_b32_e32 v1, 0127; GFX1032GISEL-NEXT: s_bcnt1_i32_b32 s3, s3128; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)129; GFX1032GISEL-NEXT: s_sub_i32 s2, 0, s2130; GFX1032GISEL-NEXT: s_mul_i32 s2, s2, s3131; GFX1032GISEL-NEXT: v_mov_b32_e32 v0, s2132; GFX1032GISEL-NEXT: global_store_dword v1, v0, s[0:1]133; GFX1032GISEL-NEXT: s_endpgm134;135; GFX1164DAGISEL-LABEL: uniform_value:136; GFX1164DAGISEL: ; %bb.0: ; %entry137; GFX1164DAGISEL-NEXT: s_clause 0x1138; GFX1164DAGISEL-NEXT: s_load_b32 s6, s[4:5], 0x2c139; GFX1164DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24140; GFX1164DAGISEL-NEXT: s_mov_b64 s[2:3], exec141; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, 0142; GFX1164DAGISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]143; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)144; GFX1164DAGISEL-NEXT: s_sub_i32 s3, 0, s6145; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)146; GFX1164DAGISEL-NEXT: s_mul_i32 s2, s3, s2147; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s2148; GFX1164DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]149; GFX1164DAGISEL-NEXT: s_endpgm150;151; GFX1164GISEL-LABEL: uniform_value:152; GFX1164GISEL: ; %bb.0: ; %entry153; GFX1164GISEL-NEXT: s_clause 0x1154; GFX1164GISEL-NEXT: s_load_b32 s6, s[4:5], 0x2c155; GFX1164GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24156; GFX1164GISEL-NEXT: s_mov_b64 s[2:3], exec157; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, 0158; GFX1164GISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]159; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)160; GFX1164GISEL-NEXT: s_sub_i32 s3, 0, s6161; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)162; GFX1164GISEL-NEXT: s_mul_i32 s2, s3, s2163; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, s2164; GFX1164GISEL-NEXT: global_store_b32 v1, v0, s[0:1]165; GFX1164GISEL-NEXT: s_endpgm166;167; GFX1132DAGISEL-LABEL: uniform_value:168; GFX1132DAGISEL: ; %bb.0: ; %entry169; GFX1132DAGISEL-NEXT: s_clause 0x1170; GFX1132DAGISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c171; GFX1132DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24172; GFX1132DAGISEL-NEXT: s_mov_b32 s3, exec_lo173; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)174; GFX1132DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s3175; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)176; GFX1132DAGISEL-NEXT: s_sub_i32 s2, 0, s2177; GFX1132DAGISEL-NEXT: s_mul_i32 s2, s2, s3178; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)179; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2180; GFX1132DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]181; GFX1132DAGISEL-NEXT: s_endpgm182;183; GFX1132GISEL-LABEL: uniform_value:184; GFX1132GISEL: ; %bb.0: ; %entry185; GFX1132GISEL-NEXT: s_clause 0x1186; GFX1132GISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c187; GFX1132GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24188; GFX1132GISEL-NEXT: s_mov_b32 s3, exec_lo189; GFX1132GISEL-NEXT: v_mov_b32_e32 v1, 0190; GFX1132GISEL-NEXT: s_bcnt1_i32_b32 s3, s3191; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)192; GFX1132GISEL-NEXT: s_sub_i32 s2, 0, s2193; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)194; GFX1132GISEL-NEXT: s_mul_i32 s2, s2, s3195; GFX1132GISEL-NEXT: v_mov_b32_e32 v0, s2196; GFX1132GISEL-NEXT: global_store_b32 v1, v0, s[0:1]197; GFX1132GISEL-NEXT: s_endpgm198;199; GFX12DAGISEL-LABEL: uniform_value:200; GFX12DAGISEL: ; %bb.0: ; %entry201; GFX12DAGISEL-NEXT: s_load_b96 s[0:2], s[4:5], 0x24202; GFX12DAGISEL-NEXT: s_mov_b32 s3, exec_lo203; GFX12DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)204; GFX12DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s3205; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x0206; GFX12DAGISEL-NEXT: s_sub_co_i32 s2, 0, s2207; GFX12DAGISEL-NEXT: s_mul_i32 s2, s2, s3208; GFX12DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)209; GFX12DAGISEL-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2210; GFX12DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]211; GFX12DAGISEL-NEXT: s_endpgm212entry:213 %result = call i32 @llvm.amdgcn.wave.reduce.sub.i32(i32 %in, i32 1)214 store i32 %result, ptr addrspace(1) %out215 ret void216}217 218define amdgpu_kernel void @divergent_value(ptr addrspace(1) %out) {219; GFX8DAGISEL-LABEL: divergent_value:220; GFX8DAGISEL: ; %bb.0: ; %entry221; GFX8DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24222; GFX8DAGISEL-NEXT: s_mov_b64 s[2:3], exec223; GFX8DAGISEL-NEXT: s_mov_b32 s4, 0224; GFX8DAGISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1225; GFX8DAGISEL-NEXT: s_ff1_i32_b64 s5, s[2:3]226; GFX8DAGISEL-NEXT: v_readlane_b32 s6, v0, s5227; GFX8DAGISEL-NEXT: s_bitset0_b64 s[2:3], s5228; GFX8DAGISEL-NEXT: s_sub_i32 s4, s4, s6229; GFX8DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0230; GFX8DAGISEL-NEXT: s_cbranch_scc1 .LBB1_1231; GFX8DAGISEL-NEXT: ; %bb.2:232; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)233; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s0234; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s1235; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s4236; GFX8DAGISEL-NEXT: flat_store_dword v[0:1], v2237; GFX8DAGISEL-NEXT: s_endpgm238;239; GFX8GISEL-LABEL: divergent_value:240; GFX8GISEL: ; %bb.0: ; %entry241; GFX8GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24242; GFX8GISEL-NEXT: s_mov_b64 s[2:3], exec243; GFX8GISEL-NEXT: s_mov_b32 s4, 0244; GFX8GISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1245; GFX8GISEL-NEXT: s_ff1_i32_b64 s5, s[2:3]246; GFX8GISEL-NEXT: v_readlane_b32 s6, v0, s5247; GFX8GISEL-NEXT: s_bitset0_b64 s[2:3], s5248; GFX8GISEL-NEXT: s_sub_i32 s4, s4, s6249; GFX8GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0250; GFX8GISEL-NEXT: s_cbranch_scc1 .LBB1_1251; GFX8GISEL-NEXT: ; %bb.2:252; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)253; GFX8GISEL-NEXT: v_mov_b32_e32 v0, s0254; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s4255; GFX8GISEL-NEXT: v_mov_b32_e32 v1, s1256; GFX8GISEL-NEXT: flat_store_dword v[0:1], v2257; GFX8GISEL-NEXT: s_endpgm258;259; GFX9DAGISEL-LABEL: divergent_value:260; GFX9DAGISEL: ; %bb.0: ; %entry261; GFX9DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24262; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, 0263; GFX9DAGISEL-NEXT: s_mov_b64 s[2:3], exec264; GFX9DAGISEL-NEXT: s_mov_b32 s4, 0265; GFX9DAGISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1266; GFX9DAGISEL-NEXT: s_ff1_i32_b64 s5, s[2:3]267; GFX9DAGISEL-NEXT: v_readlane_b32 s6, v0, s5268; GFX9DAGISEL-NEXT: s_bitset0_b64 s[2:3], s5269; GFX9DAGISEL-NEXT: s_sub_i32 s4, s4, s6270; GFX9DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0271; GFX9DAGISEL-NEXT: s_cbranch_scc1 .LBB1_1272; GFX9DAGISEL-NEXT: ; %bb.2:273; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, s4274; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)275; GFX9DAGISEL-NEXT: global_store_dword v1, v0, s[0:1]276; GFX9DAGISEL-NEXT: s_endpgm277;278; GFX9GISEL-LABEL: divergent_value:279; GFX9GISEL: ; %bb.0: ; %entry280; GFX9GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24281; GFX9GISEL-NEXT: s_mov_b64 s[2:3], exec282; GFX9GISEL-NEXT: s_mov_b32 s4, 0283; GFX9GISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1284; GFX9GISEL-NEXT: s_ff1_i32_b64 s5, s[2:3]285; GFX9GISEL-NEXT: v_readlane_b32 s6, v0, s5286; GFX9GISEL-NEXT: s_bitset0_b64 s[2:3], s5287; GFX9GISEL-NEXT: s_sub_i32 s4, s4, s6288; GFX9GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0289; GFX9GISEL-NEXT: s_cbranch_scc1 .LBB1_1290; GFX9GISEL-NEXT: ; %bb.2:291; GFX9GISEL-NEXT: v_mov_b32_e32 v0, s4292; GFX9GISEL-NEXT: v_mov_b32_e32 v1, 0293; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)294; GFX9GISEL-NEXT: global_store_dword v1, v0, s[0:1]295; GFX9GISEL-NEXT: s_endpgm296;297; GFX1064DAGISEL-LABEL: divergent_value:298; GFX1064DAGISEL: ; %bb.0: ; %entry299; GFX1064DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24300; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, 0301; GFX1064DAGISEL-NEXT: s_mov_b64 s[2:3], exec302; GFX1064DAGISEL-NEXT: s_mov_b32 s4, 0303; GFX1064DAGISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1304; GFX1064DAGISEL-NEXT: s_ff1_i32_b64 s5, s[2:3]305; GFX1064DAGISEL-NEXT: v_readlane_b32 s6, v0, s5306; GFX1064DAGISEL-NEXT: s_bitset0_b64 s[2:3], s5307; GFX1064DAGISEL-NEXT: s_sub_i32 s4, s4, s6308; GFX1064DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0309; GFX1064DAGISEL-NEXT: s_cbranch_scc1 .LBB1_1310; GFX1064DAGISEL-NEXT: ; %bb.2:311; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, s4312; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)313; GFX1064DAGISEL-NEXT: global_store_dword v1, v0, s[0:1]314; GFX1064DAGISEL-NEXT: s_endpgm315;316; GFX1064GISEL-LABEL: divergent_value:317; GFX1064GISEL: ; %bb.0: ; %entry318; GFX1064GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24319; GFX1064GISEL-NEXT: s_mov_b64 s[2:3], exec320; GFX1064GISEL-NEXT: s_mov_b32 s4, 0321; GFX1064GISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1322; GFX1064GISEL-NEXT: s_ff1_i32_b64 s5, s[2:3]323; GFX1064GISEL-NEXT: v_readlane_b32 s6, v0, s5324; GFX1064GISEL-NEXT: s_bitset0_b64 s[2:3], s5325; GFX1064GISEL-NEXT: s_sub_i32 s4, s4, s6326; GFX1064GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0327; GFX1064GISEL-NEXT: s_cbranch_scc1 .LBB1_1328; GFX1064GISEL-NEXT: ; %bb.2:329; GFX1064GISEL-NEXT: v_mov_b32_e32 v0, s4330; GFX1064GISEL-NEXT: v_mov_b32_e32 v1, 0331; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)332; GFX1064GISEL-NEXT: global_store_dword v1, v0, s[0:1]333; GFX1064GISEL-NEXT: s_endpgm334;335; GFX1032DAGISEL-LABEL: divergent_value:336; GFX1032DAGISEL: ; %bb.0: ; %entry337; GFX1032DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24338; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, 0339; GFX1032DAGISEL-NEXT: s_mov_b32 s3, exec_lo340; GFX1032DAGISEL-NEXT: s_mov_b32 s2, 0341; GFX1032DAGISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1342; GFX1032DAGISEL-NEXT: s_ff1_i32_b32 s4, s3343; GFX1032DAGISEL-NEXT: v_readlane_b32 s5, v0, s4344; GFX1032DAGISEL-NEXT: s_bitset0_b32 s3, s4345; GFX1032DAGISEL-NEXT: s_sub_i32 s2, s2, s5346; GFX1032DAGISEL-NEXT: s_cmp_lg_u32 s3, 0347; GFX1032DAGISEL-NEXT: s_cbranch_scc1 .LBB1_1348; GFX1032DAGISEL-NEXT: ; %bb.2:349; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, s2350; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)351; GFX1032DAGISEL-NEXT: global_store_dword v1, v0, s[0:1]352; GFX1032DAGISEL-NEXT: s_endpgm353;354; GFX1032GISEL-LABEL: divergent_value:355; GFX1032GISEL: ; %bb.0: ; %entry356; GFX1032GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24357; GFX1032GISEL-NEXT: s_mov_b32 s3, exec_lo358; GFX1032GISEL-NEXT: s_mov_b32 s2, 0359; GFX1032GISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1360; GFX1032GISEL-NEXT: s_ff1_i32_b32 s4, s3361; GFX1032GISEL-NEXT: v_readlane_b32 s5, v0, s4362; GFX1032GISEL-NEXT: s_bitset0_b32 s3, s4363; GFX1032GISEL-NEXT: s_sub_i32 s2, s2, s5364; GFX1032GISEL-NEXT: s_cmp_lg_u32 s3, 0365; GFX1032GISEL-NEXT: s_cbranch_scc1 .LBB1_1366; GFX1032GISEL-NEXT: ; %bb.2:367; GFX1032GISEL-NEXT: v_mov_b32_e32 v0, s2368; GFX1032GISEL-NEXT: v_mov_b32_e32 v1, 0369; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)370; GFX1032GISEL-NEXT: global_store_dword v1, v0, s[0:1]371; GFX1032GISEL-NEXT: s_endpgm372;373; GFX1164DAGISEL-LABEL: divergent_value:374; GFX1164DAGISEL: ; %bb.0: ; %entry375; GFX1164DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24376; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, 0377; GFX1164DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0378; GFX1164DAGISEL-NEXT: s_mov_b64 s[2:3], exec379; GFX1164DAGISEL-NEXT: s_mov_b32 s4, 0380; GFX1164DAGISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1381; GFX1164DAGISEL-NEXT: s_ctz_i32_b64 s5, s[2:3]382; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)383; GFX1164DAGISEL-NEXT: v_readlane_b32 s6, v0, s5384; GFX1164DAGISEL-NEXT: s_bitset0_b64 s[2:3], s5385; GFX1164DAGISEL-NEXT: s_sub_i32 s4, s4, s6386; GFX1164DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0387; GFX1164DAGISEL-NEXT: s_cbranch_scc1 .LBB1_1388; GFX1164DAGISEL-NEXT: ; %bb.2:389; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, s4390; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)391; GFX1164DAGISEL-NEXT: global_store_b32 v1, v0, s[0:1]392; GFX1164DAGISEL-NEXT: s_endpgm393;394; GFX1164GISEL-LABEL: divergent_value:395; GFX1164GISEL: ; %bb.0: ; %entry396; GFX1164GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24397; GFX1164GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0398; GFX1164GISEL-NEXT: s_mov_b64 s[2:3], exec399; GFX1164GISEL-NEXT: s_mov_b32 s4, 0400; GFX1164GISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1401; GFX1164GISEL-NEXT: s_ctz_i32_b64 s5, s[2:3]402; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)403; GFX1164GISEL-NEXT: v_readlane_b32 s6, v0, s5404; GFX1164GISEL-NEXT: s_bitset0_b64 s[2:3], s5405; GFX1164GISEL-NEXT: s_sub_i32 s4, s4, s6406; GFX1164GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0407; GFX1164GISEL-NEXT: s_cbranch_scc1 .LBB1_1408; GFX1164GISEL-NEXT: ; %bb.2:409; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, s4410; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, 0411; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)412; GFX1164GISEL-NEXT: global_store_b32 v1, v0, s[0:1]413; GFX1164GISEL-NEXT: s_endpgm414;415; GFX1132DAGISEL-LABEL: divergent_value:416; GFX1132DAGISEL: ; %bb.0: ; %entry417; GFX1132DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24418; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0419; GFX1132DAGISEL-NEXT: s_mov_b32 s3, exec_lo420; GFX1132DAGISEL-NEXT: s_mov_b32 s2, 0421; GFX1132DAGISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1422; GFX1132DAGISEL-NEXT: s_ctz_i32_b32 s4, s3423; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)424; GFX1132DAGISEL-NEXT: v_readlane_b32 s5, v0, s4425; GFX1132DAGISEL-NEXT: s_bitset0_b32 s3, s4426; GFX1132DAGISEL-NEXT: s_sub_i32 s2, s2, s5427; GFX1132DAGISEL-NEXT: s_cmp_lg_u32 s3, 0428; GFX1132DAGISEL-NEXT: s_cbranch_scc1 .LBB1_1429; GFX1132DAGISEL-NEXT: ; %bb.2:430; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v0, s2431; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)432; GFX1132DAGISEL-NEXT: global_store_b32 v1, v0, s[0:1]433; GFX1132DAGISEL-NEXT: s_endpgm434;435; GFX1132GISEL-LABEL: divergent_value:436; GFX1132GISEL: ; %bb.0: ; %entry437; GFX1132GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24438; GFX1132GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0439; GFX1132GISEL-NEXT: s_mov_b32 s3, exec_lo440; GFX1132GISEL-NEXT: s_mov_b32 s2, 0441; GFX1132GISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1442; GFX1132GISEL-NEXT: s_ctz_i32_b32 s4, s3443; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)444; GFX1132GISEL-NEXT: v_readlane_b32 s5, v0, s4445; GFX1132GISEL-NEXT: s_bitset0_b32 s3, s4446; GFX1132GISEL-NEXT: s_sub_i32 s2, s2, s5447; GFX1132GISEL-NEXT: s_cmp_lg_u32 s3, 0448; GFX1132GISEL-NEXT: s_cbranch_scc1 .LBB1_1449; GFX1132GISEL-NEXT: ; %bb.2:450; GFX1132GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, 0451; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)452; GFX1132GISEL-NEXT: global_store_b32 v1, v0, s[0:1]453; GFX1132GISEL-NEXT: s_endpgm454;455; GFX12DAGISEL-LABEL: divergent_value:456; GFX12DAGISEL: ; %bb.0: ; %entry457; GFX12DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24458; GFX12DAGISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0459; GFX12DAGISEL-NEXT: s_mov_b32 s3, exec_lo460; GFX12DAGISEL-NEXT: s_mov_b32 s2, 0461; GFX12DAGISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1462; GFX12DAGISEL-NEXT: s_ctz_i32_b32 s4, s3463; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)464; GFX12DAGISEL-NEXT: v_readlane_b32 s5, v0, s4465; GFX12DAGISEL-NEXT: s_bitset0_b32 s3, s4466; GFX12DAGISEL-NEXT: s_sub_co_i32 s2, s2, s5467; GFX12DAGISEL-NEXT: s_cmp_lg_u32 s3, 0468; GFX12DAGISEL-NEXT: s_cbranch_scc1 .LBB1_1469; GFX12DAGISEL-NEXT: ; %bb.2:470; GFX12DAGISEL-NEXT: v_mov_b32_e32 v0, s2471; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x0472; GFX12DAGISEL-NEXT: global_store_b32 v1, v0, s[0:1]473; GFX12DAGISEL-NEXT: s_endpgm474entry:475 %id.x = call i32 @llvm.amdgcn.workitem.id.x()476 %result = call i32 @llvm.amdgcn.wave.reduce.sub.i32(i32 %id.x, i32 1)477 store i32 %result, ptr addrspace(1) %out478 ret void479}480 481define amdgpu_kernel void @divergent_cfg(ptr addrspace(1) %out, i32 %in) {482; GFX8DAGISEL-LABEL: divergent_cfg:483; GFX8DAGISEL: ; %bb.0: ; %entry484; GFX8DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v0485; GFX8DAGISEL-NEXT: ; implicit-def: $sgpr2486; GFX8DAGISEL-NEXT: s_and_saveexec_b64 s[0:1], vcc487; GFX8DAGISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]488; GFX8DAGISEL-NEXT: s_cbranch_execz .LBB2_2489; GFX8DAGISEL-NEXT: ; %bb.1: ; %else490; GFX8DAGISEL-NEXT: s_load_dword s6, s[4:5], 0x2c491; GFX8DAGISEL-NEXT: s_mov_b64 s[2:3], exec492; GFX8DAGISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]493; GFX8DAGISEL-NEXT: ; implicit-def: $vgpr0494; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)495; GFX8DAGISEL-NEXT: s_sub_i32 s3, 0, s6496; GFX8DAGISEL-NEXT: s_mul_i32 s2, s3, s2497; GFX8DAGISEL-NEXT: .LBB2_2: ; %Flow498; GFX8DAGISEL-NEXT: s_or_saveexec_b64 s[0:1], s[0:1]499; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s2500; GFX8DAGISEL-NEXT: s_xor_b64 exec, exec, s[0:1]501; GFX8DAGISEL-NEXT: s_cbranch_execz .LBB2_6502; GFX8DAGISEL-NEXT: ; %bb.3: ; %if503; GFX8DAGISEL-NEXT: s_mov_b64 s[2:3], exec504; GFX8DAGISEL-NEXT: s_mov_b32 s6, 0505; GFX8DAGISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1506; GFX8DAGISEL-NEXT: s_ff1_i32_b64 s7, s[2:3]507; GFX8DAGISEL-NEXT: v_readlane_b32 s8, v0, s7508; GFX8DAGISEL-NEXT: s_bitset0_b64 s[2:3], s7509; GFX8DAGISEL-NEXT: s_sub_i32 s6, s6, s8510; GFX8DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0511; GFX8DAGISEL-NEXT: s_cbranch_scc1 .LBB2_4512; GFX8DAGISEL-NEXT: ; %bb.5:513; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s6514; GFX8DAGISEL-NEXT: .LBB2_6: ; %endif515; GFX8DAGISEL-NEXT: s_or_b64 exec, exec, s[0:1]516; GFX8DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24517; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)518; GFX8DAGISEL-NEXT: v_mov_b32_e32 v3, s1519; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s0520; GFX8DAGISEL-NEXT: flat_store_dword v[2:3], v1521; GFX8DAGISEL-NEXT: s_endpgm522;523; GFX8GISEL-LABEL: divergent_cfg:524; GFX8GISEL: ; %bb.0: ; %entry525; GFX8GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v0526; GFX8GISEL-NEXT: ; implicit-def: $sgpr6527; GFX8GISEL-NEXT: s_and_saveexec_b64 s[0:1], vcc528; GFX8GISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]529; GFX8GISEL-NEXT: s_cbranch_execz .LBB2_2530; GFX8GISEL-NEXT: ; %bb.1: ; %else531; GFX8GISEL-NEXT: s_load_dword s6, s[4:5], 0x2c532; GFX8GISEL-NEXT: s_mov_b64 s[2:3], exec533; GFX8GISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]534; GFX8GISEL-NEXT: ; implicit-def: $vgpr0535; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)536; GFX8GISEL-NEXT: s_sub_i32 s3, 0, s6537; GFX8GISEL-NEXT: s_mul_i32 s6, s3, s2538; GFX8GISEL-NEXT: .LBB2_2: ; %Flow539; GFX8GISEL-NEXT: s_andn2_saveexec_b64 s[0:1], s[0:1]540; GFX8GISEL-NEXT: s_cbranch_execz .LBB2_5541; GFX8GISEL-NEXT: ; %bb.3: ; %if542; GFX8GISEL-NEXT: s_mov_b64 s[2:3], exec543; GFX8GISEL-NEXT: s_mov_b32 s6, 0544; GFX8GISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1545; GFX8GISEL-NEXT: s_ff1_i32_b64 s7, s[2:3]546; GFX8GISEL-NEXT: v_readlane_b32 s8, v0, s7547; GFX8GISEL-NEXT: s_bitset0_b64 s[2:3], s7548; GFX8GISEL-NEXT: s_sub_i32 s6, s6, s8549; GFX8GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0550; GFX8GISEL-NEXT: s_cbranch_scc1 .LBB2_4551; GFX8GISEL-NEXT: .LBB2_5: ; %endif552; GFX8GISEL-NEXT: s_or_b64 exec, exec, s[0:1]553; GFX8GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24554; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s6555; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)556; GFX8GISEL-NEXT: v_mov_b32_e32 v0, s0557; GFX8GISEL-NEXT: v_mov_b32_e32 v1, s1558; GFX8GISEL-NEXT: flat_store_dword v[0:1], v2559; GFX8GISEL-NEXT: s_endpgm560;561; GFX9DAGISEL-LABEL: divergent_cfg:562; GFX9DAGISEL: ; %bb.0: ; %entry563; GFX9DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v0564; GFX9DAGISEL-NEXT: ; implicit-def: $sgpr2565; GFX9DAGISEL-NEXT: s_and_saveexec_b64 s[0:1], vcc566; GFX9DAGISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]567; GFX9DAGISEL-NEXT: s_cbranch_execz .LBB2_2568; GFX9DAGISEL-NEXT: ; %bb.1: ; %else569; GFX9DAGISEL-NEXT: s_load_dword s6, s[4:5], 0x2c570; GFX9DAGISEL-NEXT: s_mov_b64 s[2:3], exec571; GFX9DAGISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]572; GFX9DAGISEL-NEXT: ; implicit-def: $vgpr0573; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)574; GFX9DAGISEL-NEXT: s_sub_i32 s3, 0, s6575; GFX9DAGISEL-NEXT: s_mul_i32 s2, s3, s2576; GFX9DAGISEL-NEXT: .LBB2_2: ; %Flow577; GFX9DAGISEL-NEXT: s_or_saveexec_b64 s[0:1], s[0:1]578; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, s2579; GFX9DAGISEL-NEXT: s_xor_b64 exec, exec, s[0:1]580; GFX9DAGISEL-NEXT: s_cbranch_execz .LBB2_6581; GFX9DAGISEL-NEXT: ; %bb.3: ; %if582; GFX9DAGISEL-NEXT: s_mov_b64 s[2:3], exec583; GFX9DAGISEL-NEXT: s_mov_b32 s6, 0584; GFX9DAGISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1585; GFX9DAGISEL-NEXT: s_ff1_i32_b64 s7, s[2:3]586; GFX9DAGISEL-NEXT: v_readlane_b32 s8, v0, s7587; GFX9DAGISEL-NEXT: s_bitset0_b64 s[2:3], s7588; GFX9DAGISEL-NEXT: s_sub_i32 s6, s6, s8589; GFX9DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0590; GFX9DAGISEL-NEXT: s_cbranch_scc1 .LBB2_4591; GFX9DAGISEL-NEXT: ; %bb.5:592; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, s6593; GFX9DAGISEL-NEXT: .LBB2_6: ; %endif594; GFX9DAGISEL-NEXT: s_or_b64 exec, exec, s[0:1]595; GFX9DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24596; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, 0597; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)598; GFX9DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]599; GFX9DAGISEL-NEXT: s_endpgm600;601; GFX9GISEL-LABEL: divergent_cfg:602; GFX9GISEL: ; %bb.0: ; %entry603; GFX9GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v0604; GFX9GISEL-NEXT: ; implicit-def: $sgpr6605; GFX9GISEL-NEXT: s_and_saveexec_b64 s[0:1], vcc606; GFX9GISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]607; GFX9GISEL-NEXT: s_cbranch_execz .LBB2_2608; GFX9GISEL-NEXT: ; %bb.1: ; %else609; GFX9GISEL-NEXT: s_load_dword s6, s[4:5], 0x2c610; GFX9GISEL-NEXT: s_mov_b64 s[2:3], exec611; GFX9GISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]612; GFX9GISEL-NEXT: ; implicit-def: $vgpr0613; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)614; GFX9GISEL-NEXT: s_sub_i32 s3, 0, s6615; GFX9GISEL-NEXT: s_mul_i32 s6, s3, s2616; GFX9GISEL-NEXT: .LBB2_2: ; %Flow617; GFX9GISEL-NEXT: s_andn2_saveexec_b64 s[0:1], s[0:1]618; GFX9GISEL-NEXT: s_cbranch_execz .LBB2_5619; GFX9GISEL-NEXT: ; %bb.3: ; %if620; GFX9GISEL-NEXT: s_mov_b64 s[2:3], exec621; GFX9GISEL-NEXT: s_mov_b32 s6, 0622; GFX9GISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1623; GFX9GISEL-NEXT: s_ff1_i32_b64 s7, s[2:3]624; GFX9GISEL-NEXT: v_readlane_b32 s8, v0, s7625; GFX9GISEL-NEXT: s_bitset0_b64 s[2:3], s7626; GFX9GISEL-NEXT: s_sub_i32 s6, s6, s8627; GFX9GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0628; GFX9GISEL-NEXT: s_cbranch_scc1 .LBB2_4629; GFX9GISEL-NEXT: .LBB2_5: ; %endif630; GFX9GISEL-NEXT: s_or_b64 exec, exec, s[0:1]631; GFX9GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24632; GFX9GISEL-NEXT: v_mov_b32_e32 v0, s6633; GFX9GISEL-NEXT: v_mov_b32_e32 v1, 0634; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)635; GFX9GISEL-NEXT: global_store_dword v1, v0, s[0:1]636; GFX9GISEL-NEXT: s_endpgm637;638; GFX1064DAGISEL-LABEL: divergent_cfg:639; GFX1064DAGISEL: ; %bb.0: ; %entry640; GFX1064DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v0641; GFX1064DAGISEL-NEXT: ; implicit-def: $sgpr2642; GFX1064DAGISEL-NEXT: s_and_saveexec_b64 s[0:1], vcc643; GFX1064DAGISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]644; GFX1064DAGISEL-NEXT: s_cbranch_execz .LBB2_2645; GFX1064DAGISEL-NEXT: ; %bb.1: ; %else646; GFX1064DAGISEL-NEXT: s_load_dword s6, s[4:5], 0x2c647; GFX1064DAGISEL-NEXT: s_mov_b64 s[2:3], exec648; GFX1064DAGISEL-NEXT: ; implicit-def: $vgpr0649; GFX1064DAGISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]650; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)651; GFX1064DAGISEL-NEXT: s_sub_i32 s3, 0, s6652; GFX1064DAGISEL-NEXT: s_mul_i32 s2, s3, s2653; GFX1064DAGISEL-NEXT: .LBB2_2: ; %Flow654; GFX1064DAGISEL-NEXT: s_or_saveexec_b64 s[0:1], s[0:1]655; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, s2656; GFX1064DAGISEL-NEXT: s_xor_b64 exec, exec, s[0:1]657; GFX1064DAGISEL-NEXT: s_cbranch_execz .LBB2_6658; GFX1064DAGISEL-NEXT: ; %bb.3: ; %if659; GFX1064DAGISEL-NEXT: s_mov_b64 s[2:3], exec660; GFX1064DAGISEL-NEXT: s_mov_b32 s6, 0661; GFX1064DAGISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1662; GFX1064DAGISEL-NEXT: s_ff1_i32_b64 s7, s[2:3]663; GFX1064DAGISEL-NEXT: v_readlane_b32 s8, v0, s7664; GFX1064DAGISEL-NEXT: s_bitset0_b64 s[2:3], s7665; GFX1064DAGISEL-NEXT: s_sub_i32 s6, s6, s8666; GFX1064DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0667; GFX1064DAGISEL-NEXT: s_cbranch_scc1 .LBB2_4668; GFX1064DAGISEL-NEXT: ; %bb.5:669; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, s6670; GFX1064DAGISEL-NEXT: .LBB2_6: ; %endif671; GFX1064DAGISEL-NEXT: s_or_b64 exec, exec, s[0:1]672; GFX1064DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24673; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, 0674; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)675; GFX1064DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]676; GFX1064DAGISEL-NEXT: s_endpgm677;678; GFX1064GISEL-LABEL: divergent_cfg:679; GFX1064GISEL: ; %bb.0: ; %entry680; GFX1064GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v0681; GFX1064GISEL-NEXT: ; implicit-def: $sgpr6682; GFX1064GISEL-NEXT: s_and_saveexec_b64 s[0:1], vcc683; GFX1064GISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]684; GFX1064GISEL-NEXT: s_cbranch_execz .LBB2_2685; GFX1064GISEL-NEXT: ; %bb.1: ; %else686; GFX1064GISEL-NEXT: s_load_dword s6, s[4:5], 0x2c687; GFX1064GISEL-NEXT: s_mov_b64 s[2:3], exec688; GFX1064GISEL-NEXT: ; implicit-def: $vgpr0689; GFX1064GISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]690; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)691; GFX1064GISEL-NEXT: s_sub_i32 s3, 0, s6692; GFX1064GISEL-NEXT: s_mul_i32 s6, s3, s2693; GFX1064GISEL-NEXT: .LBB2_2: ; %Flow694; GFX1064GISEL-NEXT: s_andn2_saveexec_b64 s[0:1], s[0:1]695; GFX1064GISEL-NEXT: s_cbranch_execz .LBB2_5696; GFX1064GISEL-NEXT: ; %bb.3: ; %if697; GFX1064GISEL-NEXT: s_mov_b64 s[2:3], exec698; GFX1064GISEL-NEXT: s_mov_b32 s6, 0699; GFX1064GISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1700; GFX1064GISEL-NEXT: s_ff1_i32_b64 s7, s[2:3]701; GFX1064GISEL-NEXT: v_readlane_b32 s8, v0, s7702; GFX1064GISEL-NEXT: s_bitset0_b64 s[2:3], s7703; GFX1064GISEL-NEXT: s_sub_i32 s6, s6, s8704; GFX1064GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0705; GFX1064GISEL-NEXT: s_cbranch_scc1 .LBB2_4706; GFX1064GISEL-NEXT: .LBB2_5: ; %endif707; GFX1064GISEL-NEXT: s_or_b64 exec, exec, s[0:1]708; GFX1064GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24709; GFX1064GISEL-NEXT: v_mov_b32_e32 v0, s6710; GFX1064GISEL-NEXT: v_mov_b32_e32 v1, 0711; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)712; GFX1064GISEL-NEXT: global_store_dword v1, v0, s[0:1]713; GFX1064GISEL-NEXT: s_endpgm714;715; GFX1032DAGISEL-LABEL: divergent_cfg:716; GFX1032DAGISEL: ; %bb.0: ; %entry717; GFX1032DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc_lo, 15, v0718; GFX1032DAGISEL-NEXT: ; implicit-def: $sgpr1719; GFX1032DAGISEL-NEXT: s_and_saveexec_b32 s0, vcc_lo720; GFX1032DAGISEL-NEXT: s_xor_b32 s0, exec_lo, s0721; GFX1032DAGISEL-NEXT: s_cbranch_execz .LBB2_2722; GFX1032DAGISEL-NEXT: ; %bb.1: ; %else723; GFX1032DAGISEL-NEXT: s_load_dword s1, s[4:5], 0x2c724; GFX1032DAGISEL-NEXT: s_mov_b32 s2, exec_lo725; GFX1032DAGISEL-NEXT: ; implicit-def: $vgpr0726; GFX1032DAGISEL-NEXT: s_bcnt1_i32_b32 s2, s2727; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)728; GFX1032DAGISEL-NEXT: s_sub_i32 s1, 0, s1729; GFX1032DAGISEL-NEXT: s_mul_i32 s1, s1, s2730; GFX1032DAGISEL-NEXT: .LBB2_2: ; %Flow731; GFX1032DAGISEL-NEXT: s_or_saveexec_b32 s0, s0732; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, s1733; GFX1032DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s0734; GFX1032DAGISEL-NEXT: s_cbranch_execz .LBB2_6735; GFX1032DAGISEL-NEXT: ; %bb.3: ; %if736; GFX1032DAGISEL-NEXT: s_mov_b32 s2, exec_lo737; GFX1032DAGISEL-NEXT: s_mov_b32 s1, 0738; GFX1032DAGISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1739; GFX1032DAGISEL-NEXT: s_ff1_i32_b32 s3, s2740; GFX1032DAGISEL-NEXT: v_readlane_b32 s6, v0, s3741; GFX1032DAGISEL-NEXT: s_bitset0_b32 s2, s3742; GFX1032DAGISEL-NEXT: s_sub_i32 s1, s1, s6743; GFX1032DAGISEL-NEXT: s_cmp_lg_u32 s2, 0744; GFX1032DAGISEL-NEXT: s_cbranch_scc1 .LBB2_4745; GFX1032DAGISEL-NEXT: ; %bb.5:746; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, s1747; GFX1032DAGISEL-NEXT: .LBB2_6: ; %endif748; GFX1032DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s0749; GFX1032DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24750; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, 0751; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)752; GFX1032DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]753; GFX1032DAGISEL-NEXT: s_endpgm754;755; GFX1032GISEL-LABEL: divergent_cfg:756; GFX1032GISEL: ; %bb.0: ; %entry757; GFX1032GISEL-NEXT: v_cmp_le_u32_e32 vcc_lo, 16, v0758; GFX1032GISEL-NEXT: ; implicit-def: $sgpr0759; GFX1032GISEL-NEXT: s_and_saveexec_b32 s1, vcc_lo760; GFX1032GISEL-NEXT: s_xor_b32 s1, exec_lo, s1761; GFX1032GISEL-NEXT: s_cbranch_execz .LBB2_2762; GFX1032GISEL-NEXT: ; %bb.1: ; %else763; GFX1032GISEL-NEXT: s_load_dword s0, s[4:5], 0x2c764; GFX1032GISEL-NEXT: s_mov_b32 s2, exec_lo765; GFX1032GISEL-NEXT: ; implicit-def: $vgpr0766; GFX1032GISEL-NEXT: s_bcnt1_i32_b32 s2, s2767; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)768; GFX1032GISEL-NEXT: s_sub_i32 s0, 0, s0769; GFX1032GISEL-NEXT: s_mul_i32 s0, s0, s2770; GFX1032GISEL-NEXT: .LBB2_2: ; %Flow771; GFX1032GISEL-NEXT: s_andn2_saveexec_b32 s1, s1772; GFX1032GISEL-NEXT: s_cbranch_execz .LBB2_5773; GFX1032GISEL-NEXT: ; %bb.3: ; %if774; GFX1032GISEL-NEXT: s_mov_b32 s2, exec_lo775; GFX1032GISEL-NEXT: s_mov_b32 s0, 0776; GFX1032GISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1777; GFX1032GISEL-NEXT: s_ff1_i32_b32 s3, s2778; GFX1032GISEL-NEXT: v_readlane_b32 s6, v0, s3779; GFX1032GISEL-NEXT: s_bitset0_b32 s2, s3780; GFX1032GISEL-NEXT: s_sub_i32 s0, s0, s6781; GFX1032GISEL-NEXT: s_cmp_lg_u32 s2, 0782; GFX1032GISEL-NEXT: s_cbranch_scc1 .LBB2_4783; GFX1032GISEL-NEXT: .LBB2_5: ; %endif784; GFX1032GISEL-NEXT: s_or_b32 exec_lo, exec_lo, s1785; GFX1032GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x24786; GFX1032GISEL-NEXT: v_mov_b32_e32 v0, s0787; GFX1032GISEL-NEXT: v_mov_b32_e32 v1, 0788; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)789; GFX1032GISEL-NEXT: global_store_dword v1, v0, s[2:3]790; GFX1032GISEL-NEXT: s_endpgm791;792; GFX1164DAGISEL-LABEL: divergent_cfg:793; GFX1164DAGISEL: ; %bb.0: ; %entry794; GFX1164DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0795; GFX1164DAGISEL-NEXT: s_mov_b64 s[0:1], exec796; GFX1164DAGISEL-NEXT: ; implicit-def: $sgpr2797; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)798; GFX1164DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v0799; GFX1164DAGISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]800; GFX1164DAGISEL-NEXT: s_cbranch_execz .LBB2_2801; GFX1164DAGISEL-NEXT: ; %bb.1: ; %else802; GFX1164DAGISEL-NEXT: s_load_b32 s6, s[4:5], 0x2c803; GFX1164DAGISEL-NEXT: s_mov_b64 s[2:3], exec804; GFX1164DAGISEL-NEXT: ; implicit-def: $vgpr0805; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)806; GFX1164DAGISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]807; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)808; GFX1164DAGISEL-NEXT: s_sub_i32 s3, 0, s6809; GFX1164DAGISEL-NEXT: s_mul_i32 s2, s3, s2810; GFX1164DAGISEL-NEXT: .LBB2_2: ; %Flow811; GFX1164DAGISEL-NEXT: s_or_saveexec_b64 s[0:1], s[0:1]812; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s2813; GFX1164DAGISEL-NEXT: s_xor_b64 exec, exec, s[0:1]814; GFX1164DAGISEL-NEXT: s_cbranch_execz .LBB2_6815; GFX1164DAGISEL-NEXT: ; %bb.3: ; %if816; GFX1164DAGISEL-NEXT: s_mov_b64 s[2:3], exec817; GFX1164DAGISEL-NEXT: s_mov_b32 s6, 0818; GFX1164DAGISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1819; GFX1164DAGISEL-NEXT: s_ctz_i32_b64 s7, s[2:3]820; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)821; GFX1164DAGISEL-NEXT: v_readlane_b32 s8, v0, s7822; GFX1164DAGISEL-NEXT: s_bitset0_b64 s[2:3], s7823; GFX1164DAGISEL-NEXT: s_sub_i32 s6, s6, s8824; GFX1164DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0825; GFX1164DAGISEL-NEXT: s_cbranch_scc1 .LBB2_4826; GFX1164DAGISEL-NEXT: ; %bb.5:827; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s6828; GFX1164DAGISEL-NEXT: .LBB2_6: ; %endif829; GFX1164DAGISEL-NEXT: s_or_b64 exec, exec, s[0:1]830; GFX1164DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24831; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, 0832; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)833; GFX1164DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]834; GFX1164DAGISEL-NEXT: s_endpgm835;836; GFX1164GISEL-LABEL: divergent_cfg:837; GFX1164GISEL: ; %bb.0: ; %entry838; GFX1164GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0839; GFX1164GISEL-NEXT: s_mov_b64 s[0:1], exec840; GFX1164GISEL-NEXT: ; implicit-def: $sgpr6841; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)842; GFX1164GISEL-NEXT: v_cmpx_le_u32_e32 16, v0843; GFX1164GISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]844; GFX1164GISEL-NEXT: s_cbranch_execz .LBB2_2845; GFX1164GISEL-NEXT: ; %bb.1: ; %else846; GFX1164GISEL-NEXT: s_load_b32 s6, s[4:5], 0x2c847; GFX1164GISEL-NEXT: s_mov_b64 s[2:3], exec848; GFX1164GISEL-NEXT: ; implicit-def: $vgpr0849; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)850; GFX1164GISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]851; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)852; GFX1164GISEL-NEXT: s_sub_i32 s3, 0, s6853; GFX1164GISEL-NEXT: s_mul_i32 s6, s3, s2854; GFX1164GISEL-NEXT: .LBB2_2: ; %Flow855; GFX1164GISEL-NEXT: s_and_not1_saveexec_b64 s[0:1], s[0:1]856; GFX1164GISEL-NEXT: s_cbranch_execz .LBB2_5857; GFX1164GISEL-NEXT: ; %bb.3: ; %if858; GFX1164GISEL-NEXT: s_mov_b64 s[2:3], exec859; GFX1164GISEL-NEXT: s_mov_b32 s6, 0860; GFX1164GISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1861; GFX1164GISEL-NEXT: s_ctz_i32_b64 s7, s[2:3]862; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)863; GFX1164GISEL-NEXT: v_readlane_b32 s8, v0, s7864; GFX1164GISEL-NEXT: s_bitset0_b64 s[2:3], s7865; GFX1164GISEL-NEXT: s_sub_i32 s6, s6, s8866; GFX1164GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0867; GFX1164GISEL-NEXT: s_cbranch_scc1 .LBB2_4868; GFX1164GISEL-NEXT: .LBB2_5: ; %endif869; GFX1164GISEL-NEXT: s_or_b64 exec, exec, s[0:1]870; GFX1164GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24871; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, s6872; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, 0873; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)874; GFX1164GISEL-NEXT: global_store_b32 v1, v0, s[0:1]875; GFX1164GISEL-NEXT: s_endpgm876;877; GFX1132DAGISEL-LABEL: divergent_cfg:878; GFX1132DAGISEL: ; %bb.0: ; %entry879; GFX1132DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0880; GFX1132DAGISEL-NEXT: s_mov_b32 s0, exec_lo881; GFX1132DAGISEL-NEXT: ; implicit-def: $sgpr1882; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)883; GFX1132DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v0884; GFX1132DAGISEL-NEXT: s_xor_b32 s0, exec_lo, s0885; GFX1132DAGISEL-NEXT: s_cbranch_execz .LBB2_2886; GFX1132DAGISEL-NEXT: ; %bb.1: ; %else887; GFX1132DAGISEL-NEXT: s_load_b32 s1, s[4:5], 0x2c888; GFX1132DAGISEL-NEXT: s_mov_b32 s2, exec_lo889; GFX1132DAGISEL-NEXT: ; implicit-def: $vgpr0890; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)891; GFX1132DAGISEL-NEXT: s_bcnt1_i32_b32 s2, s2892; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)893; GFX1132DAGISEL-NEXT: s_sub_i32 s1, 0, s1894; GFX1132DAGISEL-NEXT: s_mul_i32 s1, s1, s2895; GFX1132DAGISEL-NEXT: .LBB2_2: ; %Flow896; GFX1132DAGISEL-NEXT: s_or_saveexec_b32 s0, s0897; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v1, s1898; GFX1132DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s0899; GFX1132DAGISEL-NEXT: s_cbranch_execz .LBB2_6900; GFX1132DAGISEL-NEXT: ; %bb.3: ; %if901; GFX1132DAGISEL-NEXT: s_mov_b32 s2, exec_lo902; GFX1132DAGISEL-NEXT: s_mov_b32 s1, 0903; GFX1132DAGISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1904; GFX1132DAGISEL-NEXT: s_ctz_i32_b32 s3, s2905; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)906; GFX1132DAGISEL-NEXT: v_readlane_b32 s6, v0, s3907; GFX1132DAGISEL-NEXT: s_bitset0_b32 s2, s3908; GFX1132DAGISEL-NEXT: s_sub_i32 s1, s1, s6909; GFX1132DAGISEL-NEXT: s_cmp_lg_u32 s2, 0910; GFX1132DAGISEL-NEXT: s_cbranch_scc1 .LBB2_4911; GFX1132DAGISEL-NEXT: ; %bb.5:912; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v1, s1913; GFX1132DAGISEL-NEXT: .LBB2_6: ; %endif914; GFX1132DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s0915; GFX1132DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24916; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v0, 0917; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)918; GFX1132DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]919; GFX1132DAGISEL-NEXT: s_endpgm920;921; GFX1132GISEL-LABEL: divergent_cfg:922; GFX1132GISEL: ; %bb.0: ; %entry923; GFX1132GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0924; GFX1132GISEL-NEXT: s_mov_b32 s1, exec_lo925; GFX1132GISEL-NEXT: ; implicit-def: $sgpr0926; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)927; GFX1132GISEL-NEXT: v_cmpx_le_u32_e32 16, v0928; GFX1132GISEL-NEXT: s_xor_b32 s1, exec_lo, s1929; GFX1132GISEL-NEXT: s_cbranch_execz .LBB2_2930; GFX1132GISEL-NEXT: ; %bb.1: ; %else931; GFX1132GISEL-NEXT: s_load_b32 s0, s[4:5], 0x2c932; GFX1132GISEL-NEXT: s_mov_b32 s2, exec_lo933; GFX1132GISEL-NEXT: ; implicit-def: $vgpr0934; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)935; GFX1132GISEL-NEXT: s_bcnt1_i32_b32 s2, s2936; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)937; GFX1132GISEL-NEXT: s_sub_i32 s0, 0, s0938; GFX1132GISEL-NEXT: s_mul_i32 s0, s0, s2939; GFX1132GISEL-NEXT: .LBB2_2: ; %Flow940; GFX1132GISEL-NEXT: s_and_not1_saveexec_b32 s1, s1941; GFX1132GISEL-NEXT: s_cbranch_execz .LBB2_5942; GFX1132GISEL-NEXT: ; %bb.3: ; %if943; GFX1132GISEL-NEXT: s_mov_b32 s2, exec_lo944; GFX1132GISEL-NEXT: s_mov_b32 s0, 0945; GFX1132GISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1946; GFX1132GISEL-NEXT: s_ctz_i32_b32 s3, s2947; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)948; GFX1132GISEL-NEXT: v_readlane_b32 s6, v0, s3949; GFX1132GISEL-NEXT: s_bitset0_b32 s2, s3950; GFX1132GISEL-NEXT: s_sub_i32 s0, s0, s6951; GFX1132GISEL-NEXT: s_cmp_lg_u32 s2, 0952; GFX1132GISEL-NEXT: s_cbranch_scc1 .LBB2_4953; GFX1132GISEL-NEXT: .LBB2_5: ; %endif954; GFX1132GISEL-NEXT: s_or_b32 exec_lo, exec_lo, s1955; GFX1132GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x24956; GFX1132GISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, 0957; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)958; GFX1132GISEL-NEXT: global_store_b32 v1, v0, s[2:3]959; GFX1132GISEL-NEXT: s_endpgm960;961; GFX12DAGISEL-LABEL: divergent_cfg:962; GFX12DAGISEL: ; %bb.0: ; %entry963; GFX12DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0964; GFX12DAGISEL-NEXT: s_mov_b32 s0, exec_lo965; GFX12DAGISEL-NEXT: ; implicit-def: $sgpr1966; GFX12DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)967; GFX12DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v0968; GFX12DAGISEL-NEXT: s_xor_b32 s0, exec_lo, s0969; GFX12DAGISEL-NEXT: s_cbranch_execz .LBB2_2970; GFX12DAGISEL-NEXT: ; %bb.1: ; %else971; GFX12DAGISEL-NEXT: s_load_b32 s1, s[4:5], 0x2c972; GFX12DAGISEL-NEXT: s_mov_b32 s2, exec_lo973; GFX12DAGISEL-NEXT: ; implicit-def: $vgpr0974; GFX12DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)975; GFX12DAGISEL-NEXT: s_bcnt1_i32_b32 s2, s2976; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x0977; GFX12DAGISEL-NEXT: s_sub_co_i32 s1, 0, s1978; GFX12DAGISEL-NEXT: s_mul_i32 s1, s1, s2979; GFX12DAGISEL-NEXT: .LBB2_2: ; %Flow980; GFX12DAGISEL-NEXT: s_or_saveexec_b32 s0, s0981; GFX12DAGISEL-NEXT: v_mov_b32_e32 v1, s1982; GFX12DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s0983; GFX12DAGISEL-NEXT: s_cbranch_execz .LBB2_6984; GFX12DAGISEL-NEXT: ; %bb.3: ; %if985; GFX12DAGISEL-NEXT: s_mov_b32 s2, exec_lo986; GFX12DAGISEL-NEXT: s_mov_b32 s1, 0987; GFX12DAGISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1988; GFX12DAGISEL-NEXT: s_ctz_i32_b32 s3, s2989; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)990; GFX12DAGISEL-NEXT: v_readlane_b32 s6, v0, s3991; GFX12DAGISEL-NEXT: s_bitset0_b32 s2, s3992; GFX12DAGISEL-NEXT: s_sub_co_i32 s1, s1, s6993; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)994; GFX12DAGISEL-NEXT: s_cmp_lg_u32 s2, 0995; GFX12DAGISEL-NEXT: s_cbranch_scc1 .LBB2_4996; GFX12DAGISEL-NEXT: ; %bb.5:997; GFX12DAGISEL-NEXT: v_mov_b32_e32 v1, s1998; GFX12DAGISEL-NEXT: .LBB2_6: ; %endif999; GFX12DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s01000; GFX12DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x241001; GFX12DAGISEL-NEXT: v_mov_b32_e32 v0, 01002; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x01003; GFX12DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]1004; GFX12DAGISEL-NEXT: s_endpgm1005entry:1006 %tid = call i32 @llvm.amdgcn.workitem.id.x()1007 %d_cmp = icmp ult i32 %tid, 161008 br i1 %d_cmp, label %if, label %else1009 1010if:1011 %reducedValTid = call i32 @llvm.amdgcn.wave.reduce.sub.i32(i32 %tid, i32 1)1012 br label %endif1013 1014else:1015 %reducedValIn = call i32 @llvm.amdgcn.wave.reduce.sub.i32(i32 %in, i32 1)1016 br label %endif1017 1018endif:1019 %combine = phi i32 [%reducedValTid, %if], [%reducedValIn, %else]1020 store i32 %combine, ptr addrspace(1) %out1021 ret void1022}1023 1024define amdgpu_kernel void @uniform_value_i64(ptr addrspace(1) %out, i64 %in) {1025; GFX8DAGISEL-LABEL: uniform_value_i64:1026; GFX8DAGISEL: ; %bb.0: ; %entry1027; GFX8DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241028; GFX8DAGISEL-NEXT: s_mov_b64 s[4:5], exec1029; GFX8DAGISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1030; GFX8DAGISEL-NEXT: s_sub_i32 s4, 0, s41031; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1032; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s01033; GFX8DAGISEL-NEXT: s_ashr_i32 s0, s4, 311034; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s11035; GFX8DAGISEL-NEXT: s_mul_i32 s1, s2, s01036; GFX8DAGISEL-NEXT: s_mul_i32 s0, s2, s41037; GFX8DAGISEL-NEXT: s_mul_hi_u32 s2, s2, s41038; GFX8DAGISEL-NEXT: s_mul_i32 s3, s3, s41039; GFX8DAGISEL-NEXT: s_add_u32 s2, s2, s31040; GFX8DAGISEL-NEXT: s_add_u32 s1, s2, s11041; GFX8DAGISEL-NEXT: v_mov_b32_e32 v3, s11042; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s01043; GFX8DAGISEL-NEXT: flat_store_dwordx2 v[0:1], v[2:3]1044; GFX8DAGISEL-NEXT: s_endpgm1045;1046; GFX8GISEL-LABEL: uniform_value_i64:1047; GFX8GISEL: ; %bb.0: ; %entry1048; GFX8GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241049; GFX8GISEL-NEXT: s_mov_b64 s[4:5], exec1050; GFX8GISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1051; GFX8GISEL-NEXT: s_sub_i32 s5, 0, s41052; GFX8GISEL-NEXT: s_ashr_i32 s4, s5, 311053; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)1054; GFX8GISEL-NEXT: s_mul_i32 s6, s2, s41055; GFX8GISEL-NEXT: s_mul_i32 s4, s2, s51056; GFX8GISEL-NEXT: s_mul_hi_u32 s2, s2, s51057; GFX8GISEL-NEXT: s_mul_i32 s3, s3, s51058; GFX8GISEL-NEXT: s_add_u32 s2, s2, s31059; GFX8GISEL-NEXT: s_add_u32 s5, s2, s61060; GFX8GISEL-NEXT: v_mov_b32_e32 v0, s41061; GFX8GISEL-NEXT: v_mov_b32_e32 v3, s11062; GFX8GISEL-NEXT: v_mov_b32_e32 v1, s51063; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s01064; GFX8GISEL-NEXT: flat_store_dwordx2 v[2:3], v[0:1]1065; GFX8GISEL-NEXT: s_endpgm1066;1067; GFX9DAGISEL-LABEL: uniform_value_i64:1068; GFX9DAGISEL: ; %bb.0: ; %entry1069; GFX9DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241070; GFX9DAGISEL-NEXT: s_mov_b64 s[4:5], exec1071; GFX9DAGISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1072; GFX9DAGISEL-NEXT: s_sub_i32 s5, 0, s41073; GFX9DAGISEL-NEXT: s_ashr_i32 s4, s5, 311074; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1075; GFX9DAGISEL-NEXT: s_mul_i32 s6, s2, s41076; GFX9DAGISEL-NEXT: s_mul_i32 s4, s2, s51077; GFX9DAGISEL-NEXT: s_mul_hi_u32 s2, s2, s51078; GFX9DAGISEL-NEXT: s_mul_i32 s3, s3, s51079; GFX9DAGISEL-NEXT: s_add_u32 s2, s2, s31080; GFX9DAGISEL-NEXT: s_add_u32 s5, s2, s61081; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, s41082; GFX9DAGISEL-NEXT: v_mov_b32_e32 v2, 01083; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, s51084; GFX9DAGISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1085; GFX9DAGISEL-NEXT: s_endpgm1086;1087; GFX9GISEL-LABEL: uniform_value_i64:1088; GFX9GISEL: ; %bb.0: ; %entry1089; GFX9GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241090; GFX9GISEL-NEXT: s_mov_b64 s[4:5], exec1091; GFX9GISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1092; GFX9GISEL-NEXT: s_sub_i32 s5, 0, s41093; GFX9GISEL-NEXT: s_ashr_i32 s4, s5, 311094; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)1095; GFX9GISEL-NEXT: s_mul_i32 s6, s2, s41096; GFX9GISEL-NEXT: s_mul_i32 s4, s2, s51097; GFX9GISEL-NEXT: s_mul_hi_u32 s2, s2, s51098; GFX9GISEL-NEXT: s_mul_i32 s3, s3, s51099; GFX9GISEL-NEXT: s_add_u32 s2, s2, s31100; GFX9GISEL-NEXT: s_add_u32 s5, s2, s61101; GFX9GISEL-NEXT: v_mov_b32_e32 v0, s41102; GFX9GISEL-NEXT: v_mov_b32_e32 v1, s51103; GFX9GISEL-NEXT: v_mov_b32_e32 v2, 01104; GFX9GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1105; GFX9GISEL-NEXT: s_endpgm1106;1107; GFX1064DAGISEL-LABEL: uniform_value_i64:1108; GFX1064DAGISEL: ; %bb.0: ; %entry1109; GFX1064DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241110; GFX1064DAGISEL-NEXT: s_mov_b64 s[4:5], exec1111; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v2, 01112; GFX1064DAGISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1113; GFX1064DAGISEL-NEXT: s_sub_i32 s4, 0, s41114; GFX1064DAGISEL-NEXT: s_ashr_i32 s5, s4, 311115; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1116; GFX1064DAGISEL-NEXT: s_mul_hi_u32 s6, s2, s41117; GFX1064DAGISEL-NEXT: s_mul_i32 s3, s3, s41118; GFX1064DAGISEL-NEXT: s_mul_i32 s5, s2, s51119; GFX1064DAGISEL-NEXT: s_add_u32 s3, s6, s31120; GFX1064DAGISEL-NEXT: s_mul_i32 s2, s2, s41121; GFX1064DAGISEL-NEXT: s_add_u32 s3, s3, s51122; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, s21123; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, s31124; GFX1064DAGISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1125; GFX1064DAGISEL-NEXT: s_endpgm1126;1127; GFX1064GISEL-LABEL: uniform_value_i64:1128; GFX1064GISEL: ; %bb.0: ; %entry1129; GFX1064GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241130; GFX1064GISEL-NEXT: s_mov_b64 s[4:5], exec1131; GFX1064GISEL-NEXT: v_mov_b32_e32 v2, 01132; GFX1064GISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1133; GFX1064GISEL-NEXT: s_sub_i32 s4, 0, s41134; GFX1064GISEL-NEXT: s_ashr_i32 s5, s4, 311135; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)1136; GFX1064GISEL-NEXT: s_mul_hi_u32 s6, s2, s41137; GFX1064GISEL-NEXT: s_mul_i32 s3, s3, s41138; GFX1064GISEL-NEXT: s_mul_i32 s5, s2, s51139; GFX1064GISEL-NEXT: s_add_u32 s3, s6, s31140; GFX1064GISEL-NEXT: s_mul_i32 s2, s2, s41141; GFX1064GISEL-NEXT: s_add_u32 s3, s3, s51142; GFX1064GISEL-NEXT: v_mov_b32_e32 v0, s21143; GFX1064GISEL-NEXT: v_mov_b32_e32 v1, s31144; GFX1064GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1145; GFX1064GISEL-NEXT: s_endpgm1146;1147; GFX1032DAGISEL-LABEL: uniform_value_i64:1148; GFX1032DAGISEL: ; %bb.0: ; %entry1149; GFX1032DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241150; GFX1032DAGISEL-NEXT: s_mov_b32 s4, exec_lo1151; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v2, 01152; GFX1032DAGISEL-NEXT: s_bcnt1_i32_b32 s4, s41153; GFX1032DAGISEL-NEXT: s_sub_i32 s4, 0, s41154; GFX1032DAGISEL-NEXT: s_ashr_i32 s5, s4, 311155; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1156; GFX1032DAGISEL-NEXT: s_mul_hi_u32 s6, s2, s41157; GFX1032DAGISEL-NEXT: s_mul_i32 s3, s3, s41158; GFX1032DAGISEL-NEXT: s_mul_i32 s5, s2, s51159; GFX1032DAGISEL-NEXT: s_add_u32 s3, s6, s31160; GFX1032DAGISEL-NEXT: s_mul_i32 s2, s2, s41161; GFX1032DAGISEL-NEXT: s_add_u32 s3, s3, s51162; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, s21163; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, s31164; GFX1032DAGISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1165; GFX1032DAGISEL-NEXT: s_endpgm1166;1167; GFX1032GISEL-LABEL: uniform_value_i64:1168; GFX1032GISEL: ; %bb.0: ; %entry1169; GFX1032GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241170; GFX1032GISEL-NEXT: s_mov_b32 s4, exec_lo1171; GFX1032GISEL-NEXT: v_mov_b32_e32 v2, 01172; GFX1032GISEL-NEXT: s_bcnt1_i32_b32 s4, s41173; GFX1032GISEL-NEXT: s_sub_i32 s4, 0, s41174; GFX1032GISEL-NEXT: s_ashr_i32 s5, s4, 311175; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)1176; GFX1032GISEL-NEXT: s_mul_hi_u32 s6, s2, s41177; GFX1032GISEL-NEXT: s_mul_i32 s3, s3, s41178; GFX1032GISEL-NEXT: s_mul_i32 s5, s2, s51179; GFX1032GISEL-NEXT: s_add_u32 s3, s6, s31180; GFX1032GISEL-NEXT: s_mul_i32 s2, s2, s41181; GFX1032GISEL-NEXT: s_add_u32 s3, s3, s51182; GFX1032GISEL-NEXT: v_mov_b32_e32 v0, s21183; GFX1032GISEL-NEXT: v_mov_b32_e32 v1, s31184; GFX1032GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1185; GFX1032GISEL-NEXT: s_endpgm1186;1187; GFX1164DAGISEL-LABEL: uniform_value_i64:1188; GFX1164DAGISEL: ; %bb.0: ; %entry1189; GFX1164DAGISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241190; GFX1164DAGISEL-NEXT: s_mov_b64 s[4:5], exec1191; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v2, 01192; GFX1164DAGISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1193; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1194; GFX1164DAGISEL-NEXT: s_sub_i32 s4, 0, s41195; GFX1164DAGISEL-NEXT: s_ashr_i32 s5, s4, 311196; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1197; GFX1164DAGISEL-NEXT: s_mul_hi_u32 s6, s2, s41198; GFX1164DAGISEL-NEXT: s_mul_i32 s3, s3, s41199; GFX1164DAGISEL-NEXT: s_mul_i32 s5, s2, s51200; GFX1164DAGISEL-NEXT: s_add_u32 s3, s6, s31201; GFX1164DAGISEL-NEXT: s_mul_i32 s2, s2, s41202; GFX1164DAGISEL-NEXT: s_add_u32 s3, s3, s51203; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, s21204; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s31205; GFX1164DAGISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1206; GFX1164DAGISEL-NEXT: s_endpgm1207;1208; GFX1164GISEL-LABEL: uniform_value_i64:1209; GFX1164GISEL: ; %bb.0: ; %entry1210; GFX1164GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241211; GFX1164GISEL-NEXT: s_mov_b64 s[4:5], exec1212; GFX1164GISEL-NEXT: v_mov_b32_e32 v2, 01213; GFX1164GISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1214; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1215; GFX1164GISEL-NEXT: s_sub_i32 s4, 0, s41216; GFX1164GISEL-NEXT: s_ashr_i32 s5, s4, 311217; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)1218; GFX1164GISEL-NEXT: s_mul_hi_u32 s6, s2, s41219; GFX1164GISEL-NEXT: s_mul_i32 s3, s3, s41220; GFX1164GISEL-NEXT: s_mul_i32 s5, s2, s51221; GFX1164GISEL-NEXT: s_add_u32 s3, s6, s31222; GFX1164GISEL-NEXT: s_mul_i32 s2, s2, s41223; GFX1164GISEL-NEXT: s_add_u32 s3, s3, s51224; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, s21225; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, s31226; GFX1164GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1227; GFX1164GISEL-NEXT: s_endpgm1228;1229; GFX1132DAGISEL-LABEL: uniform_value_i64:1230; GFX1132DAGISEL: ; %bb.0: ; %entry1231; GFX1132DAGISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241232; GFX1132DAGISEL-NEXT: s_mov_b32 s4, exec_lo1233; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1234; GFX1132DAGISEL-NEXT: s_bcnt1_i32_b32 s4, s41235; GFX1132DAGISEL-NEXT: s_sub_i32 s4, 0, s41236; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1237; GFX1132DAGISEL-NEXT: s_ashr_i32 s5, s4, 311238; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1239; GFX1132DAGISEL-NEXT: s_mul_hi_u32 s6, s2, s41240; GFX1132DAGISEL-NEXT: s_mul_i32 s3, s3, s41241; GFX1132DAGISEL-NEXT: s_mul_i32 s5, s2, s51242; GFX1132DAGISEL-NEXT: s_add_u32 s3, s6, s31243; GFX1132DAGISEL-NEXT: s_mul_i32 s2, s2, s41244; GFX1132DAGISEL-NEXT: s_add_u32 s3, s3, s51245; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v0, s21246; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s31247; GFX1132DAGISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1248; GFX1132DAGISEL-NEXT: s_endpgm1249;1250; GFX1132GISEL-LABEL: uniform_value_i64:1251; GFX1132GISEL: ; %bb.0: ; %entry1252; GFX1132GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241253; GFX1132GISEL-NEXT: s_mov_b32 s4, exec_lo1254; GFX1132GISEL-NEXT: v_mov_b32_e32 v2, 01255; GFX1132GISEL-NEXT: s_bcnt1_i32_b32 s4, s41256; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1257; GFX1132GISEL-NEXT: s_sub_i32 s4, 0, s41258; GFX1132GISEL-NEXT: s_ashr_i32 s5, s4, 311259; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)1260; GFX1132GISEL-NEXT: s_mul_hi_u32 s6, s2, s41261; GFX1132GISEL-NEXT: s_mul_i32 s3, s3, s41262; GFX1132GISEL-NEXT: s_mul_i32 s5, s2, s51263; GFX1132GISEL-NEXT: s_add_u32 s3, s6, s31264; GFX1132GISEL-NEXT: s_mul_i32 s2, s2, s41265; GFX1132GISEL-NEXT: s_add_u32 s3, s3, s51266; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1267; GFX1132GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s31268; GFX1132GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1269; GFX1132GISEL-NEXT: s_endpgm1270;1271; GFX12DAGISEL-LABEL: uniform_value_i64:1272; GFX12DAGISEL: ; %bb.0: ; %entry1273; GFX12DAGISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241274; GFX12DAGISEL-NEXT: s_mov_b32 s4, exec_lo1275; GFX12DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1276; GFX12DAGISEL-NEXT: s_bcnt1_i32_b32 s4, s41277; GFX12DAGISEL-NEXT: s_sub_co_i32 s4, 0, s41278; GFX12DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1279; GFX12DAGISEL-NEXT: s_ashr_i32 s5, s4, 311280; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x01281; GFX12DAGISEL-NEXT: s_mul_hi_u32 s6, s2, s41282; GFX12DAGISEL-NEXT: s_mul_i32 s3, s3, s41283; GFX12DAGISEL-NEXT: s_mul_i32 s5, s2, s51284; GFX12DAGISEL-NEXT: s_add_co_u32 s3, s6, s31285; GFX12DAGISEL-NEXT: s_mul_i32 s2, s2, s41286; GFX12DAGISEL-NEXT: s_add_co_u32 s3, s3, s51287; GFX12DAGISEL-NEXT: v_mov_b32_e32 v0, s21288; GFX12DAGISEL-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s31289; GFX12DAGISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1290; GFX12DAGISEL-NEXT: s_endpgm1291entry:1292 %result = call i64 @llvm.amdgcn.wave.reduce.sub.i64(i64 %in, i32 1)1293 store i64 %result, ptr addrspace(1) %out1294 ret void1295}1296 1297define void @divergent_value_i64(ptr addrspace(1) %out, i64 %id.x) {1298; GFX8DAGISEL-LABEL: divergent_value_i64:1299; GFX8DAGISEL: ; %bb.0: ; %entry1300; GFX8DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1301; GFX8DAGISEL-NEXT: s_mov_b64 s[4:5], 01302; GFX8DAGISEL-NEXT: s_mov_b64 s[6:7], exec1303; GFX8DAGISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11304; GFX8DAGISEL-NEXT: s_ff1_i32_b64 s8, s[6:7]1305; GFX8DAGISEL-NEXT: v_readlane_b32 s9, v2, s81306; GFX8DAGISEL-NEXT: v_readlane_b32 s10, v3, s81307; GFX8DAGISEL-NEXT: s_sub_u32 s4, s4, s91308; GFX8DAGISEL-NEXT: s_bitset0_b64 s[6:7], s81309; GFX8DAGISEL-NEXT: s_subb_u32 s5, s5, s101310; GFX8DAGISEL-NEXT: s_cmp_lg_u64 s[6:7], 01311; GFX8DAGISEL-NEXT: s_cbranch_scc1 .LBB4_11312; GFX8DAGISEL-NEXT: ; %bb.2:1313; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s41314; GFX8DAGISEL-NEXT: v_mov_b32_e32 v3, s51315; GFX8DAGISEL-NEXT: flat_store_dwordx2 v[0:1], v[2:3]1316; GFX8DAGISEL-NEXT: s_waitcnt vmcnt(0)1317; GFX8DAGISEL-NEXT: s_setpc_b64 s[30:31]1318;1319; GFX8GISEL-LABEL: divergent_value_i64:1320; GFX8GISEL: ; %bb.0: ; %entry1321; GFX8GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1322; GFX8GISEL-NEXT: s_mov_b64 s[4:5], 01323; GFX8GISEL-NEXT: s_mov_b64 s[6:7], exec1324; GFX8GISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11325; GFX8GISEL-NEXT: s_ff1_i32_b64 s8, s[6:7]1326; GFX8GISEL-NEXT: v_readlane_b32 s9, v2, s81327; GFX8GISEL-NEXT: v_readlane_b32 s10, v3, s81328; GFX8GISEL-NEXT: s_sub_u32 s4, s4, s91329; GFX8GISEL-NEXT: s_bitset0_b64 s[6:7], s81330; GFX8GISEL-NEXT: s_subb_u32 s5, s5, s101331; GFX8GISEL-NEXT: s_cmp_lg_u64 s[6:7], 01332; GFX8GISEL-NEXT: s_cbranch_scc1 .LBB4_11333; GFX8GISEL-NEXT: ; %bb.2:1334; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s41335; GFX8GISEL-NEXT: v_mov_b32_e32 v3, s51336; GFX8GISEL-NEXT: flat_store_dwordx2 v[0:1], v[2:3]1337; GFX8GISEL-NEXT: s_waitcnt vmcnt(0)1338; GFX8GISEL-NEXT: s_setpc_b64 s[30:31]1339;1340; GFX9DAGISEL-LABEL: divergent_value_i64:1341; GFX9DAGISEL: ; %bb.0: ; %entry1342; GFX9DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1343; GFX9DAGISEL-NEXT: s_mov_b64 s[4:5], 01344; GFX9DAGISEL-NEXT: s_mov_b64 s[6:7], exec1345; GFX9DAGISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11346; GFX9DAGISEL-NEXT: s_ff1_i32_b64 s8, s[6:7]1347; GFX9DAGISEL-NEXT: v_readlane_b32 s9, v2, s81348; GFX9DAGISEL-NEXT: v_readlane_b32 s10, v3, s81349; GFX9DAGISEL-NEXT: s_sub_u32 s4, s4, s91350; GFX9DAGISEL-NEXT: s_bitset0_b64 s[6:7], s81351; GFX9DAGISEL-NEXT: s_subb_u32 s5, s5, s101352; GFX9DAGISEL-NEXT: s_cmp_lg_u64 s[6:7], 01353; GFX9DAGISEL-NEXT: s_cbranch_scc1 .LBB4_11354; GFX9DAGISEL-NEXT: ; %bb.2:1355; GFX9DAGISEL-NEXT: v_mov_b32_e32 v2, s41356; GFX9DAGISEL-NEXT: v_mov_b32_e32 v3, s51357; GFX9DAGISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1358; GFX9DAGISEL-NEXT: s_waitcnt vmcnt(0)1359; GFX9DAGISEL-NEXT: s_setpc_b64 s[30:31]1360;1361; GFX9GISEL-LABEL: divergent_value_i64:1362; GFX9GISEL: ; %bb.0: ; %entry1363; GFX9GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1364; GFX9GISEL-NEXT: s_mov_b64 s[4:5], 01365; GFX9GISEL-NEXT: s_mov_b64 s[6:7], exec1366; GFX9GISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11367; GFX9GISEL-NEXT: s_ff1_i32_b64 s8, s[6:7]1368; GFX9GISEL-NEXT: v_readlane_b32 s9, v2, s81369; GFX9GISEL-NEXT: v_readlane_b32 s10, v3, s81370; GFX9GISEL-NEXT: s_sub_u32 s4, s4, s91371; GFX9GISEL-NEXT: s_bitset0_b64 s[6:7], s81372; GFX9GISEL-NEXT: s_subb_u32 s5, s5, s101373; GFX9GISEL-NEXT: s_cmp_lg_u64 s[6:7], 01374; GFX9GISEL-NEXT: s_cbranch_scc1 .LBB4_11375; GFX9GISEL-NEXT: ; %bb.2:1376; GFX9GISEL-NEXT: v_mov_b32_e32 v2, s41377; GFX9GISEL-NEXT: v_mov_b32_e32 v3, s51378; GFX9GISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1379; GFX9GISEL-NEXT: s_waitcnt vmcnt(0)1380; GFX9GISEL-NEXT: s_setpc_b64 s[30:31]1381;1382; GFX1064DAGISEL-LABEL: divergent_value_i64:1383; GFX1064DAGISEL: ; %bb.0: ; %entry1384; GFX1064DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1385; GFX1064DAGISEL-NEXT: s_mov_b64 s[4:5], 01386; GFX1064DAGISEL-NEXT: s_mov_b64 s[6:7], exec1387; GFX1064DAGISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11388; GFX1064DAGISEL-NEXT: s_ff1_i32_b64 s8, s[6:7]1389; GFX1064DAGISEL-NEXT: v_readlane_b32 s9, v2, s81390; GFX1064DAGISEL-NEXT: v_readlane_b32 s10, v3, s81391; GFX1064DAGISEL-NEXT: s_bitset0_b64 s[6:7], s81392; GFX1064DAGISEL-NEXT: s_sub_u32 s4, s4, s91393; GFX1064DAGISEL-NEXT: s_subb_u32 s5, s5, s101394; GFX1064DAGISEL-NEXT: s_cmp_lg_u64 s[6:7], 01395; GFX1064DAGISEL-NEXT: s_cbranch_scc1 .LBB4_11396; GFX1064DAGISEL-NEXT: ; %bb.2:1397; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v2, s41398; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v3, s51399; GFX1064DAGISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1400; GFX1064DAGISEL-NEXT: s_setpc_b64 s[30:31]1401;1402; GFX1064GISEL-LABEL: divergent_value_i64:1403; GFX1064GISEL: ; %bb.0: ; %entry1404; GFX1064GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1405; GFX1064GISEL-NEXT: s_mov_b64 s[4:5], 01406; GFX1064GISEL-NEXT: s_mov_b64 s[6:7], exec1407; GFX1064GISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11408; GFX1064GISEL-NEXT: s_ff1_i32_b64 s8, s[6:7]1409; GFX1064GISEL-NEXT: v_readlane_b32 s9, v2, s81410; GFX1064GISEL-NEXT: v_readlane_b32 s10, v3, s81411; GFX1064GISEL-NEXT: s_bitset0_b64 s[6:7], s81412; GFX1064GISEL-NEXT: s_sub_u32 s4, s4, s91413; GFX1064GISEL-NEXT: s_subb_u32 s5, s5, s101414; GFX1064GISEL-NEXT: s_cmp_lg_u64 s[6:7], 01415; GFX1064GISEL-NEXT: s_cbranch_scc1 .LBB4_11416; GFX1064GISEL-NEXT: ; %bb.2:1417; GFX1064GISEL-NEXT: v_mov_b32_e32 v2, s41418; GFX1064GISEL-NEXT: v_mov_b32_e32 v3, s51419; GFX1064GISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1420; GFX1064GISEL-NEXT: s_setpc_b64 s[30:31]1421;1422; GFX1032DAGISEL-LABEL: divergent_value_i64:1423; GFX1032DAGISEL: ; %bb.0: ; %entry1424; GFX1032DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1425; GFX1032DAGISEL-NEXT: s_mov_b64 s[4:5], 01426; GFX1032DAGISEL-NEXT: s_mov_b32 s6, exec_lo1427; GFX1032DAGISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11428; GFX1032DAGISEL-NEXT: s_ff1_i32_b32 s7, s61429; GFX1032DAGISEL-NEXT: v_readlane_b32 s8, v2, s71430; GFX1032DAGISEL-NEXT: v_readlane_b32 s9, v3, s71431; GFX1032DAGISEL-NEXT: s_bitset0_b32 s6, s71432; GFX1032DAGISEL-NEXT: s_sub_u32 s4, s4, s81433; GFX1032DAGISEL-NEXT: s_subb_u32 s5, s5, s91434; GFX1032DAGISEL-NEXT: s_cmp_lg_u32 s6, 01435; GFX1032DAGISEL-NEXT: s_cbranch_scc1 .LBB4_11436; GFX1032DAGISEL-NEXT: ; %bb.2:1437; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v2, s41438; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v3, s51439; GFX1032DAGISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1440; GFX1032DAGISEL-NEXT: s_setpc_b64 s[30:31]1441;1442; GFX1032GISEL-LABEL: divergent_value_i64:1443; GFX1032GISEL: ; %bb.0: ; %entry1444; GFX1032GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1445; GFX1032GISEL-NEXT: s_mov_b64 s[4:5], 01446; GFX1032GISEL-NEXT: s_mov_b32 s6, exec_lo1447; GFX1032GISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11448; GFX1032GISEL-NEXT: s_ff1_i32_b32 s7, s61449; GFX1032GISEL-NEXT: v_readlane_b32 s8, v2, s71450; GFX1032GISEL-NEXT: v_readlane_b32 s9, v3, s71451; GFX1032GISEL-NEXT: s_bitset0_b32 s6, s71452; GFX1032GISEL-NEXT: s_sub_u32 s4, s4, s81453; GFX1032GISEL-NEXT: s_subb_u32 s5, s5, s91454; GFX1032GISEL-NEXT: s_cmp_lg_u32 s6, 01455; GFX1032GISEL-NEXT: s_cbranch_scc1 .LBB4_11456; GFX1032GISEL-NEXT: ; %bb.2:1457; GFX1032GISEL-NEXT: v_mov_b32_e32 v2, s41458; GFX1032GISEL-NEXT: v_mov_b32_e32 v3, s51459; GFX1032GISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1460; GFX1032GISEL-NEXT: s_setpc_b64 s[30:31]1461;1462; GFX1164DAGISEL-LABEL: divergent_value_i64:1463; GFX1164DAGISEL: ; %bb.0: ; %entry1464; GFX1164DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1465; GFX1164DAGISEL-NEXT: s_mov_b64 s[0:1], 01466; GFX1164DAGISEL-NEXT: s_mov_b64 s[2:3], exec1467; GFX1164DAGISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11468; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1469; GFX1164DAGISEL-NEXT: s_ctz_i32_b64 s4, s[2:3]1470; GFX1164DAGISEL-NEXT: v_readlane_b32 s5, v2, s41471; GFX1164DAGISEL-NEXT: v_readlane_b32 s6, v3, s41472; GFX1164DAGISEL-NEXT: s_bitset0_b64 s[2:3], s41473; GFX1164DAGISEL-NEXT: s_sub_u32 s0, s0, s51474; GFX1164DAGISEL-NEXT: s_subb_u32 s1, s1, s61475; GFX1164DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 01476; GFX1164DAGISEL-NEXT: s_cbranch_scc1 .LBB4_11477; GFX1164DAGISEL-NEXT: ; %bb.2:1478; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v3, s11479; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v2, s01480; GFX1164DAGISEL-NEXT: global_store_b64 v[0:1], v[2:3], off1481; GFX1164DAGISEL-NEXT: s_setpc_b64 s[30:31]1482;1483; GFX1164GISEL-LABEL: divergent_value_i64:1484; GFX1164GISEL: ; %bb.0: ; %entry1485; GFX1164GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1486; GFX1164GISEL-NEXT: s_mov_b64 s[0:1], 01487; GFX1164GISEL-NEXT: s_mov_b64 s[2:3], exec1488; GFX1164GISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11489; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1490; GFX1164GISEL-NEXT: s_ctz_i32_b64 s4, s[2:3]1491; GFX1164GISEL-NEXT: v_readlane_b32 s5, v2, s41492; GFX1164GISEL-NEXT: v_readlane_b32 s6, v3, s41493; GFX1164GISEL-NEXT: s_bitset0_b64 s[2:3], s41494; GFX1164GISEL-NEXT: s_sub_u32 s0, s0, s51495; GFX1164GISEL-NEXT: s_subb_u32 s1, s1, s61496; GFX1164GISEL-NEXT: s_cmp_lg_u64 s[2:3], 01497; GFX1164GISEL-NEXT: s_cbranch_scc1 .LBB4_11498; GFX1164GISEL-NEXT: ; %bb.2:1499; GFX1164GISEL-NEXT: v_mov_b32_e32 v3, s11500; GFX1164GISEL-NEXT: v_mov_b32_e32 v2, s01501; GFX1164GISEL-NEXT: global_store_b64 v[0:1], v[2:3], off1502; GFX1164GISEL-NEXT: s_setpc_b64 s[30:31]1503;1504; GFX1132DAGISEL-LABEL: divergent_value_i64:1505; GFX1132DAGISEL: ; %bb.0: ; %entry1506; GFX1132DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1507; GFX1132DAGISEL-NEXT: s_mov_b64 s[0:1], 01508; GFX1132DAGISEL-NEXT: s_mov_b32 s2, exec_lo1509; GFX1132DAGISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11510; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1511; GFX1132DAGISEL-NEXT: s_ctz_i32_b32 s3, s21512; GFX1132DAGISEL-NEXT: v_readlane_b32 s4, v2, s31513; GFX1132DAGISEL-NEXT: v_readlane_b32 s5, v3, s31514; GFX1132DAGISEL-NEXT: s_bitset0_b32 s2, s31515; GFX1132DAGISEL-NEXT: s_sub_u32 s0, s0, s41516; GFX1132DAGISEL-NEXT: s_subb_u32 s1, s1, s51517; GFX1132DAGISEL-NEXT: s_cmp_lg_u32 s2, 01518; GFX1132DAGISEL-NEXT: s_cbranch_scc1 .LBB4_11519; GFX1132DAGISEL-NEXT: ; %bb.2:1520; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s01521; GFX1132DAGISEL-NEXT: global_store_b64 v[0:1], v[2:3], off1522; GFX1132DAGISEL-NEXT: s_setpc_b64 s[30:31]1523;1524; GFX1132GISEL-LABEL: divergent_value_i64:1525; GFX1132GISEL: ; %bb.0: ; %entry1526; GFX1132GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1527; GFX1132GISEL-NEXT: s_mov_b64 s[0:1], 01528; GFX1132GISEL-NEXT: s_mov_b32 s2, exec_lo1529; GFX1132GISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11530; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1531; GFX1132GISEL-NEXT: s_ctz_i32_b32 s3, s21532; GFX1132GISEL-NEXT: v_readlane_b32 s4, v2, s31533; GFX1132GISEL-NEXT: v_readlane_b32 s5, v3, s31534; GFX1132GISEL-NEXT: s_bitset0_b32 s2, s31535; GFX1132GISEL-NEXT: s_sub_u32 s0, s0, s41536; GFX1132GISEL-NEXT: s_subb_u32 s1, s1, s51537; GFX1132GISEL-NEXT: s_cmp_lg_u32 s2, 01538; GFX1132GISEL-NEXT: s_cbranch_scc1 .LBB4_11539; GFX1132GISEL-NEXT: ; %bb.2:1540; GFX1132GISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s01541; GFX1132GISEL-NEXT: global_store_b64 v[0:1], v[2:3], off1542; GFX1132GISEL-NEXT: s_setpc_b64 s[30:31]1543;1544; GFX12DAGISEL-LABEL: divergent_value_i64:1545; GFX12DAGISEL: ; %bb.0: ; %entry1546; GFX12DAGISEL-NEXT: s_wait_loadcnt_dscnt 0x01547; GFX12DAGISEL-NEXT: s_wait_expcnt 0x01548; GFX12DAGISEL-NEXT: s_wait_samplecnt 0x01549; GFX12DAGISEL-NEXT: s_wait_bvhcnt 0x01550; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x01551; GFX12DAGISEL-NEXT: s_mov_b64 s[0:1], 01552; GFX12DAGISEL-NEXT: s_mov_b32 s2, exec_lo1553; GFX12DAGISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11554; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)1555; GFX12DAGISEL-NEXT: s_ctz_i32_b32 s3, s21556; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)1557; GFX12DAGISEL-NEXT: v_readlane_b32 s4, v2, s31558; GFX12DAGISEL-NEXT: v_readlane_b32 s5, v3, s31559; GFX12DAGISEL-NEXT: s_bitset0_b32 s2, s31560; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)1561; GFX12DAGISEL-NEXT: s_cmp_lg_u32 s2, 01562; GFX12DAGISEL-NEXT: s_sub_nc_u64 s[0:1], s[0:1], s[4:5]1563; GFX12DAGISEL-NEXT: s_cbranch_scc1 .LBB4_11564; GFX12DAGISEL-NEXT: ; %bb.2:1565; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)1566; GFX12DAGISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s01567; GFX12DAGISEL-NEXT: global_store_b64 v[0:1], v[2:3], off1568; GFX12DAGISEL-NEXT: s_setpc_b64 s[30:31]1569entry:1570 %result = call i64 @llvm.amdgcn.wave.reduce.sub.i64(i64 %id.x, i32 1)1571 store i64 %result, ptr addrspace(1) %out1572 ret void1573}1574 1575define amdgpu_kernel void @divergent_cfg_i64(ptr addrspace(1) %out, i64 %in, i64 %in2) {1576; GFX8DAGISEL-LABEL: divergent_cfg_i64:1577; GFX8DAGISEL: ; %bb.0: ; %entry1578; GFX8DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241579; GFX8DAGISEL-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x341580; GFX8DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v01581; GFX8DAGISEL-NEXT: ; implicit-def: $sgpr6_sgpr71582; GFX8DAGISEL-NEXT: s_and_saveexec_b64 s[8:9], vcc1583; GFX8DAGISEL-NEXT: s_xor_b64 s[8:9], exec, s[8:9]1584; GFX8DAGISEL-NEXT: s_cbranch_execz .LBB5_21585; GFX8DAGISEL-NEXT: ; %bb.1: ; %else1586; GFX8DAGISEL-NEXT: s_mov_b64 s[6:7], exec1587; GFX8DAGISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]1588; GFX8DAGISEL-NEXT: s_sub_i32 s7, 0, s61589; GFX8DAGISEL-NEXT: s_ashr_i32 s6, s7, 311590; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1591; GFX8DAGISEL-NEXT: s_mul_i32 s10, s2, s61592; GFX8DAGISEL-NEXT: s_mul_i32 s6, s2, s71593; GFX8DAGISEL-NEXT: s_mul_hi_u32 s2, s2, s71594; GFX8DAGISEL-NEXT: s_mul_i32 s3, s3, s71595; GFX8DAGISEL-NEXT: s_add_u32 s2, s2, s31596; GFX8DAGISEL-NEXT: s_add_u32 s7, s2, s101597; GFX8DAGISEL-NEXT: .LBB5_2: ; %Flow1598; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1599; GFX8DAGISEL-NEXT: s_or_saveexec_b64 s[2:3], s[8:9]1600; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s61601; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s71602; GFX8DAGISEL-NEXT: s_xor_b64 exec, exec, s[2:3]1603; GFX8DAGISEL-NEXT: s_cbranch_execz .LBB5_41604; GFX8DAGISEL-NEXT: ; %bb.3: ; %if1605; GFX8DAGISEL-NEXT: s_mov_b64 s[6:7], exec1606; GFX8DAGISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]1607; GFX8DAGISEL-NEXT: s_sub_i32 s7, 0, s61608; GFX8DAGISEL-NEXT: s_ashr_i32 s6, s7, 311609; GFX8DAGISEL-NEXT: s_mul_i32 s8, s4, s61610; GFX8DAGISEL-NEXT: s_mul_i32 s6, s4, s71611; GFX8DAGISEL-NEXT: s_mul_hi_u32 s4, s4, s71612; GFX8DAGISEL-NEXT: s_mul_i32 s5, s5, s71613; GFX8DAGISEL-NEXT: s_add_u32 s4, s4, s51614; GFX8DAGISEL-NEXT: s_add_u32 s7, s4, s81615; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s61616; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s71617; GFX8DAGISEL-NEXT: .LBB5_4: ; %endif1618; GFX8DAGISEL-NEXT: s_or_b64 exec, exec, s[2:3]1619; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s01620; GFX8DAGISEL-NEXT: v_mov_b32_e32 v3, s11621; GFX8DAGISEL-NEXT: flat_store_dwordx2 v[2:3], v[0:1]1622; GFX8DAGISEL-NEXT: s_endpgm1623;1624; GFX8GISEL-LABEL: divergent_cfg_i64:1625; GFX8GISEL: ; %bb.0: ; %entry1626; GFX8GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241627; GFX8GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v01628; GFX8GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71629; GFX8GISEL-NEXT: s_and_saveexec_b64 s[8:9], vcc1630; GFX8GISEL-NEXT: s_xor_b64 s[8:9], exec, s[8:9]1631; GFX8GISEL-NEXT: s_cbranch_execz .LBB5_21632; GFX8GISEL-NEXT: ; %bb.1: ; %else1633; GFX8GISEL-NEXT: s_mov_b64 s[6:7], exec1634; GFX8GISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]1635; GFX8GISEL-NEXT: s_sub_i32 s7, 0, s61636; GFX8GISEL-NEXT: s_ashr_i32 s6, s7, 311637; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)1638; GFX8GISEL-NEXT: s_mul_i32 s10, s2, s61639; GFX8GISEL-NEXT: s_mul_i32 s6, s2, s71640; GFX8GISEL-NEXT: s_mul_hi_u32 s2, s2, s71641; GFX8GISEL-NEXT: s_mul_i32 s3, s3, s71642; GFX8GISEL-NEXT: s_add_u32 s2, s2, s31643; GFX8GISEL-NEXT: s_add_u32 s7, s2, s101644; GFX8GISEL-NEXT: .LBB5_2: ; %Flow1645; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)1646; GFX8GISEL-NEXT: s_andn2_saveexec_b64 s[2:3], s[8:9]1647; GFX8GISEL-NEXT: s_cbranch_execz .LBB5_41648; GFX8GISEL-NEXT: ; %bb.3: ; %if1649; GFX8GISEL-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x341650; GFX8GISEL-NEXT: s_mov_b64 s[6:7], exec1651; GFX8GISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]1652; GFX8GISEL-NEXT: s_sub_i32 s7, 0, s61653; GFX8GISEL-NEXT: s_ashr_i32 s6, s7, 311654; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)1655; GFX8GISEL-NEXT: s_mul_i32 s8, s4, s61656; GFX8GISEL-NEXT: s_mul_i32 s6, s4, s71657; GFX8GISEL-NEXT: s_mul_hi_u32 s4, s4, s71658; GFX8GISEL-NEXT: s_mul_i32 s5, s5, s71659; GFX8GISEL-NEXT: s_add_u32 s4, s4, s51660; GFX8GISEL-NEXT: s_add_u32 s7, s4, s81661; GFX8GISEL-NEXT: .LBB5_4: ; %endif1662; GFX8GISEL-NEXT: s_or_b64 exec, exec, s[2:3]1663; GFX8GISEL-NEXT: v_mov_b32_e32 v0, s61664; GFX8GISEL-NEXT: v_mov_b32_e32 v3, s11665; GFX8GISEL-NEXT: v_mov_b32_e32 v1, s71666; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s01667; GFX8GISEL-NEXT: flat_store_dwordx2 v[2:3], v[0:1]1668; GFX8GISEL-NEXT: s_endpgm1669;1670; GFX9DAGISEL-LABEL: divergent_cfg_i64:1671; GFX9DAGISEL: ; %bb.0: ; %entry1672; GFX9DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241673; GFX9DAGISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341674; GFX9DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v01675; GFX9DAGISEL-NEXT: ; implicit-def: $sgpr4_sgpr51676; GFX9DAGISEL-NEXT: s_and_saveexec_b64 s[8:9], vcc1677; GFX9DAGISEL-NEXT: s_xor_b64 s[8:9], exec, s[8:9]1678; GFX9DAGISEL-NEXT: s_cbranch_execz .LBB5_21679; GFX9DAGISEL-NEXT: ; %bb.1: ; %else1680; GFX9DAGISEL-NEXT: s_mov_b64 s[4:5], exec1681; GFX9DAGISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1682; GFX9DAGISEL-NEXT: s_sub_i32 s5, 0, s41683; GFX9DAGISEL-NEXT: s_ashr_i32 s4, s5, 311684; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1685; GFX9DAGISEL-NEXT: s_mul_i32 s10, s2, s41686; GFX9DAGISEL-NEXT: s_mul_i32 s4, s2, s51687; GFX9DAGISEL-NEXT: s_mul_hi_u32 s2, s2, s51688; GFX9DAGISEL-NEXT: s_mul_i32 s3, s3, s51689; GFX9DAGISEL-NEXT: s_add_u32 s2, s2, s31690; GFX9DAGISEL-NEXT: s_add_u32 s5, s2, s101691; GFX9DAGISEL-NEXT: .LBB5_2: ; %Flow1692; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1693; GFX9DAGISEL-NEXT: s_or_saveexec_b64 s[2:3], s[8:9]1694; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, s41695; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, s51696; GFX9DAGISEL-NEXT: s_xor_b64 exec, exec, s[2:3]1697; GFX9DAGISEL-NEXT: s_cbranch_execz .LBB5_41698; GFX9DAGISEL-NEXT: ; %bb.3: ; %if1699; GFX9DAGISEL-NEXT: s_mov_b64 s[4:5], exec1700; GFX9DAGISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1701; GFX9DAGISEL-NEXT: s_sub_i32 s5, 0, s41702; GFX9DAGISEL-NEXT: s_ashr_i32 s4, s5, 311703; GFX9DAGISEL-NEXT: s_mul_i32 s8, s6, s41704; GFX9DAGISEL-NEXT: s_mul_i32 s4, s6, s51705; GFX9DAGISEL-NEXT: s_mul_hi_u32 s6, s6, s51706; GFX9DAGISEL-NEXT: s_mul_i32 s5, s7, s51707; GFX9DAGISEL-NEXT: s_add_u32 s5, s6, s51708; GFX9DAGISEL-NEXT: s_add_u32 s5, s5, s81709; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, s41710; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, s51711; GFX9DAGISEL-NEXT: .LBB5_4: ; %endif1712; GFX9DAGISEL-NEXT: s_or_b64 exec, exec, s[2:3]1713; GFX9DAGISEL-NEXT: v_mov_b32_e32 v2, 01714; GFX9DAGISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1715; GFX9DAGISEL-NEXT: s_endpgm1716;1717; GFX9GISEL-LABEL: divergent_cfg_i64:1718; GFX9GISEL: ; %bb.0: ; %entry1719; GFX9GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241720; GFX9GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v01721; GFX9GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71722; GFX9GISEL-NEXT: s_and_saveexec_b64 s[8:9], vcc1723; GFX9GISEL-NEXT: s_xor_b64 s[8:9], exec, s[8:9]1724; GFX9GISEL-NEXT: s_cbranch_execz .LBB5_21725; GFX9GISEL-NEXT: ; %bb.1: ; %else1726; GFX9GISEL-NEXT: s_mov_b64 s[6:7], exec1727; GFX9GISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]1728; GFX9GISEL-NEXT: s_sub_i32 s7, 0, s61729; GFX9GISEL-NEXT: s_ashr_i32 s6, s7, 311730; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)1731; GFX9GISEL-NEXT: s_mul_i32 s10, s2, s61732; GFX9GISEL-NEXT: s_mul_i32 s6, s2, s71733; GFX9GISEL-NEXT: s_mul_hi_u32 s2, s2, s71734; GFX9GISEL-NEXT: s_mul_i32 s3, s3, s71735; GFX9GISEL-NEXT: s_add_u32 s2, s2, s31736; GFX9GISEL-NEXT: s_add_u32 s7, s2, s101737; GFX9GISEL-NEXT: .LBB5_2: ; %Flow1738; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)1739; GFX9GISEL-NEXT: s_andn2_saveexec_b64 s[2:3], s[8:9]1740; GFX9GISEL-NEXT: s_cbranch_execz .LBB5_41741; GFX9GISEL-NEXT: ; %bb.3: ; %if1742; GFX9GISEL-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x341743; GFX9GISEL-NEXT: s_mov_b64 s[4:5], exec1744; GFX9GISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1745; GFX9GISEL-NEXT: s_sub_i32 s4, 0, s41746; GFX9GISEL-NEXT: s_ashr_i32 s5, s4, 311747; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)1748; GFX9GISEL-NEXT: s_mul_i32 s6, s8, s41749; GFX9GISEL-NEXT: s_mul_hi_u32 s7, s8, s41750; GFX9GISEL-NEXT: s_mul_i32 s4, s9, s41751; GFX9GISEL-NEXT: s_mul_i32 s5, s8, s51752; GFX9GISEL-NEXT: s_add_u32 s4, s7, s41753; GFX9GISEL-NEXT: s_add_u32 s7, s4, s51754; GFX9GISEL-NEXT: .LBB5_4: ; %endif1755; GFX9GISEL-NEXT: s_or_b64 exec, exec, s[2:3]1756; GFX9GISEL-NEXT: v_mov_b32_e32 v0, s61757; GFX9GISEL-NEXT: v_mov_b32_e32 v1, s71758; GFX9GISEL-NEXT: v_mov_b32_e32 v2, 01759; GFX9GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1760; GFX9GISEL-NEXT: s_endpgm1761;1762; GFX1064DAGISEL-LABEL: divergent_cfg_i64:1763; GFX1064DAGISEL: ; %bb.0: ; %entry1764; GFX1064DAGISEL-NEXT: s_clause 0x11765; GFX1064DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241766; GFX1064DAGISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341767; GFX1064DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v01768; GFX1064DAGISEL-NEXT: ; implicit-def: $sgpr8_sgpr91769; GFX1064DAGISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc1770; GFX1064DAGISEL-NEXT: s_xor_b64 s[4:5], exec, s[4:5]1771; GFX1064DAGISEL-NEXT: s_cbranch_execz .LBB5_21772; GFX1064DAGISEL-NEXT: ; %bb.1: ; %else1773; GFX1064DAGISEL-NEXT: s_mov_b64 s[8:9], exec1774; GFX1064DAGISEL-NEXT: s_bcnt1_i32_b64 s8, s[8:9]1775; GFX1064DAGISEL-NEXT: s_sub_i32 s8, 0, s81776; GFX1064DAGISEL-NEXT: s_ashr_i32 s9, s8, 311777; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1778; GFX1064DAGISEL-NEXT: s_mul_hi_u32 s10, s2, s81779; GFX1064DAGISEL-NEXT: s_mul_i32 s3, s3, s81780; GFX1064DAGISEL-NEXT: s_mul_i32 s9, s2, s91781; GFX1064DAGISEL-NEXT: s_add_u32 s3, s10, s31782; GFX1064DAGISEL-NEXT: s_mul_i32 s8, s2, s81783; GFX1064DAGISEL-NEXT: s_add_u32 s9, s3, s91784; GFX1064DAGISEL-NEXT: .LBB5_2: ; %Flow1785; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1786; GFX1064DAGISEL-NEXT: s_or_saveexec_b64 s[2:3], s[4:5]1787; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, s81788; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, s91789; GFX1064DAGISEL-NEXT: s_xor_b64 exec, exec, s[2:3]1790; GFX1064DAGISEL-NEXT: ; %bb.3: ; %if1791; GFX1064DAGISEL-NEXT: s_mov_b64 s[4:5], exec1792; GFX1064DAGISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1793; GFX1064DAGISEL-NEXT: s_sub_i32 s4, 0, s41794; GFX1064DAGISEL-NEXT: s_ashr_i32 s5, s4, 311795; GFX1064DAGISEL-NEXT: s_mul_hi_u32 s8, s6, s41796; GFX1064DAGISEL-NEXT: s_mul_i32 s7, s7, s41797; GFX1064DAGISEL-NEXT: s_mul_i32 s5, s6, s51798; GFX1064DAGISEL-NEXT: s_add_u32 s7, s8, s71799; GFX1064DAGISEL-NEXT: s_mul_i32 s4, s6, s41800; GFX1064DAGISEL-NEXT: s_add_u32 s5, s7, s51801; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, s41802; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, s51803; GFX1064DAGISEL-NEXT: ; %bb.4: ; %endif1804; GFX1064DAGISEL-NEXT: s_or_b64 exec, exec, s[2:3]1805; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v2, 01806; GFX1064DAGISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1807; GFX1064DAGISEL-NEXT: s_endpgm1808;1809; GFX1064GISEL-LABEL: divergent_cfg_i64:1810; GFX1064GISEL: ; %bb.0: ; %entry1811; GFX1064GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241812; GFX1064GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v01813; GFX1064GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71814; GFX1064GISEL-NEXT: s_and_saveexec_b64 s[8:9], vcc1815; GFX1064GISEL-NEXT: s_xor_b64 s[8:9], exec, s[8:9]1816; GFX1064GISEL-NEXT: s_cbranch_execz .LBB5_21817; GFX1064GISEL-NEXT: ; %bb.1: ; %else1818; GFX1064GISEL-NEXT: s_mov_b64 s[6:7], exec1819; GFX1064GISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]1820; GFX1064GISEL-NEXT: s_sub_i32 s6, 0, s61821; GFX1064GISEL-NEXT: s_ashr_i32 s7, s6, 311822; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)1823; GFX1064GISEL-NEXT: s_mul_hi_u32 s10, s2, s61824; GFX1064GISEL-NEXT: s_mul_i32 s3, s3, s61825; GFX1064GISEL-NEXT: s_mul_i32 s7, s2, s71826; GFX1064GISEL-NEXT: s_add_u32 s3, s10, s31827; GFX1064GISEL-NEXT: s_mul_i32 s6, s2, s61828; GFX1064GISEL-NEXT: s_add_u32 s7, s3, s71829; GFX1064GISEL-NEXT: .LBB5_2: ; %Flow1830; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)1831; GFX1064GISEL-NEXT: s_andn2_saveexec_b64 s[2:3], s[8:9]1832; GFX1064GISEL-NEXT: s_cbranch_execz .LBB5_41833; GFX1064GISEL-NEXT: ; %bb.3: ; %if1834; GFX1064GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341835; GFX1064GISEL-NEXT: s_mov_b64 s[4:5], exec1836; GFX1064GISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1837; GFX1064GISEL-NEXT: s_sub_i32 s4, 0, s41838; GFX1064GISEL-NEXT: s_ashr_i32 s5, s4, 311839; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)1840; GFX1064GISEL-NEXT: s_mul_hi_u32 s8, s6, s41841; GFX1064GISEL-NEXT: s_mul_i32 s7, s7, s41842; GFX1064GISEL-NEXT: s_mul_i32 s5, s6, s51843; GFX1064GISEL-NEXT: s_add_u32 s7, s8, s71844; GFX1064GISEL-NEXT: s_mul_i32 s6, s6, s41845; GFX1064GISEL-NEXT: s_add_u32 s7, s7, s51846; GFX1064GISEL-NEXT: .LBB5_4: ; %endif1847; GFX1064GISEL-NEXT: s_or_b64 exec, exec, s[2:3]1848; GFX1064GISEL-NEXT: v_mov_b32_e32 v0, s61849; GFX1064GISEL-NEXT: v_mov_b32_e32 v1, s71850; GFX1064GISEL-NEXT: v_mov_b32_e32 v2, 01851; GFX1064GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1852; GFX1064GISEL-NEXT: s_endpgm1853;1854; GFX1032DAGISEL-LABEL: divergent_cfg_i64:1855; GFX1032DAGISEL: ; %bb.0: ; %entry1856; GFX1032DAGISEL-NEXT: s_clause 0x11857; GFX1032DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241858; GFX1032DAGISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341859; GFX1032DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc_lo, 15, v01860; GFX1032DAGISEL-NEXT: ; implicit-def: $sgpr4_sgpr51861; GFX1032DAGISEL-NEXT: s_and_saveexec_b32 s8, vcc_lo1862; GFX1032DAGISEL-NEXT: s_xor_b32 s8, exec_lo, s81863; GFX1032DAGISEL-NEXT: s_cbranch_execz .LBB5_21864; GFX1032DAGISEL-NEXT: ; %bb.1: ; %else1865; GFX1032DAGISEL-NEXT: s_mov_b32 s4, exec_lo1866; GFX1032DAGISEL-NEXT: s_bcnt1_i32_b32 s4, s41867; GFX1032DAGISEL-NEXT: s_sub_i32 s4, 0, s41868; GFX1032DAGISEL-NEXT: s_ashr_i32 s5, s4, 311869; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1870; GFX1032DAGISEL-NEXT: s_mul_hi_u32 s9, s2, s41871; GFX1032DAGISEL-NEXT: s_mul_i32 s3, s3, s41872; GFX1032DAGISEL-NEXT: s_mul_i32 s5, s2, s51873; GFX1032DAGISEL-NEXT: s_add_u32 s3, s9, s31874; GFX1032DAGISEL-NEXT: s_mul_i32 s4, s2, s41875; GFX1032DAGISEL-NEXT: s_add_u32 s5, s3, s51876; GFX1032DAGISEL-NEXT: .LBB5_2: ; %Flow1877; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1878; GFX1032DAGISEL-NEXT: s_or_saveexec_b32 s2, s81879; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, s41880; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, s51881; GFX1032DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s21882; GFX1032DAGISEL-NEXT: ; %bb.3: ; %if1883; GFX1032DAGISEL-NEXT: s_mov_b32 s3, exec_lo1884; GFX1032DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s31885; GFX1032DAGISEL-NEXT: s_sub_i32 s3, 0, s31886; GFX1032DAGISEL-NEXT: s_ashr_i32 s4, s3, 311887; GFX1032DAGISEL-NEXT: s_mul_hi_u32 s5, s6, s31888; GFX1032DAGISEL-NEXT: s_mul_i32 s7, s7, s31889; GFX1032DAGISEL-NEXT: s_mul_i32 s8, s6, s41890; GFX1032DAGISEL-NEXT: s_add_u32 s5, s5, s71891; GFX1032DAGISEL-NEXT: s_mul_i32 s4, s6, s31892; GFX1032DAGISEL-NEXT: s_add_u32 s5, s5, s81893; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, s41894; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, s51895; GFX1032DAGISEL-NEXT: ; %bb.4: ; %endif1896; GFX1032DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s21897; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v2, 01898; GFX1032DAGISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1899; GFX1032DAGISEL-NEXT: s_endpgm1900;1901; GFX1032GISEL-LABEL: divergent_cfg_i64:1902; GFX1032GISEL: ; %bb.0: ; %entry1903; GFX1032GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241904; GFX1032GISEL-NEXT: v_cmp_le_u32_e32 vcc_lo, 16, v01905; GFX1032GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71906; GFX1032GISEL-NEXT: s_and_saveexec_b32 s8, vcc_lo1907; GFX1032GISEL-NEXT: s_xor_b32 s8, exec_lo, s81908; GFX1032GISEL-NEXT: s_cbranch_execz .LBB5_21909; GFX1032GISEL-NEXT: ; %bb.1: ; %else1910; GFX1032GISEL-NEXT: s_mov_b32 s6, exec_lo1911; GFX1032GISEL-NEXT: s_bcnt1_i32_b32 s6, s61912; GFX1032GISEL-NEXT: s_sub_i32 s6, 0, s61913; GFX1032GISEL-NEXT: s_ashr_i32 s7, s6, 311914; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)1915; GFX1032GISEL-NEXT: s_mul_hi_u32 s9, s2, s61916; GFX1032GISEL-NEXT: s_mul_i32 s3, s3, s61917; GFX1032GISEL-NEXT: s_mul_i32 s7, s2, s71918; GFX1032GISEL-NEXT: s_add_u32 s3, s9, s31919; GFX1032GISEL-NEXT: s_mul_i32 s6, s2, s61920; GFX1032GISEL-NEXT: s_add_u32 s7, s3, s71921; GFX1032GISEL-NEXT: .LBB5_2: ; %Flow1922; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)1923; GFX1032GISEL-NEXT: s_andn2_saveexec_b32 s2, s81924; GFX1032GISEL-NEXT: s_cbranch_execz .LBB5_41925; GFX1032GISEL-NEXT: ; %bb.3: ; %if1926; GFX1032GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341927; GFX1032GISEL-NEXT: s_mov_b32 s3, exec_lo1928; GFX1032GISEL-NEXT: s_bcnt1_i32_b32 s3, s31929; GFX1032GISEL-NEXT: s_sub_i32 s3, 0, s31930; GFX1032GISEL-NEXT: s_ashr_i32 s4, s3, 311931; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)1932; GFX1032GISEL-NEXT: s_mul_hi_u32 s5, s6, s31933; GFX1032GISEL-NEXT: s_mul_i32 s7, s7, s31934; GFX1032GISEL-NEXT: s_mul_i32 s4, s6, s41935; GFX1032GISEL-NEXT: s_add_u32 s5, s5, s71936; GFX1032GISEL-NEXT: s_mul_i32 s6, s6, s31937; GFX1032GISEL-NEXT: s_add_u32 s7, s5, s41938; GFX1032GISEL-NEXT: .LBB5_4: ; %endif1939; GFX1032GISEL-NEXT: s_or_b32 exec_lo, exec_lo, s21940; GFX1032GISEL-NEXT: v_mov_b32_e32 v0, s61941; GFX1032GISEL-NEXT: v_mov_b32_e32 v1, s71942; GFX1032GISEL-NEXT: v_mov_b32_e32 v2, 01943; GFX1032GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1944; GFX1032GISEL-NEXT: s_endpgm1945;1946; GFX1164DAGISEL-LABEL: divergent_cfg_i64:1947; GFX1164DAGISEL: ; %bb.0: ; %entry1948; GFX1164DAGISEL-NEXT: s_clause 0x11949; GFX1164DAGISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241950; GFX1164DAGISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x341951; GFX1164DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v01952; GFX1164DAGISEL-NEXT: s_mov_b64 s[6:7], exec1953; GFX1164DAGISEL-NEXT: ; implicit-def: $sgpr8_sgpr91954; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)1955; GFX1164DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v01956; GFX1164DAGISEL-NEXT: s_xor_b64 s[6:7], exec, s[6:7]1957; GFX1164DAGISEL-NEXT: s_cbranch_execz .LBB5_21958; GFX1164DAGISEL-NEXT: ; %bb.1: ; %else1959; GFX1164DAGISEL-NEXT: s_mov_b64 s[8:9], exec1960; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1961; GFX1164DAGISEL-NEXT: s_bcnt1_i32_b64 s8, s[8:9]1962; GFX1164DAGISEL-NEXT: s_sub_i32 s8, 0, s81963; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1964; GFX1164DAGISEL-NEXT: s_ashr_i32 s9, s8, 311965; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1966; GFX1164DAGISEL-NEXT: s_mul_hi_u32 s10, s2, s81967; GFX1164DAGISEL-NEXT: s_mul_i32 s3, s3, s81968; GFX1164DAGISEL-NEXT: s_mul_i32 s9, s2, s91969; GFX1164DAGISEL-NEXT: s_add_u32 s3, s10, s31970; GFX1164DAGISEL-NEXT: s_mul_i32 s8, s2, s81971; GFX1164DAGISEL-NEXT: s_add_u32 s9, s3, s91972; GFX1164DAGISEL-NEXT: .LBB5_2: ; %Flow1973; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1974; GFX1164DAGISEL-NEXT: s_or_saveexec_b64 s[2:3], s[6:7]1975; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, s81976; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s91977; GFX1164DAGISEL-NEXT: s_xor_b64 exec, exec, s[2:3]1978; GFX1164DAGISEL-NEXT: ; %bb.3: ; %if1979; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1980; GFX1164DAGISEL-NEXT: s_mov_b64 s[6:7], exec1981; GFX1164DAGISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]1982; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1983; GFX1164DAGISEL-NEXT: s_sub_i32 s6, 0, s61984; GFX1164DAGISEL-NEXT: s_ashr_i32 s7, s6, 311985; GFX1164DAGISEL-NEXT: s_mul_hi_u32 s8, s4, s61986; GFX1164DAGISEL-NEXT: s_mul_i32 s5, s5, s61987; GFX1164DAGISEL-NEXT: s_mul_i32 s7, s4, s71988; GFX1164DAGISEL-NEXT: s_add_u32 s5, s8, s51989; GFX1164DAGISEL-NEXT: s_mul_i32 s4, s4, s61990; GFX1164DAGISEL-NEXT: s_add_u32 s5, s5, s71991; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, s41992; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s51993; GFX1164DAGISEL-NEXT: ; %bb.4: ; %endif1994; GFX1164DAGISEL-NEXT: s_or_b64 exec, exec, s[2:3]1995; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v2, 01996; GFX1164DAGISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1997; GFX1164DAGISEL-NEXT: s_endpgm1998;1999; GFX1164GISEL-LABEL: divergent_cfg_i64:2000; GFX1164GISEL: ; %bb.0: ; %entry2001; GFX1164GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x242002; GFX1164GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v02003; GFX1164GISEL-NEXT: s_mov_b64 s[8:9], exec2004; GFX1164GISEL-NEXT: ; implicit-def: $sgpr6_sgpr72005; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2006; GFX1164GISEL-NEXT: v_cmpx_le_u32_e32 16, v02007; GFX1164GISEL-NEXT: s_xor_b64 s[8:9], exec, s[8:9]2008; GFX1164GISEL-NEXT: s_cbranch_execz .LBB5_22009; GFX1164GISEL-NEXT: ; %bb.1: ; %else2010; GFX1164GISEL-NEXT: s_mov_b64 s[6:7], exec2011; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2012; GFX1164GISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]2013; GFX1164GISEL-NEXT: s_sub_i32 s6, 0, s62014; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2015; GFX1164GISEL-NEXT: s_ashr_i32 s7, s6, 312016; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)2017; GFX1164GISEL-NEXT: s_mul_hi_u32 s10, s2, s62018; GFX1164GISEL-NEXT: s_mul_i32 s3, s3, s62019; GFX1164GISEL-NEXT: s_mul_i32 s7, s2, s72020; GFX1164GISEL-NEXT: s_add_u32 s3, s10, s32021; GFX1164GISEL-NEXT: s_mul_i32 s6, s2, s62022; GFX1164GISEL-NEXT: s_add_u32 s7, s3, s72023; GFX1164GISEL-NEXT: .LBB5_2: ; %Flow2024; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)2025; GFX1164GISEL-NEXT: s_and_not1_saveexec_b64 s[2:3], s[8:9]2026; GFX1164GISEL-NEXT: s_cbranch_execz .LBB5_42027; GFX1164GISEL-NEXT: ; %bb.3: ; %if2028; GFX1164GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x342029; GFX1164GISEL-NEXT: s_mov_b64 s[6:7], exec2030; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2031; GFX1164GISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]2032; GFX1164GISEL-NEXT: s_sub_i32 s6, 0, s62033; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2034; GFX1164GISEL-NEXT: s_ashr_i32 s7, s6, 312035; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)2036; GFX1164GISEL-NEXT: s_mul_hi_u32 s8, s4, s62037; GFX1164GISEL-NEXT: s_mul_i32 s5, s5, s62038; GFX1164GISEL-NEXT: s_mul_i32 s7, s4, s72039; GFX1164GISEL-NEXT: s_add_u32 s5, s8, s52040; GFX1164GISEL-NEXT: s_mul_i32 s6, s4, s62041; GFX1164GISEL-NEXT: s_add_u32 s7, s5, s72042; GFX1164GISEL-NEXT: .LBB5_4: ; %endif2043; GFX1164GISEL-NEXT: s_or_b64 exec, exec, s[2:3]2044; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, s62045; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, s72046; GFX1164GISEL-NEXT: v_mov_b32_e32 v2, 02047; GFX1164GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2048; GFX1164GISEL-NEXT: s_endpgm2049;2050; GFX1132DAGISEL-LABEL: divergent_cfg_i64:2051; GFX1132DAGISEL: ; %bb.0: ; %entry2052; GFX1132DAGISEL-NEXT: s_clause 0x12053; GFX1132DAGISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x242054; GFX1132DAGISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x342055; GFX1132DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v02056; GFX1132DAGISEL-NEXT: s_mov_b32 s8, exec_lo2057; GFX1132DAGISEL-NEXT: ; implicit-def: $sgpr6_sgpr72058; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2059; GFX1132DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v02060; GFX1132DAGISEL-NEXT: s_xor_b32 s8, exec_lo, s82061; GFX1132DAGISEL-NEXT: s_cbranch_execz .LBB5_22062; GFX1132DAGISEL-NEXT: ; %bb.1: ; %else2063; GFX1132DAGISEL-NEXT: s_mov_b32 s6, exec_lo2064; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2065; GFX1132DAGISEL-NEXT: s_bcnt1_i32_b32 s6, s62066; GFX1132DAGISEL-NEXT: s_sub_i32 s6, 0, s62067; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2068; GFX1132DAGISEL-NEXT: s_ashr_i32 s7, s6, 312069; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2070; GFX1132DAGISEL-NEXT: s_mul_hi_u32 s9, s2, s62071; GFX1132DAGISEL-NEXT: s_mul_i32 s3, s3, s62072; GFX1132DAGISEL-NEXT: s_mul_i32 s7, s2, s72073; GFX1132DAGISEL-NEXT: s_add_u32 s3, s9, s32074; GFX1132DAGISEL-NEXT: s_mul_i32 s6, s2, s62075; GFX1132DAGISEL-NEXT: s_add_u32 s7, s3, s72076; GFX1132DAGISEL-NEXT: .LBB5_2: ; %Flow2077; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2078; GFX1132DAGISEL-NEXT: s_or_saveexec_b32 s2, s82079; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v0, s6 :: v_dual_mov_b32 v1, s72080; GFX1132DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s22081; GFX1132DAGISEL-NEXT: ; %bb.3: ; %if2082; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2083; GFX1132DAGISEL-NEXT: s_mov_b32 s3, exec_lo2084; GFX1132DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s32085; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2086; GFX1132DAGISEL-NEXT: s_sub_i32 s3, 0, s32087; GFX1132DAGISEL-NEXT: s_ashr_i32 s6, s3, 312088; GFX1132DAGISEL-NEXT: s_mul_hi_u32 s7, s4, s32089; GFX1132DAGISEL-NEXT: s_mul_i32 s5, s5, s32090; GFX1132DAGISEL-NEXT: s_mul_i32 s6, s4, s62091; GFX1132DAGISEL-NEXT: s_add_u32 s5, s7, s52092; GFX1132DAGISEL-NEXT: s_mul_i32 s4, s4, s32093; GFX1132DAGISEL-NEXT: s_add_u32 s5, s5, s62094; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2095; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v1, s52096; GFX1132DAGISEL-NEXT: ; %bb.4: ; %endif2097; GFX1132DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s22098; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v2, 02099; GFX1132DAGISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2100; GFX1132DAGISEL-NEXT: s_endpgm2101;2102; GFX1132GISEL-LABEL: divergent_cfg_i64:2103; GFX1132GISEL: ; %bb.0: ; %entry2104; GFX1132GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x242105; GFX1132GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v02106; GFX1132GISEL-NEXT: s_mov_b32 s8, exec_lo2107; GFX1132GISEL-NEXT: ; implicit-def: $sgpr6_sgpr72108; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2109; GFX1132GISEL-NEXT: v_cmpx_le_u32_e32 16, v02110; GFX1132GISEL-NEXT: s_xor_b32 s8, exec_lo, s82111; GFX1132GISEL-NEXT: s_cbranch_execz .LBB5_22112; GFX1132GISEL-NEXT: ; %bb.1: ; %else2113; GFX1132GISEL-NEXT: s_mov_b32 s6, exec_lo2114; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2115; GFX1132GISEL-NEXT: s_bcnt1_i32_b32 s6, s62116; GFX1132GISEL-NEXT: s_sub_i32 s6, 0, s62117; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2118; GFX1132GISEL-NEXT: s_ashr_i32 s7, s6, 312119; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)2120; GFX1132GISEL-NEXT: s_mul_hi_u32 s9, s2, s62121; GFX1132GISEL-NEXT: s_mul_i32 s3, s3, s62122; GFX1132GISEL-NEXT: s_mul_i32 s7, s2, s72123; GFX1132GISEL-NEXT: s_add_u32 s3, s9, s32124; GFX1132GISEL-NEXT: s_mul_i32 s6, s2, s62125; GFX1132GISEL-NEXT: s_add_u32 s7, s3, s72126; GFX1132GISEL-NEXT: .LBB5_2: ; %Flow2127; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)2128; GFX1132GISEL-NEXT: s_and_not1_saveexec_b32 s2, s82129; GFX1132GISEL-NEXT: s_cbranch_execz .LBB5_42130; GFX1132GISEL-NEXT: ; %bb.3: ; %if2131; GFX1132GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x342132; GFX1132GISEL-NEXT: s_mov_b32 s3, exec_lo2133; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2134; GFX1132GISEL-NEXT: s_bcnt1_i32_b32 s3, s32135; GFX1132GISEL-NEXT: s_sub_i32 s3, 0, s32136; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2137; GFX1132GISEL-NEXT: s_ashr_i32 s6, s3, 312138; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)2139; GFX1132GISEL-NEXT: s_mul_hi_u32 s7, s4, s32140; GFX1132GISEL-NEXT: s_mul_i32 s5, s5, s32141; GFX1132GISEL-NEXT: s_mul_i32 s8, s4, s62142; GFX1132GISEL-NEXT: s_add_u32 s5, s7, s52143; GFX1132GISEL-NEXT: s_mul_i32 s6, s4, s32144; GFX1132GISEL-NEXT: s_add_u32 s7, s5, s82145; GFX1132GISEL-NEXT: .LBB5_4: ; %endif2146; GFX1132GISEL-NEXT: s_or_b32 exec_lo, exec_lo, s22147; GFX1132GISEL-NEXT: v_dual_mov_b32 v0, s6 :: v_dual_mov_b32 v1, s72148; GFX1132GISEL-NEXT: v_mov_b32_e32 v2, 02149; GFX1132GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2150; GFX1132GISEL-NEXT: s_endpgm2151;2152; GFX12DAGISEL-LABEL: divergent_cfg_i64:2153; GFX12DAGISEL: ; %bb.0: ; %entry2154; GFX12DAGISEL-NEXT: s_clause 0x12155; GFX12DAGISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x242156; GFX12DAGISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x342157; GFX12DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v02158; GFX12DAGISEL-NEXT: s_mov_b32 s8, exec_lo2159; GFX12DAGISEL-NEXT: ; implicit-def: $sgpr6_sgpr72160; GFX12DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2161; GFX12DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v02162; GFX12DAGISEL-NEXT: s_xor_b32 s8, exec_lo, s82163; GFX12DAGISEL-NEXT: s_cbranch_execz .LBB5_22164; GFX12DAGISEL-NEXT: ; %bb.1: ; %else2165; GFX12DAGISEL-NEXT: s_mov_b32 s6, exec_lo2166; GFX12DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2167; GFX12DAGISEL-NEXT: s_bcnt1_i32_b32 s6, s62168; GFX12DAGISEL-NEXT: s_sub_co_i32 s6, 0, s62169; GFX12DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2170; GFX12DAGISEL-NEXT: s_ashr_i32 s7, s6, 312171; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x02172; GFX12DAGISEL-NEXT: s_mul_hi_u32 s9, s2, s62173; GFX12DAGISEL-NEXT: s_mul_i32 s3, s3, s62174; GFX12DAGISEL-NEXT: s_mul_i32 s7, s2, s72175; GFX12DAGISEL-NEXT: s_add_co_u32 s3, s9, s32176; GFX12DAGISEL-NEXT: s_mul_i32 s6, s2, s62177; GFX12DAGISEL-NEXT: s_add_co_u32 s7, s3, s72178; GFX12DAGISEL-NEXT: .LBB5_2: ; %Flow2179; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x02180; GFX12DAGISEL-NEXT: s_or_saveexec_b32 s2, s82181; GFX12DAGISEL-NEXT: v_dual_mov_b32 v0, s6 :: v_dual_mov_b32 v1, s72182; GFX12DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s22183; GFX12DAGISEL-NEXT: ; %bb.3: ; %if2184; GFX12DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2185; GFX12DAGISEL-NEXT: s_mov_b32 s3, exec_lo2186; GFX12DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s32187; GFX12DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2188; GFX12DAGISEL-NEXT: s_sub_co_i32 s3, 0, s32189; GFX12DAGISEL-NEXT: s_ashr_i32 s6, s3, 312190; GFX12DAGISEL-NEXT: s_mul_hi_u32 s7, s4, s32191; GFX12DAGISEL-NEXT: s_mul_i32 s5, s5, s32192; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)2193; GFX12DAGISEL-NEXT: s_mul_i32 s6, s4, s62194; GFX12DAGISEL-NEXT: s_add_co_u32 s5, s7, s52195; GFX12DAGISEL-NEXT: s_mul_i32 s4, s4, s32196; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)2197; GFX12DAGISEL-NEXT: s_add_co_u32 s5, s5, s62198; GFX12DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)2199; GFX12DAGISEL-NEXT: v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v1, s52200; GFX12DAGISEL-NEXT: ; %bb.4: ; %endif2201; GFX12DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s22202; GFX12DAGISEL-NEXT: v_mov_b32_e32 v2, 02203; GFX12DAGISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2204; GFX12DAGISEL-NEXT: s_endpgm2205entry:2206 %tid = call i32 @llvm.amdgcn.workitem.id.x()2207 %d_cmp = icmp ult i32 %tid, 162208 br i1 %d_cmp, label %if, label %else2209 2210if:2211 %reducedValTid = call i64 @llvm.amdgcn.wave.reduce.sub.i64(i64 %in2, i32 1)2212 br label %endif2213 2214else:2215 %reducedValIn = call i64 @llvm.amdgcn.wave.reduce.sub.i64(i64 %in, i32 1)2216 br label %endif2217 2218endif:2219 %combine = phi i64 [%reducedValTid, %if], [%reducedValIn, %else]2220 store i64 %combine, ptr addrspace(1) %out2221 ret void2222}2223 2224define amdgpu_kernel void @uniform_value_float(ptr addrspace(1) %out, float %in) {2225; GFX8DAGISEL-LABEL: uniform_value_float:2226; GFX8DAGISEL: ; %bb.0: ; %entry2227; GFX8DAGISEL-NEXT: s_mov_b64 s[0:1], exec2228; GFX8DAGISEL-NEXT: s_load_dword s2, s[4:5], 0x2c2229; GFX8DAGISEL-NEXT: s_bcnt1_i32_b64 s0, s[0:1]2230; GFX8DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s02231; GFX8DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242232; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2233; GFX8DAGISEL-NEXT: v_mul_f32_e64 v0, -s2, v02234; GFX8DAGISEL-NEXT: v_readfirstlane_b32 s2, v02235; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s02236; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s12237; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s22238; GFX8DAGISEL-NEXT: flat_store_dword v[0:1], v22239; GFX8DAGISEL-NEXT: s_endpgm2240;2241; GFX8GISEL-LABEL: uniform_value_float:2242; GFX8GISEL: ; %bb.0: ; %entry2243; GFX8GISEL-NEXT: s_mov_b64 s[0:1], exec2244; GFX8GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c2245; GFX8GISEL-NEXT: s_bcnt1_i32_b64 s0, s[0:1]2246; GFX8GISEL-NEXT: v_cvt_f32_i32_e32 v0, s02247; GFX8GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242248; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)2249; GFX8GISEL-NEXT: v_mul_f32_e64 v0, -s2, v02250; GFX8GISEL-NEXT: v_readfirstlane_b32 s2, v02251; GFX8GISEL-NEXT: v_mov_b32_e32 v0, s02252; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s22253; GFX8GISEL-NEXT: v_mov_b32_e32 v1, s12254; GFX8GISEL-NEXT: flat_store_dword v[0:1], v22255; GFX8GISEL-NEXT: s_endpgm2256;2257; GFX9DAGISEL-LABEL: uniform_value_float:2258; GFX9DAGISEL: ; %bb.0: ; %entry2259; GFX9DAGISEL-NEXT: s_mov_b64 s[0:1], exec2260; GFX9DAGISEL-NEXT: s_load_dword s2, s[4:5], 0x2c2261; GFX9DAGISEL-NEXT: s_bcnt1_i32_b64 s0, s[0:1]2262; GFX9DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s02263; GFX9DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242264; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, 02265; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2266; GFX9DAGISEL-NEXT: v_mul_f32_e64 v0, -s2, v02267; GFX9DAGISEL-NEXT: v_readfirstlane_b32 s2, v02268; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, s22269; GFX9DAGISEL-NEXT: global_store_dword v1, v0, s[0:1]2270; GFX9DAGISEL-NEXT: s_endpgm2271;2272; GFX9GISEL-LABEL: uniform_value_float:2273; GFX9GISEL: ; %bb.0: ; %entry2274; GFX9GISEL-NEXT: s_mov_b64 s[0:1], exec2275; GFX9GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c2276; GFX9GISEL-NEXT: s_bcnt1_i32_b64 s0, s[0:1]2277; GFX9GISEL-NEXT: v_cvt_f32_i32_e32 v0, s02278; GFX9GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242279; GFX9GISEL-NEXT: v_mov_b32_e32 v1, 02280; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)2281; GFX9GISEL-NEXT: v_mul_f32_e64 v0, -s2, v02282; GFX9GISEL-NEXT: v_readfirstlane_b32 s2, v02283; GFX9GISEL-NEXT: v_mov_b32_e32 v0, s22284; GFX9GISEL-NEXT: global_store_dword v1, v0, s[0:1]2285; GFX9GISEL-NEXT: s_endpgm2286;2287; GFX1064DAGISEL-LABEL: uniform_value_float:2288; GFX1064DAGISEL: ; %bb.0: ; %entry2289; GFX1064DAGISEL-NEXT: s_load_dword s2, s[4:5], 0x2c2290; GFX1064DAGISEL-NEXT: s_mov_b64 s[0:1], exec2291; GFX1064DAGISEL-NEXT: s_bcnt1_i32_b64 s3, s[0:1]2292; GFX1064DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242293; GFX1064DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s32294; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2295; GFX1064DAGISEL-NEXT: v_mul_f32_e64 v0, -s2, v02296; GFX1064DAGISEL-NEXT: v_readfirstlane_b32 s2, v02297; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, 02298; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, s22299; GFX1064DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]2300; GFX1064DAGISEL-NEXT: s_endpgm2301;2302; GFX1064GISEL-LABEL: uniform_value_float:2303; GFX1064GISEL: ; %bb.0: ; %entry2304; GFX1064GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c2305; GFX1064GISEL-NEXT: s_mov_b64 s[0:1], exec2306; GFX1064GISEL-NEXT: v_mov_b32_e32 v1, 02307; GFX1064GISEL-NEXT: s_bcnt1_i32_b64 s0, s[0:1]2308; GFX1064GISEL-NEXT: v_cvt_f32_i32_e32 v0, s02309; GFX1064GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242310; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)2311; GFX1064GISEL-NEXT: v_mul_f32_e64 v0, -s2, v02312; GFX1064GISEL-NEXT: v_readfirstlane_b32 s2, v02313; GFX1064GISEL-NEXT: v_mov_b32_e32 v0, s22314; GFX1064GISEL-NEXT: global_store_dword v1, v0, s[0:1]2315; GFX1064GISEL-NEXT: s_endpgm2316;2317; GFX1032DAGISEL-LABEL: uniform_value_float:2318; GFX1032DAGISEL: ; %bb.0: ; %entry2319; GFX1032DAGISEL-NEXT: s_load_dword s2, s[4:5], 0x2c2320; GFX1032DAGISEL-NEXT: s_mov_b32 s0, exec_lo2321; GFX1032DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s02322; GFX1032DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242323; GFX1032DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s32324; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2325; GFX1032DAGISEL-NEXT: v_mul_f32_e64 v0, -s2, v02326; GFX1032DAGISEL-NEXT: v_readfirstlane_b32 s2, v02327; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, 02328; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, s22329; GFX1032DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]2330; GFX1032DAGISEL-NEXT: s_endpgm2331;2332; GFX1032GISEL-LABEL: uniform_value_float:2333; GFX1032GISEL: ; %bb.0: ; %entry2334; GFX1032GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c2335; GFX1032GISEL-NEXT: s_mov_b32 s0, exec_lo2336; GFX1032GISEL-NEXT: v_mov_b32_e32 v1, 02337; GFX1032GISEL-NEXT: s_bcnt1_i32_b32 s0, s02338; GFX1032GISEL-NEXT: v_cvt_f32_i32_e32 v0, s02339; GFX1032GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242340; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)2341; GFX1032GISEL-NEXT: v_mul_f32_e64 v0, -s2, v02342; GFX1032GISEL-NEXT: v_readfirstlane_b32 s2, v02343; GFX1032GISEL-NEXT: v_mov_b32_e32 v0, s22344; GFX1032GISEL-NEXT: global_store_dword v1, v0, s[0:1]2345; GFX1032GISEL-NEXT: s_endpgm2346;2347; GFX1164DAGISEL-LABEL: uniform_value_float:2348; GFX1164DAGISEL: ; %bb.0: ; %entry2349; GFX1164DAGISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c2350; GFX1164DAGISEL-NEXT: s_mov_b64 s[0:1], exec2351; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)2352; GFX1164DAGISEL-NEXT: s_bcnt1_i32_b64 s3, s[0:1]2353; GFX1164DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x242354; GFX1164DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s32355; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2356; GFX1164DAGISEL-NEXT: v_mul_f32_e64 v0, -s2, v02357; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2358; GFX1164DAGISEL-NEXT: v_readfirstlane_b32 s2, v02359; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, 02360; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s22361; GFX1164DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]2362; GFX1164DAGISEL-NEXT: s_endpgm2363;2364; GFX1164GISEL-LABEL: uniform_value_float:2365; GFX1164GISEL: ; %bb.0: ; %entry2366; GFX1164GISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c2367; GFX1164GISEL-NEXT: s_mov_b64 s[0:1], exec2368; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, 02369; GFX1164GISEL-NEXT: s_bcnt1_i32_b64 s0, s[0:1]2370; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)2371; GFX1164GISEL-NEXT: v_cvt_f32_i32_e32 v0, s02372; GFX1164GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x242373; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)2374; GFX1164GISEL-NEXT: v_mul_f32_e64 v0, -s2, v02375; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2376; GFX1164GISEL-NEXT: v_readfirstlane_b32 s2, v02377; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, s22378; GFX1164GISEL-NEXT: global_store_b32 v1, v0, s[0:1]2379; GFX1164GISEL-NEXT: s_endpgm2380;2381; GFX1132DAGISEL-LABEL: uniform_value_float:2382; GFX1132DAGISEL: ; %bb.0: ; %entry2383; GFX1132DAGISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c2384; GFX1132DAGISEL-NEXT: s_mov_b32 s0, exec_lo2385; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)2386; GFX1132DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s02387; GFX1132DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x242388; GFX1132DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s32389; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2390; GFX1132DAGISEL-NEXT: v_mul_f32_e64 v0, -s2, v02391; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2392; GFX1132DAGISEL-NEXT: v_readfirstlane_b32 s2, v02393; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s22394; GFX1132DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]2395; GFX1132DAGISEL-NEXT: s_endpgm2396;2397; GFX1132GISEL-LABEL: uniform_value_float:2398; GFX1132GISEL: ; %bb.0: ; %entry2399; GFX1132GISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c2400; GFX1132GISEL-NEXT: s_mov_b32 s0, exec_lo2401; GFX1132GISEL-NEXT: v_mov_b32_e32 v1, 02402; GFX1132GISEL-NEXT: s_bcnt1_i32_b32 s0, s02403; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)2404; GFX1132GISEL-NEXT: v_cvt_f32_i32_e32 v0, s02405; GFX1132GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x242406; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)2407; GFX1132GISEL-NEXT: v_mul_f32_e64 v0, -s2, v02408; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2409; GFX1132GISEL-NEXT: v_readfirstlane_b32 s2, v02410; GFX1132GISEL-NEXT: v_mov_b32_e32 v0, s22411; GFX1132GISEL-NEXT: global_store_b32 v1, v0, s[0:1]2412; GFX1132GISEL-NEXT: s_endpgm2413;2414; GFX12DAGISEL-LABEL: uniform_value_float:2415; GFX12DAGISEL: ; %bb.0: ; %entry2416; GFX12DAGISEL-NEXT: s_load_b96 s[0:2], s[4:5], 0x242417; GFX12DAGISEL-NEXT: s_mov_b32 s3, exec_lo2418; GFX12DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2419; GFX12DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s32420; GFX12DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s32421; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x02422; GFX12DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2423; GFX12DAGISEL-NEXT: v_mul_f32_e64 v0, -s2, v02424; GFX12DAGISEL-NEXT: v_readfirstlane_b32 s2, v02425; GFX12DAGISEL-NEXT: s_wait_alu depctr_va_sdst(0)2426; GFX12DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2427; GFX12DAGISEL-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s22428; GFX12DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]2429; GFX12DAGISEL-NEXT: s_endpgm2430entry:2431 %result = call float @llvm.amdgcn.wave.reduce.fsub(float %in, i32 1)2432 store float %result, ptr addrspace(1) %out2433 ret void2434}2435 2436define void @divergent_value_float(ptr addrspace(1) %out, float %id.x) {2437; GFX8DAGISEL-LABEL: divergent_value_float:2438; GFX8DAGISEL: ; %bb.0: ; %entry2439; GFX8DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2440; GFX8DAGISEL-NEXT: s_mov_b64 s[4:5], exec2441; GFX8DAGISEL-NEXT: s_mov_b32 s6, 02442; GFX8DAGISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12443; GFX8DAGISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]2444; GFX8DAGISEL-NEXT: v_readlane_b32 s8, v2, s72445; GFX8DAGISEL-NEXT: v_mov_b32_e32 v3, s82446; GFX8DAGISEL-NEXT: s_bitset0_b64 s[4:5], s72447; GFX8DAGISEL-NEXT: v_sub_f32_e32 v3, s6, v32448; GFX8DAGISEL-NEXT: s_cmp_lg_u64 s[4:5], 02449; GFX8DAGISEL-NEXT: v_readfirstlane_b32 s6, v32450; GFX8DAGISEL-NEXT: s_cbranch_scc1 .LBB7_12451; GFX8DAGISEL-NEXT: ; %bb.2:2452; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s62453; GFX8DAGISEL-NEXT: flat_store_dword v[0:1], v22454; GFX8DAGISEL-NEXT: s_waitcnt vmcnt(0)2455; GFX8DAGISEL-NEXT: s_setpc_b64 s[30:31]2456;2457; GFX8GISEL-LABEL: divergent_value_float:2458; GFX8GISEL: ; %bb.0: ; %entry2459; GFX8GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2460; GFX8GISEL-NEXT: s_mov_b64 s[4:5], exec2461; GFX8GISEL-NEXT: s_mov_b32 s6, 02462; GFX8GISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12463; GFX8GISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]2464; GFX8GISEL-NEXT: v_readlane_b32 s8, v2, s72465; GFX8GISEL-NEXT: v_mov_b32_e32 v3, s82466; GFX8GISEL-NEXT: s_bitset0_b64 s[4:5], s72467; GFX8GISEL-NEXT: v_sub_f32_e32 v3, s6, v32468; GFX8GISEL-NEXT: s_cmp_lg_u64 s[4:5], 02469; GFX8GISEL-NEXT: v_readfirstlane_b32 s6, v32470; GFX8GISEL-NEXT: s_cbranch_scc1 .LBB7_12471; GFX8GISEL-NEXT: ; %bb.2:2472; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s62473; GFX8GISEL-NEXT: flat_store_dword v[0:1], v22474; GFX8GISEL-NEXT: s_waitcnt vmcnt(0)2475; GFX8GISEL-NEXT: s_setpc_b64 s[30:31]2476;2477; GFX9DAGISEL-LABEL: divergent_value_float:2478; GFX9DAGISEL: ; %bb.0: ; %entry2479; GFX9DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2480; GFX9DAGISEL-NEXT: s_mov_b64 s[4:5], exec2481; GFX9DAGISEL-NEXT: s_mov_b32 s6, 02482; GFX9DAGISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12483; GFX9DAGISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]2484; GFX9DAGISEL-NEXT: v_readlane_b32 s8, v2, s72485; GFX9DAGISEL-NEXT: v_mov_b32_e32 v3, s82486; GFX9DAGISEL-NEXT: s_bitset0_b64 s[4:5], s72487; GFX9DAGISEL-NEXT: v_sub_f32_e32 v3, s6, v32488; GFX9DAGISEL-NEXT: s_cmp_lg_u64 s[4:5], 02489; GFX9DAGISEL-NEXT: v_readfirstlane_b32 s6, v32490; GFX9DAGISEL-NEXT: s_cbranch_scc1 .LBB7_12491; GFX9DAGISEL-NEXT: ; %bb.2:2492; GFX9DAGISEL-NEXT: v_mov_b32_e32 v2, s62493; GFX9DAGISEL-NEXT: global_store_dword v[0:1], v2, off2494; GFX9DAGISEL-NEXT: s_waitcnt vmcnt(0)2495; GFX9DAGISEL-NEXT: s_setpc_b64 s[30:31]2496;2497; GFX9GISEL-LABEL: divergent_value_float:2498; GFX9GISEL: ; %bb.0: ; %entry2499; GFX9GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2500; GFX9GISEL-NEXT: s_mov_b64 s[4:5], exec2501; GFX9GISEL-NEXT: s_mov_b32 s6, 02502; GFX9GISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12503; GFX9GISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]2504; GFX9GISEL-NEXT: v_readlane_b32 s8, v2, s72505; GFX9GISEL-NEXT: v_mov_b32_e32 v3, s82506; GFX9GISEL-NEXT: s_bitset0_b64 s[4:5], s72507; GFX9GISEL-NEXT: v_sub_f32_e32 v3, s6, v32508; GFX9GISEL-NEXT: s_cmp_lg_u64 s[4:5], 02509; GFX9GISEL-NEXT: v_readfirstlane_b32 s6, v32510; GFX9GISEL-NEXT: s_cbranch_scc1 .LBB7_12511; GFX9GISEL-NEXT: ; %bb.2:2512; GFX9GISEL-NEXT: v_mov_b32_e32 v2, s62513; GFX9GISEL-NEXT: global_store_dword v[0:1], v2, off2514; GFX9GISEL-NEXT: s_waitcnt vmcnt(0)2515; GFX9GISEL-NEXT: s_setpc_b64 s[30:31]2516;2517; GFX1064DAGISEL-LABEL: divergent_value_float:2518; GFX1064DAGISEL: ; %bb.0: ; %entry2519; GFX1064DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2520; GFX1064DAGISEL-NEXT: s_mov_b64 s[4:5], exec2521; GFX1064DAGISEL-NEXT: s_mov_b32 s6, 02522; GFX1064DAGISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12523; GFX1064DAGISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]2524; GFX1064DAGISEL-NEXT: v_readlane_b32 s8, v2, s72525; GFX1064DAGISEL-NEXT: s_bitset0_b64 s[4:5], s72526; GFX1064DAGISEL-NEXT: s_cmp_lg_u64 s[4:5], 02527; GFX1064DAGISEL-NEXT: v_sub_f32_e64 v3, s6, s82528; GFX1064DAGISEL-NEXT: v_readfirstlane_b32 s6, v32529; GFX1064DAGISEL-NEXT: s_cbranch_scc1 .LBB7_12530; GFX1064DAGISEL-NEXT: ; %bb.2:2531; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v2, s62532; GFX1064DAGISEL-NEXT: global_store_dword v[0:1], v2, off2533; GFX1064DAGISEL-NEXT: s_setpc_b64 s[30:31]2534;2535; GFX1064GISEL-LABEL: divergent_value_float:2536; GFX1064GISEL: ; %bb.0: ; %entry2537; GFX1064GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2538; GFX1064GISEL-NEXT: s_mov_b64 s[4:5], exec2539; GFX1064GISEL-NEXT: s_mov_b32 s6, 02540; GFX1064GISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12541; GFX1064GISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]2542; GFX1064GISEL-NEXT: v_readlane_b32 s8, v2, s72543; GFX1064GISEL-NEXT: s_bitset0_b64 s[4:5], s72544; GFX1064GISEL-NEXT: s_cmp_lg_u64 s[4:5], 02545; GFX1064GISEL-NEXT: v_sub_f32_e64 v3, s6, s82546; GFX1064GISEL-NEXT: v_readfirstlane_b32 s6, v32547; GFX1064GISEL-NEXT: s_cbranch_scc1 .LBB7_12548; GFX1064GISEL-NEXT: ; %bb.2:2549; GFX1064GISEL-NEXT: v_mov_b32_e32 v2, s62550; GFX1064GISEL-NEXT: global_store_dword v[0:1], v2, off2551; GFX1064GISEL-NEXT: s_setpc_b64 s[30:31]2552;2553; GFX1032DAGISEL-LABEL: divergent_value_float:2554; GFX1032DAGISEL: ; %bb.0: ; %entry2555; GFX1032DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2556; GFX1032DAGISEL-NEXT: s_mov_b32 s4, exec_lo2557; GFX1032DAGISEL-NEXT: s_mov_b32 s5, 02558; GFX1032DAGISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12559; GFX1032DAGISEL-NEXT: s_ff1_i32_b32 s6, s42560; GFX1032DAGISEL-NEXT: v_readlane_b32 s7, v2, s62561; GFX1032DAGISEL-NEXT: s_bitset0_b32 s4, s62562; GFX1032DAGISEL-NEXT: s_cmp_lg_u32 s4, 02563; GFX1032DAGISEL-NEXT: v_sub_f32_e64 v3, s5, s72564; GFX1032DAGISEL-NEXT: v_readfirstlane_b32 s5, v32565; GFX1032DAGISEL-NEXT: s_cbranch_scc1 .LBB7_12566; GFX1032DAGISEL-NEXT: ; %bb.2:2567; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v2, s52568; GFX1032DAGISEL-NEXT: global_store_dword v[0:1], v2, off2569; GFX1032DAGISEL-NEXT: s_setpc_b64 s[30:31]2570;2571; GFX1032GISEL-LABEL: divergent_value_float:2572; GFX1032GISEL: ; %bb.0: ; %entry2573; GFX1032GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2574; GFX1032GISEL-NEXT: s_mov_b32 s4, exec_lo2575; GFX1032GISEL-NEXT: s_mov_b32 s5, 02576; GFX1032GISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12577; GFX1032GISEL-NEXT: s_ff1_i32_b32 s6, s42578; GFX1032GISEL-NEXT: v_readlane_b32 s7, v2, s62579; GFX1032GISEL-NEXT: s_bitset0_b32 s4, s62580; GFX1032GISEL-NEXT: s_cmp_lg_u32 s4, 02581; GFX1032GISEL-NEXT: v_sub_f32_e64 v3, s5, s72582; GFX1032GISEL-NEXT: v_readfirstlane_b32 s5, v32583; GFX1032GISEL-NEXT: s_cbranch_scc1 .LBB7_12584; GFX1032GISEL-NEXT: ; %bb.2:2585; GFX1032GISEL-NEXT: v_mov_b32_e32 v2, s52586; GFX1032GISEL-NEXT: global_store_dword v[0:1], v2, off2587; GFX1032GISEL-NEXT: s_setpc_b64 s[30:31]2588;2589; GFX1164DAGISEL-LABEL: divergent_value_float:2590; GFX1164DAGISEL: ; %bb.0: ; %entry2591; GFX1164DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2592; GFX1164DAGISEL-NEXT: s_mov_b64 s[0:1], exec2593; GFX1164DAGISEL-NEXT: s_mov_b32 s2, 02594; GFX1164DAGISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12595; GFX1164DAGISEL-NEXT: s_ctz_i32_b64 s3, s[0:1]2596; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)2597; GFX1164DAGISEL-NEXT: v_readlane_b32 s4, v2, s32598; GFX1164DAGISEL-NEXT: s_bitset0_b64 s[0:1], s32599; GFX1164DAGISEL-NEXT: s_cmp_lg_u64 s[0:1], 02600; GFX1164DAGISEL-NEXT: v_sub_f32_e64 v3, s2, s42601; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2602; GFX1164DAGISEL-NEXT: v_readfirstlane_b32 s2, v32603; GFX1164DAGISEL-NEXT: s_cbranch_scc1 .LBB7_12604; GFX1164DAGISEL-NEXT: ; %bb.2:2605; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v2, s22606; GFX1164DAGISEL-NEXT: global_store_b32 v[0:1], v2, off2607; GFX1164DAGISEL-NEXT: s_setpc_b64 s[30:31]2608;2609; GFX1164GISEL-LABEL: divergent_value_float:2610; GFX1164GISEL: ; %bb.0: ; %entry2611; GFX1164GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2612; GFX1164GISEL-NEXT: s_mov_b64 s[0:1], exec2613; GFX1164GISEL-NEXT: s_mov_b32 s2, 02614; GFX1164GISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12615; GFX1164GISEL-NEXT: s_ctz_i32_b64 s3, s[0:1]2616; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)2617; GFX1164GISEL-NEXT: v_readlane_b32 s4, v2, s32618; GFX1164GISEL-NEXT: s_bitset0_b64 s[0:1], s32619; GFX1164GISEL-NEXT: s_cmp_lg_u64 s[0:1], 02620; GFX1164GISEL-NEXT: v_sub_f32_e64 v3, s2, s42621; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2622; GFX1164GISEL-NEXT: v_readfirstlane_b32 s2, v32623; GFX1164GISEL-NEXT: s_cbranch_scc1 .LBB7_12624; GFX1164GISEL-NEXT: ; %bb.2:2625; GFX1164GISEL-NEXT: v_mov_b32_e32 v2, s22626; GFX1164GISEL-NEXT: global_store_b32 v[0:1], v2, off2627; GFX1164GISEL-NEXT: s_setpc_b64 s[30:31]2628;2629; GFX1132DAGISEL-LABEL: divergent_value_float:2630; GFX1132DAGISEL: ; %bb.0: ; %entry2631; GFX1132DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2632; GFX1132DAGISEL-NEXT: s_mov_b32 s0, exec_lo2633; GFX1132DAGISEL-NEXT: s_mov_b32 s1, 02634; GFX1132DAGISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12635; GFX1132DAGISEL-NEXT: s_ctz_i32_b32 s2, s02636; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)2637; GFX1132DAGISEL-NEXT: v_readlane_b32 s3, v2, s22638; GFX1132DAGISEL-NEXT: s_bitset0_b32 s0, s22639; GFX1132DAGISEL-NEXT: s_cmp_lg_u32 s0, 02640; GFX1132DAGISEL-NEXT: v_sub_f32_e64 v3, s1, s32641; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2642; GFX1132DAGISEL-NEXT: v_readfirstlane_b32 s1, v32643; GFX1132DAGISEL-NEXT: s_cbranch_scc1 .LBB7_12644; GFX1132DAGISEL-NEXT: ; %bb.2:2645; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v2, s12646; GFX1132DAGISEL-NEXT: global_store_b32 v[0:1], v2, off2647; GFX1132DAGISEL-NEXT: s_setpc_b64 s[30:31]2648;2649; GFX1132GISEL-LABEL: divergent_value_float:2650; GFX1132GISEL: ; %bb.0: ; %entry2651; GFX1132GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2652; GFX1132GISEL-NEXT: s_mov_b32 s0, exec_lo2653; GFX1132GISEL-NEXT: s_mov_b32 s1, 02654; GFX1132GISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12655; GFX1132GISEL-NEXT: s_ctz_i32_b32 s2, s02656; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)2657; GFX1132GISEL-NEXT: v_readlane_b32 s3, v2, s22658; GFX1132GISEL-NEXT: s_bitset0_b32 s0, s22659; GFX1132GISEL-NEXT: s_cmp_lg_u32 s0, 02660; GFX1132GISEL-NEXT: v_sub_f32_e64 v3, s1, s32661; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2662; GFX1132GISEL-NEXT: v_readfirstlane_b32 s1, v32663; GFX1132GISEL-NEXT: s_cbranch_scc1 .LBB7_12664; GFX1132GISEL-NEXT: ; %bb.2:2665; GFX1132GISEL-NEXT: v_mov_b32_e32 v2, s12666; GFX1132GISEL-NEXT: global_store_b32 v[0:1], v2, off2667; GFX1132GISEL-NEXT: s_setpc_b64 s[30:31]2668;2669; GFX12DAGISEL-LABEL: divergent_value_float:2670; GFX12DAGISEL: ; %bb.0: ; %entry2671; GFX12DAGISEL-NEXT: s_wait_loadcnt_dscnt 0x02672; GFX12DAGISEL-NEXT: s_wait_expcnt 0x02673; GFX12DAGISEL-NEXT: s_wait_samplecnt 0x02674; GFX12DAGISEL-NEXT: s_wait_bvhcnt 0x02675; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x02676; GFX12DAGISEL-NEXT: s_mov_b32 s0, exec_lo2677; GFX12DAGISEL-NEXT: s_mov_b32 s1, 02678; GFX12DAGISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12679; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)2680; GFX12DAGISEL-NEXT: s_ctz_i32_b32 s2, s02681; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)2682; GFX12DAGISEL-NEXT: v_readlane_b32 s3, v2, s22683; GFX12DAGISEL-NEXT: s_bitset0_b32 s0, s22684; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)2685; GFX12DAGISEL-NEXT: s_cmp_lg_u32 s0, 02686; GFX12DAGISEL-NEXT: v_sub_f32_e64 v3, s1, s32687; GFX12DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2688; GFX12DAGISEL-NEXT: v_readfirstlane_b32 s1, v32689; GFX12DAGISEL-NEXT: s_cbranch_scc1 .LBB7_12690; GFX12DAGISEL-NEXT: ; %bb.2:2691; GFX12DAGISEL-NEXT: s_wait_alu depctr_va_sdst(0)2692; GFX12DAGISEL-NEXT: v_mov_b32_e32 v2, s12693; GFX12DAGISEL-NEXT: global_store_b32 v[0:1], v2, off2694; GFX12DAGISEL-NEXT: s_setpc_b64 s[30:31]2695entry:2696 %result = call float @llvm.amdgcn.wave.reduce.fsub(float %id.x, i32 1)2697 store float %result, ptr addrspace(1) %out2698 ret void2699}2700 2701define amdgpu_kernel void @divergent_cfg_float(ptr addrspace(1) %out, float %in, float %in2) {2702; GFX8DAGISEL-LABEL: divergent_cfg_float:2703; GFX8DAGISEL: ; %bb.0: ; %entry2704; GFX8DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2c2705; GFX8DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v02706; GFX8DAGISEL-NEXT: ; implicit-def: $sgpr62707; GFX8DAGISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc2708; GFX8DAGISEL-NEXT: s_xor_b64 s[2:3], exec, s[2:3]2709; GFX8DAGISEL-NEXT: s_cbranch_execz .LBB8_22710; GFX8DAGISEL-NEXT: ; %bb.1: ; %else2711; GFX8DAGISEL-NEXT: s_mov_b64 s[6:7], exec2712; GFX8DAGISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]2713; GFX8DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s62714; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2715; GFX8DAGISEL-NEXT: v_mul_f32_e64 v0, -s0, v02716; GFX8DAGISEL-NEXT: v_readfirstlane_b32 s6, v02717; GFX8DAGISEL-NEXT: .LBB8_2: ; %Flow2718; GFX8DAGISEL-NEXT: s_or_saveexec_b64 s[2:3], s[2:3]2719; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s62720; GFX8DAGISEL-NEXT: s_xor_b64 exec, exec, s[2:3]2721; GFX8DAGISEL-NEXT: s_cbranch_execz .LBB8_42722; GFX8DAGISEL-NEXT: ; %bb.3: ; %if2723; GFX8DAGISEL-NEXT: s_mov_b64 s[6:7], exec2724; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2725; GFX8DAGISEL-NEXT: s_bcnt1_i32_b64 s0, s[6:7]2726; GFX8DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s02727; GFX8DAGISEL-NEXT: v_mul_f32_e64 v0, -s1, v02728; GFX8DAGISEL-NEXT: v_readfirstlane_b32 s0, v02729; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s02730; GFX8DAGISEL-NEXT: .LBB8_4: ; %endif2731; GFX8DAGISEL-NEXT: s_or_b64 exec, exec, s[2:3]2732; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2733; GFX8DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242734; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2735; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s12736; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s02737; GFX8DAGISEL-NEXT: flat_store_dword v[1:2], v02738; GFX8DAGISEL-NEXT: s_endpgm2739;2740; GFX8GISEL-LABEL: divergent_cfg_float:2741; GFX8GISEL: ; %bb.0: ; %entry2742; GFX8GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2c2743; GFX8GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v02744; GFX8GISEL-NEXT: ; implicit-def: $sgpr62745; GFX8GISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc2746; GFX8GISEL-NEXT: s_xor_b64 s[2:3], exec, s[2:3]2747; GFX8GISEL-NEXT: s_cbranch_execz .LBB8_22748; GFX8GISEL-NEXT: ; %bb.1: ; %else2749; GFX8GISEL-NEXT: s_mov_b64 s[6:7], exec2750; GFX8GISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]2751; GFX8GISEL-NEXT: v_cvt_f32_i32_e32 v0, s62752; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)2753; GFX8GISEL-NEXT: v_mul_f32_e64 v0, -s0, v02754; GFX8GISEL-NEXT: v_readfirstlane_b32 s6, v02755; GFX8GISEL-NEXT: .LBB8_2: ; %Flow2756; GFX8GISEL-NEXT: s_andn2_saveexec_b64 s[2:3], s[2:3]2757; GFX8GISEL-NEXT: s_cbranch_execz .LBB8_42758; GFX8GISEL-NEXT: ; %bb.3: ; %if2759; GFX8GISEL-NEXT: s_mov_b64 s[6:7], exec2760; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)2761; GFX8GISEL-NEXT: s_bcnt1_i32_b64 s0, s[6:7]2762; GFX8GISEL-NEXT: v_cvt_f32_i32_e32 v0, s02763; GFX8GISEL-NEXT: v_mul_f32_e64 v0, -s1, v02764; GFX8GISEL-NEXT: v_readfirstlane_b32 s6, v02765; GFX8GISEL-NEXT: .LBB8_4: ; %endif2766; GFX8GISEL-NEXT: s_or_b64 exec, exec, s[2:3]2767; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)2768; GFX8GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242769; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s62770; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)2771; GFX8GISEL-NEXT: v_mov_b32_e32 v0, s02772; GFX8GISEL-NEXT: v_mov_b32_e32 v1, s12773; GFX8GISEL-NEXT: flat_store_dword v[0:1], v22774; GFX8GISEL-NEXT: s_endpgm2775;2776; GFX9DAGISEL-LABEL: divergent_cfg_float:2777; GFX9DAGISEL: ; %bb.0: ; %entry2778; GFX9DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2c2779; GFX9DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v02780; GFX9DAGISEL-NEXT: ; implicit-def: $sgpr62781; GFX9DAGISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc2782; GFX9DAGISEL-NEXT: s_xor_b64 s[2:3], exec, s[2:3]2783; GFX9DAGISEL-NEXT: s_cbranch_execz .LBB8_22784; GFX9DAGISEL-NEXT: ; %bb.1: ; %else2785; GFX9DAGISEL-NEXT: s_mov_b64 s[6:7], exec2786; GFX9DAGISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]2787; GFX9DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s62788; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2789; GFX9DAGISEL-NEXT: v_mul_f32_e64 v0, -s0, v02790; GFX9DAGISEL-NEXT: v_readfirstlane_b32 s6, v02791; GFX9DAGISEL-NEXT: .LBB8_2: ; %Flow2792; GFX9DAGISEL-NEXT: s_or_saveexec_b64 s[2:3], s[2:3]2793; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, s62794; GFX9DAGISEL-NEXT: s_xor_b64 exec, exec, s[2:3]2795; GFX9DAGISEL-NEXT: s_cbranch_execz .LBB8_42796; GFX9DAGISEL-NEXT: ; %bb.3: ; %if2797; GFX9DAGISEL-NEXT: s_mov_b64 s[6:7], exec2798; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2799; GFX9DAGISEL-NEXT: s_bcnt1_i32_b64 s0, s[6:7]2800; GFX9DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s02801; GFX9DAGISEL-NEXT: v_mul_f32_e64 v0, -s1, v02802; GFX9DAGISEL-NEXT: v_readfirstlane_b32 s0, v02803; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, s02804; GFX9DAGISEL-NEXT: .LBB8_4: ; %endif2805; GFX9DAGISEL-NEXT: s_or_b64 exec, exec, s[2:3]2806; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2807; GFX9DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242808; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, 02809; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2810; GFX9DAGISEL-NEXT: global_store_dword v1, v0, s[0:1]2811; GFX9DAGISEL-NEXT: s_endpgm2812;2813; GFX9GISEL-LABEL: divergent_cfg_float:2814; GFX9GISEL: ; %bb.0: ; %entry2815; GFX9GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2c2816; GFX9GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v02817; GFX9GISEL-NEXT: ; implicit-def: $sgpr62818; GFX9GISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc2819; GFX9GISEL-NEXT: s_xor_b64 s[2:3], exec, s[2:3]2820; GFX9GISEL-NEXT: s_cbranch_execz .LBB8_22821; GFX9GISEL-NEXT: ; %bb.1: ; %else2822; GFX9GISEL-NEXT: s_mov_b64 s[6:7], exec2823; GFX9GISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]2824; GFX9GISEL-NEXT: v_cvt_f32_i32_e32 v0, s62825; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)2826; GFX9GISEL-NEXT: v_mul_f32_e64 v0, -s0, v02827; GFX9GISEL-NEXT: v_readfirstlane_b32 s6, v02828; GFX9GISEL-NEXT: .LBB8_2: ; %Flow2829; GFX9GISEL-NEXT: s_andn2_saveexec_b64 s[2:3], s[2:3]2830; GFX9GISEL-NEXT: s_cbranch_execz .LBB8_42831; GFX9GISEL-NEXT: ; %bb.3: ; %if2832; GFX9GISEL-NEXT: s_mov_b64 s[6:7], exec2833; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)2834; GFX9GISEL-NEXT: s_bcnt1_i32_b64 s0, s[6:7]2835; GFX9GISEL-NEXT: v_cvt_f32_i32_e32 v0, s02836; GFX9GISEL-NEXT: v_mul_f32_e64 v0, -s1, v02837; GFX9GISEL-NEXT: v_readfirstlane_b32 s6, v02838; GFX9GISEL-NEXT: .LBB8_4: ; %endif2839; GFX9GISEL-NEXT: s_or_b64 exec, exec, s[2:3]2840; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)2841; GFX9GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242842; GFX9GISEL-NEXT: v_mov_b32_e32 v0, s62843; GFX9GISEL-NEXT: v_mov_b32_e32 v1, 02844; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)2845; GFX9GISEL-NEXT: global_store_dword v1, v0, s[0:1]2846; GFX9GISEL-NEXT: s_endpgm2847;2848; GFX1064DAGISEL-LABEL: divergent_cfg_float:2849; GFX1064DAGISEL: ; %bb.0: ; %entry2850; GFX1064DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2c2851; GFX1064DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v02852; GFX1064DAGISEL-NEXT: ; implicit-def: $sgpr62853; GFX1064DAGISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc2854; GFX1064DAGISEL-NEXT: s_xor_b64 s[2:3], exec, s[2:3]2855; GFX1064DAGISEL-NEXT: s_cbranch_execz .LBB8_22856; GFX1064DAGISEL-NEXT: ; %bb.1: ; %else2857; GFX1064DAGISEL-NEXT: s_mov_b64 s[6:7], exec2858; GFX1064DAGISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]2859; GFX1064DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s62860; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2861; GFX1064DAGISEL-NEXT: v_mul_f32_e64 v0, -s0, v02862; GFX1064DAGISEL-NEXT: v_readfirstlane_b32 s6, v02863; GFX1064DAGISEL-NEXT: .LBB8_2: ; %Flow2864; GFX1064DAGISEL-NEXT: s_or_saveexec_b64 s[2:3], s[2:3]2865; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, s62866; GFX1064DAGISEL-NEXT: s_xor_b64 exec, exec, s[2:3]2867; GFX1064DAGISEL-NEXT: s_cbranch_execz .LBB8_42868; GFX1064DAGISEL-NEXT: ; %bb.3: ; %if2869; GFX1064DAGISEL-NEXT: s_mov_b64 s[6:7], exec2870; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2871; GFX1064DAGISEL-NEXT: s_bcnt1_i32_b64 s0, s[6:7]2872; GFX1064DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s02873; GFX1064DAGISEL-NEXT: v_mul_f32_e64 v0, -s1, v02874; GFX1064DAGISEL-NEXT: v_readfirstlane_b32 s0, v02875; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, s02876; GFX1064DAGISEL-NEXT: .LBB8_4: ; %endif2877; GFX1064DAGISEL-NEXT: s_or_b64 exec, exec, s[2:3]2878; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2879; GFX1064DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242880; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, 02881; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2882; GFX1064DAGISEL-NEXT: global_store_dword v1, v0, s[0:1]2883; GFX1064DAGISEL-NEXT: s_endpgm2884;2885; GFX1064GISEL-LABEL: divergent_cfg_float:2886; GFX1064GISEL: ; %bb.0: ; %entry2887; GFX1064GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2c2888; GFX1064GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v02889; GFX1064GISEL-NEXT: ; implicit-def: $sgpr62890; GFX1064GISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc2891; GFX1064GISEL-NEXT: s_xor_b64 s[2:3], exec, s[2:3]2892; GFX1064GISEL-NEXT: s_cbranch_execz .LBB8_22893; GFX1064GISEL-NEXT: ; %bb.1: ; %else2894; GFX1064GISEL-NEXT: s_mov_b64 s[6:7], exec2895; GFX1064GISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]2896; GFX1064GISEL-NEXT: v_cvt_f32_i32_e32 v0, s62897; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)2898; GFX1064GISEL-NEXT: v_mul_f32_e64 v0, -s0, v02899; GFX1064GISEL-NEXT: v_readfirstlane_b32 s6, v02900; GFX1064GISEL-NEXT: .LBB8_2: ; %Flow2901; GFX1064GISEL-NEXT: s_andn2_saveexec_b64 s[2:3], s[2:3]2902; GFX1064GISEL-NEXT: s_cbranch_execz .LBB8_42903; GFX1064GISEL-NEXT: ; %bb.3: ; %if2904; GFX1064GISEL-NEXT: s_mov_b64 s[6:7], exec2905; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)2906; GFX1064GISEL-NEXT: s_bcnt1_i32_b64 s0, s[6:7]2907; GFX1064GISEL-NEXT: v_cvt_f32_i32_e32 v0, s02908; GFX1064GISEL-NEXT: v_mul_f32_e64 v0, -s1, v02909; GFX1064GISEL-NEXT: v_readfirstlane_b32 s6, v02910; GFX1064GISEL-NEXT: .LBB8_4: ; %endif2911; GFX1064GISEL-NEXT: s_or_b64 exec, exec, s[2:3]2912; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)2913; GFX1064GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242914; GFX1064GISEL-NEXT: v_mov_b32_e32 v0, s62915; GFX1064GISEL-NEXT: v_mov_b32_e32 v1, 02916; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)2917; GFX1064GISEL-NEXT: global_store_dword v1, v0, s[0:1]2918; GFX1064GISEL-NEXT: s_endpgm2919;2920; GFX1032DAGISEL-LABEL: divergent_cfg_float:2921; GFX1032DAGISEL: ; %bb.0: ; %entry2922; GFX1032DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2c2923; GFX1032DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc_lo, 15, v02924; GFX1032DAGISEL-NEXT: ; implicit-def: $sgpr32925; GFX1032DAGISEL-NEXT: s_and_saveexec_b32 s2, vcc_lo2926; GFX1032DAGISEL-NEXT: s_xor_b32 s2, exec_lo, s22927; GFX1032DAGISEL-NEXT: s_cbranch_execz .LBB8_22928; GFX1032DAGISEL-NEXT: ; %bb.1: ; %else2929; GFX1032DAGISEL-NEXT: s_mov_b32 s3, exec_lo2930; GFX1032DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s32931; GFX1032DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s32932; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2933; GFX1032DAGISEL-NEXT: v_mul_f32_e64 v0, -s0, v02934; GFX1032DAGISEL-NEXT: v_readfirstlane_b32 s3, v02935; GFX1032DAGISEL-NEXT: .LBB8_2: ; %Flow2936; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2937; GFX1032DAGISEL-NEXT: s_or_saveexec_b32 s0, s22938; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, s32939; GFX1032DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s02940; GFX1032DAGISEL-NEXT: s_cbranch_execz .LBB8_42941; GFX1032DAGISEL-NEXT: ; %bb.3: ; %if2942; GFX1032DAGISEL-NEXT: s_mov_b32 s2, exec_lo2943; GFX1032DAGISEL-NEXT: s_bcnt1_i32_b32 s2, s22944; GFX1032DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s22945; GFX1032DAGISEL-NEXT: v_mul_f32_e64 v0, -s1, v02946; GFX1032DAGISEL-NEXT: v_readfirstlane_b32 s1, v02947; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, s12948; GFX1032DAGISEL-NEXT: .LBB8_4: ; %endif2949; GFX1032DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s02950; GFX1032DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242951; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, 02952; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2953; GFX1032DAGISEL-NEXT: global_store_dword v1, v0, s[0:1]2954; GFX1032DAGISEL-NEXT: s_endpgm2955;2956; GFX1032GISEL-LABEL: divergent_cfg_float:2957; GFX1032GISEL: ; %bb.0: ; %entry2958; GFX1032GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2c2959; GFX1032GISEL-NEXT: v_cmp_le_u32_e32 vcc_lo, 16, v02960; GFX1032GISEL-NEXT: ; implicit-def: $sgpr22961; GFX1032GISEL-NEXT: s_and_saveexec_b32 s3, vcc_lo2962; GFX1032GISEL-NEXT: s_xor_b32 s3, exec_lo, s32963; GFX1032GISEL-NEXT: s_cbranch_execz .LBB8_22964; GFX1032GISEL-NEXT: ; %bb.1: ; %else2965; GFX1032GISEL-NEXT: s_mov_b32 s2, exec_lo2966; GFX1032GISEL-NEXT: s_bcnt1_i32_b32 s2, s22967; GFX1032GISEL-NEXT: v_cvt_f32_i32_e32 v0, s22968; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)2969; GFX1032GISEL-NEXT: v_mul_f32_e64 v0, -s0, v02970; GFX1032GISEL-NEXT: v_readfirstlane_b32 s2, v02971; GFX1032GISEL-NEXT: .LBB8_2: ; %Flow2972; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)2973; GFX1032GISEL-NEXT: s_andn2_saveexec_b32 s0, s32974; GFX1032GISEL-NEXT: s_cbranch_execz .LBB8_42975; GFX1032GISEL-NEXT: ; %bb.3: ; %if2976; GFX1032GISEL-NEXT: s_mov_b32 s2, exec_lo2977; GFX1032GISEL-NEXT: s_bcnt1_i32_b32 s2, s22978; GFX1032GISEL-NEXT: v_cvt_f32_i32_e32 v0, s22979; GFX1032GISEL-NEXT: v_mul_f32_e64 v0, -s1, v02980; GFX1032GISEL-NEXT: v_readfirstlane_b32 s2, v02981; GFX1032GISEL-NEXT: .LBB8_4: ; %endif2982; GFX1032GISEL-NEXT: s_or_b32 exec_lo, exec_lo, s02983; GFX1032GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242984; GFX1032GISEL-NEXT: v_mov_b32_e32 v0, s22985; GFX1032GISEL-NEXT: v_mov_b32_e32 v1, 02986; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)2987; GFX1032GISEL-NEXT: global_store_dword v1, v0, s[0:1]2988; GFX1032GISEL-NEXT: s_endpgm2989;2990; GFX1164DAGISEL-LABEL: divergent_cfg_float:2991; GFX1164DAGISEL: ; %bb.0: ; %entry2992; GFX1164DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x2c2993; GFX1164DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v02994; GFX1164DAGISEL-NEXT: s_mov_b64 s[2:3], exec2995; GFX1164DAGISEL-NEXT: ; implicit-def: $sgpr62996; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2997; GFX1164DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v02998; GFX1164DAGISEL-NEXT: s_xor_b64 s[2:3], exec, s[2:3]2999; GFX1164DAGISEL-NEXT: s_cbranch_execz .LBB8_23000; GFX1164DAGISEL-NEXT: ; %bb.1: ; %else3001; GFX1164DAGISEL-NEXT: s_mov_b64 s[6:7], exec3002; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3003; GFX1164DAGISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]3004; GFX1164DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s63005; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)3006; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)3007; GFX1164DAGISEL-NEXT: v_mul_f32_e64 v0, -s0, v03008; GFX1164DAGISEL-NEXT: v_readfirstlane_b32 s6, v03009; GFX1164DAGISEL-NEXT: .LBB8_2: ; %Flow3010; GFX1164DAGISEL-NEXT: s_or_saveexec_b64 s[2:3], s[2:3]3011; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)3012; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, s63013; GFX1164DAGISEL-NEXT: s_xor_b64 exec, exec, s[2:3]3014; GFX1164DAGISEL-NEXT: s_cbranch_execz .LBB8_43015; GFX1164DAGISEL-NEXT: ; %bb.3: ; %if3016; GFX1164DAGISEL-NEXT: s_mov_b64 s[6:7], exec3017; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)3018; GFX1164DAGISEL-NEXT: s_bcnt1_i32_b64 s0, s[6:7]3019; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)3020; GFX1164DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s03021; GFX1164DAGISEL-NEXT: v_mul_f32_e64 v0, -s1, v03022; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)3023; GFX1164DAGISEL-NEXT: v_readfirstlane_b32 s0, v03024; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, s03025; GFX1164DAGISEL-NEXT: .LBB8_4: ; %endif3026; GFX1164DAGISEL-NEXT: s_or_b64 exec, exec, s[2:3]3027; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)3028; GFX1164DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x243029; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, 03030; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)3031; GFX1164DAGISEL-NEXT: global_store_b32 v1, v0, s[0:1]3032; GFX1164DAGISEL-NEXT: s_endpgm3033;3034; GFX1164GISEL-LABEL: divergent_cfg_float:3035; GFX1164GISEL: ; %bb.0: ; %entry3036; GFX1164GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x2c3037; GFX1164GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v03038; GFX1164GISEL-NEXT: s_mov_b64 s[2:3], exec3039; GFX1164GISEL-NEXT: ; implicit-def: $sgpr63040; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)3041; GFX1164GISEL-NEXT: v_cmpx_le_u32_e32 16, v03042; GFX1164GISEL-NEXT: s_xor_b64 s[2:3], exec, s[2:3]3043; GFX1164GISEL-NEXT: s_cbranch_execz .LBB8_23044; GFX1164GISEL-NEXT: ; %bb.1: ; %else3045; GFX1164GISEL-NEXT: s_mov_b64 s[6:7], exec3046; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3047; GFX1164GISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]3048; GFX1164GISEL-NEXT: v_cvt_f32_i32_e32 v0, s63049; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)3050; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)3051; GFX1164GISEL-NEXT: v_mul_f32_e64 v0, -s0, v03052; GFX1164GISEL-NEXT: v_readfirstlane_b32 s6, v03053; GFX1164GISEL-NEXT: .LBB8_2: ; %Flow3054; GFX1164GISEL-NEXT: s_and_not1_saveexec_b64 s[2:3], s[2:3]3055; GFX1164GISEL-NEXT: s_cbranch_execz .LBB8_43056; GFX1164GISEL-NEXT: ; %bb.3: ; %if3057; GFX1164GISEL-NEXT: s_mov_b64 s[6:7], exec3058; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)3059; GFX1164GISEL-NEXT: s_bcnt1_i32_b64 s0, s[6:7]3060; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)3061; GFX1164GISEL-NEXT: v_cvt_f32_i32_e32 v0, s03062; GFX1164GISEL-NEXT: v_mul_f32_e64 v0, -s1, v03063; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)3064; GFX1164GISEL-NEXT: v_readfirstlane_b32 s6, v03065; GFX1164GISEL-NEXT: .LBB8_4: ; %endif3066; GFX1164GISEL-NEXT: s_or_b64 exec, exec, s[2:3]3067; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)3068; GFX1164GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x243069; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)3070; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, s63071; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, 03072; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)3073; GFX1164GISEL-NEXT: global_store_b32 v1, v0, s[0:1]3074; GFX1164GISEL-NEXT: s_endpgm3075;3076; GFX1132DAGISEL-LABEL: divergent_cfg_float:3077; GFX1132DAGISEL: ; %bb.0: ; %entry3078; GFX1132DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x2c3079; GFX1132DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v03080; GFX1132DAGISEL-NEXT: s_mov_b32 s2, exec_lo3081; GFX1132DAGISEL-NEXT: ; implicit-def: $sgpr33082; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)3083; GFX1132DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v03084; GFX1132DAGISEL-NEXT: s_xor_b32 s2, exec_lo, s23085; GFX1132DAGISEL-NEXT: s_cbranch_execz .LBB8_23086; GFX1132DAGISEL-NEXT: ; %bb.1: ; %else3087; GFX1132DAGISEL-NEXT: s_mov_b32 s3, exec_lo3088; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3089; GFX1132DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s33090; GFX1132DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s33091; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)3092; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)3093; GFX1132DAGISEL-NEXT: v_mul_f32_e64 v0, -s0, v03094; GFX1132DAGISEL-NEXT: v_readfirstlane_b32 s3, v03095; GFX1132DAGISEL-NEXT: .LBB8_2: ; %Flow3096; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)3097; GFX1132DAGISEL-NEXT: s_or_saveexec_b32 s0, s23098; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)3099; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v0, s33100; GFX1132DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s03101; GFX1132DAGISEL-NEXT: s_cbranch_execz .LBB8_43102; GFX1132DAGISEL-NEXT: ; %bb.3: ; %if3103; GFX1132DAGISEL-NEXT: s_mov_b32 s2, exec_lo3104; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3105; GFX1132DAGISEL-NEXT: s_bcnt1_i32_b32 s2, s23106; GFX1132DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s23107; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)3108; GFX1132DAGISEL-NEXT: v_mul_f32_e64 v0, -s1, v03109; GFX1132DAGISEL-NEXT: v_readfirstlane_b32 s1, v03110; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)3111; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v0, s13112; GFX1132DAGISEL-NEXT: .LBB8_4: ; %endif3113; GFX1132DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s03114; GFX1132DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x243115; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v1, 03116; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)3117; GFX1132DAGISEL-NEXT: global_store_b32 v1, v0, s[0:1]3118; GFX1132DAGISEL-NEXT: s_endpgm3119;3120; GFX1132GISEL-LABEL: divergent_cfg_float:3121; GFX1132GISEL: ; %bb.0: ; %entry3122; GFX1132GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x2c3123; GFX1132GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v03124; GFX1132GISEL-NEXT: s_mov_b32 s3, exec_lo3125; GFX1132GISEL-NEXT: ; implicit-def: $sgpr23126; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)3127; GFX1132GISEL-NEXT: v_cmpx_le_u32_e32 16, v03128; GFX1132GISEL-NEXT: s_xor_b32 s3, exec_lo, s33129; GFX1132GISEL-NEXT: s_cbranch_execz .LBB8_23130; GFX1132GISEL-NEXT: ; %bb.1: ; %else3131; GFX1132GISEL-NEXT: s_mov_b32 s2, exec_lo3132; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3133; GFX1132GISEL-NEXT: s_bcnt1_i32_b32 s2, s23134; GFX1132GISEL-NEXT: v_cvt_f32_i32_e32 v0, s23135; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)3136; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)3137; GFX1132GISEL-NEXT: v_mul_f32_e64 v0, -s0, v03138; GFX1132GISEL-NEXT: v_readfirstlane_b32 s2, v03139; GFX1132GISEL-NEXT: .LBB8_2: ; %Flow3140; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)3141; GFX1132GISEL-NEXT: s_and_not1_saveexec_b32 s0, s33142; GFX1132GISEL-NEXT: s_cbranch_execz .LBB8_43143; GFX1132GISEL-NEXT: ; %bb.3: ; %if3144; GFX1132GISEL-NEXT: s_mov_b32 s2, exec_lo3145; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3146; GFX1132GISEL-NEXT: s_bcnt1_i32_b32 s2, s23147; GFX1132GISEL-NEXT: v_cvt_f32_i32_e32 v0, s23148; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)3149; GFX1132GISEL-NEXT: v_mul_f32_e64 v0, -s1, v03150; GFX1132GISEL-NEXT: v_readfirstlane_b32 s2, v03151; GFX1132GISEL-NEXT: .LBB8_4: ; %endif3152; GFX1132GISEL-NEXT: s_or_b32 exec_lo, exec_lo, s03153; GFX1132GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x243154; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)3155; GFX1132GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, 03156; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)3157; GFX1132GISEL-NEXT: global_store_b32 v1, v0, s[0:1]3158; GFX1132GISEL-NEXT: s_endpgm3159;3160; GFX12DAGISEL-LABEL: divergent_cfg_float:3161; GFX12DAGISEL: ; %bb.0: ; %entry3162; GFX12DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x2c3163; GFX12DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v03164; GFX12DAGISEL-NEXT: s_mov_b32 s2, exec_lo3165; GFX12DAGISEL-NEXT: ; implicit-def: $sgpr33166; GFX12DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)3167; GFX12DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v03168; GFX12DAGISEL-NEXT: s_xor_b32 s2, exec_lo, s23169; GFX12DAGISEL-NEXT: s_cbranch_execz .LBB8_23170; GFX12DAGISEL-NEXT: ; %bb.1: ; %else3171; GFX12DAGISEL-NEXT: s_mov_b32 s3, exec_lo3172; GFX12DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)3173; GFX12DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s33174; GFX12DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s33175; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x03176; GFX12DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)3177; GFX12DAGISEL-NEXT: v_mul_f32_e64 v0, -s0, v03178; GFX12DAGISEL-NEXT: v_readfirstlane_b32 s3, v03179; GFX12DAGISEL-NEXT: .LBB8_2: ; %Flow3180; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x03181; GFX12DAGISEL-NEXT: s_or_saveexec_b32 s0, s23182; GFX12DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)3183; GFX12DAGISEL-NEXT: v_mov_b32_e32 v0, s33184; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)3185; GFX12DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s03186; GFX12DAGISEL-NEXT: s_cbranch_execz .LBB8_43187; GFX12DAGISEL-NEXT: ; %bb.3: ; %if3188; GFX12DAGISEL-NEXT: s_mov_b32 s2, exec_lo3189; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)3190; GFX12DAGISEL-NEXT: s_bcnt1_i32_b32 s2, s23191; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)3192; GFX12DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s23193; GFX12DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)3194; GFX12DAGISEL-NEXT: v_mul_f32_e64 v0, -s1, v03195; GFX12DAGISEL-NEXT: v_readfirstlane_b32 s1, v03196; GFX12DAGISEL-NEXT: s_wait_alu depctr_va_sdst(0)3197; GFX12DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)3198; GFX12DAGISEL-NEXT: v_mov_b32_e32 v0, s13199; GFX12DAGISEL-NEXT: .LBB8_4: ; %endif3200; GFX12DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s03201; GFX12DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x243202; GFX12DAGISEL-NEXT: v_mov_b32_e32 v1, 03203; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x03204; GFX12DAGISEL-NEXT: global_store_b32 v1, v0, s[0:1]3205; GFX12DAGISEL-NEXT: s_endpgm3206entry:3207 %tid = call i32 @llvm.amdgcn.workitem.id.x()3208 %d_cmp = icmp ult i32 %tid, 163209 br i1 %d_cmp, label %if, label %else3210 3211if:3212 %reducedValTid = call float @llvm.amdgcn.wave.reduce.fsub(float %in2, i32 1)3213 br label %endif3214 3215else:3216 %reducedValIn = call float @llvm.amdgcn.wave.reduce.fsub(float %in, i32 1)3217 br label %endif3218 3219endif:3220 %combine = phi float [%reducedValTid, %if], [%reducedValIn, %else]3221 store float %combine, ptr addrspace(1) %out3222 ret void3223}3224;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:3225; GFX10DAGISEL: {{.*}}3226; GFX10GISEL: {{.*}}3227; GFX11DAGISEL: {{.*}}3228; GFX11GISEL: {{.*}}3229