3028 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_mul_i32 s2, s6, s225; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s026; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s127; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s228; GFX8DAGISEL-NEXT: flat_store_dword v[0:1], v229; GFX8DAGISEL-NEXT: s_endpgm30;31; GFX8GISEL-LABEL: uniform_value:32; GFX8GISEL: ; %bb.0: ; %entry33; GFX8GISEL-NEXT: s_load_dword s6, s[4:5], 0x2c34; GFX8GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2435; GFX8GISEL-NEXT: s_mov_b64 s[2:3], exec36; GFX8GISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]37; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)38; GFX8GISEL-NEXT: s_mul_i32 s2, s6, s239; GFX8GISEL-NEXT: v_mov_b32_e32 v0, s040; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s241; GFX8GISEL-NEXT: v_mov_b32_e32 v1, s142; GFX8GISEL-NEXT: flat_store_dword v[0:1], v243; GFX8GISEL-NEXT: s_endpgm44;45; GFX9DAGISEL-LABEL: uniform_value:46; GFX9DAGISEL: ; %bb.0: ; %entry47; GFX9DAGISEL-NEXT: s_load_dword s6, s[4:5], 0x2c48; GFX9DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2449; GFX9DAGISEL-NEXT: s_mov_b64 s[2:3], exec50; GFX9DAGISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]51; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, 052; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)53; GFX9DAGISEL-NEXT: s_mul_i32 s2, s6, s254; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, s255; GFX9DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]56; GFX9DAGISEL-NEXT: s_endpgm57;58; GFX9GISEL-LABEL: uniform_value:59; GFX9GISEL: ; %bb.0: ; %entry60; GFX9GISEL-NEXT: s_load_dword s6, s[4:5], 0x2c61; GFX9GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2462; GFX9GISEL-NEXT: s_mov_b64 s[2:3], exec63; GFX9GISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]64; GFX9GISEL-NEXT: v_mov_b32_e32 v1, 065; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)66; GFX9GISEL-NEXT: s_mul_i32 s2, s6, s267; GFX9GISEL-NEXT: v_mov_b32_e32 v0, s268; GFX9GISEL-NEXT: global_store_dword v1, v0, s[0:1]69; GFX9GISEL-NEXT: s_endpgm70;71; GFX1064DAGISEL-LABEL: uniform_value:72; GFX1064DAGISEL: ; %bb.0: ; %entry73; GFX1064DAGISEL-NEXT: s_clause 0x174; GFX1064DAGISEL-NEXT: s_load_dword s6, s[4:5], 0x2c75; GFX1064DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2476; GFX1064DAGISEL-NEXT: s_mov_b64 s[2:3], exec77; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, 078; GFX1064DAGISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]79; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)80; GFX1064DAGISEL-NEXT: s_mul_i32 s2, s6, s281; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, s282; GFX1064DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]83; GFX1064DAGISEL-NEXT: s_endpgm84;85; GFX1064GISEL-LABEL: uniform_value:86; GFX1064GISEL: ; %bb.0: ; %entry87; GFX1064GISEL-NEXT: s_clause 0x188; GFX1064GISEL-NEXT: s_load_dword s6, s[4:5], 0x2c89; GFX1064GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2490; GFX1064GISEL-NEXT: s_mov_b64 s[2:3], exec91; GFX1064GISEL-NEXT: v_mov_b32_e32 v1, 092; GFX1064GISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]93; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)94; GFX1064GISEL-NEXT: s_mul_i32 s2, s6, s295; GFX1064GISEL-NEXT: v_mov_b32_e32 v0, s296; GFX1064GISEL-NEXT: global_store_dword v1, v0, s[0:1]97; GFX1064GISEL-NEXT: s_endpgm98;99; GFX1032DAGISEL-LABEL: uniform_value:100; GFX1032DAGISEL: ; %bb.0: ; %entry101; GFX1032DAGISEL-NEXT: s_clause 0x1102; GFX1032DAGISEL-NEXT: s_load_dword s2, s[4:5], 0x2c103; GFX1032DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24104; GFX1032DAGISEL-NEXT: s_mov_b32 s3, exec_lo105; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, 0106; GFX1032DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s3107; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)108; GFX1032DAGISEL-NEXT: s_mul_i32 s2, s2, s3109; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, s2110; GFX1032DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]111; GFX1032DAGISEL-NEXT: s_endpgm112;113; GFX1032GISEL-LABEL: uniform_value:114; GFX1032GISEL: ; %bb.0: ; %entry115; GFX1032GISEL-NEXT: s_clause 0x1116; GFX1032GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c117; GFX1032GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24118; GFX1032GISEL-NEXT: s_mov_b32 s3, exec_lo119; GFX1032GISEL-NEXT: v_mov_b32_e32 v1, 0120; GFX1032GISEL-NEXT: s_bcnt1_i32_b32 s3, s3121; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)122; GFX1032GISEL-NEXT: s_mul_i32 s2, s2, s3123; GFX1032GISEL-NEXT: v_mov_b32_e32 v0, s2124; GFX1032GISEL-NEXT: global_store_dword v1, v0, s[0:1]125; GFX1032GISEL-NEXT: s_endpgm126;127; GFX1164DAGISEL-LABEL: uniform_value:128; GFX1164DAGISEL: ; %bb.0: ; %entry129; GFX1164DAGISEL-NEXT: s_clause 0x1130; GFX1164DAGISEL-NEXT: s_load_b32 s6, s[4:5], 0x2c131; GFX1164DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24132; GFX1164DAGISEL-NEXT: s_mov_b64 s[2:3], exec133; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, 0134; GFX1164DAGISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]135; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)136; GFX1164DAGISEL-NEXT: s_mul_i32 s2, s6, s2137; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)138; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s2139; GFX1164DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]140; GFX1164DAGISEL-NEXT: s_endpgm141;142; GFX1164GISEL-LABEL: uniform_value:143; GFX1164GISEL: ; %bb.0: ; %entry144; GFX1164GISEL-NEXT: s_clause 0x1145; GFX1164GISEL-NEXT: s_load_b32 s6, s[4:5], 0x2c146; GFX1164GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24147; GFX1164GISEL-NEXT: s_mov_b64 s[2:3], exec148; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, 0149; GFX1164GISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]150; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)151; GFX1164GISEL-NEXT: s_mul_i32 s2, s6, s2152; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)153; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, s2154; GFX1164GISEL-NEXT: global_store_b32 v1, v0, s[0:1]155; GFX1164GISEL-NEXT: s_endpgm156;157; GFX1132DAGISEL-LABEL: uniform_value:158; GFX1132DAGISEL: ; %bb.0: ; %entry159; GFX1132DAGISEL-NEXT: s_clause 0x1160; GFX1132DAGISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c161; GFX1132DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24162; GFX1132DAGISEL-NEXT: s_mov_b32 s3, exec_lo163; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)164; GFX1132DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s3165; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)166; GFX1132DAGISEL-NEXT: s_mul_i32 s2, s2, s3167; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2168; GFX1132DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]169; GFX1132DAGISEL-NEXT: s_endpgm170;171; GFX1132GISEL-LABEL: uniform_value:172; GFX1132GISEL: ; %bb.0: ; %entry173; GFX1132GISEL-NEXT: s_clause 0x1174; GFX1132GISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c175; GFX1132GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24176; GFX1132GISEL-NEXT: s_mov_b32 s3, exec_lo177; GFX1132GISEL-NEXT: v_mov_b32_e32 v1, 0178; GFX1132GISEL-NEXT: s_bcnt1_i32_b32 s3, s3179; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)180; GFX1132GISEL-NEXT: s_mul_i32 s2, s2, s3181; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)182; GFX1132GISEL-NEXT: v_mov_b32_e32 v0, s2183; GFX1132GISEL-NEXT: global_store_b32 v1, v0, s[0:1]184; GFX1132GISEL-NEXT: s_endpgm185;186; GFX12DAGISEL-LABEL: uniform_value:187; GFX12DAGISEL: ; %bb.0: ; %entry188; GFX12DAGISEL-NEXT: s_load_b96 s[0:2], s[4:5], 0x24189; GFX12DAGISEL-NEXT: s_mov_b32 s3, exec_lo190; GFX12DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)191; GFX12DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s3192; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x0193; GFX12DAGISEL-NEXT: s_mul_i32 s2, s2, s3194; GFX12DAGISEL-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2195; GFX12DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]196; GFX12DAGISEL-NEXT: s_endpgm197entry:198 %result = call i32 @llvm.amdgcn.wave.reduce.add.i32(i32 %in, i32 1)199 store i32 %result, ptr addrspace(1) %out200 ret void201}202 203define amdgpu_kernel void @divergent_value(ptr addrspace(1) %out) {204; GFX8DAGISEL-LABEL: divergent_value:205; GFX8DAGISEL: ; %bb.0: ; %entry206; GFX8DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24207; GFX8DAGISEL-NEXT: s_mov_b64 s[2:3], exec208; GFX8DAGISEL-NEXT: s_mov_b32 s4, 0209; GFX8DAGISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1210; GFX8DAGISEL-NEXT: s_ff1_i32_b64 s5, s[2:3]211; GFX8DAGISEL-NEXT: v_readlane_b32 s6, v0, s5212; GFX8DAGISEL-NEXT: s_bitset0_b64 s[2:3], s5213; GFX8DAGISEL-NEXT: s_add_i32 s4, s4, s6214; GFX8DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0215; GFX8DAGISEL-NEXT: s_cbranch_scc1 .LBB1_1216; GFX8DAGISEL-NEXT: ; %bb.2:217; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)218; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s0219; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s1220; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s4221; GFX8DAGISEL-NEXT: flat_store_dword v[0:1], v2222; GFX8DAGISEL-NEXT: s_endpgm223;224; GFX8GISEL-LABEL: divergent_value:225; GFX8GISEL: ; %bb.0: ; %entry226; GFX8GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24227; GFX8GISEL-NEXT: s_mov_b64 s[2:3], exec228; GFX8GISEL-NEXT: s_mov_b32 s4, 0229; GFX8GISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1230; GFX8GISEL-NEXT: s_ff1_i32_b64 s5, s[2:3]231; GFX8GISEL-NEXT: v_readlane_b32 s6, v0, s5232; GFX8GISEL-NEXT: s_bitset0_b64 s[2:3], s5233; GFX8GISEL-NEXT: s_add_i32 s4, s4, s6234; GFX8GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0235; GFX8GISEL-NEXT: s_cbranch_scc1 .LBB1_1236; GFX8GISEL-NEXT: ; %bb.2:237; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)238; GFX8GISEL-NEXT: v_mov_b32_e32 v0, s0239; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s4240; GFX8GISEL-NEXT: v_mov_b32_e32 v1, s1241; GFX8GISEL-NEXT: flat_store_dword v[0:1], v2242; GFX8GISEL-NEXT: s_endpgm243;244; GFX9DAGISEL-LABEL: divergent_value:245; GFX9DAGISEL: ; %bb.0: ; %entry246; GFX9DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24247; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, 0248; GFX9DAGISEL-NEXT: s_mov_b64 s[2:3], exec249; GFX9DAGISEL-NEXT: s_mov_b32 s4, 0250; GFX9DAGISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1251; GFX9DAGISEL-NEXT: s_ff1_i32_b64 s5, s[2:3]252; GFX9DAGISEL-NEXT: v_readlane_b32 s6, v0, s5253; GFX9DAGISEL-NEXT: s_bitset0_b64 s[2:3], s5254; GFX9DAGISEL-NEXT: s_add_i32 s4, s4, s6255; GFX9DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0256; GFX9DAGISEL-NEXT: s_cbranch_scc1 .LBB1_1257; GFX9DAGISEL-NEXT: ; %bb.2:258; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, s4259; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)260; GFX9DAGISEL-NEXT: global_store_dword v1, v0, s[0:1]261; GFX9DAGISEL-NEXT: s_endpgm262;263; GFX9GISEL-LABEL: divergent_value:264; GFX9GISEL: ; %bb.0: ; %entry265; GFX9GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24266; GFX9GISEL-NEXT: s_mov_b64 s[2:3], exec267; GFX9GISEL-NEXT: s_mov_b32 s4, 0268; GFX9GISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1269; GFX9GISEL-NEXT: s_ff1_i32_b64 s5, s[2:3]270; GFX9GISEL-NEXT: v_readlane_b32 s6, v0, s5271; GFX9GISEL-NEXT: s_bitset0_b64 s[2:3], s5272; GFX9GISEL-NEXT: s_add_i32 s4, s4, s6273; GFX9GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0274; GFX9GISEL-NEXT: s_cbranch_scc1 .LBB1_1275; GFX9GISEL-NEXT: ; %bb.2:276; GFX9GISEL-NEXT: v_mov_b32_e32 v0, s4277; GFX9GISEL-NEXT: v_mov_b32_e32 v1, 0278; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)279; GFX9GISEL-NEXT: global_store_dword v1, v0, s[0:1]280; GFX9GISEL-NEXT: s_endpgm281;282; GFX1064DAGISEL-LABEL: divergent_value:283; GFX1064DAGISEL: ; %bb.0: ; %entry284; GFX1064DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24285; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, 0286; GFX1064DAGISEL-NEXT: s_mov_b64 s[2:3], exec287; GFX1064DAGISEL-NEXT: s_mov_b32 s4, 0288; GFX1064DAGISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1289; GFX1064DAGISEL-NEXT: s_ff1_i32_b64 s5, s[2:3]290; GFX1064DAGISEL-NEXT: v_readlane_b32 s6, v0, s5291; GFX1064DAGISEL-NEXT: s_bitset0_b64 s[2:3], s5292; GFX1064DAGISEL-NEXT: s_add_i32 s4, s4, s6293; GFX1064DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0294; GFX1064DAGISEL-NEXT: s_cbranch_scc1 .LBB1_1295; GFX1064DAGISEL-NEXT: ; %bb.2:296; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, s4297; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)298; GFX1064DAGISEL-NEXT: global_store_dword v1, v0, s[0:1]299; GFX1064DAGISEL-NEXT: s_endpgm300;301; GFX1064GISEL-LABEL: divergent_value:302; GFX1064GISEL: ; %bb.0: ; %entry303; GFX1064GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24304; GFX1064GISEL-NEXT: s_mov_b64 s[2:3], exec305; GFX1064GISEL-NEXT: s_mov_b32 s4, 0306; GFX1064GISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1307; GFX1064GISEL-NEXT: s_ff1_i32_b64 s5, s[2:3]308; GFX1064GISEL-NEXT: v_readlane_b32 s6, v0, s5309; GFX1064GISEL-NEXT: s_bitset0_b64 s[2:3], s5310; GFX1064GISEL-NEXT: s_add_i32 s4, s4, s6311; GFX1064GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0312; GFX1064GISEL-NEXT: s_cbranch_scc1 .LBB1_1313; GFX1064GISEL-NEXT: ; %bb.2:314; GFX1064GISEL-NEXT: v_mov_b32_e32 v0, s4315; GFX1064GISEL-NEXT: v_mov_b32_e32 v1, 0316; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)317; GFX1064GISEL-NEXT: global_store_dword v1, v0, s[0:1]318; GFX1064GISEL-NEXT: s_endpgm319;320; GFX1032DAGISEL-LABEL: divergent_value:321; GFX1032DAGISEL: ; %bb.0: ; %entry322; GFX1032DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24323; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, 0324; GFX1032DAGISEL-NEXT: s_mov_b32 s3, exec_lo325; GFX1032DAGISEL-NEXT: s_mov_b32 s2, 0326; GFX1032DAGISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1327; GFX1032DAGISEL-NEXT: s_ff1_i32_b32 s4, s3328; GFX1032DAGISEL-NEXT: v_readlane_b32 s5, v0, s4329; GFX1032DAGISEL-NEXT: s_bitset0_b32 s3, s4330; GFX1032DAGISEL-NEXT: s_add_i32 s2, s2, s5331; GFX1032DAGISEL-NEXT: s_cmp_lg_u32 s3, 0332; GFX1032DAGISEL-NEXT: s_cbranch_scc1 .LBB1_1333; GFX1032DAGISEL-NEXT: ; %bb.2:334; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, s2335; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)336; GFX1032DAGISEL-NEXT: global_store_dword v1, v0, s[0:1]337; GFX1032DAGISEL-NEXT: s_endpgm338;339; GFX1032GISEL-LABEL: divergent_value:340; GFX1032GISEL: ; %bb.0: ; %entry341; GFX1032GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24342; GFX1032GISEL-NEXT: s_mov_b32 s3, exec_lo343; GFX1032GISEL-NEXT: s_mov_b32 s2, 0344; GFX1032GISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1345; GFX1032GISEL-NEXT: s_ff1_i32_b32 s4, s3346; GFX1032GISEL-NEXT: v_readlane_b32 s5, v0, s4347; GFX1032GISEL-NEXT: s_bitset0_b32 s3, s4348; GFX1032GISEL-NEXT: s_add_i32 s2, s2, s5349; GFX1032GISEL-NEXT: s_cmp_lg_u32 s3, 0350; GFX1032GISEL-NEXT: s_cbranch_scc1 .LBB1_1351; GFX1032GISEL-NEXT: ; %bb.2:352; GFX1032GISEL-NEXT: v_mov_b32_e32 v0, s2353; GFX1032GISEL-NEXT: v_mov_b32_e32 v1, 0354; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)355; GFX1032GISEL-NEXT: global_store_dword v1, v0, s[0:1]356; GFX1032GISEL-NEXT: s_endpgm357;358; GFX1164DAGISEL-LABEL: divergent_value:359; GFX1164DAGISEL: ; %bb.0: ; %entry360; GFX1164DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24361; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, 0362; GFX1164DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0363; GFX1164DAGISEL-NEXT: s_mov_b64 s[2:3], exec364; GFX1164DAGISEL-NEXT: s_mov_b32 s4, 0365; GFX1164DAGISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1366; GFX1164DAGISEL-NEXT: s_ctz_i32_b64 s5, s[2:3]367; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)368; GFX1164DAGISEL-NEXT: v_readlane_b32 s6, v0, s5369; GFX1164DAGISEL-NEXT: s_bitset0_b64 s[2:3], s5370; GFX1164DAGISEL-NEXT: s_add_i32 s4, s4, s6371; GFX1164DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0372; GFX1164DAGISEL-NEXT: s_cbranch_scc1 .LBB1_1373; GFX1164DAGISEL-NEXT: ; %bb.2:374; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, s4375; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)376; GFX1164DAGISEL-NEXT: global_store_b32 v1, v0, s[0:1]377; GFX1164DAGISEL-NEXT: s_endpgm378;379; GFX1164GISEL-LABEL: divergent_value:380; GFX1164GISEL: ; %bb.0: ; %entry381; GFX1164GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24382; GFX1164GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0383; GFX1164GISEL-NEXT: s_mov_b64 s[2:3], exec384; GFX1164GISEL-NEXT: s_mov_b32 s4, 0385; GFX1164GISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1386; GFX1164GISEL-NEXT: s_ctz_i32_b64 s5, s[2:3]387; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)388; GFX1164GISEL-NEXT: v_readlane_b32 s6, v0, s5389; GFX1164GISEL-NEXT: s_bitset0_b64 s[2:3], s5390; GFX1164GISEL-NEXT: s_add_i32 s4, s4, s6391; GFX1164GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0392; GFX1164GISEL-NEXT: s_cbranch_scc1 .LBB1_1393; GFX1164GISEL-NEXT: ; %bb.2:394; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, s4395; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, 0396; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)397; GFX1164GISEL-NEXT: global_store_b32 v1, v0, s[0:1]398; GFX1164GISEL-NEXT: s_endpgm399;400; GFX1132DAGISEL-LABEL: divergent_value:401; GFX1132DAGISEL: ; %bb.0: ; %entry402; GFX1132DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24403; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0404; GFX1132DAGISEL-NEXT: s_mov_b32 s3, exec_lo405; GFX1132DAGISEL-NEXT: s_mov_b32 s2, 0406; GFX1132DAGISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1407; GFX1132DAGISEL-NEXT: s_ctz_i32_b32 s4, s3408; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)409; GFX1132DAGISEL-NEXT: v_readlane_b32 s5, v0, s4410; GFX1132DAGISEL-NEXT: s_bitset0_b32 s3, s4411; GFX1132DAGISEL-NEXT: s_add_i32 s2, s2, s5412; GFX1132DAGISEL-NEXT: s_cmp_lg_u32 s3, 0413; GFX1132DAGISEL-NEXT: s_cbranch_scc1 .LBB1_1414; GFX1132DAGISEL-NEXT: ; %bb.2:415; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v0, s2416; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)417; GFX1132DAGISEL-NEXT: global_store_b32 v1, v0, s[0:1]418; GFX1132DAGISEL-NEXT: s_endpgm419;420; GFX1132GISEL-LABEL: divergent_value:421; GFX1132GISEL: ; %bb.0: ; %entry422; GFX1132GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24423; GFX1132GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0424; GFX1132GISEL-NEXT: s_mov_b32 s3, exec_lo425; GFX1132GISEL-NEXT: s_mov_b32 s2, 0426; GFX1132GISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1427; GFX1132GISEL-NEXT: s_ctz_i32_b32 s4, s3428; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)429; GFX1132GISEL-NEXT: v_readlane_b32 s5, v0, s4430; GFX1132GISEL-NEXT: s_bitset0_b32 s3, s4431; GFX1132GISEL-NEXT: s_add_i32 s2, s2, s5432; GFX1132GISEL-NEXT: s_cmp_lg_u32 s3, 0433; GFX1132GISEL-NEXT: s_cbranch_scc1 .LBB1_1434; GFX1132GISEL-NEXT: ; %bb.2:435; GFX1132GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, 0436; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)437; GFX1132GISEL-NEXT: global_store_b32 v1, v0, s[0:1]438; GFX1132GISEL-NEXT: s_endpgm439;440; GFX12DAGISEL-LABEL: divergent_value:441; GFX12DAGISEL: ; %bb.0: ; %entry442; GFX12DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24443; GFX12DAGISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0444; GFX12DAGISEL-NEXT: s_mov_b32 s3, exec_lo445; GFX12DAGISEL-NEXT: s_mov_b32 s2, 0446; GFX12DAGISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1447; GFX12DAGISEL-NEXT: s_ctz_i32_b32 s4, s3448; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)449; GFX12DAGISEL-NEXT: v_readlane_b32 s5, v0, s4450; GFX12DAGISEL-NEXT: s_bitset0_b32 s3, s4451; GFX12DAGISEL-NEXT: s_add_co_i32 s2, s2, s5452; GFX12DAGISEL-NEXT: s_cmp_lg_u32 s3, 0453; GFX12DAGISEL-NEXT: s_cbranch_scc1 .LBB1_1454; GFX12DAGISEL-NEXT: ; %bb.2:455; GFX12DAGISEL-NEXT: v_mov_b32_e32 v0, s2456; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x0457; GFX12DAGISEL-NEXT: global_store_b32 v1, v0, s[0:1]458; GFX12DAGISEL-NEXT: s_endpgm459entry:460 %id.x = call i32 @llvm.amdgcn.workitem.id.x()461 %result = call i32 @llvm.amdgcn.wave.reduce.add.i32(i32 %id.x, i32 1)462 store i32 %result, ptr addrspace(1) %out463 ret void464}465 466define amdgpu_kernel void @divergent_cfg(ptr addrspace(1) %out, i32 %in) {467; GFX8DAGISEL-LABEL: divergent_cfg:468; GFX8DAGISEL: ; %bb.0: ; %entry469; GFX8DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v0470; GFX8DAGISEL-NEXT: ; implicit-def: $sgpr2471; GFX8DAGISEL-NEXT: s_and_saveexec_b64 s[0:1], vcc472; GFX8DAGISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]473; GFX8DAGISEL-NEXT: s_cbranch_execz .LBB2_2474; GFX8DAGISEL-NEXT: ; %bb.1: ; %else475; GFX8DAGISEL-NEXT: s_load_dword s6, s[4:5], 0x2c476; GFX8DAGISEL-NEXT: s_mov_b64 s[2:3], exec477; GFX8DAGISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]478; GFX8DAGISEL-NEXT: ; implicit-def: $vgpr0479; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)480; GFX8DAGISEL-NEXT: s_mul_i32 s2, s6, s2481; GFX8DAGISEL-NEXT: .LBB2_2: ; %Flow482; GFX8DAGISEL-NEXT: s_or_saveexec_b64 s[0:1], s[0:1]483; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s2484; GFX8DAGISEL-NEXT: s_xor_b64 exec, exec, s[0:1]485; GFX8DAGISEL-NEXT: s_cbranch_execz .LBB2_6486; GFX8DAGISEL-NEXT: ; %bb.3: ; %if487; GFX8DAGISEL-NEXT: s_mov_b64 s[2:3], exec488; GFX8DAGISEL-NEXT: s_mov_b32 s6, 0489; GFX8DAGISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1490; GFX8DAGISEL-NEXT: s_ff1_i32_b64 s7, s[2:3]491; GFX8DAGISEL-NEXT: v_readlane_b32 s8, v0, s7492; GFX8DAGISEL-NEXT: s_bitset0_b64 s[2:3], s7493; GFX8DAGISEL-NEXT: s_add_i32 s6, s6, s8494; GFX8DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0495; GFX8DAGISEL-NEXT: s_cbranch_scc1 .LBB2_4496; GFX8DAGISEL-NEXT: ; %bb.5:497; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s6498; GFX8DAGISEL-NEXT: .LBB2_6: ; %endif499; GFX8DAGISEL-NEXT: s_or_b64 exec, exec, s[0:1]500; GFX8DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24501; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)502; GFX8DAGISEL-NEXT: v_mov_b32_e32 v3, s1503; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s0504; GFX8DAGISEL-NEXT: flat_store_dword v[2:3], v1505; GFX8DAGISEL-NEXT: s_endpgm506;507; GFX8GISEL-LABEL: divergent_cfg:508; GFX8GISEL: ; %bb.0: ; %entry509; GFX8GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v0510; GFX8GISEL-NEXT: ; implicit-def: $sgpr6511; GFX8GISEL-NEXT: s_and_saveexec_b64 s[0:1], vcc512; GFX8GISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]513; GFX8GISEL-NEXT: s_cbranch_execz .LBB2_2514; GFX8GISEL-NEXT: ; %bb.1: ; %else515; GFX8GISEL-NEXT: s_load_dword s6, s[4:5], 0x2c516; GFX8GISEL-NEXT: s_mov_b64 s[2:3], exec517; GFX8GISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]518; GFX8GISEL-NEXT: ; implicit-def: $vgpr0519; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)520; GFX8GISEL-NEXT: s_mul_i32 s6, s6, s2521; GFX8GISEL-NEXT: .LBB2_2: ; %Flow522; GFX8GISEL-NEXT: s_andn2_saveexec_b64 s[0:1], s[0:1]523; GFX8GISEL-NEXT: s_cbranch_execz .LBB2_5524; GFX8GISEL-NEXT: ; %bb.3: ; %if525; GFX8GISEL-NEXT: s_mov_b64 s[2:3], exec526; GFX8GISEL-NEXT: s_mov_b32 s6, 0527; GFX8GISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1528; GFX8GISEL-NEXT: s_ff1_i32_b64 s7, s[2:3]529; GFX8GISEL-NEXT: v_readlane_b32 s8, v0, s7530; GFX8GISEL-NEXT: s_bitset0_b64 s[2:3], s7531; GFX8GISEL-NEXT: s_add_i32 s6, s6, s8532; GFX8GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0533; GFX8GISEL-NEXT: s_cbranch_scc1 .LBB2_4534; GFX8GISEL-NEXT: .LBB2_5: ; %endif535; GFX8GISEL-NEXT: s_or_b64 exec, exec, s[0:1]536; GFX8GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24537; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s6538; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)539; GFX8GISEL-NEXT: v_mov_b32_e32 v0, s0540; GFX8GISEL-NEXT: v_mov_b32_e32 v1, s1541; GFX8GISEL-NEXT: flat_store_dword v[0:1], v2542; GFX8GISEL-NEXT: s_endpgm543;544; GFX9DAGISEL-LABEL: divergent_cfg:545; GFX9DAGISEL: ; %bb.0: ; %entry546; GFX9DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v0547; GFX9DAGISEL-NEXT: ; implicit-def: $sgpr2548; GFX9DAGISEL-NEXT: s_and_saveexec_b64 s[0:1], vcc549; GFX9DAGISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]550; GFX9DAGISEL-NEXT: s_cbranch_execz .LBB2_2551; GFX9DAGISEL-NEXT: ; %bb.1: ; %else552; GFX9DAGISEL-NEXT: s_load_dword s6, s[4:5], 0x2c553; GFX9DAGISEL-NEXT: s_mov_b64 s[2:3], exec554; GFX9DAGISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]555; GFX9DAGISEL-NEXT: ; implicit-def: $vgpr0556; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)557; GFX9DAGISEL-NEXT: s_mul_i32 s2, s6, s2558; GFX9DAGISEL-NEXT: .LBB2_2: ; %Flow559; GFX9DAGISEL-NEXT: s_or_saveexec_b64 s[0:1], s[0:1]560; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, s2561; GFX9DAGISEL-NEXT: s_xor_b64 exec, exec, s[0:1]562; GFX9DAGISEL-NEXT: s_cbranch_execz .LBB2_6563; GFX9DAGISEL-NEXT: ; %bb.3: ; %if564; GFX9DAGISEL-NEXT: s_mov_b64 s[2:3], exec565; GFX9DAGISEL-NEXT: s_mov_b32 s6, 0566; GFX9DAGISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1567; GFX9DAGISEL-NEXT: s_ff1_i32_b64 s7, s[2:3]568; GFX9DAGISEL-NEXT: v_readlane_b32 s8, v0, s7569; GFX9DAGISEL-NEXT: s_bitset0_b64 s[2:3], s7570; GFX9DAGISEL-NEXT: s_add_i32 s6, s6, s8571; GFX9DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0572; GFX9DAGISEL-NEXT: s_cbranch_scc1 .LBB2_4573; GFX9DAGISEL-NEXT: ; %bb.5:574; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, s6575; GFX9DAGISEL-NEXT: .LBB2_6: ; %endif576; GFX9DAGISEL-NEXT: s_or_b64 exec, exec, s[0:1]577; GFX9DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24578; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, 0579; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)580; GFX9DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]581; GFX9DAGISEL-NEXT: s_endpgm582;583; GFX9GISEL-LABEL: divergent_cfg:584; GFX9GISEL: ; %bb.0: ; %entry585; GFX9GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v0586; GFX9GISEL-NEXT: ; implicit-def: $sgpr6587; GFX9GISEL-NEXT: s_and_saveexec_b64 s[0:1], vcc588; GFX9GISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]589; GFX9GISEL-NEXT: s_cbranch_execz .LBB2_2590; GFX9GISEL-NEXT: ; %bb.1: ; %else591; GFX9GISEL-NEXT: s_load_dword s6, s[4:5], 0x2c592; GFX9GISEL-NEXT: s_mov_b64 s[2:3], exec593; GFX9GISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]594; GFX9GISEL-NEXT: ; implicit-def: $vgpr0595; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)596; GFX9GISEL-NEXT: s_mul_i32 s6, s6, s2597; GFX9GISEL-NEXT: .LBB2_2: ; %Flow598; GFX9GISEL-NEXT: s_andn2_saveexec_b64 s[0:1], s[0:1]599; GFX9GISEL-NEXT: s_cbranch_execz .LBB2_5600; GFX9GISEL-NEXT: ; %bb.3: ; %if601; GFX9GISEL-NEXT: s_mov_b64 s[2:3], exec602; GFX9GISEL-NEXT: s_mov_b32 s6, 0603; GFX9GISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1604; GFX9GISEL-NEXT: s_ff1_i32_b64 s7, s[2:3]605; GFX9GISEL-NEXT: v_readlane_b32 s8, v0, s7606; GFX9GISEL-NEXT: s_bitset0_b64 s[2:3], s7607; GFX9GISEL-NEXT: s_add_i32 s6, s6, s8608; GFX9GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0609; GFX9GISEL-NEXT: s_cbranch_scc1 .LBB2_4610; GFX9GISEL-NEXT: .LBB2_5: ; %endif611; GFX9GISEL-NEXT: s_or_b64 exec, exec, s[0:1]612; GFX9GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24613; GFX9GISEL-NEXT: v_mov_b32_e32 v0, s6614; GFX9GISEL-NEXT: v_mov_b32_e32 v1, 0615; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)616; GFX9GISEL-NEXT: global_store_dword v1, v0, s[0:1]617; GFX9GISEL-NEXT: s_endpgm618;619; GFX1064DAGISEL-LABEL: divergent_cfg:620; GFX1064DAGISEL: ; %bb.0: ; %entry621; GFX1064DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v0622; GFX1064DAGISEL-NEXT: ; implicit-def: $sgpr2623; GFX1064DAGISEL-NEXT: s_and_saveexec_b64 s[0:1], vcc624; GFX1064DAGISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]625; GFX1064DAGISEL-NEXT: s_cbranch_execz .LBB2_2626; GFX1064DAGISEL-NEXT: ; %bb.1: ; %else627; GFX1064DAGISEL-NEXT: s_load_dword s6, s[4:5], 0x2c628; GFX1064DAGISEL-NEXT: s_mov_b64 s[2:3], exec629; GFX1064DAGISEL-NEXT: ; implicit-def: $vgpr0630; GFX1064DAGISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]631; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)632; GFX1064DAGISEL-NEXT: s_mul_i32 s2, s6, s2633; GFX1064DAGISEL-NEXT: .LBB2_2: ; %Flow634; GFX1064DAGISEL-NEXT: s_or_saveexec_b64 s[0:1], s[0:1]635; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, s2636; GFX1064DAGISEL-NEXT: s_xor_b64 exec, exec, s[0:1]637; GFX1064DAGISEL-NEXT: s_cbranch_execz .LBB2_6638; GFX1064DAGISEL-NEXT: ; %bb.3: ; %if639; GFX1064DAGISEL-NEXT: s_mov_b64 s[2:3], exec640; GFX1064DAGISEL-NEXT: s_mov_b32 s6, 0641; GFX1064DAGISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1642; GFX1064DAGISEL-NEXT: s_ff1_i32_b64 s7, s[2:3]643; GFX1064DAGISEL-NEXT: v_readlane_b32 s8, v0, s7644; GFX1064DAGISEL-NEXT: s_bitset0_b64 s[2:3], s7645; GFX1064DAGISEL-NEXT: s_add_i32 s6, s6, s8646; GFX1064DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0647; GFX1064DAGISEL-NEXT: s_cbranch_scc1 .LBB2_4648; GFX1064DAGISEL-NEXT: ; %bb.5:649; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, s6650; GFX1064DAGISEL-NEXT: .LBB2_6: ; %endif651; GFX1064DAGISEL-NEXT: s_or_b64 exec, exec, s[0:1]652; GFX1064DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24653; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, 0654; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)655; GFX1064DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]656; GFX1064DAGISEL-NEXT: s_endpgm657;658; GFX1064GISEL-LABEL: divergent_cfg:659; GFX1064GISEL: ; %bb.0: ; %entry660; GFX1064GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v0661; GFX1064GISEL-NEXT: ; implicit-def: $sgpr6662; GFX1064GISEL-NEXT: s_and_saveexec_b64 s[0:1], vcc663; GFX1064GISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]664; GFX1064GISEL-NEXT: s_cbranch_execz .LBB2_2665; GFX1064GISEL-NEXT: ; %bb.1: ; %else666; GFX1064GISEL-NEXT: s_load_dword s6, s[4:5], 0x2c667; GFX1064GISEL-NEXT: s_mov_b64 s[2:3], exec668; GFX1064GISEL-NEXT: ; implicit-def: $vgpr0669; GFX1064GISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]670; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)671; GFX1064GISEL-NEXT: s_mul_i32 s6, s6, s2672; GFX1064GISEL-NEXT: .LBB2_2: ; %Flow673; GFX1064GISEL-NEXT: s_andn2_saveexec_b64 s[0:1], s[0:1]674; GFX1064GISEL-NEXT: s_cbranch_execz .LBB2_5675; GFX1064GISEL-NEXT: ; %bb.3: ; %if676; GFX1064GISEL-NEXT: s_mov_b64 s[2:3], exec677; GFX1064GISEL-NEXT: s_mov_b32 s6, 0678; GFX1064GISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1679; GFX1064GISEL-NEXT: s_ff1_i32_b64 s7, s[2:3]680; GFX1064GISEL-NEXT: v_readlane_b32 s8, v0, s7681; GFX1064GISEL-NEXT: s_bitset0_b64 s[2:3], s7682; GFX1064GISEL-NEXT: s_add_i32 s6, s6, s8683; GFX1064GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0684; GFX1064GISEL-NEXT: s_cbranch_scc1 .LBB2_4685; GFX1064GISEL-NEXT: .LBB2_5: ; %endif686; GFX1064GISEL-NEXT: s_or_b64 exec, exec, s[0:1]687; GFX1064GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24688; GFX1064GISEL-NEXT: v_mov_b32_e32 v0, s6689; GFX1064GISEL-NEXT: v_mov_b32_e32 v1, 0690; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)691; GFX1064GISEL-NEXT: global_store_dword v1, v0, s[0:1]692; GFX1064GISEL-NEXT: s_endpgm693;694; GFX1032DAGISEL-LABEL: divergent_cfg:695; GFX1032DAGISEL: ; %bb.0: ; %entry696; GFX1032DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc_lo, 15, v0697; GFX1032DAGISEL-NEXT: ; implicit-def: $sgpr1698; GFX1032DAGISEL-NEXT: s_and_saveexec_b32 s0, vcc_lo699; GFX1032DAGISEL-NEXT: s_xor_b32 s0, exec_lo, s0700; GFX1032DAGISEL-NEXT: s_cbranch_execz .LBB2_2701; GFX1032DAGISEL-NEXT: ; %bb.1: ; %else702; GFX1032DAGISEL-NEXT: s_load_dword s1, s[4:5], 0x2c703; GFX1032DAGISEL-NEXT: s_mov_b32 s2, exec_lo704; GFX1032DAGISEL-NEXT: ; implicit-def: $vgpr0705; GFX1032DAGISEL-NEXT: s_bcnt1_i32_b32 s2, s2706; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)707; GFX1032DAGISEL-NEXT: s_mul_i32 s1, s1, s2708; GFX1032DAGISEL-NEXT: .LBB2_2: ; %Flow709; GFX1032DAGISEL-NEXT: s_or_saveexec_b32 s0, s0710; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, s1711; GFX1032DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s0712; GFX1032DAGISEL-NEXT: s_cbranch_execz .LBB2_6713; GFX1032DAGISEL-NEXT: ; %bb.3: ; %if714; GFX1032DAGISEL-NEXT: s_mov_b32 s2, exec_lo715; GFX1032DAGISEL-NEXT: s_mov_b32 s1, 0716; GFX1032DAGISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1717; GFX1032DAGISEL-NEXT: s_ff1_i32_b32 s3, s2718; GFX1032DAGISEL-NEXT: v_readlane_b32 s6, v0, s3719; GFX1032DAGISEL-NEXT: s_bitset0_b32 s2, s3720; GFX1032DAGISEL-NEXT: s_add_i32 s1, s1, s6721; GFX1032DAGISEL-NEXT: s_cmp_lg_u32 s2, 0722; GFX1032DAGISEL-NEXT: s_cbranch_scc1 .LBB2_4723; GFX1032DAGISEL-NEXT: ; %bb.5:724; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, s1725; GFX1032DAGISEL-NEXT: .LBB2_6: ; %endif726; GFX1032DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s0727; GFX1032DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24728; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, 0729; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)730; GFX1032DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]731; GFX1032DAGISEL-NEXT: s_endpgm732;733; GFX1032GISEL-LABEL: divergent_cfg:734; GFX1032GISEL: ; %bb.0: ; %entry735; GFX1032GISEL-NEXT: v_cmp_le_u32_e32 vcc_lo, 16, v0736; GFX1032GISEL-NEXT: ; implicit-def: $sgpr0737; GFX1032GISEL-NEXT: s_and_saveexec_b32 s1, vcc_lo738; GFX1032GISEL-NEXT: s_xor_b32 s1, exec_lo, s1739; GFX1032GISEL-NEXT: s_cbranch_execz .LBB2_2740; GFX1032GISEL-NEXT: ; %bb.1: ; %else741; GFX1032GISEL-NEXT: s_load_dword s0, s[4:5], 0x2c742; GFX1032GISEL-NEXT: s_mov_b32 s2, exec_lo743; GFX1032GISEL-NEXT: ; implicit-def: $vgpr0744; GFX1032GISEL-NEXT: s_bcnt1_i32_b32 s2, s2745; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)746; GFX1032GISEL-NEXT: s_mul_i32 s0, s0, s2747; GFX1032GISEL-NEXT: .LBB2_2: ; %Flow748; GFX1032GISEL-NEXT: s_andn2_saveexec_b32 s1, s1749; GFX1032GISEL-NEXT: s_cbranch_execz .LBB2_5750; GFX1032GISEL-NEXT: ; %bb.3: ; %if751; GFX1032GISEL-NEXT: s_mov_b32 s2, exec_lo752; GFX1032GISEL-NEXT: s_mov_b32 s0, 0753; GFX1032GISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1754; GFX1032GISEL-NEXT: s_ff1_i32_b32 s3, s2755; GFX1032GISEL-NEXT: v_readlane_b32 s6, v0, s3756; GFX1032GISEL-NEXT: s_bitset0_b32 s2, s3757; GFX1032GISEL-NEXT: s_add_i32 s0, s0, s6758; GFX1032GISEL-NEXT: s_cmp_lg_u32 s2, 0759; GFX1032GISEL-NEXT: s_cbranch_scc1 .LBB2_4760; GFX1032GISEL-NEXT: .LBB2_5: ; %endif761; GFX1032GISEL-NEXT: s_or_b32 exec_lo, exec_lo, s1762; GFX1032GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x24763; GFX1032GISEL-NEXT: v_mov_b32_e32 v0, s0764; GFX1032GISEL-NEXT: v_mov_b32_e32 v1, 0765; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)766; GFX1032GISEL-NEXT: global_store_dword v1, v0, s[2:3]767; GFX1032GISEL-NEXT: s_endpgm768;769; GFX1164DAGISEL-LABEL: divergent_cfg:770; GFX1164DAGISEL: ; %bb.0: ; %entry771; GFX1164DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0772; GFX1164DAGISEL-NEXT: s_mov_b64 s[0:1], exec773; GFX1164DAGISEL-NEXT: ; implicit-def: $sgpr2774; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)775; GFX1164DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v0776; GFX1164DAGISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]777; GFX1164DAGISEL-NEXT: s_cbranch_execz .LBB2_2778; GFX1164DAGISEL-NEXT: ; %bb.1: ; %else779; GFX1164DAGISEL-NEXT: s_load_b32 s6, s[4:5], 0x2c780; GFX1164DAGISEL-NEXT: s_mov_b64 s[2:3], exec781; GFX1164DAGISEL-NEXT: ; implicit-def: $vgpr0782; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)783; GFX1164DAGISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]784; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)785; GFX1164DAGISEL-NEXT: s_mul_i32 s2, s6, s2786; GFX1164DAGISEL-NEXT: .LBB2_2: ; %Flow787; GFX1164DAGISEL-NEXT: s_or_saveexec_b64 s[0:1], s[0:1]788; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s2789; GFX1164DAGISEL-NEXT: s_xor_b64 exec, exec, s[0:1]790; GFX1164DAGISEL-NEXT: s_cbranch_execz .LBB2_6791; GFX1164DAGISEL-NEXT: ; %bb.3: ; %if792; GFX1164DAGISEL-NEXT: s_mov_b64 s[2:3], exec793; GFX1164DAGISEL-NEXT: s_mov_b32 s6, 0794; GFX1164DAGISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1795; GFX1164DAGISEL-NEXT: s_ctz_i32_b64 s7, s[2:3]796; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)797; GFX1164DAGISEL-NEXT: v_readlane_b32 s8, v0, s7798; GFX1164DAGISEL-NEXT: s_bitset0_b64 s[2:3], s7799; GFX1164DAGISEL-NEXT: s_add_i32 s6, s6, s8800; GFX1164DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0801; GFX1164DAGISEL-NEXT: s_cbranch_scc1 .LBB2_4802; GFX1164DAGISEL-NEXT: ; %bb.5:803; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s6804; GFX1164DAGISEL-NEXT: .LBB2_6: ; %endif805; GFX1164DAGISEL-NEXT: s_or_b64 exec, exec, s[0:1]806; GFX1164DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24807; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, 0808; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)809; GFX1164DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]810; GFX1164DAGISEL-NEXT: s_endpgm811;812; GFX1164GISEL-LABEL: divergent_cfg:813; GFX1164GISEL: ; %bb.0: ; %entry814; GFX1164GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0815; GFX1164GISEL-NEXT: s_mov_b64 s[0:1], exec816; GFX1164GISEL-NEXT: ; implicit-def: $sgpr6817; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)818; GFX1164GISEL-NEXT: v_cmpx_le_u32_e32 16, v0819; GFX1164GISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]820; GFX1164GISEL-NEXT: s_cbranch_execz .LBB2_2821; GFX1164GISEL-NEXT: ; %bb.1: ; %else822; GFX1164GISEL-NEXT: s_load_b32 s6, s[4:5], 0x2c823; GFX1164GISEL-NEXT: s_mov_b64 s[2:3], exec824; GFX1164GISEL-NEXT: ; implicit-def: $vgpr0825; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)826; GFX1164GISEL-NEXT: s_bcnt1_i32_b64 s2, s[2:3]827; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)828; GFX1164GISEL-NEXT: s_mul_i32 s6, s6, s2829; GFX1164GISEL-NEXT: .LBB2_2: ; %Flow830; GFX1164GISEL-NEXT: s_and_not1_saveexec_b64 s[0:1], s[0:1]831; GFX1164GISEL-NEXT: s_cbranch_execz .LBB2_5832; GFX1164GISEL-NEXT: ; %bb.3: ; %if833; GFX1164GISEL-NEXT: s_mov_b64 s[2:3], exec834; GFX1164GISEL-NEXT: s_mov_b32 s6, 0835; GFX1164GISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1836; GFX1164GISEL-NEXT: s_ctz_i32_b64 s7, s[2:3]837; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)838; GFX1164GISEL-NEXT: v_readlane_b32 s8, v0, s7839; GFX1164GISEL-NEXT: s_bitset0_b64 s[2:3], s7840; GFX1164GISEL-NEXT: s_add_i32 s6, s6, s8841; GFX1164GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0842; GFX1164GISEL-NEXT: s_cbranch_scc1 .LBB2_4843; GFX1164GISEL-NEXT: .LBB2_5: ; %endif844; GFX1164GISEL-NEXT: s_or_b64 exec, exec, s[0:1]845; GFX1164GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24846; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, s6847; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, 0848; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)849; GFX1164GISEL-NEXT: global_store_b32 v1, v0, s[0:1]850; GFX1164GISEL-NEXT: s_endpgm851;852; GFX1132DAGISEL-LABEL: divergent_cfg:853; GFX1132DAGISEL: ; %bb.0: ; %entry854; GFX1132DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0855; GFX1132DAGISEL-NEXT: s_mov_b32 s0, exec_lo856; GFX1132DAGISEL-NEXT: ; implicit-def: $sgpr1857; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)858; GFX1132DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v0859; GFX1132DAGISEL-NEXT: s_xor_b32 s0, exec_lo, s0860; GFX1132DAGISEL-NEXT: s_cbranch_execz .LBB2_2861; GFX1132DAGISEL-NEXT: ; %bb.1: ; %else862; GFX1132DAGISEL-NEXT: s_load_b32 s1, s[4:5], 0x2c863; GFX1132DAGISEL-NEXT: s_mov_b32 s2, exec_lo864; GFX1132DAGISEL-NEXT: ; implicit-def: $vgpr0865; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)866; GFX1132DAGISEL-NEXT: s_bcnt1_i32_b32 s2, s2867; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)868; GFX1132DAGISEL-NEXT: s_mul_i32 s1, s1, s2869; GFX1132DAGISEL-NEXT: .LBB2_2: ; %Flow870; GFX1132DAGISEL-NEXT: s_or_saveexec_b32 s0, s0871; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v1, s1872; GFX1132DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s0873; GFX1132DAGISEL-NEXT: s_cbranch_execz .LBB2_6874; GFX1132DAGISEL-NEXT: ; %bb.3: ; %if875; GFX1132DAGISEL-NEXT: s_mov_b32 s2, exec_lo876; GFX1132DAGISEL-NEXT: s_mov_b32 s1, 0877; GFX1132DAGISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1878; GFX1132DAGISEL-NEXT: s_ctz_i32_b32 s3, s2879; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)880; GFX1132DAGISEL-NEXT: v_readlane_b32 s6, v0, s3881; GFX1132DAGISEL-NEXT: s_bitset0_b32 s2, s3882; GFX1132DAGISEL-NEXT: s_add_i32 s1, s1, s6883; GFX1132DAGISEL-NEXT: s_cmp_lg_u32 s2, 0884; GFX1132DAGISEL-NEXT: s_cbranch_scc1 .LBB2_4885; GFX1132DAGISEL-NEXT: ; %bb.5:886; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v1, s1887; GFX1132DAGISEL-NEXT: .LBB2_6: ; %endif888; GFX1132DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s0889; GFX1132DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24890; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v0, 0891; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)892; GFX1132DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]893; GFX1132DAGISEL-NEXT: s_endpgm894;895; GFX1132GISEL-LABEL: divergent_cfg:896; GFX1132GISEL: ; %bb.0: ; %entry897; GFX1132GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0898; GFX1132GISEL-NEXT: s_mov_b32 s1, exec_lo899; GFX1132GISEL-NEXT: ; implicit-def: $sgpr0900; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)901; GFX1132GISEL-NEXT: v_cmpx_le_u32_e32 16, v0902; GFX1132GISEL-NEXT: s_xor_b32 s1, exec_lo, s1903; GFX1132GISEL-NEXT: s_cbranch_execz .LBB2_2904; GFX1132GISEL-NEXT: ; %bb.1: ; %else905; GFX1132GISEL-NEXT: s_load_b32 s0, s[4:5], 0x2c906; GFX1132GISEL-NEXT: s_mov_b32 s2, exec_lo907; GFX1132GISEL-NEXT: ; implicit-def: $vgpr0908; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)909; GFX1132GISEL-NEXT: s_bcnt1_i32_b32 s2, s2910; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)911; GFX1132GISEL-NEXT: s_mul_i32 s0, s0, s2912; GFX1132GISEL-NEXT: .LBB2_2: ; %Flow913; GFX1132GISEL-NEXT: s_and_not1_saveexec_b32 s1, s1914; GFX1132GISEL-NEXT: s_cbranch_execz .LBB2_5915; GFX1132GISEL-NEXT: ; %bb.3: ; %if916; GFX1132GISEL-NEXT: s_mov_b32 s2, exec_lo917; GFX1132GISEL-NEXT: s_mov_b32 s0, 0918; GFX1132GISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1919; GFX1132GISEL-NEXT: s_ctz_i32_b32 s3, s2920; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)921; GFX1132GISEL-NEXT: v_readlane_b32 s6, v0, s3922; GFX1132GISEL-NEXT: s_bitset0_b32 s2, s3923; GFX1132GISEL-NEXT: s_add_i32 s0, s0, s6924; GFX1132GISEL-NEXT: s_cmp_lg_u32 s2, 0925; GFX1132GISEL-NEXT: s_cbranch_scc1 .LBB2_4926; GFX1132GISEL-NEXT: .LBB2_5: ; %endif927; GFX1132GISEL-NEXT: s_or_b32 exec_lo, exec_lo, s1928; GFX1132GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x24929; GFX1132GISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, 0930; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)931; GFX1132GISEL-NEXT: global_store_b32 v1, v0, s[2:3]932; GFX1132GISEL-NEXT: s_endpgm933;934; GFX12DAGISEL-LABEL: divergent_cfg:935; GFX12DAGISEL: ; %bb.0: ; %entry936; GFX12DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0937; GFX12DAGISEL-NEXT: s_mov_b32 s0, exec_lo938; GFX12DAGISEL-NEXT: ; implicit-def: $sgpr1939; GFX12DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)940; GFX12DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v0941; GFX12DAGISEL-NEXT: s_xor_b32 s0, exec_lo, s0942; GFX12DAGISEL-NEXT: s_cbranch_execz .LBB2_2943; GFX12DAGISEL-NEXT: ; %bb.1: ; %else944; GFX12DAGISEL-NEXT: s_load_b32 s1, s[4:5], 0x2c945; GFX12DAGISEL-NEXT: s_mov_b32 s2, exec_lo946; GFX12DAGISEL-NEXT: ; implicit-def: $vgpr0947; GFX12DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)948; GFX12DAGISEL-NEXT: s_bcnt1_i32_b32 s2, s2949; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x0950; GFX12DAGISEL-NEXT: s_mul_i32 s1, s1, s2951; GFX12DAGISEL-NEXT: .LBB2_2: ; %Flow952; GFX12DAGISEL-NEXT: s_or_saveexec_b32 s0, s0953; GFX12DAGISEL-NEXT: v_mov_b32_e32 v1, s1954; GFX12DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s0955; GFX12DAGISEL-NEXT: s_cbranch_execz .LBB2_6956; GFX12DAGISEL-NEXT: ; %bb.3: ; %if957; GFX12DAGISEL-NEXT: s_mov_b32 s2, exec_lo958; GFX12DAGISEL-NEXT: s_mov_b32 s1, 0959; GFX12DAGISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1960; GFX12DAGISEL-NEXT: s_ctz_i32_b32 s3, s2961; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)962; GFX12DAGISEL-NEXT: v_readlane_b32 s6, v0, s3963; GFX12DAGISEL-NEXT: s_bitset0_b32 s2, s3964; GFX12DAGISEL-NEXT: s_add_co_i32 s1, s1, s6965; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)966; GFX12DAGISEL-NEXT: s_cmp_lg_u32 s2, 0967; GFX12DAGISEL-NEXT: s_cbranch_scc1 .LBB2_4968; GFX12DAGISEL-NEXT: ; %bb.5:969; GFX12DAGISEL-NEXT: v_mov_b32_e32 v1, s1970; GFX12DAGISEL-NEXT: .LBB2_6: ; %endif971; GFX12DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s0972; GFX12DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24973; GFX12DAGISEL-NEXT: v_mov_b32_e32 v0, 0974; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x0975; GFX12DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]976; GFX12DAGISEL-NEXT: s_endpgm977entry:978 %tid = call i32 @llvm.amdgcn.workitem.id.x()979 %d_cmp = icmp ult i32 %tid, 16980 br i1 %d_cmp, label %if, label %else981 982if:983 %reducedValTid = call i32 @llvm.amdgcn.wave.reduce.add.i32(i32 %tid, i32 1)984 br label %endif985 986else:987 %reducedValIn = call i32 @llvm.amdgcn.wave.reduce.add.i32(i32 %in, i32 1)988 br label %endif989 990endif:991 %combine = phi i32 [%reducedValTid, %if], [%reducedValIn, %else]992 store i32 %combine, ptr addrspace(1) %out993 ret void994}995 996define amdgpu_kernel void @uniform_value_i64(ptr addrspace(1) %out, i64 %in) {997; GFX8DAGISEL-LABEL: uniform_value_i64:998; GFX8DAGISEL: ; %bb.0: ; %entry999; GFX8DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241000; GFX8DAGISEL-NEXT: s_mov_b64 s[4:5], exec1001; GFX8DAGISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1002; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1003; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s01004; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s11005; GFX8DAGISEL-NEXT: s_mul_i32 s0, s2, s41006; GFX8DAGISEL-NEXT: s_mul_hi_u32 s1, s2, s41007; GFX8DAGISEL-NEXT: s_mul_i32 s2, s3, s41008; GFX8DAGISEL-NEXT: s_add_u32 s1, s1, s21009; GFX8DAGISEL-NEXT: v_mov_b32_e32 v3, s11010; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s01011; GFX8DAGISEL-NEXT: flat_store_dwordx2 v[0:1], v[2:3]1012; GFX8DAGISEL-NEXT: s_endpgm1013;1014; GFX8GISEL-LABEL: uniform_value_i64:1015; GFX8GISEL: ; %bb.0: ; %entry1016; GFX8GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241017; GFX8GISEL-NEXT: s_mov_b64 s[4:5], exec1018; GFX8GISEL-NEXT: s_bcnt1_i32_b64 s5, s[4:5]1019; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)1020; GFX8GISEL-NEXT: s_mul_i32 s4, s2, s51021; GFX8GISEL-NEXT: s_mul_hi_u32 s2, s2, s51022; GFX8GISEL-NEXT: s_mul_i32 s3, s3, s51023; GFX8GISEL-NEXT: s_add_u32 s5, s2, s31024; GFX8GISEL-NEXT: v_mov_b32_e32 v0, s41025; GFX8GISEL-NEXT: v_mov_b32_e32 v3, s11026; GFX8GISEL-NEXT: v_mov_b32_e32 v1, s51027; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s01028; GFX8GISEL-NEXT: flat_store_dwordx2 v[2:3], v[0:1]1029; GFX8GISEL-NEXT: s_endpgm1030;1031; GFX9DAGISEL-LABEL: uniform_value_i64:1032; GFX9DAGISEL: ; %bb.0: ; %entry1033; GFX9DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241034; GFX9DAGISEL-NEXT: s_mov_b64 s[4:5], exec1035; GFX9DAGISEL-NEXT: s_bcnt1_i32_b64 s5, s[4:5]1036; GFX9DAGISEL-NEXT: v_mov_b32_e32 v2, 01037; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1038; GFX9DAGISEL-NEXT: s_mul_i32 s4, s2, s51039; GFX9DAGISEL-NEXT: s_mul_hi_u32 s2, s2, s51040; GFX9DAGISEL-NEXT: s_mul_i32 s3, s3, s51041; GFX9DAGISEL-NEXT: s_add_u32 s5, s2, s31042; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, s41043; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, s51044; GFX9DAGISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1045; GFX9DAGISEL-NEXT: s_endpgm1046;1047; GFX9GISEL-LABEL: uniform_value_i64:1048; GFX9GISEL: ; %bb.0: ; %entry1049; GFX9GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241050; GFX9GISEL-NEXT: s_mov_b64 s[4:5], exec1051; GFX9GISEL-NEXT: s_bcnt1_i32_b64 s5, s[4:5]1052; GFX9GISEL-NEXT: v_mov_b32_e32 v2, 01053; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)1054; GFX9GISEL-NEXT: s_mul_i32 s4, s2, s51055; GFX9GISEL-NEXT: s_mul_hi_u32 s2, s2, s51056; GFX9GISEL-NEXT: s_mul_i32 s3, s3, s51057; GFX9GISEL-NEXT: s_add_u32 s5, s2, s31058; GFX9GISEL-NEXT: v_mov_b32_e32 v0, s41059; GFX9GISEL-NEXT: v_mov_b32_e32 v1, s51060; GFX9GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1061; GFX9GISEL-NEXT: s_endpgm1062;1063; GFX1064DAGISEL-LABEL: uniform_value_i64:1064; GFX1064DAGISEL: ; %bb.0: ; %entry1065; GFX1064DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241066; GFX1064DAGISEL-NEXT: s_mov_b64 s[4:5], exec1067; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v2, 01068; GFX1064DAGISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1069; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1070; GFX1064DAGISEL-NEXT: s_mul_hi_u32 s5, s2, s41071; GFX1064DAGISEL-NEXT: s_mul_i32 s3, s3, s41072; GFX1064DAGISEL-NEXT: s_mul_i32 s2, s2, s41073; GFX1064DAGISEL-NEXT: s_add_u32 s3, s5, s31074; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, s21075; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, s31076; GFX1064DAGISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1077; GFX1064DAGISEL-NEXT: s_endpgm1078;1079; GFX1064GISEL-LABEL: uniform_value_i64:1080; GFX1064GISEL: ; %bb.0: ; %entry1081; GFX1064GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241082; GFX1064GISEL-NEXT: s_mov_b64 s[4:5], exec1083; GFX1064GISEL-NEXT: v_mov_b32_e32 v2, 01084; GFX1064GISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1085; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)1086; GFX1064GISEL-NEXT: s_mul_hi_u32 s5, s2, s41087; GFX1064GISEL-NEXT: s_mul_i32 s3, s3, s41088; GFX1064GISEL-NEXT: s_mul_i32 s2, s2, s41089; GFX1064GISEL-NEXT: s_add_u32 s3, s5, s31090; GFX1064GISEL-NEXT: v_mov_b32_e32 v0, s21091; GFX1064GISEL-NEXT: v_mov_b32_e32 v1, s31092; GFX1064GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1093; GFX1064GISEL-NEXT: s_endpgm1094;1095; GFX1032DAGISEL-LABEL: uniform_value_i64:1096; GFX1032DAGISEL: ; %bb.0: ; %entry1097; GFX1032DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241098; GFX1032DAGISEL-NEXT: s_mov_b32 s4, exec_lo1099; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v2, 01100; GFX1032DAGISEL-NEXT: s_bcnt1_i32_b32 s4, s41101; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1102; GFX1032DAGISEL-NEXT: s_mul_hi_u32 s5, s2, s41103; GFX1032DAGISEL-NEXT: s_mul_i32 s3, s3, s41104; GFX1032DAGISEL-NEXT: s_mul_i32 s2, s2, s41105; GFX1032DAGISEL-NEXT: s_add_u32 s3, s5, s31106; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, s21107; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, s31108; GFX1032DAGISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1109; GFX1032DAGISEL-NEXT: s_endpgm1110;1111; GFX1032GISEL-LABEL: uniform_value_i64:1112; GFX1032GISEL: ; %bb.0: ; %entry1113; GFX1032GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241114; GFX1032GISEL-NEXT: s_mov_b32 s4, exec_lo1115; GFX1032GISEL-NEXT: v_mov_b32_e32 v2, 01116; GFX1032GISEL-NEXT: s_bcnt1_i32_b32 s4, s41117; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)1118; GFX1032GISEL-NEXT: s_mul_hi_u32 s5, s2, s41119; GFX1032GISEL-NEXT: s_mul_i32 s3, s3, s41120; GFX1032GISEL-NEXT: s_mul_i32 s2, s2, s41121; GFX1032GISEL-NEXT: s_add_u32 s3, s5, s31122; GFX1032GISEL-NEXT: v_mov_b32_e32 v0, s21123; GFX1032GISEL-NEXT: v_mov_b32_e32 v1, s31124; GFX1032GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1125; GFX1032GISEL-NEXT: s_endpgm1126;1127; GFX1164DAGISEL-LABEL: uniform_value_i64:1128; GFX1164DAGISEL: ; %bb.0: ; %entry1129; GFX1164DAGISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241130; GFX1164DAGISEL-NEXT: s_mov_b64 s[4:5], exec1131; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v2, 01132; GFX1164DAGISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1133; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1134; GFX1164DAGISEL-NEXT: s_mul_hi_u32 s5, s2, s41135; GFX1164DAGISEL-NEXT: s_mul_i32 s3, s3, s41136; GFX1164DAGISEL-NEXT: s_mul_i32 s2, s2, s41137; GFX1164DAGISEL-NEXT: s_add_u32 s3, s5, s31138; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, s21139; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s31140; GFX1164DAGISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1141; GFX1164DAGISEL-NEXT: s_endpgm1142;1143; GFX1164GISEL-LABEL: uniform_value_i64:1144; GFX1164GISEL: ; %bb.0: ; %entry1145; GFX1164GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241146; GFX1164GISEL-NEXT: s_mov_b64 s[4:5], exec1147; GFX1164GISEL-NEXT: v_mov_b32_e32 v2, 01148; GFX1164GISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1149; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)1150; GFX1164GISEL-NEXT: s_mul_hi_u32 s5, s2, s41151; GFX1164GISEL-NEXT: s_mul_i32 s3, s3, s41152; GFX1164GISEL-NEXT: s_mul_i32 s2, s2, s41153; GFX1164GISEL-NEXT: s_add_u32 s3, s5, s31154; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, s21155; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, s31156; GFX1164GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1157; GFX1164GISEL-NEXT: s_endpgm1158;1159; GFX1132DAGISEL-LABEL: uniform_value_i64:1160; GFX1132DAGISEL: ; %bb.0: ; %entry1161; GFX1132DAGISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241162; GFX1132DAGISEL-NEXT: s_mov_b32 s4, exec_lo1163; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1164; GFX1132DAGISEL-NEXT: s_bcnt1_i32_b32 s4, s41165; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1166; GFX1132DAGISEL-NEXT: s_mul_hi_u32 s5, s2, s41167; GFX1132DAGISEL-NEXT: s_mul_i32 s3, s3, s41168; GFX1132DAGISEL-NEXT: s_mul_i32 s2, s2, s41169; GFX1132DAGISEL-NEXT: s_add_u32 s3, s5, s31170; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v0, s21171; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s31172; GFX1132DAGISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1173; GFX1132DAGISEL-NEXT: s_endpgm1174;1175; GFX1132GISEL-LABEL: uniform_value_i64:1176; GFX1132GISEL: ; %bb.0: ; %entry1177; GFX1132GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241178; GFX1132GISEL-NEXT: s_mov_b32 s4, exec_lo1179; GFX1132GISEL-NEXT: v_mov_b32_e32 v2, 01180; GFX1132GISEL-NEXT: s_bcnt1_i32_b32 s4, s41181; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)1182; GFX1132GISEL-NEXT: s_mul_hi_u32 s5, s2, s41183; GFX1132GISEL-NEXT: s_mul_i32 s3, s3, s41184; GFX1132GISEL-NEXT: s_mul_i32 s2, s2, s41185; GFX1132GISEL-NEXT: s_add_u32 s3, s5, s31186; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1187; GFX1132GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s31188; GFX1132GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1189; GFX1132GISEL-NEXT: s_endpgm1190;1191; GFX12DAGISEL-LABEL: uniform_value_i64:1192; GFX12DAGISEL: ; %bb.0: ; %entry1193; GFX12DAGISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241194; GFX12DAGISEL-NEXT: s_mov_b32 s4, exec_lo1195; GFX12DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1196; GFX12DAGISEL-NEXT: s_bcnt1_i32_b32 s4, s41197; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x01198; GFX12DAGISEL-NEXT: s_mul_hi_u32 s5, s2, s41199; GFX12DAGISEL-NEXT: s_mul_i32 s3, s3, s41200; GFX12DAGISEL-NEXT: s_mul_i32 s2, s2, s41201; GFX12DAGISEL-NEXT: s_add_co_u32 s3, s5, s31202; GFX12DAGISEL-NEXT: v_mov_b32_e32 v0, s21203; GFX12DAGISEL-NEXT: v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s31204; GFX12DAGISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1205; GFX12DAGISEL-NEXT: s_endpgm1206entry:1207 %result = call i64 @llvm.amdgcn.wave.reduce.add.i64(i64 %in, i32 1)1208 store i64 %result, ptr addrspace(1) %out1209 ret void1210}1211 1212define void @divergent_value_i64(ptr addrspace(1) %out, i64 %id.x) {1213; GFX8DAGISEL-LABEL: divergent_value_i64:1214; GFX8DAGISEL: ; %bb.0: ; %entry1215; GFX8DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1216; GFX8DAGISEL-NEXT: s_mov_b64 s[4:5], 01217; GFX8DAGISEL-NEXT: s_mov_b64 s[6:7], exec1218; GFX8DAGISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11219; GFX8DAGISEL-NEXT: s_ff1_i32_b64 s8, s[6:7]1220; GFX8DAGISEL-NEXT: v_readlane_b32 s9, v2, s81221; GFX8DAGISEL-NEXT: v_readlane_b32 s10, v3, s81222; GFX8DAGISEL-NEXT: s_add_u32 s4, s4, s91223; GFX8DAGISEL-NEXT: s_bitset0_b64 s[6:7], s81224; GFX8DAGISEL-NEXT: s_addc_u32 s5, s5, s101225; GFX8DAGISEL-NEXT: s_cmp_lg_u64 s[6:7], 01226; GFX8DAGISEL-NEXT: s_cbranch_scc1 .LBB4_11227; GFX8DAGISEL-NEXT: ; %bb.2:1228; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s41229; GFX8DAGISEL-NEXT: v_mov_b32_e32 v3, s51230; GFX8DAGISEL-NEXT: flat_store_dwordx2 v[0:1], v[2:3]1231; GFX8DAGISEL-NEXT: s_waitcnt vmcnt(0)1232; GFX8DAGISEL-NEXT: s_setpc_b64 s[30:31]1233;1234; GFX8GISEL-LABEL: divergent_value_i64:1235; GFX8GISEL: ; %bb.0: ; %entry1236; GFX8GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1237; GFX8GISEL-NEXT: s_mov_b64 s[4:5], 01238; GFX8GISEL-NEXT: s_mov_b64 s[6:7], exec1239; GFX8GISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11240; GFX8GISEL-NEXT: s_ff1_i32_b64 s8, s[6:7]1241; GFX8GISEL-NEXT: v_readlane_b32 s9, v2, s81242; GFX8GISEL-NEXT: v_readlane_b32 s10, v3, s81243; GFX8GISEL-NEXT: s_add_u32 s4, s4, s91244; GFX8GISEL-NEXT: s_bitset0_b64 s[6:7], s81245; GFX8GISEL-NEXT: s_addc_u32 s5, s5, s101246; GFX8GISEL-NEXT: s_cmp_lg_u64 s[6:7], 01247; GFX8GISEL-NEXT: s_cbranch_scc1 .LBB4_11248; GFX8GISEL-NEXT: ; %bb.2:1249; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s41250; GFX8GISEL-NEXT: v_mov_b32_e32 v3, s51251; GFX8GISEL-NEXT: flat_store_dwordx2 v[0:1], v[2:3]1252; GFX8GISEL-NEXT: s_waitcnt vmcnt(0)1253; GFX8GISEL-NEXT: s_setpc_b64 s[30:31]1254;1255; GFX9DAGISEL-LABEL: divergent_value_i64:1256; GFX9DAGISEL: ; %bb.0: ; %entry1257; GFX9DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1258; GFX9DAGISEL-NEXT: s_mov_b64 s[4:5], 01259; GFX9DAGISEL-NEXT: s_mov_b64 s[6:7], exec1260; GFX9DAGISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11261; GFX9DAGISEL-NEXT: s_ff1_i32_b64 s8, s[6:7]1262; GFX9DAGISEL-NEXT: v_readlane_b32 s9, v2, s81263; GFX9DAGISEL-NEXT: v_readlane_b32 s10, v3, s81264; GFX9DAGISEL-NEXT: s_add_u32 s4, s4, s91265; GFX9DAGISEL-NEXT: s_bitset0_b64 s[6:7], s81266; GFX9DAGISEL-NEXT: s_addc_u32 s5, s5, s101267; GFX9DAGISEL-NEXT: s_cmp_lg_u64 s[6:7], 01268; GFX9DAGISEL-NEXT: s_cbranch_scc1 .LBB4_11269; GFX9DAGISEL-NEXT: ; %bb.2:1270; GFX9DAGISEL-NEXT: v_mov_b32_e32 v2, s41271; GFX9DAGISEL-NEXT: v_mov_b32_e32 v3, s51272; GFX9DAGISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1273; GFX9DAGISEL-NEXT: s_waitcnt vmcnt(0)1274; GFX9DAGISEL-NEXT: s_setpc_b64 s[30:31]1275;1276; GFX9GISEL-LABEL: divergent_value_i64:1277; GFX9GISEL: ; %bb.0: ; %entry1278; GFX9GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1279; GFX9GISEL-NEXT: s_mov_b64 s[4:5], 01280; GFX9GISEL-NEXT: s_mov_b64 s[6:7], exec1281; GFX9GISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11282; GFX9GISEL-NEXT: s_ff1_i32_b64 s8, s[6:7]1283; GFX9GISEL-NEXT: v_readlane_b32 s9, v2, s81284; GFX9GISEL-NEXT: v_readlane_b32 s10, v3, s81285; GFX9GISEL-NEXT: s_add_u32 s4, s4, s91286; GFX9GISEL-NEXT: s_bitset0_b64 s[6:7], s81287; GFX9GISEL-NEXT: s_addc_u32 s5, s5, s101288; GFX9GISEL-NEXT: s_cmp_lg_u64 s[6:7], 01289; GFX9GISEL-NEXT: s_cbranch_scc1 .LBB4_11290; GFX9GISEL-NEXT: ; %bb.2:1291; GFX9GISEL-NEXT: v_mov_b32_e32 v2, s41292; GFX9GISEL-NEXT: v_mov_b32_e32 v3, s51293; GFX9GISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1294; GFX9GISEL-NEXT: s_waitcnt vmcnt(0)1295; GFX9GISEL-NEXT: s_setpc_b64 s[30:31]1296;1297; GFX1064DAGISEL-LABEL: divergent_value_i64:1298; GFX1064DAGISEL: ; %bb.0: ; %entry1299; GFX1064DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1300; GFX1064DAGISEL-NEXT: s_mov_b64 s[4:5], 01301; GFX1064DAGISEL-NEXT: s_mov_b64 s[6:7], exec1302; GFX1064DAGISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11303; GFX1064DAGISEL-NEXT: s_ff1_i32_b64 s8, s[6:7]1304; GFX1064DAGISEL-NEXT: v_readlane_b32 s9, v2, s81305; GFX1064DAGISEL-NEXT: v_readlane_b32 s10, v3, s81306; GFX1064DAGISEL-NEXT: s_bitset0_b64 s[6:7], s81307; GFX1064DAGISEL-NEXT: s_add_u32 s4, s4, s91308; GFX1064DAGISEL-NEXT: s_addc_u32 s5, s5, s101309; GFX1064DAGISEL-NEXT: s_cmp_lg_u64 s[6:7], 01310; GFX1064DAGISEL-NEXT: s_cbranch_scc1 .LBB4_11311; GFX1064DAGISEL-NEXT: ; %bb.2:1312; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v2, s41313; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v3, s51314; GFX1064DAGISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1315; GFX1064DAGISEL-NEXT: s_setpc_b64 s[30:31]1316;1317; GFX1064GISEL-LABEL: divergent_value_i64:1318; GFX1064GISEL: ; %bb.0: ; %entry1319; GFX1064GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1320; GFX1064GISEL-NEXT: s_mov_b64 s[4:5], 01321; GFX1064GISEL-NEXT: s_mov_b64 s[6:7], exec1322; GFX1064GISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11323; GFX1064GISEL-NEXT: s_ff1_i32_b64 s8, s[6:7]1324; GFX1064GISEL-NEXT: v_readlane_b32 s9, v2, s81325; GFX1064GISEL-NEXT: v_readlane_b32 s10, v3, s81326; GFX1064GISEL-NEXT: s_bitset0_b64 s[6:7], s81327; GFX1064GISEL-NEXT: s_add_u32 s4, s4, s91328; GFX1064GISEL-NEXT: s_addc_u32 s5, s5, s101329; GFX1064GISEL-NEXT: s_cmp_lg_u64 s[6:7], 01330; GFX1064GISEL-NEXT: s_cbranch_scc1 .LBB4_11331; GFX1064GISEL-NEXT: ; %bb.2:1332; GFX1064GISEL-NEXT: v_mov_b32_e32 v2, s41333; GFX1064GISEL-NEXT: v_mov_b32_e32 v3, s51334; GFX1064GISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1335; GFX1064GISEL-NEXT: s_setpc_b64 s[30:31]1336;1337; GFX1032DAGISEL-LABEL: divergent_value_i64:1338; GFX1032DAGISEL: ; %bb.0: ; %entry1339; GFX1032DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1340; GFX1032DAGISEL-NEXT: s_mov_b64 s[4:5], 01341; GFX1032DAGISEL-NEXT: s_mov_b32 s6, exec_lo1342; GFX1032DAGISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11343; GFX1032DAGISEL-NEXT: s_ff1_i32_b32 s7, s61344; GFX1032DAGISEL-NEXT: v_readlane_b32 s8, v2, s71345; GFX1032DAGISEL-NEXT: v_readlane_b32 s9, v3, s71346; GFX1032DAGISEL-NEXT: s_bitset0_b32 s6, s71347; GFX1032DAGISEL-NEXT: s_add_u32 s4, s4, s81348; GFX1032DAGISEL-NEXT: s_addc_u32 s5, s5, s91349; GFX1032DAGISEL-NEXT: s_cmp_lg_u32 s6, 01350; GFX1032DAGISEL-NEXT: s_cbranch_scc1 .LBB4_11351; GFX1032DAGISEL-NEXT: ; %bb.2:1352; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v2, s41353; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v3, s51354; GFX1032DAGISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1355; GFX1032DAGISEL-NEXT: s_setpc_b64 s[30:31]1356;1357; GFX1032GISEL-LABEL: divergent_value_i64:1358; GFX1032GISEL: ; %bb.0: ; %entry1359; GFX1032GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1360; GFX1032GISEL-NEXT: s_mov_b64 s[4:5], 01361; GFX1032GISEL-NEXT: s_mov_b32 s6, exec_lo1362; GFX1032GISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11363; GFX1032GISEL-NEXT: s_ff1_i32_b32 s7, s61364; GFX1032GISEL-NEXT: v_readlane_b32 s8, v2, s71365; GFX1032GISEL-NEXT: v_readlane_b32 s9, v3, s71366; GFX1032GISEL-NEXT: s_bitset0_b32 s6, s71367; GFX1032GISEL-NEXT: s_add_u32 s4, s4, s81368; GFX1032GISEL-NEXT: s_addc_u32 s5, s5, s91369; GFX1032GISEL-NEXT: s_cmp_lg_u32 s6, 01370; GFX1032GISEL-NEXT: s_cbranch_scc1 .LBB4_11371; GFX1032GISEL-NEXT: ; %bb.2:1372; GFX1032GISEL-NEXT: v_mov_b32_e32 v2, s41373; GFX1032GISEL-NEXT: v_mov_b32_e32 v3, s51374; GFX1032GISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1375; GFX1032GISEL-NEXT: s_setpc_b64 s[30:31]1376;1377; GFX1164DAGISEL-LABEL: divergent_value_i64:1378; GFX1164DAGISEL: ; %bb.0: ; %entry1379; GFX1164DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1380; GFX1164DAGISEL-NEXT: s_mov_b64 s[0:1], 01381; GFX1164DAGISEL-NEXT: s_mov_b64 s[2:3], exec1382; GFX1164DAGISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11383; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1384; GFX1164DAGISEL-NEXT: s_ctz_i32_b64 s4, s[2:3]1385; GFX1164DAGISEL-NEXT: v_readlane_b32 s5, v2, s41386; GFX1164DAGISEL-NEXT: v_readlane_b32 s6, v3, s41387; GFX1164DAGISEL-NEXT: s_bitset0_b64 s[2:3], s41388; GFX1164DAGISEL-NEXT: s_add_u32 s0, s0, s51389; GFX1164DAGISEL-NEXT: s_addc_u32 s1, s1, s61390; GFX1164DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 01391; GFX1164DAGISEL-NEXT: s_cbranch_scc1 .LBB4_11392; GFX1164DAGISEL-NEXT: ; %bb.2:1393; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v3, s11394; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v2, s01395; GFX1164DAGISEL-NEXT: global_store_b64 v[0:1], v[2:3], off1396; GFX1164DAGISEL-NEXT: s_setpc_b64 s[30:31]1397;1398; GFX1164GISEL-LABEL: divergent_value_i64:1399; GFX1164GISEL: ; %bb.0: ; %entry1400; GFX1164GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1401; GFX1164GISEL-NEXT: s_mov_b64 s[0:1], 01402; GFX1164GISEL-NEXT: s_mov_b64 s[2:3], exec1403; GFX1164GISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11404; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1405; GFX1164GISEL-NEXT: s_ctz_i32_b64 s4, s[2:3]1406; GFX1164GISEL-NEXT: v_readlane_b32 s5, v2, s41407; GFX1164GISEL-NEXT: v_readlane_b32 s6, v3, s41408; GFX1164GISEL-NEXT: s_bitset0_b64 s[2:3], s41409; GFX1164GISEL-NEXT: s_add_u32 s0, s0, s51410; GFX1164GISEL-NEXT: s_addc_u32 s1, s1, s61411; GFX1164GISEL-NEXT: s_cmp_lg_u64 s[2:3], 01412; GFX1164GISEL-NEXT: s_cbranch_scc1 .LBB4_11413; GFX1164GISEL-NEXT: ; %bb.2:1414; GFX1164GISEL-NEXT: v_mov_b32_e32 v3, s11415; GFX1164GISEL-NEXT: v_mov_b32_e32 v2, s01416; GFX1164GISEL-NEXT: global_store_b64 v[0:1], v[2:3], off1417; GFX1164GISEL-NEXT: s_setpc_b64 s[30:31]1418;1419; GFX1132DAGISEL-LABEL: divergent_value_i64:1420; GFX1132DAGISEL: ; %bb.0: ; %entry1421; GFX1132DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1422; GFX1132DAGISEL-NEXT: s_mov_b64 s[0:1], 01423; GFX1132DAGISEL-NEXT: s_mov_b32 s2, exec_lo1424; GFX1132DAGISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11425; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1426; GFX1132DAGISEL-NEXT: s_ctz_i32_b32 s3, s21427; GFX1132DAGISEL-NEXT: v_readlane_b32 s4, v2, s31428; GFX1132DAGISEL-NEXT: v_readlane_b32 s5, v3, s31429; GFX1132DAGISEL-NEXT: s_bitset0_b32 s2, s31430; GFX1132DAGISEL-NEXT: s_add_u32 s0, s0, s41431; GFX1132DAGISEL-NEXT: s_addc_u32 s1, s1, s51432; GFX1132DAGISEL-NEXT: s_cmp_lg_u32 s2, 01433; GFX1132DAGISEL-NEXT: s_cbranch_scc1 .LBB4_11434; GFX1132DAGISEL-NEXT: ; %bb.2:1435; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s01436; GFX1132DAGISEL-NEXT: global_store_b64 v[0:1], v[2:3], off1437; GFX1132DAGISEL-NEXT: s_setpc_b64 s[30:31]1438;1439; GFX1132GISEL-LABEL: divergent_value_i64:1440; GFX1132GISEL: ; %bb.0: ; %entry1441; GFX1132GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1442; GFX1132GISEL-NEXT: s_mov_b64 s[0:1], 01443; GFX1132GISEL-NEXT: s_mov_b32 s2, exec_lo1444; GFX1132GISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11445; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1446; GFX1132GISEL-NEXT: s_ctz_i32_b32 s3, s21447; GFX1132GISEL-NEXT: v_readlane_b32 s4, v2, s31448; GFX1132GISEL-NEXT: v_readlane_b32 s5, v3, s31449; GFX1132GISEL-NEXT: s_bitset0_b32 s2, s31450; GFX1132GISEL-NEXT: s_add_u32 s0, s0, s41451; GFX1132GISEL-NEXT: s_addc_u32 s1, s1, s51452; GFX1132GISEL-NEXT: s_cmp_lg_u32 s2, 01453; GFX1132GISEL-NEXT: s_cbranch_scc1 .LBB4_11454; GFX1132GISEL-NEXT: ; %bb.2:1455; GFX1132GISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s01456; GFX1132GISEL-NEXT: global_store_b64 v[0:1], v[2:3], off1457; GFX1132GISEL-NEXT: s_setpc_b64 s[30:31]1458;1459; GFX12DAGISEL-LABEL: divergent_value_i64:1460; GFX12DAGISEL: ; %bb.0: ; %entry1461; GFX12DAGISEL-NEXT: s_wait_loadcnt_dscnt 0x01462; GFX12DAGISEL-NEXT: s_wait_expcnt 0x01463; GFX12DAGISEL-NEXT: s_wait_samplecnt 0x01464; GFX12DAGISEL-NEXT: s_wait_bvhcnt 0x01465; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x01466; GFX12DAGISEL-NEXT: s_mov_b64 s[0:1], 01467; GFX12DAGISEL-NEXT: s_mov_b32 s2, exec_lo1468; GFX12DAGISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11469; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)1470; GFX12DAGISEL-NEXT: s_ctz_i32_b32 s3, s21471; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)1472; GFX12DAGISEL-NEXT: v_readlane_b32 s4, v2, s31473; GFX12DAGISEL-NEXT: v_readlane_b32 s5, v3, s31474; GFX12DAGISEL-NEXT: s_bitset0_b32 s2, s31475; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)1476; GFX12DAGISEL-NEXT: s_cmp_lg_u32 s2, 01477; GFX12DAGISEL-NEXT: s_add_nc_u64 s[0:1], s[0:1], s[4:5]1478; GFX12DAGISEL-NEXT: s_cbranch_scc1 .LBB4_11479; GFX12DAGISEL-NEXT: ; %bb.2:1480; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)1481; GFX12DAGISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s01482; GFX12DAGISEL-NEXT: global_store_b64 v[0:1], v[2:3], off1483; GFX12DAGISEL-NEXT: s_setpc_b64 s[30:31]1484entry:1485 %result = call i64 @llvm.amdgcn.wave.reduce.add.i64(i64 %id.x, i32 1)1486 store i64 %result, ptr addrspace(1) %out1487 ret void1488}1489 1490define amdgpu_kernel void @divergent_cfg_i64(ptr addrspace(1) %out, i64 %in, i64 %in2) {1491; GFX8DAGISEL-LABEL: divergent_cfg_i64:1492; GFX8DAGISEL: ; %bb.0: ; %entry1493; GFX8DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241494; GFX8DAGISEL-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x341495; GFX8DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v01496; GFX8DAGISEL-NEXT: ; implicit-def: $sgpr6_sgpr71497; GFX8DAGISEL-NEXT: s_and_saveexec_b64 s[8:9], vcc1498; GFX8DAGISEL-NEXT: s_xor_b64 s[8:9], exec, s[8:9]1499; GFX8DAGISEL-NEXT: s_cbranch_execz .LBB5_21500; GFX8DAGISEL-NEXT: ; %bb.1: ; %else1501; GFX8DAGISEL-NEXT: s_mov_b64 s[6:7], exec1502; GFX8DAGISEL-NEXT: s_bcnt1_i32_b64 s7, s[6:7]1503; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1504; GFX8DAGISEL-NEXT: s_mul_i32 s6, s2, s71505; GFX8DAGISEL-NEXT: s_mul_hi_u32 s2, s2, s71506; GFX8DAGISEL-NEXT: s_mul_i32 s3, s3, s71507; GFX8DAGISEL-NEXT: s_add_u32 s7, s2, s31508; GFX8DAGISEL-NEXT: .LBB5_2: ; %Flow1509; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1510; GFX8DAGISEL-NEXT: s_or_saveexec_b64 s[2:3], s[8:9]1511; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s61512; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s71513; GFX8DAGISEL-NEXT: s_xor_b64 exec, exec, s[2:3]1514; GFX8DAGISEL-NEXT: ; %bb.3: ; %if1515; GFX8DAGISEL-NEXT: s_mov_b64 s[6:7], exec1516; GFX8DAGISEL-NEXT: s_bcnt1_i32_b64 s7, s[6:7]1517; GFX8DAGISEL-NEXT: s_mul_i32 s6, s4, s71518; GFX8DAGISEL-NEXT: s_mul_hi_u32 s4, s4, s71519; GFX8DAGISEL-NEXT: s_mul_i32 s5, s5, s71520; GFX8DAGISEL-NEXT: s_add_u32 s7, s4, s51521; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s61522; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s71523; GFX8DAGISEL-NEXT: ; %bb.4: ; %endif1524; GFX8DAGISEL-NEXT: s_or_b64 exec, exec, s[2:3]1525; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s01526; GFX8DAGISEL-NEXT: v_mov_b32_e32 v3, s11527; GFX8DAGISEL-NEXT: flat_store_dwordx2 v[2:3], v[0:1]1528; GFX8DAGISEL-NEXT: s_endpgm1529;1530; GFX8GISEL-LABEL: divergent_cfg_i64:1531; GFX8GISEL: ; %bb.0: ; %entry1532; GFX8GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241533; GFX8GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v01534; GFX8GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71535; GFX8GISEL-NEXT: s_and_saveexec_b64 s[8:9], vcc1536; GFX8GISEL-NEXT: s_xor_b64 s[8:9], exec, s[8:9]1537; GFX8GISEL-NEXT: s_cbranch_execz .LBB5_21538; GFX8GISEL-NEXT: ; %bb.1: ; %else1539; GFX8GISEL-NEXT: s_mov_b64 s[6:7], exec1540; GFX8GISEL-NEXT: s_bcnt1_i32_b64 s7, s[6:7]1541; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)1542; GFX8GISEL-NEXT: s_mul_i32 s6, s2, s71543; GFX8GISEL-NEXT: s_mul_hi_u32 s2, s2, s71544; GFX8GISEL-NEXT: s_mul_i32 s3, s3, s71545; GFX8GISEL-NEXT: s_add_u32 s7, s2, s31546; GFX8GISEL-NEXT: .LBB5_2: ; %Flow1547; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)1548; GFX8GISEL-NEXT: s_andn2_saveexec_b64 s[2:3], s[8:9]1549; GFX8GISEL-NEXT: s_cbranch_execz .LBB5_41550; GFX8GISEL-NEXT: ; %bb.3: ; %if1551; GFX8GISEL-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x341552; GFX8GISEL-NEXT: s_mov_b64 s[6:7], exec1553; GFX8GISEL-NEXT: s_bcnt1_i32_b64 s7, s[6:7]1554; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)1555; GFX8GISEL-NEXT: s_mul_i32 s6, s4, s71556; GFX8GISEL-NEXT: s_mul_hi_u32 s4, s4, s71557; GFX8GISEL-NEXT: s_mul_i32 s5, s5, s71558; GFX8GISEL-NEXT: s_add_u32 s7, s4, s51559; GFX8GISEL-NEXT: .LBB5_4: ; %endif1560; GFX8GISEL-NEXT: s_or_b64 exec, exec, s[2:3]1561; GFX8GISEL-NEXT: v_mov_b32_e32 v0, s61562; GFX8GISEL-NEXT: v_mov_b32_e32 v3, s11563; GFX8GISEL-NEXT: v_mov_b32_e32 v1, s71564; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s01565; GFX8GISEL-NEXT: flat_store_dwordx2 v[2:3], v[0:1]1566; GFX8GISEL-NEXT: s_endpgm1567;1568; GFX9DAGISEL-LABEL: divergent_cfg_i64:1569; GFX9DAGISEL: ; %bb.0: ; %entry1570; GFX9DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241571; GFX9DAGISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341572; GFX9DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v01573; GFX9DAGISEL-NEXT: ; implicit-def: $sgpr4_sgpr51574; GFX9DAGISEL-NEXT: s_and_saveexec_b64 s[8:9], vcc1575; GFX9DAGISEL-NEXT: s_xor_b64 s[8:9], exec, s[8:9]1576; GFX9DAGISEL-NEXT: s_cbranch_execz .LBB5_21577; GFX9DAGISEL-NEXT: ; %bb.1: ; %else1578; GFX9DAGISEL-NEXT: s_mov_b64 s[4:5], exec1579; GFX9DAGISEL-NEXT: s_bcnt1_i32_b64 s5, s[4:5]1580; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1581; GFX9DAGISEL-NEXT: s_mul_i32 s4, s2, s51582; GFX9DAGISEL-NEXT: s_mul_hi_u32 s2, s2, s51583; GFX9DAGISEL-NEXT: s_mul_i32 s3, s3, s51584; GFX9DAGISEL-NEXT: s_add_u32 s5, s2, s31585; GFX9DAGISEL-NEXT: .LBB5_2: ; %Flow1586; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1587; GFX9DAGISEL-NEXT: s_or_saveexec_b64 s[2:3], s[8:9]1588; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, s41589; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, s51590; GFX9DAGISEL-NEXT: s_xor_b64 exec, exec, s[2:3]1591; GFX9DAGISEL-NEXT: ; %bb.3: ; %if1592; GFX9DAGISEL-NEXT: s_mov_b64 s[4:5], exec1593; GFX9DAGISEL-NEXT: s_bcnt1_i32_b64 s5, s[4:5]1594; GFX9DAGISEL-NEXT: s_mul_i32 s4, s6, s51595; GFX9DAGISEL-NEXT: s_mul_hi_u32 s6, s6, s51596; GFX9DAGISEL-NEXT: s_mul_i32 s5, s7, s51597; GFX9DAGISEL-NEXT: s_add_u32 s5, s6, s51598; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, s41599; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, s51600; GFX9DAGISEL-NEXT: ; %bb.4: ; %endif1601; GFX9DAGISEL-NEXT: s_or_b64 exec, exec, s[2:3]1602; GFX9DAGISEL-NEXT: v_mov_b32_e32 v2, 01603; GFX9DAGISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1604; GFX9DAGISEL-NEXT: s_endpgm1605;1606; GFX9GISEL-LABEL: divergent_cfg_i64:1607; GFX9GISEL: ; %bb.0: ; %entry1608; GFX9GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241609; GFX9GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v01610; GFX9GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71611; GFX9GISEL-NEXT: s_and_saveexec_b64 s[8:9], vcc1612; GFX9GISEL-NEXT: s_xor_b64 s[8:9], exec, s[8:9]1613; GFX9GISEL-NEXT: s_cbranch_execz .LBB5_21614; GFX9GISEL-NEXT: ; %bb.1: ; %else1615; GFX9GISEL-NEXT: s_mov_b64 s[6:7], exec1616; GFX9GISEL-NEXT: s_bcnt1_i32_b64 s7, s[6:7]1617; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)1618; GFX9GISEL-NEXT: s_mul_i32 s6, s2, s71619; GFX9GISEL-NEXT: s_mul_hi_u32 s2, s2, s71620; GFX9GISEL-NEXT: s_mul_i32 s3, s3, s71621; GFX9GISEL-NEXT: s_add_u32 s7, s2, s31622; GFX9GISEL-NEXT: .LBB5_2: ; %Flow1623; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)1624; GFX9GISEL-NEXT: s_andn2_saveexec_b64 s[2:3], s[8:9]1625; GFX9GISEL-NEXT: s_cbranch_execz .LBB5_41626; GFX9GISEL-NEXT: ; %bb.3: ; %if1627; GFX9GISEL-NEXT: s_load_dwordx2 s[8:9], s[4:5], 0x341628; GFX9GISEL-NEXT: s_mov_b64 s[4:5], exec1629; GFX9GISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1630; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)1631; GFX9GISEL-NEXT: s_mul_i32 s6, s8, s41632; GFX9GISEL-NEXT: s_mul_hi_u32 s5, s8, s41633; GFX9GISEL-NEXT: s_mul_i32 s4, s9, s41634; GFX9GISEL-NEXT: s_add_u32 s7, s5, s41635; GFX9GISEL-NEXT: .LBB5_4: ; %endif1636; GFX9GISEL-NEXT: s_or_b64 exec, exec, s[2:3]1637; GFX9GISEL-NEXT: v_mov_b32_e32 v0, s61638; GFX9GISEL-NEXT: v_mov_b32_e32 v1, s71639; GFX9GISEL-NEXT: v_mov_b32_e32 v2, 01640; GFX9GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1641; GFX9GISEL-NEXT: s_endpgm1642;1643; GFX1064DAGISEL-LABEL: divergent_cfg_i64:1644; GFX1064DAGISEL: ; %bb.0: ; %entry1645; GFX1064DAGISEL-NEXT: s_clause 0x11646; GFX1064DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241647; GFX1064DAGISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341648; GFX1064DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v01649; GFX1064DAGISEL-NEXT: ; implicit-def: $sgpr8_sgpr91650; GFX1064DAGISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc1651; GFX1064DAGISEL-NEXT: s_xor_b64 s[4:5], exec, s[4:5]1652; GFX1064DAGISEL-NEXT: s_cbranch_execz .LBB5_21653; GFX1064DAGISEL-NEXT: ; %bb.1: ; %else1654; GFX1064DAGISEL-NEXT: s_mov_b64 s[8:9], exec1655; GFX1064DAGISEL-NEXT: s_bcnt1_i32_b64 s8, s[8:9]1656; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1657; GFX1064DAGISEL-NEXT: s_mul_hi_u32 s9, s2, s81658; GFX1064DAGISEL-NEXT: s_mul_i32 s3, s3, s81659; GFX1064DAGISEL-NEXT: s_mul_i32 s8, s2, s81660; GFX1064DAGISEL-NEXT: s_add_u32 s9, s9, s31661; GFX1064DAGISEL-NEXT: .LBB5_2: ; %Flow1662; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1663; GFX1064DAGISEL-NEXT: s_or_saveexec_b64 s[2:3], s[4:5]1664; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, s81665; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, s91666; GFX1064DAGISEL-NEXT: s_xor_b64 exec, exec, s[2:3]1667; GFX1064DAGISEL-NEXT: ; %bb.3: ; %if1668; GFX1064DAGISEL-NEXT: s_mov_b64 s[4:5], exec1669; GFX1064DAGISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1670; GFX1064DAGISEL-NEXT: s_mul_hi_u32 s5, s6, s41671; GFX1064DAGISEL-NEXT: s_mul_i32 s7, s7, s41672; GFX1064DAGISEL-NEXT: s_mul_i32 s4, s6, s41673; GFX1064DAGISEL-NEXT: s_add_u32 s5, s5, s71674; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, s41675; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, s51676; GFX1064DAGISEL-NEXT: ; %bb.4: ; %endif1677; GFX1064DAGISEL-NEXT: s_or_b64 exec, exec, s[2:3]1678; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v2, 01679; GFX1064DAGISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1680; GFX1064DAGISEL-NEXT: s_endpgm1681;1682; GFX1064GISEL-LABEL: divergent_cfg_i64:1683; GFX1064GISEL: ; %bb.0: ; %entry1684; GFX1064GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241685; GFX1064GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v01686; GFX1064GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71687; GFX1064GISEL-NEXT: s_and_saveexec_b64 s[8:9], vcc1688; GFX1064GISEL-NEXT: s_xor_b64 s[8:9], exec, s[8:9]1689; GFX1064GISEL-NEXT: s_cbranch_execz .LBB5_21690; GFX1064GISEL-NEXT: ; %bb.1: ; %else1691; GFX1064GISEL-NEXT: s_mov_b64 s[6:7], exec1692; GFX1064GISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]1693; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)1694; GFX1064GISEL-NEXT: s_mul_hi_u32 s7, s2, s61695; GFX1064GISEL-NEXT: s_mul_i32 s3, s3, s61696; GFX1064GISEL-NEXT: s_mul_i32 s6, s2, s61697; GFX1064GISEL-NEXT: s_add_u32 s7, s7, s31698; GFX1064GISEL-NEXT: .LBB5_2: ; %Flow1699; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)1700; GFX1064GISEL-NEXT: s_andn2_saveexec_b64 s[2:3], s[8:9]1701; GFX1064GISEL-NEXT: s_cbranch_execz .LBB5_41702; GFX1064GISEL-NEXT: ; %bb.3: ; %if1703; GFX1064GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341704; GFX1064GISEL-NEXT: s_mov_b64 s[4:5], exec1705; GFX1064GISEL-NEXT: s_bcnt1_i32_b64 s4, s[4:5]1706; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)1707; GFX1064GISEL-NEXT: s_mul_hi_u32 s5, s6, s41708; GFX1064GISEL-NEXT: s_mul_i32 s7, s7, s41709; GFX1064GISEL-NEXT: s_mul_i32 s6, s6, s41710; GFX1064GISEL-NEXT: s_add_u32 s7, s5, s71711; GFX1064GISEL-NEXT: .LBB5_4: ; %endif1712; GFX1064GISEL-NEXT: s_or_b64 exec, exec, s[2:3]1713; GFX1064GISEL-NEXT: v_mov_b32_e32 v0, s61714; GFX1064GISEL-NEXT: v_mov_b32_e32 v1, s71715; GFX1064GISEL-NEXT: v_mov_b32_e32 v2, 01716; GFX1064GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1717; GFX1064GISEL-NEXT: s_endpgm1718;1719; GFX1032DAGISEL-LABEL: divergent_cfg_i64:1720; GFX1032DAGISEL: ; %bb.0: ; %entry1721; GFX1032DAGISEL-NEXT: s_clause 0x11722; GFX1032DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241723; GFX1032DAGISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341724; GFX1032DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc_lo, 15, v01725; GFX1032DAGISEL-NEXT: ; implicit-def: $sgpr4_sgpr51726; GFX1032DAGISEL-NEXT: s_and_saveexec_b32 s8, vcc_lo1727; GFX1032DAGISEL-NEXT: s_xor_b32 s8, exec_lo, s81728; GFX1032DAGISEL-NEXT: s_cbranch_execz .LBB5_21729; GFX1032DAGISEL-NEXT: ; %bb.1: ; %else1730; GFX1032DAGISEL-NEXT: s_mov_b32 s4, exec_lo1731; GFX1032DAGISEL-NEXT: s_bcnt1_i32_b32 s4, s41732; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1733; GFX1032DAGISEL-NEXT: s_mul_hi_u32 s5, s2, s41734; GFX1032DAGISEL-NEXT: s_mul_i32 s3, s3, s41735; GFX1032DAGISEL-NEXT: s_mul_i32 s4, s2, s41736; GFX1032DAGISEL-NEXT: s_add_u32 s5, s5, s31737; GFX1032DAGISEL-NEXT: .LBB5_2: ; %Flow1738; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1739; GFX1032DAGISEL-NEXT: s_or_saveexec_b32 s2, s81740; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, s41741; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, s51742; GFX1032DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s21743; GFX1032DAGISEL-NEXT: ; %bb.3: ; %if1744; GFX1032DAGISEL-NEXT: s_mov_b32 s3, exec_lo1745; GFX1032DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s31746; GFX1032DAGISEL-NEXT: s_mul_hi_u32 s5, s6, s31747; GFX1032DAGISEL-NEXT: s_mul_i32 s7, s7, s31748; GFX1032DAGISEL-NEXT: s_mul_i32 s4, s6, s31749; GFX1032DAGISEL-NEXT: s_add_u32 s5, s5, s71750; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, s41751; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, s51752; GFX1032DAGISEL-NEXT: ; %bb.4: ; %endif1753; GFX1032DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s21754; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v2, 01755; GFX1032DAGISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1756; GFX1032DAGISEL-NEXT: s_endpgm1757;1758; GFX1032GISEL-LABEL: divergent_cfg_i64:1759; GFX1032GISEL: ; %bb.0: ; %entry1760; GFX1032GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241761; GFX1032GISEL-NEXT: v_cmp_le_u32_e32 vcc_lo, 16, v01762; GFX1032GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71763; GFX1032GISEL-NEXT: s_and_saveexec_b32 s8, vcc_lo1764; GFX1032GISEL-NEXT: s_xor_b32 s8, exec_lo, s81765; GFX1032GISEL-NEXT: s_cbranch_execz .LBB5_21766; GFX1032GISEL-NEXT: ; %bb.1: ; %else1767; GFX1032GISEL-NEXT: s_mov_b32 s6, exec_lo1768; GFX1032GISEL-NEXT: s_bcnt1_i32_b32 s6, s61769; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)1770; GFX1032GISEL-NEXT: s_mul_hi_u32 s7, s2, s61771; GFX1032GISEL-NEXT: s_mul_i32 s3, s3, s61772; GFX1032GISEL-NEXT: s_mul_i32 s6, s2, s61773; GFX1032GISEL-NEXT: s_add_u32 s7, s7, s31774; GFX1032GISEL-NEXT: .LBB5_2: ; %Flow1775; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)1776; GFX1032GISEL-NEXT: s_andn2_saveexec_b32 s2, s81777; GFX1032GISEL-NEXT: s_cbranch_execz .LBB5_41778; GFX1032GISEL-NEXT: ; %bb.3: ; %if1779; GFX1032GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341780; GFX1032GISEL-NEXT: s_mov_b32 s3, exec_lo1781; GFX1032GISEL-NEXT: s_bcnt1_i32_b32 s3, s31782; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)1783; GFX1032GISEL-NEXT: s_mul_hi_u32 s4, s6, s31784; GFX1032GISEL-NEXT: s_mul_i32 s5, s7, s31785; GFX1032GISEL-NEXT: s_mul_i32 s6, s6, s31786; GFX1032GISEL-NEXT: s_add_u32 s7, s4, s51787; GFX1032GISEL-NEXT: .LBB5_4: ; %endif1788; GFX1032GISEL-NEXT: s_or_b32 exec_lo, exec_lo, s21789; GFX1032GISEL-NEXT: v_mov_b32_e32 v0, s61790; GFX1032GISEL-NEXT: v_mov_b32_e32 v1, s71791; GFX1032GISEL-NEXT: v_mov_b32_e32 v2, 01792; GFX1032GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1793; GFX1032GISEL-NEXT: s_endpgm1794;1795; GFX1164DAGISEL-LABEL: divergent_cfg_i64:1796; GFX1164DAGISEL: ; %bb.0: ; %entry1797; GFX1164DAGISEL-NEXT: s_clause 0x11798; GFX1164DAGISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241799; GFX1164DAGISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x341800; GFX1164DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v01801; GFX1164DAGISEL-NEXT: s_mov_b64 s[6:7], exec1802; GFX1164DAGISEL-NEXT: ; implicit-def: $sgpr8_sgpr91803; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)1804; GFX1164DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v01805; GFX1164DAGISEL-NEXT: s_xor_b64 s[6:7], exec, s[6:7]1806; GFX1164DAGISEL-NEXT: s_cbranch_execz .LBB5_21807; GFX1164DAGISEL-NEXT: ; %bb.1: ; %else1808; GFX1164DAGISEL-NEXT: s_mov_b64 s[8:9], exec1809; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1810; GFX1164DAGISEL-NEXT: s_bcnt1_i32_b64 s8, s[8:9]1811; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1812; GFX1164DAGISEL-NEXT: s_mul_hi_u32 s9, s2, s81813; GFX1164DAGISEL-NEXT: s_mul_i32 s3, s3, s81814; GFX1164DAGISEL-NEXT: s_mul_i32 s8, s2, s81815; GFX1164DAGISEL-NEXT: s_add_u32 s9, s9, s31816; GFX1164DAGISEL-NEXT: .LBB5_2: ; %Flow1817; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1818; GFX1164DAGISEL-NEXT: s_or_saveexec_b64 s[2:3], s[6:7]1819; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, s81820; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s91821; GFX1164DAGISEL-NEXT: s_xor_b64 exec, exec, s[2:3]1822; GFX1164DAGISEL-NEXT: ; %bb.3: ; %if1823; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1824; GFX1164DAGISEL-NEXT: s_mov_b64 s[6:7], exec1825; GFX1164DAGISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]1826; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1827; GFX1164DAGISEL-NEXT: s_mul_hi_u32 s7, s4, s61828; GFX1164DAGISEL-NEXT: s_mul_i32 s5, s5, s61829; GFX1164DAGISEL-NEXT: s_mul_i32 s4, s4, s61830; GFX1164DAGISEL-NEXT: s_add_u32 s5, s7, s51831; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, s41832; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s51833; GFX1164DAGISEL-NEXT: ; %bb.4: ; %endif1834; GFX1164DAGISEL-NEXT: s_or_b64 exec, exec, s[2:3]1835; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v2, 01836; GFX1164DAGISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1837; GFX1164DAGISEL-NEXT: s_endpgm1838;1839; GFX1164GISEL-LABEL: divergent_cfg_i64:1840; GFX1164GISEL: ; %bb.0: ; %entry1841; GFX1164GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241842; GFX1164GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v01843; GFX1164GISEL-NEXT: s_mov_b64 s[8:9], exec1844; GFX1164GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71845; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)1846; GFX1164GISEL-NEXT: v_cmpx_le_u32_e32 16, v01847; GFX1164GISEL-NEXT: s_xor_b64 s[8:9], exec, s[8:9]1848; GFX1164GISEL-NEXT: s_cbranch_execz .LBB5_21849; GFX1164GISEL-NEXT: ; %bb.1: ; %else1850; GFX1164GISEL-NEXT: s_mov_b64 s[6:7], exec1851; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1852; GFX1164GISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]1853; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)1854; GFX1164GISEL-NEXT: s_mul_hi_u32 s7, s2, s61855; GFX1164GISEL-NEXT: s_mul_i32 s3, s3, s61856; GFX1164GISEL-NEXT: s_mul_i32 s6, s2, s61857; GFX1164GISEL-NEXT: s_add_u32 s7, s7, s31858; GFX1164GISEL-NEXT: .LBB5_2: ; %Flow1859; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)1860; GFX1164GISEL-NEXT: s_and_not1_saveexec_b64 s[2:3], s[8:9]1861; GFX1164GISEL-NEXT: s_cbranch_execz .LBB5_41862; GFX1164GISEL-NEXT: ; %bb.3: ; %if1863; GFX1164GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x341864; GFX1164GISEL-NEXT: s_mov_b64 s[6:7], exec1865; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1866; GFX1164GISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]1867; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)1868; GFX1164GISEL-NEXT: s_mul_hi_u32 s7, s4, s61869; GFX1164GISEL-NEXT: s_mul_i32 s5, s5, s61870; GFX1164GISEL-NEXT: s_mul_i32 s6, s4, s61871; GFX1164GISEL-NEXT: s_add_u32 s7, s7, s51872; GFX1164GISEL-NEXT: .LBB5_4: ; %endif1873; GFX1164GISEL-NEXT: s_or_b64 exec, exec, s[2:3]1874; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, s61875; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, s71876; GFX1164GISEL-NEXT: v_mov_b32_e32 v2, 01877; GFX1164GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1878; GFX1164GISEL-NEXT: s_endpgm1879;1880; GFX1132DAGISEL-LABEL: divergent_cfg_i64:1881; GFX1132DAGISEL: ; %bb.0: ; %entry1882; GFX1132DAGISEL-NEXT: s_clause 0x11883; GFX1132DAGISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241884; GFX1132DAGISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x341885; GFX1132DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v01886; GFX1132DAGISEL-NEXT: s_mov_b32 s8, exec_lo1887; GFX1132DAGISEL-NEXT: ; implicit-def: $sgpr6_sgpr71888; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)1889; GFX1132DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v01890; GFX1132DAGISEL-NEXT: s_xor_b32 s8, exec_lo, s81891; GFX1132DAGISEL-NEXT: s_cbranch_execz .LBB5_21892; GFX1132DAGISEL-NEXT: ; %bb.1: ; %else1893; GFX1132DAGISEL-NEXT: s_mov_b32 s6, exec_lo1894; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1895; GFX1132DAGISEL-NEXT: s_bcnt1_i32_b32 s6, s61896; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1897; GFX1132DAGISEL-NEXT: s_mul_hi_u32 s7, s2, s61898; GFX1132DAGISEL-NEXT: s_mul_i32 s3, s3, s61899; GFX1132DAGISEL-NEXT: s_mul_i32 s6, s2, s61900; GFX1132DAGISEL-NEXT: s_add_u32 s7, s7, s31901; GFX1132DAGISEL-NEXT: .LBB5_2: ; %Flow1902; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1903; GFX1132DAGISEL-NEXT: s_or_saveexec_b32 s2, s81904; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v0, s6 :: v_dual_mov_b32 v1, s71905; GFX1132DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s21906; GFX1132DAGISEL-NEXT: ; %bb.3: ; %if1907; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1908; GFX1132DAGISEL-NEXT: s_mov_b32 s3, exec_lo1909; GFX1132DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s31910; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(SALU_CYCLE_1)1911; GFX1132DAGISEL-NEXT: s_mul_hi_u32 s6, s4, s31912; GFX1132DAGISEL-NEXT: s_mul_i32 s5, s5, s31913; GFX1132DAGISEL-NEXT: s_mul_i32 s4, s4, s31914; GFX1132DAGISEL-NEXT: s_add_u32 s5, s6, s51915; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v1, s51916; GFX1132DAGISEL-NEXT: ; %bb.4: ; %endif1917; GFX1132DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s21918; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v2, 01919; GFX1132DAGISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1920; GFX1132DAGISEL-NEXT: s_endpgm1921;1922; GFX1132GISEL-LABEL: divergent_cfg_i64:1923; GFX1132GISEL: ; %bb.0: ; %entry1924; GFX1132GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241925; GFX1132GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v01926; GFX1132GISEL-NEXT: s_mov_b32 s8, exec_lo1927; GFX1132GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71928; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)1929; GFX1132GISEL-NEXT: v_cmpx_le_u32_e32 16, v01930; GFX1132GISEL-NEXT: s_xor_b32 s8, exec_lo, s81931; GFX1132GISEL-NEXT: s_cbranch_execz .LBB5_21932; GFX1132GISEL-NEXT: ; %bb.1: ; %else1933; GFX1132GISEL-NEXT: s_mov_b32 s6, exec_lo1934; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1935; GFX1132GISEL-NEXT: s_bcnt1_i32_b32 s6, s61936; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)1937; GFX1132GISEL-NEXT: s_mul_hi_u32 s7, s2, s61938; GFX1132GISEL-NEXT: s_mul_i32 s3, s3, s61939; GFX1132GISEL-NEXT: s_mul_i32 s6, s2, s61940; GFX1132GISEL-NEXT: s_add_u32 s7, s7, s31941; GFX1132GISEL-NEXT: .LBB5_2: ; %Flow1942; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)1943; GFX1132GISEL-NEXT: s_and_not1_saveexec_b32 s2, s81944; GFX1132GISEL-NEXT: s_cbranch_execz .LBB5_41945; GFX1132GISEL-NEXT: ; %bb.3: ; %if1946; GFX1132GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x341947; GFX1132GISEL-NEXT: s_mov_b32 s3, exec_lo1948; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1949; GFX1132GISEL-NEXT: s_bcnt1_i32_b32 s3, s31950; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)1951; GFX1132GISEL-NEXT: s_mul_hi_u32 s7, s4, s31952; GFX1132GISEL-NEXT: s_mul_i32 s5, s5, s31953; GFX1132GISEL-NEXT: s_mul_i32 s6, s4, s31954; GFX1132GISEL-NEXT: s_add_u32 s7, s7, s51955; GFX1132GISEL-NEXT: .LBB5_4: ; %endif1956; GFX1132GISEL-NEXT: s_or_b32 exec_lo, exec_lo, s21957; GFX1132GISEL-NEXT: v_dual_mov_b32 v0, s6 :: v_dual_mov_b32 v1, s71958; GFX1132GISEL-NEXT: v_mov_b32_e32 v2, 01959; GFX1132GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1960; GFX1132GISEL-NEXT: s_endpgm1961;1962; GFX12DAGISEL-LABEL: divergent_cfg_i64:1963; GFX12DAGISEL: ; %bb.0: ; %entry1964; GFX12DAGISEL-NEXT: s_clause 0x11965; GFX12DAGISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241966; GFX12DAGISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x341967; GFX12DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v01968; GFX12DAGISEL-NEXT: s_mov_b32 s8, exec_lo1969; GFX12DAGISEL-NEXT: ; implicit-def: $sgpr6_sgpr71970; GFX12DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)1971; GFX12DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v01972; GFX12DAGISEL-NEXT: s_xor_b32 s8, exec_lo, s81973; GFX12DAGISEL-NEXT: s_cbranch_execz .LBB5_21974; GFX12DAGISEL-NEXT: ; %bb.1: ; %else1975; GFX12DAGISEL-NEXT: s_mov_b32 s6, exec_lo1976; GFX12DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)1977; GFX12DAGISEL-NEXT: s_bcnt1_i32_b32 s6, s61978; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x01979; GFX12DAGISEL-NEXT: s_mul_hi_u32 s7, s2, s61980; GFX12DAGISEL-NEXT: s_mul_i32 s3, s3, s61981; GFX12DAGISEL-NEXT: s_mul_i32 s6, s2, s61982; GFX12DAGISEL-NEXT: s_add_co_u32 s7, s7, s31983; GFX12DAGISEL-NEXT: .LBB5_2: ; %Flow1984; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x01985; GFX12DAGISEL-NEXT: s_or_saveexec_b32 s2, s81986; GFX12DAGISEL-NEXT: v_dual_mov_b32 v0, s6 :: v_dual_mov_b32 v1, s71987; GFX12DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s21988; GFX12DAGISEL-NEXT: ; %bb.3: ; %if1989; GFX12DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1990; GFX12DAGISEL-NEXT: s_mov_b32 s3, exec_lo1991; GFX12DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s31992; GFX12DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(SALU_CYCLE_1)1993; GFX12DAGISEL-NEXT: s_mul_hi_u32 s6, s4, s31994; GFX12DAGISEL-NEXT: s_mul_i32 s5, s5, s31995; GFX12DAGISEL-NEXT: s_mul_i32 s4, s4, s31996; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)1997; GFX12DAGISEL-NEXT: s_add_co_u32 s5, s6, s51998; GFX12DAGISEL-NEXT: v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v1, s51999; GFX12DAGISEL-NEXT: ; %bb.4: ; %endif2000; GFX12DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s22001; GFX12DAGISEL-NEXT: v_mov_b32_e32 v2, 02002; GFX12DAGISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]2003; GFX12DAGISEL-NEXT: s_endpgm2004entry:2005 %tid = call i32 @llvm.amdgcn.workitem.id.x()2006 %d_cmp = icmp ult i32 %tid, 162007 br i1 %d_cmp, label %if, label %else2008 2009if:2010 %reducedValTid = call i64 @llvm.amdgcn.wave.reduce.add.i64(i64 %in2, i32 1)2011 br label %endif2012 2013else:2014 %reducedValIn = call i64 @llvm.amdgcn.wave.reduce.add.i64(i64 %in, i32 1)2015 br label %endif2016 2017endif:2018 %combine = phi i64 [%reducedValTid, %if], [%reducedValIn, %else]2019 store i64 %combine, ptr addrspace(1) %out2020 ret void2021}2022 2023define amdgpu_kernel void @uniform_value_float(ptr addrspace(1) %out, float %in) {2024; GFX8DAGISEL-LABEL: uniform_value_float:2025; GFX8DAGISEL: ; %bb.0: ; %entry2026; GFX8DAGISEL-NEXT: s_mov_b64 s[0:1], exec2027; GFX8DAGISEL-NEXT: s_load_dword s2, s[4:5], 0x2c2028; GFX8DAGISEL-NEXT: s_bcnt1_i32_b64 s0, s[0:1]2029; GFX8DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s02030; GFX8DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242031; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2032; GFX8DAGISEL-NEXT: v_mul_f32_e32 v0, s2, v02033; GFX8DAGISEL-NEXT: v_readfirstlane_b32 s2, v02034; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s02035; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s12036; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s22037; GFX8DAGISEL-NEXT: flat_store_dword v[0:1], v22038; GFX8DAGISEL-NEXT: s_endpgm2039;2040; GFX8GISEL-LABEL: uniform_value_float:2041; GFX8GISEL: ; %bb.0: ; %entry2042; GFX8GISEL-NEXT: s_mov_b64 s[0:1], exec2043; GFX8GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c2044; GFX8GISEL-NEXT: s_bcnt1_i32_b64 s0, s[0:1]2045; GFX8GISEL-NEXT: v_cvt_f32_i32_e32 v0, s02046; GFX8GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242047; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)2048; GFX8GISEL-NEXT: v_mul_f32_e32 v0, s2, v02049; GFX8GISEL-NEXT: v_readfirstlane_b32 s2, v02050; GFX8GISEL-NEXT: v_mov_b32_e32 v0, s02051; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s22052; GFX8GISEL-NEXT: v_mov_b32_e32 v1, s12053; GFX8GISEL-NEXT: flat_store_dword v[0:1], v22054; GFX8GISEL-NEXT: s_endpgm2055;2056; GFX9DAGISEL-LABEL: uniform_value_float:2057; GFX9DAGISEL: ; %bb.0: ; %entry2058; GFX9DAGISEL-NEXT: s_mov_b64 s[0:1], exec2059; GFX9DAGISEL-NEXT: s_load_dword s2, s[4:5], 0x2c2060; GFX9DAGISEL-NEXT: s_bcnt1_i32_b64 s0, s[0:1]2061; GFX9DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s02062; GFX9DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242063; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, 02064; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2065; GFX9DAGISEL-NEXT: v_mul_f32_e32 v0, s2, v02066; GFX9DAGISEL-NEXT: v_readfirstlane_b32 s2, v02067; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, s22068; GFX9DAGISEL-NEXT: global_store_dword v1, v0, s[0:1]2069; GFX9DAGISEL-NEXT: s_endpgm2070;2071; GFX9GISEL-LABEL: uniform_value_float:2072; GFX9GISEL: ; %bb.0: ; %entry2073; GFX9GISEL-NEXT: s_mov_b64 s[0:1], exec2074; GFX9GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c2075; GFX9GISEL-NEXT: s_bcnt1_i32_b64 s0, s[0:1]2076; GFX9GISEL-NEXT: v_cvt_f32_i32_e32 v0, s02077; GFX9GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242078; GFX9GISEL-NEXT: v_mov_b32_e32 v1, 02079; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)2080; GFX9GISEL-NEXT: v_mul_f32_e32 v0, s2, v02081; GFX9GISEL-NEXT: v_readfirstlane_b32 s2, v02082; GFX9GISEL-NEXT: v_mov_b32_e32 v0, s22083; GFX9GISEL-NEXT: global_store_dword v1, v0, s[0:1]2084; GFX9GISEL-NEXT: s_endpgm2085;2086; GFX1064DAGISEL-LABEL: uniform_value_float:2087; GFX1064DAGISEL: ; %bb.0: ; %entry2088; GFX1064DAGISEL-NEXT: s_load_dword s2, s[4:5], 0x2c2089; GFX1064DAGISEL-NEXT: s_mov_b64 s[0:1], exec2090; GFX1064DAGISEL-NEXT: s_bcnt1_i32_b64 s3, s[0:1]2091; GFX1064DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242092; GFX1064DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s32093; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2094; GFX1064DAGISEL-NEXT: v_mul_f32_e32 v0, s2, v02095; GFX1064DAGISEL-NEXT: v_readfirstlane_b32 s2, v02096; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, 02097; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, s22098; GFX1064DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]2099; GFX1064DAGISEL-NEXT: s_endpgm2100;2101; GFX1064GISEL-LABEL: uniform_value_float:2102; GFX1064GISEL: ; %bb.0: ; %entry2103; GFX1064GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c2104; GFX1064GISEL-NEXT: s_mov_b64 s[0:1], exec2105; GFX1064GISEL-NEXT: v_mov_b32_e32 v1, 02106; GFX1064GISEL-NEXT: s_bcnt1_i32_b64 s0, s[0:1]2107; GFX1064GISEL-NEXT: v_cvt_f32_i32_e32 v0, s02108; GFX1064GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242109; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)2110; GFX1064GISEL-NEXT: v_mul_f32_e32 v0, s2, v02111; GFX1064GISEL-NEXT: v_readfirstlane_b32 s2, v02112; GFX1064GISEL-NEXT: v_mov_b32_e32 v0, s22113; GFX1064GISEL-NEXT: global_store_dword v1, v0, s[0:1]2114; GFX1064GISEL-NEXT: s_endpgm2115;2116; GFX1032DAGISEL-LABEL: uniform_value_float:2117; GFX1032DAGISEL: ; %bb.0: ; %entry2118; GFX1032DAGISEL-NEXT: s_load_dword s2, s[4:5], 0x2c2119; GFX1032DAGISEL-NEXT: s_mov_b32 s0, exec_lo2120; GFX1032DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s02121; GFX1032DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242122; GFX1032DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s32123; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2124; GFX1032DAGISEL-NEXT: v_mul_f32_e32 v0, s2, v02125; GFX1032DAGISEL-NEXT: v_readfirstlane_b32 s2, v02126; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, 02127; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, s22128; GFX1032DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]2129; GFX1032DAGISEL-NEXT: s_endpgm2130;2131; GFX1032GISEL-LABEL: uniform_value_float:2132; GFX1032GISEL: ; %bb.0: ; %entry2133; GFX1032GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c2134; GFX1032GISEL-NEXT: s_mov_b32 s0, exec_lo2135; GFX1032GISEL-NEXT: v_mov_b32_e32 v1, 02136; GFX1032GISEL-NEXT: s_bcnt1_i32_b32 s0, s02137; GFX1032GISEL-NEXT: v_cvt_f32_i32_e32 v0, s02138; GFX1032GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242139; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)2140; GFX1032GISEL-NEXT: v_mul_f32_e32 v0, s2, v02141; GFX1032GISEL-NEXT: v_readfirstlane_b32 s2, v02142; GFX1032GISEL-NEXT: v_mov_b32_e32 v0, s22143; GFX1032GISEL-NEXT: global_store_dword v1, v0, s[0:1]2144; GFX1032GISEL-NEXT: s_endpgm2145;2146; GFX1164DAGISEL-LABEL: uniform_value_float:2147; GFX1164DAGISEL: ; %bb.0: ; %entry2148; GFX1164DAGISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c2149; GFX1164DAGISEL-NEXT: s_mov_b64 s[0:1], exec2150; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)2151; GFX1164DAGISEL-NEXT: s_bcnt1_i32_b64 s3, s[0:1]2152; GFX1164DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x242153; GFX1164DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s32154; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2155; GFX1164DAGISEL-NEXT: v_mul_f32_e32 v0, s2, v02156; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)2157; GFX1164DAGISEL-NEXT: v_readfirstlane_b32 s2, v02158; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, 02159; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s22160; GFX1164DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]2161; GFX1164DAGISEL-NEXT: s_endpgm2162;2163; GFX1164GISEL-LABEL: uniform_value_float:2164; GFX1164GISEL: ; %bb.0: ; %entry2165; GFX1164GISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c2166; GFX1164GISEL-NEXT: s_mov_b64 s[0:1], exec2167; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, 02168; GFX1164GISEL-NEXT: s_bcnt1_i32_b64 s0, s[0:1]2169; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)2170; GFX1164GISEL-NEXT: v_cvt_f32_i32_e32 v0, s02171; GFX1164GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x242172; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)2173; GFX1164GISEL-NEXT: v_mul_f32_e32 v0, s2, v02174; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2175; GFX1164GISEL-NEXT: v_readfirstlane_b32 s2, v02176; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, s22177; GFX1164GISEL-NEXT: global_store_b32 v1, v0, s[0:1]2178; GFX1164GISEL-NEXT: s_endpgm2179;2180; GFX1132DAGISEL-LABEL: uniform_value_float:2181; GFX1132DAGISEL: ; %bb.0: ; %entry2182; GFX1132DAGISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c2183; GFX1132DAGISEL-NEXT: s_mov_b32 s0, exec_lo2184; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)2185; GFX1132DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s02186; GFX1132DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x242187; GFX1132DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s32188; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2189; GFX1132DAGISEL-NEXT: v_mul_f32_e32 v0, s2, v02190; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2191; GFX1132DAGISEL-NEXT: v_readfirstlane_b32 s2, v02192; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s22193; GFX1132DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]2194; GFX1132DAGISEL-NEXT: s_endpgm2195;2196; GFX1132GISEL-LABEL: uniform_value_float:2197; GFX1132GISEL: ; %bb.0: ; %entry2198; GFX1132GISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c2199; GFX1132GISEL-NEXT: s_mov_b32 s0, exec_lo2200; GFX1132GISEL-NEXT: v_mov_b32_e32 v1, 02201; GFX1132GISEL-NEXT: s_bcnt1_i32_b32 s0, s02202; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)2203; GFX1132GISEL-NEXT: v_cvt_f32_i32_e32 v0, s02204; GFX1132GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x242205; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)2206; GFX1132GISEL-NEXT: v_mul_f32_e32 v0, s2, v02207; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2208; GFX1132GISEL-NEXT: v_readfirstlane_b32 s2, v02209; GFX1132GISEL-NEXT: v_mov_b32_e32 v0, s22210; GFX1132GISEL-NEXT: global_store_b32 v1, v0, s[0:1]2211; GFX1132GISEL-NEXT: s_endpgm2212;2213; GFX12DAGISEL-LABEL: uniform_value_float:2214; GFX12DAGISEL: ; %bb.0: ; %entry2215; GFX12DAGISEL-NEXT: s_load_b96 s[0:2], s[4:5], 0x242216; GFX12DAGISEL-NEXT: s_mov_b32 s3, exec_lo2217; GFX12DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2218; GFX12DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s32219; GFX12DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s32220; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x02221; GFX12DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2222; GFX12DAGISEL-NEXT: v_mul_f32_e32 v0, s2, v02223; GFX12DAGISEL-NEXT: v_readfirstlane_b32 s2, v02224; GFX12DAGISEL-NEXT: s_wait_alu depctr_va_sdst(0)2225; GFX12DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2226; GFX12DAGISEL-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s22227; GFX12DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]2228; GFX12DAGISEL-NEXT: s_endpgm2229entry:2230 %result = call float @llvm.amdgcn.wave.reduce.fadd(float %in, i32 1)2231 store float %result, ptr addrspace(1) %out2232 ret void2233}2234 2235define void @divergent_value_float(ptr addrspace(1) %out, float %id.x) {2236; GFX8DAGISEL-LABEL: divergent_value_float:2237; GFX8DAGISEL: ; %bb.0: ; %entry2238; GFX8DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2239; GFX8DAGISEL-NEXT: s_mov_b64 s[4:5], exec2240; GFX8DAGISEL-NEXT: s_brev_b32 s6, 12241; GFX8DAGISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12242; GFX8DAGISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]2243; GFX8DAGISEL-NEXT: v_readlane_b32 s8, v2, s72244; GFX8DAGISEL-NEXT: v_mov_b32_e32 v3, s82245; GFX8DAGISEL-NEXT: s_bitset0_b64 s[4:5], s72246; GFX8DAGISEL-NEXT: v_add_f32_e32 v3, s6, v32247; GFX8DAGISEL-NEXT: s_cmp_lg_u64 s[4:5], 02248; GFX8DAGISEL-NEXT: v_readfirstlane_b32 s6, v32249; GFX8DAGISEL-NEXT: s_cbranch_scc1 .LBB7_12250; GFX8DAGISEL-NEXT: ; %bb.2:2251; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s62252; GFX8DAGISEL-NEXT: flat_store_dword v[0:1], v22253; GFX8DAGISEL-NEXT: s_waitcnt vmcnt(0)2254; GFX8DAGISEL-NEXT: s_setpc_b64 s[30:31]2255;2256; GFX8GISEL-LABEL: divergent_value_float:2257; GFX8GISEL: ; %bb.0: ; %entry2258; GFX8GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2259; GFX8GISEL-NEXT: s_mov_b64 s[4:5], exec2260; GFX8GISEL-NEXT: s_brev_b32 s6, 12261; GFX8GISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12262; GFX8GISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]2263; GFX8GISEL-NEXT: v_readlane_b32 s8, v2, s72264; GFX8GISEL-NEXT: v_mov_b32_e32 v3, s82265; GFX8GISEL-NEXT: s_bitset0_b64 s[4:5], s72266; GFX8GISEL-NEXT: v_add_f32_e32 v3, s6, v32267; GFX8GISEL-NEXT: s_cmp_lg_u64 s[4:5], 02268; GFX8GISEL-NEXT: v_readfirstlane_b32 s6, v32269; GFX8GISEL-NEXT: s_cbranch_scc1 .LBB7_12270; GFX8GISEL-NEXT: ; %bb.2:2271; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s62272; GFX8GISEL-NEXT: flat_store_dword v[0:1], v22273; GFX8GISEL-NEXT: s_waitcnt vmcnt(0)2274; GFX8GISEL-NEXT: s_setpc_b64 s[30:31]2275;2276; GFX9DAGISEL-LABEL: divergent_value_float:2277; GFX9DAGISEL: ; %bb.0: ; %entry2278; GFX9DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2279; GFX9DAGISEL-NEXT: s_mov_b64 s[4:5], exec2280; GFX9DAGISEL-NEXT: s_brev_b32 s6, 12281; GFX9DAGISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12282; GFX9DAGISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]2283; GFX9DAGISEL-NEXT: v_readlane_b32 s8, v2, s72284; GFX9DAGISEL-NEXT: v_mov_b32_e32 v3, s82285; GFX9DAGISEL-NEXT: s_bitset0_b64 s[4:5], s72286; GFX9DAGISEL-NEXT: v_add_f32_e32 v3, s6, v32287; GFX9DAGISEL-NEXT: s_cmp_lg_u64 s[4:5], 02288; GFX9DAGISEL-NEXT: v_readfirstlane_b32 s6, v32289; GFX9DAGISEL-NEXT: s_cbranch_scc1 .LBB7_12290; GFX9DAGISEL-NEXT: ; %bb.2:2291; GFX9DAGISEL-NEXT: v_mov_b32_e32 v2, s62292; GFX9DAGISEL-NEXT: global_store_dword v[0:1], v2, off2293; GFX9DAGISEL-NEXT: s_waitcnt vmcnt(0)2294; GFX9DAGISEL-NEXT: s_setpc_b64 s[30:31]2295;2296; GFX9GISEL-LABEL: divergent_value_float:2297; GFX9GISEL: ; %bb.0: ; %entry2298; GFX9GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2299; GFX9GISEL-NEXT: s_mov_b64 s[4:5], exec2300; GFX9GISEL-NEXT: s_brev_b32 s6, 12301; GFX9GISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12302; GFX9GISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]2303; GFX9GISEL-NEXT: v_readlane_b32 s8, v2, s72304; GFX9GISEL-NEXT: v_mov_b32_e32 v3, s82305; GFX9GISEL-NEXT: s_bitset0_b64 s[4:5], s72306; GFX9GISEL-NEXT: v_add_f32_e32 v3, s6, v32307; GFX9GISEL-NEXT: s_cmp_lg_u64 s[4:5], 02308; GFX9GISEL-NEXT: v_readfirstlane_b32 s6, v32309; GFX9GISEL-NEXT: s_cbranch_scc1 .LBB7_12310; GFX9GISEL-NEXT: ; %bb.2:2311; GFX9GISEL-NEXT: v_mov_b32_e32 v2, s62312; GFX9GISEL-NEXT: global_store_dword v[0:1], v2, off2313; GFX9GISEL-NEXT: s_waitcnt vmcnt(0)2314; GFX9GISEL-NEXT: s_setpc_b64 s[30:31]2315;2316; GFX1064DAGISEL-LABEL: divergent_value_float:2317; GFX1064DAGISEL: ; %bb.0: ; %entry2318; GFX1064DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2319; GFX1064DAGISEL-NEXT: s_mov_b64 s[4:5], exec2320; GFX1064DAGISEL-NEXT: s_brev_b32 s6, 12321; GFX1064DAGISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12322; GFX1064DAGISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]2323; GFX1064DAGISEL-NEXT: v_readlane_b32 s8, v2, s72324; GFX1064DAGISEL-NEXT: s_bitset0_b64 s[4:5], s72325; GFX1064DAGISEL-NEXT: s_cmp_lg_u64 s[4:5], 02326; GFX1064DAGISEL-NEXT: v_add_f32_e64 v3, s6, s82327; GFX1064DAGISEL-NEXT: v_readfirstlane_b32 s6, v32328; GFX1064DAGISEL-NEXT: s_cbranch_scc1 .LBB7_12329; GFX1064DAGISEL-NEXT: ; %bb.2:2330; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v2, s62331; GFX1064DAGISEL-NEXT: global_store_dword v[0:1], v2, off2332; GFX1064DAGISEL-NEXT: s_setpc_b64 s[30:31]2333;2334; GFX1064GISEL-LABEL: divergent_value_float:2335; GFX1064GISEL: ; %bb.0: ; %entry2336; GFX1064GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2337; GFX1064GISEL-NEXT: s_mov_b64 s[4:5], exec2338; GFX1064GISEL-NEXT: s_brev_b32 s6, 12339; GFX1064GISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12340; GFX1064GISEL-NEXT: s_ff1_i32_b64 s7, s[4:5]2341; GFX1064GISEL-NEXT: v_readlane_b32 s8, v2, s72342; GFX1064GISEL-NEXT: s_bitset0_b64 s[4:5], s72343; GFX1064GISEL-NEXT: s_cmp_lg_u64 s[4:5], 02344; GFX1064GISEL-NEXT: v_add_f32_e64 v3, s6, s82345; GFX1064GISEL-NEXT: v_readfirstlane_b32 s6, v32346; GFX1064GISEL-NEXT: s_cbranch_scc1 .LBB7_12347; GFX1064GISEL-NEXT: ; %bb.2:2348; GFX1064GISEL-NEXT: v_mov_b32_e32 v2, s62349; GFX1064GISEL-NEXT: global_store_dword v[0:1], v2, off2350; GFX1064GISEL-NEXT: s_setpc_b64 s[30:31]2351;2352; GFX1032DAGISEL-LABEL: divergent_value_float:2353; GFX1032DAGISEL: ; %bb.0: ; %entry2354; GFX1032DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2355; GFX1032DAGISEL-NEXT: s_mov_b32 s4, exec_lo2356; GFX1032DAGISEL-NEXT: s_brev_b32 s5, 12357; GFX1032DAGISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12358; GFX1032DAGISEL-NEXT: s_ff1_i32_b32 s6, s42359; GFX1032DAGISEL-NEXT: v_readlane_b32 s7, v2, s62360; GFX1032DAGISEL-NEXT: s_bitset0_b32 s4, s62361; GFX1032DAGISEL-NEXT: s_cmp_lg_u32 s4, 02362; GFX1032DAGISEL-NEXT: v_add_f32_e64 v3, s5, s72363; GFX1032DAGISEL-NEXT: v_readfirstlane_b32 s5, v32364; GFX1032DAGISEL-NEXT: s_cbranch_scc1 .LBB7_12365; GFX1032DAGISEL-NEXT: ; %bb.2:2366; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v2, s52367; GFX1032DAGISEL-NEXT: global_store_dword v[0:1], v2, off2368; GFX1032DAGISEL-NEXT: s_setpc_b64 s[30:31]2369;2370; GFX1032GISEL-LABEL: divergent_value_float:2371; GFX1032GISEL: ; %bb.0: ; %entry2372; GFX1032GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2373; GFX1032GISEL-NEXT: s_mov_b32 s4, exec_lo2374; GFX1032GISEL-NEXT: s_brev_b32 s5, 12375; GFX1032GISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12376; GFX1032GISEL-NEXT: s_ff1_i32_b32 s6, s42377; GFX1032GISEL-NEXT: v_readlane_b32 s7, v2, s62378; GFX1032GISEL-NEXT: s_bitset0_b32 s4, s62379; GFX1032GISEL-NEXT: s_cmp_lg_u32 s4, 02380; GFX1032GISEL-NEXT: v_add_f32_e64 v3, s5, s72381; GFX1032GISEL-NEXT: v_readfirstlane_b32 s5, v32382; GFX1032GISEL-NEXT: s_cbranch_scc1 .LBB7_12383; GFX1032GISEL-NEXT: ; %bb.2:2384; GFX1032GISEL-NEXT: v_mov_b32_e32 v2, s52385; GFX1032GISEL-NEXT: global_store_dword v[0:1], v2, off2386; GFX1032GISEL-NEXT: s_setpc_b64 s[30:31]2387;2388; GFX1164DAGISEL-LABEL: divergent_value_float:2389; GFX1164DAGISEL: ; %bb.0: ; %entry2390; GFX1164DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2391; GFX1164DAGISEL-NEXT: s_mov_b64 s[0:1], exec2392; GFX1164DAGISEL-NEXT: s_brev_b32 s2, 12393; GFX1164DAGISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12394; GFX1164DAGISEL-NEXT: s_ctz_i32_b64 s3, s[0:1]2395; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)2396; GFX1164DAGISEL-NEXT: v_readlane_b32 s4, v2, s32397; GFX1164DAGISEL-NEXT: s_bitset0_b64 s[0:1], s32398; GFX1164DAGISEL-NEXT: s_cmp_lg_u64 s[0:1], 02399; GFX1164DAGISEL-NEXT: v_add_f32_e64 v3, s2, s42400; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2401; GFX1164DAGISEL-NEXT: v_readfirstlane_b32 s2, v32402; GFX1164DAGISEL-NEXT: s_cbranch_scc1 .LBB7_12403; GFX1164DAGISEL-NEXT: ; %bb.2:2404; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v2, s22405; GFX1164DAGISEL-NEXT: global_store_b32 v[0:1], v2, off2406; GFX1164DAGISEL-NEXT: s_setpc_b64 s[30:31]2407;2408; GFX1164GISEL-LABEL: divergent_value_float:2409; GFX1164GISEL: ; %bb.0: ; %entry2410; GFX1164GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2411; GFX1164GISEL-NEXT: s_mov_b64 s[0:1], exec2412; GFX1164GISEL-NEXT: s_brev_b32 s2, 12413; GFX1164GISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12414; GFX1164GISEL-NEXT: s_ctz_i32_b64 s3, s[0:1]2415; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)2416; GFX1164GISEL-NEXT: v_readlane_b32 s4, v2, s32417; GFX1164GISEL-NEXT: s_bitset0_b64 s[0:1], s32418; GFX1164GISEL-NEXT: s_cmp_lg_u64 s[0:1], 02419; GFX1164GISEL-NEXT: v_add_f32_e64 v3, s2, s42420; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2421; GFX1164GISEL-NEXT: v_readfirstlane_b32 s2, v32422; GFX1164GISEL-NEXT: s_cbranch_scc1 .LBB7_12423; GFX1164GISEL-NEXT: ; %bb.2:2424; GFX1164GISEL-NEXT: v_mov_b32_e32 v2, s22425; GFX1164GISEL-NEXT: global_store_b32 v[0:1], v2, off2426; GFX1164GISEL-NEXT: s_setpc_b64 s[30:31]2427;2428; GFX1132DAGISEL-LABEL: divergent_value_float:2429; GFX1132DAGISEL: ; %bb.0: ; %entry2430; GFX1132DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2431; GFX1132DAGISEL-NEXT: s_mov_b32 s0, exec_lo2432; GFX1132DAGISEL-NEXT: s_brev_b32 s1, 12433; GFX1132DAGISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12434; GFX1132DAGISEL-NEXT: s_ctz_i32_b32 s2, s02435; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)2436; GFX1132DAGISEL-NEXT: v_readlane_b32 s3, v2, s22437; GFX1132DAGISEL-NEXT: s_bitset0_b32 s0, s22438; GFX1132DAGISEL-NEXT: s_cmp_lg_u32 s0, 02439; GFX1132DAGISEL-NEXT: v_add_f32_e64 v3, s1, s32440; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2441; GFX1132DAGISEL-NEXT: v_readfirstlane_b32 s1, v32442; GFX1132DAGISEL-NEXT: s_cbranch_scc1 .LBB7_12443; GFX1132DAGISEL-NEXT: ; %bb.2:2444; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v2, s12445; GFX1132DAGISEL-NEXT: global_store_b32 v[0:1], v2, off2446; GFX1132DAGISEL-NEXT: s_setpc_b64 s[30:31]2447;2448; GFX1132GISEL-LABEL: divergent_value_float:2449; GFX1132GISEL: ; %bb.0: ; %entry2450; GFX1132GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2451; GFX1132GISEL-NEXT: s_mov_b32 s0, exec_lo2452; GFX1132GISEL-NEXT: s_brev_b32 s1, 12453; GFX1132GISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12454; GFX1132GISEL-NEXT: s_ctz_i32_b32 s2, s02455; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)2456; GFX1132GISEL-NEXT: v_readlane_b32 s3, v2, s22457; GFX1132GISEL-NEXT: s_bitset0_b32 s0, s22458; GFX1132GISEL-NEXT: s_cmp_lg_u32 s0, 02459; GFX1132GISEL-NEXT: v_add_f32_e64 v3, s1, s32460; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2461; GFX1132GISEL-NEXT: v_readfirstlane_b32 s1, v32462; GFX1132GISEL-NEXT: s_cbranch_scc1 .LBB7_12463; GFX1132GISEL-NEXT: ; %bb.2:2464; GFX1132GISEL-NEXT: v_mov_b32_e32 v2, s12465; GFX1132GISEL-NEXT: global_store_b32 v[0:1], v2, off2466; GFX1132GISEL-NEXT: s_setpc_b64 s[30:31]2467;2468; GFX12DAGISEL-LABEL: divergent_value_float:2469; GFX12DAGISEL: ; %bb.0: ; %entry2470; GFX12DAGISEL-NEXT: s_wait_loadcnt_dscnt 0x02471; GFX12DAGISEL-NEXT: s_wait_expcnt 0x02472; GFX12DAGISEL-NEXT: s_wait_samplecnt 0x02473; GFX12DAGISEL-NEXT: s_wait_bvhcnt 0x02474; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x02475; GFX12DAGISEL-NEXT: s_mov_b32 s0, exec_lo2476; GFX12DAGISEL-NEXT: s_brev_b32 s1, 12477; GFX12DAGISEL-NEXT: .LBB7_1: ; =>This Inner Loop Header: Depth=12478; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)2479; GFX12DAGISEL-NEXT: s_ctz_i32_b32 s2, s02480; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)2481; GFX12DAGISEL-NEXT: v_readlane_b32 s3, v2, s22482; GFX12DAGISEL-NEXT: s_bitset0_b32 s0, s22483; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)2484; GFX12DAGISEL-NEXT: s_cmp_lg_u32 s0, 02485; GFX12DAGISEL-NEXT: v_add_f32_e64 v3, s1, s32486; GFX12DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2487; GFX12DAGISEL-NEXT: v_readfirstlane_b32 s1, v32488; GFX12DAGISEL-NEXT: s_cbranch_scc1 .LBB7_12489; GFX12DAGISEL-NEXT: ; %bb.2:2490; GFX12DAGISEL-NEXT: s_wait_alu depctr_va_sdst(0)2491; GFX12DAGISEL-NEXT: v_mov_b32_e32 v2, s12492; GFX12DAGISEL-NEXT: global_store_b32 v[0:1], v2, off2493; GFX12DAGISEL-NEXT: s_setpc_b64 s[30:31]2494entry:2495 %result = call float @llvm.amdgcn.wave.reduce.fadd(float %id.x, i32 1)2496 store float %result, ptr addrspace(1) %out2497 ret void2498}2499 2500define amdgpu_kernel void @divergent_cfg_float(ptr addrspace(1) %out, float %in, float %in2) {2501; GFX8DAGISEL-LABEL: divergent_cfg_float:2502; GFX8DAGISEL: ; %bb.0: ; %entry2503; GFX8DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2c2504; GFX8DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v02505; GFX8DAGISEL-NEXT: ; implicit-def: $sgpr62506; GFX8DAGISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc2507; GFX8DAGISEL-NEXT: s_xor_b64 s[2:3], exec, s[2:3]2508; GFX8DAGISEL-NEXT: s_cbranch_execz .LBB8_22509; GFX8DAGISEL-NEXT: ; %bb.1: ; %else2510; GFX8DAGISEL-NEXT: s_mov_b64 s[6:7], exec2511; GFX8DAGISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]2512; GFX8DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s62513; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2514; GFX8DAGISEL-NEXT: v_mul_f32_e32 v0, s0, v02515; GFX8DAGISEL-NEXT: v_readfirstlane_b32 s6, v02516; GFX8DAGISEL-NEXT: .LBB8_2: ; %Flow2517; GFX8DAGISEL-NEXT: s_or_saveexec_b64 s[2:3], s[2:3]2518; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s62519; GFX8DAGISEL-NEXT: s_xor_b64 exec, exec, s[2:3]2520; GFX8DAGISEL-NEXT: s_cbranch_execz .LBB8_42521; GFX8DAGISEL-NEXT: ; %bb.3: ; %if2522; GFX8DAGISEL-NEXT: s_mov_b64 s[6:7], exec2523; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2524; GFX8DAGISEL-NEXT: s_bcnt1_i32_b64 s0, s[6:7]2525; GFX8DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s02526; GFX8DAGISEL-NEXT: v_mul_f32_e32 v0, s1, v02527; GFX8DAGISEL-NEXT: v_readfirstlane_b32 s0, v02528; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s02529; GFX8DAGISEL-NEXT: .LBB8_4: ; %endif2530; GFX8DAGISEL-NEXT: s_or_b64 exec, exec, s[2:3]2531; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2532; GFX8DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242533; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2534; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s12535; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s02536; GFX8DAGISEL-NEXT: flat_store_dword v[1:2], v02537; GFX8DAGISEL-NEXT: s_endpgm2538;2539; GFX8GISEL-LABEL: divergent_cfg_float:2540; GFX8GISEL: ; %bb.0: ; %entry2541; GFX8GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2c2542; GFX8GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v02543; GFX8GISEL-NEXT: ; implicit-def: $sgpr62544; GFX8GISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc2545; GFX8GISEL-NEXT: s_xor_b64 s[2:3], exec, s[2:3]2546; GFX8GISEL-NEXT: s_cbranch_execz .LBB8_22547; GFX8GISEL-NEXT: ; %bb.1: ; %else2548; GFX8GISEL-NEXT: s_mov_b64 s[6:7], exec2549; GFX8GISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]2550; GFX8GISEL-NEXT: v_cvt_f32_i32_e32 v0, s62551; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)2552; GFX8GISEL-NEXT: v_mul_f32_e32 v0, s0, v02553; GFX8GISEL-NEXT: v_readfirstlane_b32 s6, v02554; GFX8GISEL-NEXT: .LBB8_2: ; %Flow2555; GFX8GISEL-NEXT: s_andn2_saveexec_b64 s[2:3], s[2:3]2556; GFX8GISEL-NEXT: s_cbranch_execz .LBB8_42557; GFX8GISEL-NEXT: ; %bb.3: ; %if2558; GFX8GISEL-NEXT: s_mov_b64 s[6:7], exec2559; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)2560; GFX8GISEL-NEXT: s_bcnt1_i32_b64 s0, s[6:7]2561; GFX8GISEL-NEXT: v_cvt_f32_i32_e32 v0, s02562; GFX8GISEL-NEXT: v_mul_f32_e32 v0, s1, v02563; GFX8GISEL-NEXT: v_readfirstlane_b32 s6, v02564; GFX8GISEL-NEXT: .LBB8_4: ; %endif2565; GFX8GISEL-NEXT: s_or_b64 exec, exec, s[2:3]2566; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)2567; GFX8GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242568; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s62569; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)2570; GFX8GISEL-NEXT: v_mov_b32_e32 v0, s02571; GFX8GISEL-NEXT: v_mov_b32_e32 v1, s12572; GFX8GISEL-NEXT: flat_store_dword v[0:1], v22573; GFX8GISEL-NEXT: s_endpgm2574;2575; GFX9DAGISEL-LABEL: divergent_cfg_float:2576; GFX9DAGISEL: ; %bb.0: ; %entry2577; GFX9DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2c2578; GFX9DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v02579; GFX9DAGISEL-NEXT: ; implicit-def: $sgpr62580; GFX9DAGISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc2581; GFX9DAGISEL-NEXT: s_xor_b64 s[2:3], exec, s[2:3]2582; GFX9DAGISEL-NEXT: s_cbranch_execz .LBB8_22583; GFX9DAGISEL-NEXT: ; %bb.1: ; %else2584; GFX9DAGISEL-NEXT: s_mov_b64 s[6:7], exec2585; GFX9DAGISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]2586; GFX9DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s62587; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2588; GFX9DAGISEL-NEXT: v_mul_f32_e32 v0, s0, v02589; GFX9DAGISEL-NEXT: v_readfirstlane_b32 s6, v02590; GFX9DAGISEL-NEXT: .LBB8_2: ; %Flow2591; GFX9DAGISEL-NEXT: s_or_saveexec_b64 s[2:3], s[2:3]2592; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, s62593; GFX9DAGISEL-NEXT: s_xor_b64 exec, exec, s[2:3]2594; GFX9DAGISEL-NEXT: s_cbranch_execz .LBB8_42595; GFX9DAGISEL-NEXT: ; %bb.3: ; %if2596; GFX9DAGISEL-NEXT: s_mov_b64 s[6:7], exec2597; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2598; GFX9DAGISEL-NEXT: s_bcnt1_i32_b64 s0, s[6:7]2599; GFX9DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s02600; GFX9DAGISEL-NEXT: v_mul_f32_e32 v0, s1, v02601; GFX9DAGISEL-NEXT: v_readfirstlane_b32 s0, v02602; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, s02603; GFX9DAGISEL-NEXT: .LBB8_4: ; %endif2604; GFX9DAGISEL-NEXT: s_or_b64 exec, exec, s[2:3]2605; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2606; GFX9DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242607; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, 02608; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2609; GFX9DAGISEL-NEXT: global_store_dword v1, v0, s[0:1]2610; GFX9DAGISEL-NEXT: s_endpgm2611;2612; GFX9GISEL-LABEL: divergent_cfg_float:2613; GFX9GISEL: ; %bb.0: ; %entry2614; GFX9GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2c2615; GFX9GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v02616; GFX9GISEL-NEXT: ; implicit-def: $sgpr62617; GFX9GISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc2618; GFX9GISEL-NEXT: s_xor_b64 s[2:3], exec, s[2:3]2619; GFX9GISEL-NEXT: s_cbranch_execz .LBB8_22620; GFX9GISEL-NEXT: ; %bb.1: ; %else2621; GFX9GISEL-NEXT: s_mov_b64 s[6:7], exec2622; GFX9GISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]2623; GFX9GISEL-NEXT: v_cvt_f32_i32_e32 v0, s62624; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)2625; GFX9GISEL-NEXT: v_mul_f32_e32 v0, s0, v02626; GFX9GISEL-NEXT: v_readfirstlane_b32 s6, v02627; GFX9GISEL-NEXT: .LBB8_2: ; %Flow2628; GFX9GISEL-NEXT: s_andn2_saveexec_b64 s[2:3], s[2:3]2629; GFX9GISEL-NEXT: s_cbranch_execz .LBB8_42630; GFX9GISEL-NEXT: ; %bb.3: ; %if2631; GFX9GISEL-NEXT: s_mov_b64 s[6:7], exec2632; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)2633; GFX9GISEL-NEXT: s_bcnt1_i32_b64 s0, s[6:7]2634; GFX9GISEL-NEXT: v_cvt_f32_i32_e32 v0, s02635; GFX9GISEL-NEXT: v_mul_f32_e32 v0, s1, v02636; GFX9GISEL-NEXT: v_readfirstlane_b32 s6, v02637; GFX9GISEL-NEXT: .LBB8_4: ; %endif2638; GFX9GISEL-NEXT: s_or_b64 exec, exec, s[2:3]2639; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)2640; GFX9GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242641; GFX9GISEL-NEXT: v_mov_b32_e32 v0, s62642; GFX9GISEL-NEXT: v_mov_b32_e32 v1, 02643; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)2644; GFX9GISEL-NEXT: global_store_dword v1, v0, s[0:1]2645; GFX9GISEL-NEXT: s_endpgm2646;2647; GFX1064DAGISEL-LABEL: divergent_cfg_float:2648; GFX1064DAGISEL: ; %bb.0: ; %entry2649; GFX1064DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2c2650; GFX1064DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v02651; GFX1064DAGISEL-NEXT: ; implicit-def: $sgpr62652; GFX1064DAGISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc2653; GFX1064DAGISEL-NEXT: s_xor_b64 s[2:3], exec, s[2:3]2654; GFX1064DAGISEL-NEXT: s_cbranch_execz .LBB8_22655; GFX1064DAGISEL-NEXT: ; %bb.1: ; %else2656; GFX1064DAGISEL-NEXT: s_mov_b64 s[6:7], exec2657; GFX1064DAGISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]2658; GFX1064DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s62659; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2660; GFX1064DAGISEL-NEXT: v_mul_f32_e32 v0, s0, v02661; GFX1064DAGISEL-NEXT: v_readfirstlane_b32 s6, v02662; GFX1064DAGISEL-NEXT: .LBB8_2: ; %Flow2663; GFX1064DAGISEL-NEXT: s_or_saveexec_b64 s[2:3], s[2:3]2664; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, s62665; GFX1064DAGISEL-NEXT: s_xor_b64 exec, exec, s[2:3]2666; GFX1064DAGISEL-NEXT: s_cbranch_execz .LBB8_42667; GFX1064DAGISEL-NEXT: ; %bb.3: ; %if2668; GFX1064DAGISEL-NEXT: s_mov_b64 s[6:7], exec2669; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2670; GFX1064DAGISEL-NEXT: s_bcnt1_i32_b64 s0, s[6:7]2671; GFX1064DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s02672; GFX1064DAGISEL-NEXT: v_mul_f32_e32 v0, s1, v02673; GFX1064DAGISEL-NEXT: v_readfirstlane_b32 s0, v02674; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, s02675; GFX1064DAGISEL-NEXT: .LBB8_4: ; %endif2676; GFX1064DAGISEL-NEXT: s_or_b64 exec, exec, s[2:3]2677; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2678; GFX1064DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242679; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, 02680; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2681; GFX1064DAGISEL-NEXT: global_store_dword v1, v0, s[0:1]2682; GFX1064DAGISEL-NEXT: s_endpgm2683;2684; GFX1064GISEL-LABEL: divergent_cfg_float:2685; GFX1064GISEL: ; %bb.0: ; %entry2686; GFX1064GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2c2687; GFX1064GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v02688; GFX1064GISEL-NEXT: ; implicit-def: $sgpr62689; GFX1064GISEL-NEXT: s_and_saveexec_b64 s[2:3], vcc2690; GFX1064GISEL-NEXT: s_xor_b64 s[2:3], exec, s[2:3]2691; GFX1064GISEL-NEXT: s_cbranch_execz .LBB8_22692; GFX1064GISEL-NEXT: ; %bb.1: ; %else2693; GFX1064GISEL-NEXT: s_mov_b64 s[6:7], exec2694; GFX1064GISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]2695; GFX1064GISEL-NEXT: v_cvt_f32_i32_e32 v0, s62696; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)2697; GFX1064GISEL-NEXT: v_mul_f32_e32 v0, s0, v02698; GFX1064GISEL-NEXT: v_readfirstlane_b32 s6, v02699; GFX1064GISEL-NEXT: .LBB8_2: ; %Flow2700; GFX1064GISEL-NEXT: s_andn2_saveexec_b64 s[2:3], s[2:3]2701; GFX1064GISEL-NEXT: s_cbranch_execz .LBB8_42702; GFX1064GISEL-NEXT: ; %bb.3: ; %if2703; GFX1064GISEL-NEXT: s_mov_b64 s[6:7], exec2704; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)2705; GFX1064GISEL-NEXT: s_bcnt1_i32_b64 s0, s[6:7]2706; GFX1064GISEL-NEXT: v_cvt_f32_i32_e32 v0, s02707; GFX1064GISEL-NEXT: v_mul_f32_e32 v0, s1, v02708; GFX1064GISEL-NEXT: v_readfirstlane_b32 s6, v02709; GFX1064GISEL-NEXT: .LBB8_4: ; %endif2710; GFX1064GISEL-NEXT: s_or_b64 exec, exec, s[2:3]2711; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)2712; GFX1064GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242713; GFX1064GISEL-NEXT: v_mov_b32_e32 v0, s62714; GFX1064GISEL-NEXT: v_mov_b32_e32 v1, 02715; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)2716; GFX1064GISEL-NEXT: global_store_dword v1, v0, s[0:1]2717; GFX1064GISEL-NEXT: s_endpgm2718;2719; GFX1032DAGISEL-LABEL: divergent_cfg_float:2720; GFX1032DAGISEL: ; %bb.0: ; %entry2721; GFX1032DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2c2722; GFX1032DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc_lo, 15, v02723; GFX1032DAGISEL-NEXT: ; implicit-def: $sgpr32724; GFX1032DAGISEL-NEXT: s_and_saveexec_b32 s2, vcc_lo2725; GFX1032DAGISEL-NEXT: s_xor_b32 s2, exec_lo, s22726; GFX1032DAGISEL-NEXT: s_cbranch_execz .LBB8_22727; GFX1032DAGISEL-NEXT: ; %bb.1: ; %else2728; GFX1032DAGISEL-NEXT: s_mov_b32 s3, exec_lo2729; GFX1032DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s32730; GFX1032DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s32731; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2732; GFX1032DAGISEL-NEXT: v_mul_f32_e32 v0, s0, v02733; GFX1032DAGISEL-NEXT: v_readfirstlane_b32 s3, v02734; GFX1032DAGISEL-NEXT: .LBB8_2: ; %Flow2735; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2736; GFX1032DAGISEL-NEXT: s_or_saveexec_b32 s0, s22737; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, s32738; GFX1032DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s02739; GFX1032DAGISEL-NEXT: s_cbranch_execz .LBB8_42740; GFX1032DAGISEL-NEXT: ; %bb.3: ; %if2741; GFX1032DAGISEL-NEXT: s_mov_b32 s2, exec_lo2742; GFX1032DAGISEL-NEXT: s_bcnt1_i32_b32 s2, s22743; GFX1032DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s22744; GFX1032DAGISEL-NEXT: v_mul_f32_e32 v0, s1, v02745; GFX1032DAGISEL-NEXT: v_readfirstlane_b32 s1, v02746; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, s12747; GFX1032DAGISEL-NEXT: .LBB8_4: ; %endif2748; GFX1032DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s02749; GFX1032DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242750; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, 02751; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2752; GFX1032DAGISEL-NEXT: global_store_dword v1, v0, s[0:1]2753; GFX1032DAGISEL-NEXT: s_endpgm2754;2755; GFX1032GISEL-LABEL: divergent_cfg_float:2756; GFX1032GISEL: ; %bb.0: ; %entry2757; GFX1032GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2c2758; GFX1032GISEL-NEXT: v_cmp_le_u32_e32 vcc_lo, 16, v02759; GFX1032GISEL-NEXT: ; implicit-def: $sgpr22760; GFX1032GISEL-NEXT: s_and_saveexec_b32 s3, vcc_lo2761; GFX1032GISEL-NEXT: s_xor_b32 s3, exec_lo, s32762; GFX1032GISEL-NEXT: s_cbranch_execz .LBB8_22763; GFX1032GISEL-NEXT: ; %bb.1: ; %else2764; GFX1032GISEL-NEXT: s_mov_b32 s2, exec_lo2765; GFX1032GISEL-NEXT: s_bcnt1_i32_b32 s2, s22766; GFX1032GISEL-NEXT: v_cvt_f32_i32_e32 v0, s22767; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)2768; GFX1032GISEL-NEXT: v_mul_f32_e32 v0, s0, v02769; GFX1032GISEL-NEXT: v_readfirstlane_b32 s2, v02770; GFX1032GISEL-NEXT: .LBB8_2: ; %Flow2771; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)2772; GFX1032GISEL-NEXT: s_andn2_saveexec_b32 s0, s32773; GFX1032GISEL-NEXT: s_cbranch_execz .LBB8_42774; GFX1032GISEL-NEXT: ; %bb.3: ; %if2775; GFX1032GISEL-NEXT: s_mov_b32 s2, exec_lo2776; GFX1032GISEL-NEXT: s_bcnt1_i32_b32 s2, s22777; GFX1032GISEL-NEXT: v_cvt_f32_i32_e32 v0, s22778; GFX1032GISEL-NEXT: v_mul_f32_e32 v0, s1, v02779; GFX1032GISEL-NEXT: v_readfirstlane_b32 s2, v02780; GFX1032GISEL-NEXT: .LBB8_4: ; %endif2781; GFX1032GISEL-NEXT: s_or_b32 exec_lo, exec_lo, s02782; GFX1032GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x242783; GFX1032GISEL-NEXT: v_mov_b32_e32 v0, s22784; GFX1032GISEL-NEXT: v_mov_b32_e32 v1, 02785; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)2786; GFX1032GISEL-NEXT: global_store_dword v1, v0, s[0:1]2787; GFX1032GISEL-NEXT: s_endpgm2788;2789; GFX1164DAGISEL-LABEL: divergent_cfg_float:2790; GFX1164DAGISEL: ; %bb.0: ; %entry2791; GFX1164DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x2c2792; GFX1164DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v02793; GFX1164DAGISEL-NEXT: s_mov_b64 s[2:3], exec2794; GFX1164DAGISEL-NEXT: ; implicit-def: $sgpr62795; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2796; GFX1164DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v02797; GFX1164DAGISEL-NEXT: s_xor_b64 s[2:3], exec, s[2:3]2798; GFX1164DAGISEL-NEXT: s_cbranch_execz .LBB8_22799; GFX1164DAGISEL-NEXT: ; %bb.1: ; %else2800; GFX1164DAGISEL-NEXT: s_mov_b64 s[6:7], exec2801; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2802; GFX1164DAGISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]2803; GFX1164DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s62804; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2805; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2806; GFX1164DAGISEL-NEXT: v_mul_f32_e32 v0, s0, v02807; GFX1164DAGISEL-NEXT: v_readfirstlane_b32 s6, v02808; GFX1164DAGISEL-NEXT: .LBB8_2: ; %Flow2809; GFX1164DAGISEL-NEXT: s_or_saveexec_b64 s[2:3], s[2:3]2810; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2811; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, s62812; GFX1164DAGISEL-NEXT: s_xor_b64 exec, exec, s[2:3]2813; GFX1164DAGISEL-NEXT: s_cbranch_execz .LBB8_42814; GFX1164DAGISEL-NEXT: ; %bb.3: ; %if2815; GFX1164DAGISEL-NEXT: s_mov_b64 s[6:7], exec2816; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2817; GFX1164DAGISEL-NEXT: s_bcnt1_i32_b64 s0, s[6:7]2818; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)2819; GFX1164DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s02820; GFX1164DAGISEL-NEXT: v_mul_f32_e32 v0, s1, v02821; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2822; GFX1164DAGISEL-NEXT: v_readfirstlane_b32 s0, v02823; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, s02824; GFX1164DAGISEL-NEXT: .LBB8_4: ; %endif2825; GFX1164DAGISEL-NEXT: s_or_b64 exec, exec, s[2:3]2826; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2827; GFX1164DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x242828; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, 02829; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2830; GFX1164DAGISEL-NEXT: global_store_b32 v1, v0, s[0:1]2831; GFX1164DAGISEL-NEXT: s_endpgm2832;2833; GFX1164GISEL-LABEL: divergent_cfg_float:2834; GFX1164GISEL: ; %bb.0: ; %entry2835; GFX1164GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x2c2836; GFX1164GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v02837; GFX1164GISEL-NEXT: s_mov_b64 s[2:3], exec2838; GFX1164GISEL-NEXT: ; implicit-def: $sgpr62839; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2840; GFX1164GISEL-NEXT: v_cmpx_le_u32_e32 16, v02841; GFX1164GISEL-NEXT: s_xor_b64 s[2:3], exec, s[2:3]2842; GFX1164GISEL-NEXT: s_cbranch_execz .LBB8_22843; GFX1164GISEL-NEXT: ; %bb.1: ; %else2844; GFX1164GISEL-NEXT: s_mov_b64 s[6:7], exec2845; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2846; GFX1164GISEL-NEXT: s_bcnt1_i32_b64 s6, s[6:7]2847; GFX1164GISEL-NEXT: v_cvt_f32_i32_e32 v0, s62848; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)2849; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2850; GFX1164GISEL-NEXT: v_mul_f32_e32 v0, s0, v02851; GFX1164GISEL-NEXT: v_readfirstlane_b32 s6, v02852; GFX1164GISEL-NEXT: .LBB8_2: ; %Flow2853; GFX1164GISEL-NEXT: s_and_not1_saveexec_b64 s[2:3], s[2:3]2854; GFX1164GISEL-NEXT: s_cbranch_execz .LBB8_42855; GFX1164GISEL-NEXT: ; %bb.3: ; %if2856; GFX1164GISEL-NEXT: s_mov_b64 s[6:7], exec2857; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)2858; GFX1164GISEL-NEXT: s_bcnt1_i32_b64 s0, s[6:7]2859; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)2860; GFX1164GISEL-NEXT: v_cvt_f32_i32_e32 v0, s02861; GFX1164GISEL-NEXT: v_mul_f32_e32 v0, s1, v02862; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2863; GFX1164GISEL-NEXT: v_readfirstlane_b32 s6, v02864; GFX1164GISEL-NEXT: .LBB8_4: ; %endif2865; GFX1164GISEL-NEXT: s_or_b64 exec, exec, s[2:3]2866; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)2867; GFX1164GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x242868; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2869; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, s62870; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, 02871; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)2872; GFX1164GISEL-NEXT: global_store_b32 v1, v0, s[0:1]2873; GFX1164GISEL-NEXT: s_endpgm2874;2875; GFX1132DAGISEL-LABEL: divergent_cfg_float:2876; GFX1132DAGISEL: ; %bb.0: ; %entry2877; GFX1132DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x2c2878; GFX1132DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v02879; GFX1132DAGISEL-NEXT: s_mov_b32 s2, exec_lo2880; GFX1132DAGISEL-NEXT: ; implicit-def: $sgpr32881; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2882; GFX1132DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v02883; GFX1132DAGISEL-NEXT: s_xor_b32 s2, exec_lo, s22884; GFX1132DAGISEL-NEXT: s_cbranch_execz .LBB8_22885; GFX1132DAGISEL-NEXT: ; %bb.1: ; %else2886; GFX1132DAGISEL-NEXT: s_mov_b32 s3, exec_lo2887; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2888; GFX1132DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s32889; GFX1132DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s32890; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2891; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2892; GFX1132DAGISEL-NEXT: v_mul_f32_e32 v0, s0, v02893; GFX1132DAGISEL-NEXT: v_readfirstlane_b32 s3, v02894; GFX1132DAGISEL-NEXT: .LBB8_2: ; %Flow2895; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2896; GFX1132DAGISEL-NEXT: s_or_saveexec_b32 s0, s22897; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2898; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v0, s32899; GFX1132DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s02900; GFX1132DAGISEL-NEXT: s_cbranch_execz .LBB8_42901; GFX1132DAGISEL-NEXT: ; %bb.3: ; %if2902; GFX1132DAGISEL-NEXT: s_mov_b32 s2, exec_lo2903; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2904; GFX1132DAGISEL-NEXT: s_bcnt1_i32_b32 s2, s22905; GFX1132DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s22906; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2907; GFX1132DAGISEL-NEXT: v_mul_f32_e32 v0, s1, v02908; GFX1132DAGISEL-NEXT: v_readfirstlane_b32 s1, v02909; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2910; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v0, s12911; GFX1132DAGISEL-NEXT: .LBB8_4: ; %endif2912; GFX1132DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s02913; GFX1132DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x242914; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v1, 02915; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)2916; GFX1132DAGISEL-NEXT: global_store_b32 v1, v0, s[0:1]2917; GFX1132DAGISEL-NEXT: s_endpgm2918;2919; GFX1132GISEL-LABEL: divergent_cfg_float:2920; GFX1132GISEL: ; %bb.0: ; %entry2921; GFX1132GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x2c2922; GFX1132GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v02923; GFX1132GISEL-NEXT: s_mov_b32 s3, exec_lo2924; GFX1132GISEL-NEXT: ; implicit-def: $sgpr22925; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2926; GFX1132GISEL-NEXT: v_cmpx_le_u32_e32 16, v02927; GFX1132GISEL-NEXT: s_xor_b32 s3, exec_lo, s32928; GFX1132GISEL-NEXT: s_cbranch_execz .LBB8_22929; GFX1132GISEL-NEXT: ; %bb.1: ; %else2930; GFX1132GISEL-NEXT: s_mov_b32 s2, exec_lo2931; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2932; GFX1132GISEL-NEXT: s_bcnt1_i32_b32 s2, s22933; GFX1132GISEL-NEXT: v_cvt_f32_i32_e32 v0, s22934; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)2935; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2936; GFX1132GISEL-NEXT: v_mul_f32_e32 v0, s0, v02937; GFX1132GISEL-NEXT: v_readfirstlane_b32 s2, v02938; GFX1132GISEL-NEXT: .LBB8_2: ; %Flow2939; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)2940; GFX1132GISEL-NEXT: s_and_not1_saveexec_b32 s0, s32941; GFX1132GISEL-NEXT: s_cbranch_execz .LBB8_42942; GFX1132GISEL-NEXT: ; %bb.3: ; %if2943; GFX1132GISEL-NEXT: s_mov_b32 s2, exec_lo2944; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2945; GFX1132GISEL-NEXT: s_bcnt1_i32_b32 s2, s22946; GFX1132GISEL-NEXT: v_cvt_f32_i32_e32 v0, s22947; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2948; GFX1132GISEL-NEXT: v_mul_f32_e32 v0, s1, v02949; GFX1132GISEL-NEXT: v_readfirstlane_b32 s2, v02950; GFX1132GISEL-NEXT: .LBB8_4: ; %endif2951; GFX1132GISEL-NEXT: s_or_b32 exec_lo, exec_lo, s02952; GFX1132GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x242953; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2954; GFX1132GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, 02955; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)2956; GFX1132GISEL-NEXT: global_store_b32 v1, v0, s[0:1]2957; GFX1132GISEL-NEXT: s_endpgm2958;2959; GFX12DAGISEL-LABEL: divergent_cfg_float:2960; GFX12DAGISEL: ; %bb.0: ; %entry2961; GFX12DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x2c2962; GFX12DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v02963; GFX12DAGISEL-NEXT: s_mov_b32 s2, exec_lo2964; GFX12DAGISEL-NEXT: ; implicit-def: $sgpr32965; GFX12DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2966; GFX12DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v02967; GFX12DAGISEL-NEXT: s_xor_b32 s2, exec_lo, s22968; GFX12DAGISEL-NEXT: s_cbranch_execz .LBB8_22969; GFX12DAGISEL-NEXT: ; %bb.1: ; %else2970; GFX12DAGISEL-NEXT: s_mov_b32 s3, exec_lo2971; GFX12DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)2972; GFX12DAGISEL-NEXT: s_bcnt1_i32_b32 s3, s32973; GFX12DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s32974; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x02975; GFX12DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2976; GFX12DAGISEL-NEXT: v_mul_f32_e32 v0, s0, v02977; GFX12DAGISEL-NEXT: v_readfirstlane_b32 s3, v02978; GFX12DAGISEL-NEXT: .LBB8_2: ; %Flow2979; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x02980; GFX12DAGISEL-NEXT: s_or_saveexec_b32 s0, s22981; GFX12DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2982; GFX12DAGISEL-NEXT: v_mov_b32_e32 v0, s32983; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)2984; GFX12DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s02985; GFX12DAGISEL-NEXT: s_cbranch_execz .LBB8_42986; GFX12DAGISEL-NEXT: ; %bb.3: ; %if2987; GFX12DAGISEL-NEXT: s_mov_b32 s2, exec_lo2988; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)2989; GFX12DAGISEL-NEXT: s_bcnt1_i32_b32 s2, s22990; GFX12DAGISEL-NEXT: s_wait_alu depctr_sa_sdst(0)2991; GFX12DAGISEL-NEXT: v_cvt_f32_i32_e32 v0, s22992; GFX12DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2993; GFX12DAGISEL-NEXT: v_mul_f32_e32 v0, s1, v02994; GFX12DAGISEL-NEXT: v_readfirstlane_b32 s1, v02995; GFX12DAGISEL-NEXT: s_wait_alu depctr_va_sdst(0)2996; GFX12DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)2997; GFX12DAGISEL-NEXT: v_mov_b32_e32 v0, s12998; GFX12DAGISEL-NEXT: .LBB8_4: ; %endif2999; GFX12DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s03000; GFX12DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x243001; GFX12DAGISEL-NEXT: v_mov_b32_e32 v1, 03002; GFX12DAGISEL-NEXT: s_wait_kmcnt 0x03003; GFX12DAGISEL-NEXT: global_store_b32 v1, v0, s[0:1]3004; GFX12DAGISEL-NEXT: s_endpgm3005entry:3006 %tid = call i32 @llvm.amdgcn.workitem.id.x()3007 %d_cmp = icmp ult i32 %tid, 163008 br i1 %d_cmp, label %if, label %else3009 3010if:3011 %reducedValTid = call float @llvm.amdgcn.wave.reduce.fadd(float %in2, i32 1)3012 br label %endif3013 3014else:3015 %reducedValIn = call float @llvm.amdgcn.wave.reduce.fadd(float %in, i32 1)3016 br label %endif3017 3018endif:3019 %combine = phi float [%reducedValTid, %if], [%reducedValIn, %else]3020 store float %combine, ptr addrspace(1) %out3021 ret void3022}3023;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:3024; GFX10DAGISEL: {{.*}}3025; GFX10GISEL: {{.*}}3026; GFX11DAGISEL: {{.*}}3027; GFX11GISEL: {{.*}}3028