1529 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 15 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_dwordx2 s[0:1], s[4:5], 0x2420; GFX8DAGISEL-NEXT: s_load_dword s2, s[4:5], 0x2c21; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)22; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s023; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s124; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s225; GFX8DAGISEL-NEXT: flat_store_dword v[0:1], v226; GFX8DAGISEL-NEXT: s_endpgm27;28; GFX8GISEL-LABEL: uniform_value:29; GFX8GISEL: ; %bb.0: ; %entry30; GFX8GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c31; GFX8GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2432; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)33; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s234; GFX8GISEL-NEXT: v_mov_b32_e32 v0, s035; GFX8GISEL-NEXT: v_mov_b32_e32 v1, s136; GFX8GISEL-NEXT: flat_store_dword v[0:1], v237; GFX8GISEL-NEXT: s_endpgm38;39; GFX9DAGISEL-LABEL: uniform_value:40; GFX9DAGISEL: ; %bb.0: ; %entry41; GFX9DAGISEL-NEXT: s_load_dword s2, s[4:5], 0x2c42; GFX9DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2443; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, 044; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)45; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, s246; GFX9DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]47; GFX9DAGISEL-NEXT: s_endpgm48;49; GFX9GISEL-LABEL: uniform_value:50; GFX9GISEL: ; %bb.0: ; %entry51; GFX9GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c52; GFX9GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2453; GFX9GISEL-NEXT: v_mov_b32_e32 v1, 054; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)55; GFX9GISEL-NEXT: v_mov_b32_e32 v0, s256; GFX9GISEL-NEXT: global_store_dword v1, v0, s[0:1]57; GFX9GISEL-NEXT: s_endpgm58;59; GFX10DAGISEL-LABEL: uniform_value:60; GFX10DAGISEL: ; %bb.0: ; %entry61; GFX10DAGISEL-NEXT: s_clause 0x162; GFX10DAGISEL-NEXT: s_load_dword s2, s[4:5], 0x2c63; GFX10DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2464; GFX10DAGISEL-NEXT: v_mov_b32_e32 v0, 065; GFX10DAGISEL-NEXT: s_waitcnt lgkmcnt(0)66; GFX10DAGISEL-NEXT: v_mov_b32_e32 v1, s267; GFX10DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]68; GFX10DAGISEL-NEXT: s_endpgm69;70; GFX10GISEL-LABEL: uniform_value:71; GFX10GISEL: ; %bb.0: ; %entry72; GFX10GISEL-NEXT: s_clause 0x173; GFX10GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c74; GFX10GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x2475; GFX10GISEL-NEXT: v_mov_b32_e32 v1, 076; GFX10GISEL-NEXT: s_waitcnt lgkmcnt(0)77; GFX10GISEL-NEXT: v_mov_b32_e32 v0, s278; GFX10GISEL-NEXT: global_store_dword v1, v0, s[0:1]79; GFX10GISEL-NEXT: s_endpgm80;81; GFX1164DAGISEL-LABEL: uniform_value:82; GFX1164DAGISEL: ; %bb.0: ; %entry83; GFX1164DAGISEL-NEXT: s_clause 0x184; GFX1164DAGISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c85; GFX1164DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x2486; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, 087; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)88; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s289; GFX1164DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]90; GFX1164DAGISEL-NEXT: s_endpgm91;92; GFX1164GISEL-LABEL: uniform_value:93; GFX1164GISEL: ; %bb.0: ; %entry94; GFX1164GISEL-NEXT: s_clause 0x195; GFX1164GISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c96; GFX1164GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x2497; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, 098; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)99; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, s2100; GFX1164GISEL-NEXT: global_store_b32 v1, v0, s[0:1]101; GFX1164GISEL-NEXT: s_endpgm102;103; GFX1132DAGISEL-LABEL: uniform_value:104; GFX1132DAGISEL: ; %bb.0: ; %entry105; GFX1132DAGISEL-NEXT: s_clause 0x1106; GFX1132DAGISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c107; GFX1132DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24108; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)109; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2110; GFX1132DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]111; GFX1132DAGISEL-NEXT: s_endpgm112;113; GFX1132GISEL-LABEL: uniform_value:114; GFX1132GISEL: ; %bb.0: ; %entry115; GFX1132GISEL-NEXT: s_clause 0x1116; GFX1132GISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c117; GFX1132GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24118; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)119; GFX1132GISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2120; GFX1132GISEL-NEXT: global_store_b32 v1, v0, s[0:1]121; GFX1132GISEL-NEXT: s_endpgm122entry:123 %result = call i32 @llvm.amdgcn.wave.reduce.umin.i32(i32 %in, i32 1)124 store i32 %result, ptr addrspace(1) %out125 ret void126}127 128define amdgpu_kernel void @divergent_value(ptr addrspace(1) %out) {129; GFX8DAGISEL-LABEL: divergent_value:130; GFX8DAGISEL: ; %bb.0: ; %entry131; GFX8DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24132; GFX8DAGISEL-NEXT: s_mov_b64 s[2:3], exec133; GFX8DAGISEL-NEXT: s_mov_b32 s4, -1134; GFX8DAGISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1135; GFX8DAGISEL-NEXT: s_ff1_i32_b64 s5, s[2:3]136; GFX8DAGISEL-NEXT: v_readlane_b32 s6, v0, s5137; GFX8DAGISEL-NEXT: s_bitset0_b64 s[2:3], s5138; GFX8DAGISEL-NEXT: s_min_u32 s4, s4, s6139; GFX8DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0140; GFX8DAGISEL-NEXT: s_cbranch_scc1 .LBB1_1141; GFX8DAGISEL-NEXT: ; %bb.2:142; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)143; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s0144; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s1145; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s4146; GFX8DAGISEL-NEXT: flat_store_dword v[0:1], v2147; GFX8DAGISEL-NEXT: s_endpgm148;149; GFX8GISEL-LABEL: divergent_value:150; GFX8GISEL: ; %bb.0: ; %entry151; GFX8GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24152; GFX8GISEL-NEXT: s_mov_b64 s[2:3], exec153; GFX8GISEL-NEXT: s_mov_b32 s4, -1154; GFX8GISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1155; GFX8GISEL-NEXT: s_ff1_i32_b64 s5, s[2:3]156; GFX8GISEL-NEXT: v_readlane_b32 s6, v0, s5157; GFX8GISEL-NEXT: s_bitset0_b64 s[2:3], s5158; GFX8GISEL-NEXT: s_min_u32 s4, s4, s6159; GFX8GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0160; GFX8GISEL-NEXT: s_cbranch_scc1 .LBB1_1161; GFX8GISEL-NEXT: ; %bb.2:162; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)163; GFX8GISEL-NEXT: v_mov_b32_e32 v0, s0164; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s4165; GFX8GISEL-NEXT: v_mov_b32_e32 v1, s1166; GFX8GISEL-NEXT: flat_store_dword v[0:1], v2167; GFX8GISEL-NEXT: s_endpgm168;169; GFX9DAGISEL-LABEL: divergent_value:170; GFX9DAGISEL: ; %bb.0: ; %entry171; GFX9DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24172; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, 0173; GFX9DAGISEL-NEXT: s_mov_b64 s[2:3], exec174; GFX9DAGISEL-NEXT: s_mov_b32 s4, -1175; GFX9DAGISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1176; GFX9DAGISEL-NEXT: s_ff1_i32_b64 s5, s[2:3]177; GFX9DAGISEL-NEXT: v_readlane_b32 s6, v0, s5178; GFX9DAGISEL-NEXT: s_bitset0_b64 s[2:3], s5179; GFX9DAGISEL-NEXT: s_min_u32 s4, s4, s6180; GFX9DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0181; GFX9DAGISEL-NEXT: s_cbranch_scc1 .LBB1_1182; GFX9DAGISEL-NEXT: ; %bb.2:183; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, s4184; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)185; GFX9DAGISEL-NEXT: global_store_dword v1, v0, s[0:1]186; GFX9DAGISEL-NEXT: s_endpgm187;188; GFX9GISEL-LABEL: divergent_value:189; GFX9GISEL: ; %bb.0: ; %entry190; GFX9GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24191; GFX9GISEL-NEXT: s_mov_b64 s[2:3], exec192; GFX9GISEL-NEXT: s_mov_b32 s4, -1193; GFX9GISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1194; GFX9GISEL-NEXT: s_ff1_i32_b64 s5, s[2:3]195; GFX9GISEL-NEXT: v_readlane_b32 s6, v0, s5196; GFX9GISEL-NEXT: s_bitset0_b64 s[2:3], s5197; GFX9GISEL-NEXT: s_min_u32 s4, s4, s6198; GFX9GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0199; GFX9GISEL-NEXT: s_cbranch_scc1 .LBB1_1200; GFX9GISEL-NEXT: ; %bb.2:201; GFX9GISEL-NEXT: v_mov_b32_e32 v0, s4202; GFX9GISEL-NEXT: v_mov_b32_e32 v1, 0203; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)204; GFX9GISEL-NEXT: global_store_dword v1, v0, s[0:1]205; GFX9GISEL-NEXT: s_endpgm206;207; GFX1064DAGISEL-LABEL: divergent_value:208; GFX1064DAGISEL: ; %bb.0: ; %entry209; GFX1064DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24210; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, 0211; GFX1064DAGISEL-NEXT: s_mov_b64 s[2:3], exec212; GFX1064DAGISEL-NEXT: s_mov_b32 s4, -1213; GFX1064DAGISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1214; GFX1064DAGISEL-NEXT: s_ff1_i32_b64 s5, s[2:3]215; GFX1064DAGISEL-NEXT: v_readlane_b32 s6, v0, s5216; GFX1064DAGISEL-NEXT: s_bitset0_b64 s[2:3], s5217; GFX1064DAGISEL-NEXT: s_min_u32 s4, s4, s6218; GFX1064DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0219; GFX1064DAGISEL-NEXT: s_cbranch_scc1 .LBB1_1220; GFX1064DAGISEL-NEXT: ; %bb.2:221; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, s4222; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)223; GFX1064DAGISEL-NEXT: global_store_dword v1, v0, s[0:1]224; GFX1064DAGISEL-NEXT: s_endpgm225;226; GFX1064GISEL-LABEL: divergent_value:227; GFX1064GISEL: ; %bb.0: ; %entry228; GFX1064GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24229; GFX1064GISEL-NEXT: s_mov_b64 s[2:3], exec230; GFX1064GISEL-NEXT: s_mov_b32 s4, -1231; GFX1064GISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1232; GFX1064GISEL-NEXT: s_ff1_i32_b64 s5, s[2:3]233; GFX1064GISEL-NEXT: v_readlane_b32 s6, v0, s5234; GFX1064GISEL-NEXT: s_bitset0_b64 s[2:3], s5235; GFX1064GISEL-NEXT: s_min_u32 s4, s4, s6236; GFX1064GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0237; GFX1064GISEL-NEXT: s_cbranch_scc1 .LBB1_1238; GFX1064GISEL-NEXT: ; %bb.2:239; GFX1064GISEL-NEXT: v_mov_b32_e32 v0, s4240; GFX1064GISEL-NEXT: v_mov_b32_e32 v1, 0241; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)242; GFX1064GISEL-NEXT: global_store_dword v1, v0, s[0:1]243; GFX1064GISEL-NEXT: s_endpgm244;245; GFX1032DAGISEL-LABEL: divergent_value:246; GFX1032DAGISEL: ; %bb.0: ; %entry247; GFX1032DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24248; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, 0249; GFX1032DAGISEL-NEXT: s_mov_b32 s3, exec_lo250; GFX1032DAGISEL-NEXT: s_mov_b32 s2, -1251; GFX1032DAGISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1252; GFX1032DAGISEL-NEXT: s_ff1_i32_b32 s4, s3253; GFX1032DAGISEL-NEXT: v_readlane_b32 s5, v0, s4254; GFX1032DAGISEL-NEXT: s_bitset0_b32 s3, s4255; GFX1032DAGISEL-NEXT: s_min_u32 s2, s2, s5256; GFX1032DAGISEL-NEXT: s_cmp_lg_u32 s3, 0257; GFX1032DAGISEL-NEXT: s_cbranch_scc1 .LBB1_1258; GFX1032DAGISEL-NEXT: ; %bb.2:259; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, s2260; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)261; GFX1032DAGISEL-NEXT: global_store_dword v1, v0, s[0:1]262; GFX1032DAGISEL-NEXT: s_endpgm263;264; GFX1032GISEL-LABEL: divergent_value:265; GFX1032GISEL: ; %bb.0: ; %entry266; GFX1032GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24267; GFX1032GISEL-NEXT: s_mov_b32 s3, exec_lo268; GFX1032GISEL-NEXT: s_mov_b32 s2, -1269; GFX1032GISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1270; GFX1032GISEL-NEXT: s_ff1_i32_b32 s4, s3271; GFX1032GISEL-NEXT: v_readlane_b32 s5, v0, s4272; GFX1032GISEL-NEXT: s_bitset0_b32 s3, s4273; GFX1032GISEL-NEXT: s_min_u32 s2, s2, s5274; GFX1032GISEL-NEXT: s_cmp_lg_u32 s3, 0275; GFX1032GISEL-NEXT: s_cbranch_scc1 .LBB1_1276; GFX1032GISEL-NEXT: ; %bb.2:277; GFX1032GISEL-NEXT: v_mov_b32_e32 v0, s2278; GFX1032GISEL-NEXT: v_mov_b32_e32 v1, 0279; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)280; GFX1032GISEL-NEXT: global_store_dword v1, v0, s[0:1]281; GFX1032GISEL-NEXT: s_endpgm282;283; GFX1164DAGISEL-LABEL: divergent_value:284; GFX1164DAGISEL: ; %bb.0: ; %entry285; GFX1164DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24286; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, 0287; GFX1164DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0288; GFX1164DAGISEL-NEXT: s_mov_b64 s[2:3], exec289; GFX1164DAGISEL-NEXT: s_mov_b32 s4, -1290; GFX1164DAGISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1291; GFX1164DAGISEL-NEXT: s_ctz_i32_b64 s5, s[2:3]292; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)293; GFX1164DAGISEL-NEXT: v_readlane_b32 s6, v0, s5294; GFX1164DAGISEL-NEXT: s_bitset0_b64 s[2:3], s5295; GFX1164DAGISEL-NEXT: s_min_u32 s4, s4, s6296; GFX1164DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0297; GFX1164DAGISEL-NEXT: s_cbranch_scc1 .LBB1_1298; GFX1164DAGISEL-NEXT: ; %bb.2:299; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, s4300; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)301; GFX1164DAGISEL-NEXT: global_store_b32 v1, v0, s[0:1]302; GFX1164DAGISEL-NEXT: s_endpgm303;304; GFX1164GISEL-LABEL: divergent_value:305; GFX1164GISEL: ; %bb.0: ; %entry306; GFX1164GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24307; GFX1164GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0308; GFX1164GISEL-NEXT: s_mov_b64 s[2:3], exec309; GFX1164GISEL-NEXT: s_mov_b32 s4, -1310; GFX1164GISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1311; GFX1164GISEL-NEXT: s_ctz_i32_b64 s5, s[2:3]312; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)313; GFX1164GISEL-NEXT: v_readlane_b32 s6, v0, s5314; GFX1164GISEL-NEXT: s_bitset0_b64 s[2:3], s5315; GFX1164GISEL-NEXT: s_min_u32 s4, s4, s6316; GFX1164GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0317; GFX1164GISEL-NEXT: s_cbranch_scc1 .LBB1_1318; GFX1164GISEL-NEXT: ; %bb.2:319; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, s4320; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, 0321; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)322; GFX1164GISEL-NEXT: global_store_b32 v1, v0, s[0:1]323; GFX1164GISEL-NEXT: s_endpgm324;325; GFX1132DAGISEL-LABEL: divergent_value:326; GFX1132DAGISEL: ; %bb.0: ; %entry327; GFX1132DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24328; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0329; GFX1132DAGISEL-NEXT: s_mov_b32 s3, exec_lo330; GFX1132DAGISEL-NEXT: s_mov_b32 s2, -1331; GFX1132DAGISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1332; GFX1132DAGISEL-NEXT: s_ctz_i32_b32 s4, s3333; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)334; GFX1132DAGISEL-NEXT: v_readlane_b32 s5, v0, s4335; GFX1132DAGISEL-NEXT: s_bitset0_b32 s3, s4336; GFX1132DAGISEL-NEXT: s_min_u32 s2, s2, s5337; GFX1132DAGISEL-NEXT: s_cmp_lg_u32 s3, 0338; GFX1132DAGISEL-NEXT: s_cbranch_scc1 .LBB1_1339; GFX1132DAGISEL-NEXT: ; %bb.2:340; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v0, s2341; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)342; GFX1132DAGISEL-NEXT: global_store_b32 v1, v0, s[0:1]343; GFX1132DAGISEL-NEXT: s_endpgm344;345; GFX1132GISEL-LABEL: divergent_value:346; GFX1132GISEL: ; %bb.0: ; %entry347; GFX1132GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24348; GFX1132GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0349; GFX1132GISEL-NEXT: s_mov_b32 s3, exec_lo350; GFX1132GISEL-NEXT: s_mov_b32 s2, -1351; GFX1132GISEL-NEXT: .LBB1_1: ; =>This Inner Loop Header: Depth=1352; GFX1132GISEL-NEXT: s_ctz_i32_b32 s4, s3353; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)354; GFX1132GISEL-NEXT: v_readlane_b32 s5, v0, s4355; GFX1132GISEL-NEXT: s_bitset0_b32 s3, s4356; GFX1132GISEL-NEXT: s_min_u32 s2, s2, s5357; GFX1132GISEL-NEXT: s_cmp_lg_u32 s3, 0358; GFX1132GISEL-NEXT: s_cbranch_scc1 .LBB1_1359; GFX1132GISEL-NEXT: ; %bb.2:360; GFX1132GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, 0361; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)362; GFX1132GISEL-NEXT: global_store_b32 v1, v0, s[0:1]363; GFX1132GISEL-NEXT: s_endpgm364entry:365 %id.x = call i32 @llvm.amdgcn.workitem.id.x()366 %result = call i32 @llvm.amdgcn.wave.reduce.umin.i32(i32 %id.x, i32 1)367 store i32 %result, ptr addrspace(1) %out368 ret void369}370 371define amdgpu_kernel void @divergent_cfg(ptr addrspace(1) %out, i32 %in) {372; GFX8DAGISEL-LABEL: divergent_cfg:373; GFX8DAGISEL: ; %bb.0: ; %entry374; GFX8DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v0375; GFX8DAGISEL-NEXT: ; implicit-def: $sgpr2376; GFX8DAGISEL-NEXT: s_and_saveexec_b64 s[0:1], vcc377; GFX8DAGISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]378; GFX8DAGISEL-NEXT: ; %bb.1: ; %else379; GFX8DAGISEL-NEXT: s_load_dword s2, s[4:5], 0x2c380; GFX8DAGISEL-NEXT: ; implicit-def: $vgpr0381; GFX8DAGISEL-NEXT: ; %bb.2: ; %Flow382; GFX8DAGISEL-NEXT: s_or_saveexec_b64 s[0:1], s[0:1]383; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)384; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s2385; GFX8DAGISEL-NEXT: s_xor_b64 exec, exec, s[0:1]386; GFX8DAGISEL-NEXT: s_cbranch_execz .LBB2_6387; GFX8DAGISEL-NEXT: ; %bb.3: ; %if388; GFX8DAGISEL-NEXT: s_mov_b64 s[2:3], exec389; GFX8DAGISEL-NEXT: s_mov_b32 s6, -1390; GFX8DAGISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1391; GFX8DAGISEL-NEXT: s_ff1_i32_b64 s7, s[2:3]392; GFX8DAGISEL-NEXT: v_readlane_b32 s8, v0, s7393; GFX8DAGISEL-NEXT: s_bitset0_b64 s[2:3], s7394; GFX8DAGISEL-NEXT: s_min_u32 s6, s6, s8395; GFX8DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0396; GFX8DAGISEL-NEXT: s_cbranch_scc1 .LBB2_4397; GFX8DAGISEL-NEXT: ; %bb.5:398; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s6399; GFX8DAGISEL-NEXT: .LBB2_6: ; %endif400; GFX8DAGISEL-NEXT: s_or_b64 exec, exec, s[0:1]401; GFX8DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24402; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)403; GFX8DAGISEL-NEXT: v_mov_b32_e32 v3, s1404; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s0405; GFX8DAGISEL-NEXT: flat_store_dword v[2:3], v1406; GFX8DAGISEL-NEXT: s_endpgm407;408; GFX8GISEL-LABEL: divergent_cfg:409; GFX8GISEL: ; %bb.0: ; %entry410; GFX8GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v0411; GFX8GISEL-NEXT: ; implicit-def: $sgpr6412; GFX8GISEL-NEXT: s_and_saveexec_b64 s[0:1], vcc413; GFX8GISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]414; GFX8GISEL-NEXT: s_cbranch_execz .LBB2_2415; GFX8GISEL-NEXT: ; %bb.1: ; %else416; GFX8GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c417; GFX8GISEL-NEXT: ; implicit-def: $vgpr0418; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)419; GFX8GISEL-NEXT: s_mov_b32 s6, s2420; GFX8GISEL-NEXT: .LBB2_2: ; %Flow421; GFX8GISEL-NEXT: s_andn2_saveexec_b64 s[0:1], s[0:1]422; GFX8GISEL-NEXT: s_cbranch_execz .LBB2_5423; GFX8GISEL-NEXT: ; %bb.3: ; %if424; GFX8GISEL-NEXT: s_mov_b64 s[2:3], exec425; GFX8GISEL-NEXT: s_mov_b32 s6, -1426; GFX8GISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1427; GFX8GISEL-NEXT: s_ff1_i32_b64 s7, s[2:3]428; GFX8GISEL-NEXT: v_readlane_b32 s8, v0, s7429; GFX8GISEL-NEXT: s_bitset0_b64 s[2:3], s7430; GFX8GISEL-NEXT: s_min_u32 s6, s6, s8431; GFX8GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0432; GFX8GISEL-NEXT: s_cbranch_scc1 .LBB2_4433; GFX8GISEL-NEXT: .LBB2_5: ; %endif434; GFX8GISEL-NEXT: s_or_b64 exec, exec, s[0:1]435; GFX8GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24436; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s6437; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)438; GFX8GISEL-NEXT: v_mov_b32_e32 v0, s0439; GFX8GISEL-NEXT: v_mov_b32_e32 v1, s1440; GFX8GISEL-NEXT: flat_store_dword v[0:1], v2441; GFX8GISEL-NEXT: s_endpgm442;443; GFX9DAGISEL-LABEL: divergent_cfg:444; GFX9DAGISEL: ; %bb.0: ; %entry445; GFX9DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v0446; GFX9DAGISEL-NEXT: ; implicit-def: $sgpr2447; GFX9DAGISEL-NEXT: s_and_saveexec_b64 s[0:1], vcc448; GFX9DAGISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]449; GFX9DAGISEL-NEXT: ; %bb.1: ; %else450; GFX9DAGISEL-NEXT: s_load_dword s2, s[4:5], 0x2c451; GFX9DAGISEL-NEXT: ; implicit-def: $vgpr0452; GFX9DAGISEL-NEXT: ; %bb.2: ; %Flow453; GFX9DAGISEL-NEXT: s_or_saveexec_b64 s[0:1], s[0:1]454; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)455; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, s2456; GFX9DAGISEL-NEXT: s_xor_b64 exec, exec, s[0:1]457; GFX9DAGISEL-NEXT: s_cbranch_execz .LBB2_6458; GFX9DAGISEL-NEXT: ; %bb.3: ; %if459; GFX9DAGISEL-NEXT: s_mov_b64 s[2:3], exec460; GFX9DAGISEL-NEXT: s_mov_b32 s6, -1461; GFX9DAGISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1462; GFX9DAGISEL-NEXT: s_ff1_i32_b64 s7, s[2:3]463; GFX9DAGISEL-NEXT: v_readlane_b32 s8, v0, s7464; GFX9DAGISEL-NEXT: s_bitset0_b64 s[2:3], s7465; GFX9DAGISEL-NEXT: s_min_u32 s6, s6, s8466; GFX9DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0467; GFX9DAGISEL-NEXT: s_cbranch_scc1 .LBB2_4468; GFX9DAGISEL-NEXT: ; %bb.5:469; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, s6470; GFX9DAGISEL-NEXT: .LBB2_6: ; %endif471; GFX9DAGISEL-NEXT: s_or_b64 exec, exec, s[0:1]472; GFX9DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24473; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, 0474; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)475; GFX9DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]476; GFX9DAGISEL-NEXT: s_endpgm477;478; GFX9GISEL-LABEL: divergent_cfg:479; GFX9GISEL: ; %bb.0: ; %entry480; GFX9GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v0481; GFX9GISEL-NEXT: ; implicit-def: $sgpr6482; GFX9GISEL-NEXT: s_and_saveexec_b64 s[0:1], vcc483; GFX9GISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]484; GFX9GISEL-NEXT: s_cbranch_execz .LBB2_2485; GFX9GISEL-NEXT: ; %bb.1: ; %else486; GFX9GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c487; GFX9GISEL-NEXT: ; implicit-def: $vgpr0488; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)489; GFX9GISEL-NEXT: s_mov_b32 s6, s2490; GFX9GISEL-NEXT: .LBB2_2: ; %Flow491; GFX9GISEL-NEXT: s_andn2_saveexec_b64 s[0:1], s[0:1]492; GFX9GISEL-NEXT: s_cbranch_execz .LBB2_5493; GFX9GISEL-NEXT: ; %bb.3: ; %if494; GFX9GISEL-NEXT: s_mov_b64 s[2:3], exec495; GFX9GISEL-NEXT: s_mov_b32 s6, -1496; GFX9GISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1497; GFX9GISEL-NEXT: s_ff1_i32_b64 s7, s[2:3]498; GFX9GISEL-NEXT: v_readlane_b32 s8, v0, s7499; GFX9GISEL-NEXT: s_bitset0_b64 s[2:3], s7500; GFX9GISEL-NEXT: s_min_u32 s6, s6, s8501; GFX9GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0502; GFX9GISEL-NEXT: s_cbranch_scc1 .LBB2_4503; GFX9GISEL-NEXT: .LBB2_5: ; %endif504; GFX9GISEL-NEXT: s_or_b64 exec, exec, s[0:1]505; GFX9GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24506; GFX9GISEL-NEXT: v_mov_b32_e32 v0, s6507; GFX9GISEL-NEXT: v_mov_b32_e32 v1, 0508; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)509; GFX9GISEL-NEXT: global_store_dword v1, v0, s[0:1]510; GFX9GISEL-NEXT: s_endpgm511;512; GFX1064DAGISEL-LABEL: divergent_cfg:513; GFX1064DAGISEL: ; %bb.0: ; %entry514; GFX1064DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v0515; GFX1064DAGISEL-NEXT: ; implicit-def: $sgpr2516; GFX1064DAGISEL-NEXT: s_and_saveexec_b64 s[0:1], vcc517; GFX1064DAGISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]518; GFX1064DAGISEL-NEXT: ; %bb.1: ; %else519; GFX1064DAGISEL-NEXT: s_load_dword s2, s[4:5], 0x2c520; GFX1064DAGISEL-NEXT: ; implicit-def: $vgpr0521; GFX1064DAGISEL-NEXT: ; %bb.2: ; %Flow522; GFX1064DAGISEL-NEXT: s_or_saveexec_b64 s[0:1], s[0:1]523; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)524; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, s2525; GFX1064DAGISEL-NEXT: s_xor_b64 exec, exec, s[0:1]526; GFX1064DAGISEL-NEXT: s_cbranch_execz .LBB2_6527; GFX1064DAGISEL-NEXT: ; %bb.3: ; %if528; GFX1064DAGISEL-NEXT: s_mov_b64 s[2:3], exec529; GFX1064DAGISEL-NEXT: s_mov_b32 s6, -1530; GFX1064DAGISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1531; GFX1064DAGISEL-NEXT: s_ff1_i32_b64 s7, s[2:3]532; GFX1064DAGISEL-NEXT: v_readlane_b32 s8, v0, s7533; GFX1064DAGISEL-NEXT: s_bitset0_b64 s[2:3], s7534; GFX1064DAGISEL-NEXT: s_min_u32 s6, s6, s8535; GFX1064DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0536; GFX1064DAGISEL-NEXT: s_cbranch_scc1 .LBB2_4537; GFX1064DAGISEL-NEXT: ; %bb.5:538; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, s6539; GFX1064DAGISEL-NEXT: .LBB2_6: ; %endif540; GFX1064DAGISEL-NEXT: s_or_b64 exec, exec, s[0:1]541; GFX1064DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24542; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, 0543; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)544; GFX1064DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]545; GFX1064DAGISEL-NEXT: s_endpgm546;547; GFX1064GISEL-LABEL: divergent_cfg:548; GFX1064GISEL: ; %bb.0: ; %entry549; GFX1064GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v0550; GFX1064GISEL-NEXT: ; implicit-def: $sgpr6551; GFX1064GISEL-NEXT: s_and_saveexec_b64 s[0:1], vcc552; GFX1064GISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]553; GFX1064GISEL-NEXT: s_cbranch_execz .LBB2_2554; GFX1064GISEL-NEXT: ; %bb.1: ; %else555; GFX1064GISEL-NEXT: s_load_dword s2, s[4:5], 0x2c556; GFX1064GISEL-NEXT: ; implicit-def: $vgpr0557; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)558; GFX1064GISEL-NEXT: s_mov_b32 s6, s2559; GFX1064GISEL-NEXT: .LBB2_2: ; %Flow560; GFX1064GISEL-NEXT: s_andn2_saveexec_b64 s[0:1], s[0:1]561; GFX1064GISEL-NEXT: s_cbranch_execz .LBB2_5562; GFX1064GISEL-NEXT: ; %bb.3: ; %if563; GFX1064GISEL-NEXT: s_mov_b64 s[2:3], exec564; GFX1064GISEL-NEXT: s_mov_b32 s6, -1565; GFX1064GISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1566; GFX1064GISEL-NEXT: s_ff1_i32_b64 s7, s[2:3]567; GFX1064GISEL-NEXT: v_readlane_b32 s8, v0, s7568; GFX1064GISEL-NEXT: s_bitset0_b64 s[2:3], s7569; GFX1064GISEL-NEXT: s_min_u32 s6, s6, s8570; GFX1064GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0571; GFX1064GISEL-NEXT: s_cbranch_scc1 .LBB2_4572; GFX1064GISEL-NEXT: .LBB2_5: ; %endif573; GFX1064GISEL-NEXT: s_or_b64 exec, exec, s[0:1]574; GFX1064GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24575; GFX1064GISEL-NEXT: v_mov_b32_e32 v0, s6576; GFX1064GISEL-NEXT: v_mov_b32_e32 v1, 0577; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)578; GFX1064GISEL-NEXT: global_store_dword v1, v0, s[0:1]579; GFX1064GISEL-NEXT: s_endpgm580;581; GFX1032DAGISEL-LABEL: divergent_cfg:582; GFX1032DAGISEL: ; %bb.0: ; %entry583; GFX1032DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc_lo, 15, v0584; GFX1032DAGISEL-NEXT: ; implicit-def: $sgpr1585; GFX1032DAGISEL-NEXT: s_and_saveexec_b32 s0, vcc_lo586; GFX1032DAGISEL-NEXT: s_xor_b32 s0, exec_lo, s0587; GFX1032DAGISEL-NEXT: ; %bb.1: ; %else588; GFX1032DAGISEL-NEXT: s_load_dword s1, s[4:5], 0x2c589; GFX1032DAGISEL-NEXT: ; implicit-def: $vgpr0590; GFX1032DAGISEL-NEXT: ; %bb.2: ; %Flow591; GFX1032DAGISEL-NEXT: s_or_saveexec_b32 s0, s0592; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)593; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, s1594; GFX1032DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s0595; GFX1032DAGISEL-NEXT: s_cbranch_execz .LBB2_6596; GFX1032DAGISEL-NEXT: ; %bb.3: ; %if597; GFX1032DAGISEL-NEXT: s_mov_b32 s2, exec_lo598; GFX1032DAGISEL-NEXT: s_mov_b32 s1, -1599; GFX1032DAGISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1600; GFX1032DAGISEL-NEXT: s_ff1_i32_b32 s3, s2601; GFX1032DAGISEL-NEXT: v_readlane_b32 s6, v0, s3602; GFX1032DAGISEL-NEXT: s_bitset0_b32 s2, s3603; GFX1032DAGISEL-NEXT: s_min_u32 s1, s1, s6604; GFX1032DAGISEL-NEXT: s_cmp_lg_u32 s2, 0605; GFX1032DAGISEL-NEXT: s_cbranch_scc1 .LBB2_4606; GFX1032DAGISEL-NEXT: ; %bb.5:607; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, s1608; GFX1032DAGISEL-NEXT: .LBB2_6: ; %endif609; GFX1032DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s0610; GFX1032DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24611; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, 0612; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)613; GFX1032DAGISEL-NEXT: global_store_dword v0, v1, s[0:1]614; GFX1032DAGISEL-NEXT: s_endpgm615;616; GFX1032GISEL-LABEL: divergent_cfg:617; GFX1032GISEL: ; %bb.0: ; %entry618; GFX1032GISEL-NEXT: v_cmp_le_u32_e32 vcc_lo, 16, v0619; GFX1032GISEL-NEXT: ; implicit-def: $sgpr0620; GFX1032GISEL-NEXT: s_and_saveexec_b32 s1, vcc_lo621; GFX1032GISEL-NEXT: s_xor_b32 s1, exec_lo, s1622; GFX1032GISEL-NEXT: s_cbranch_execz .LBB2_2623; GFX1032GISEL-NEXT: ; %bb.1: ; %else624; GFX1032GISEL-NEXT: s_load_dword s0, s[4:5], 0x2c625; GFX1032GISEL-NEXT: ; implicit-def: $vgpr0626; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)627; GFX1032GISEL-NEXT: s_mov_b32 s0, s0628; GFX1032GISEL-NEXT: .LBB2_2: ; %Flow629; GFX1032GISEL-NEXT: s_andn2_saveexec_b32 s1, s1630; GFX1032GISEL-NEXT: s_cbranch_execz .LBB2_5631; GFX1032GISEL-NEXT: ; %bb.3: ; %if632; GFX1032GISEL-NEXT: s_mov_b32 s2, exec_lo633; GFX1032GISEL-NEXT: s_mov_b32 s0, -1634; GFX1032GISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1635; GFX1032GISEL-NEXT: s_ff1_i32_b32 s3, s2636; GFX1032GISEL-NEXT: v_readlane_b32 s6, v0, s3637; GFX1032GISEL-NEXT: s_bitset0_b32 s2, s3638; GFX1032GISEL-NEXT: s_min_u32 s0, s0, s6639; GFX1032GISEL-NEXT: s_cmp_lg_u32 s2, 0640; GFX1032GISEL-NEXT: s_cbranch_scc1 .LBB2_4641; GFX1032GISEL-NEXT: .LBB2_5: ; %endif642; GFX1032GISEL-NEXT: s_or_b32 exec_lo, exec_lo, s1643; GFX1032GISEL-NEXT: s_load_dwordx2 s[2:3], s[4:5], 0x24644; GFX1032GISEL-NEXT: v_mov_b32_e32 v0, s0645; GFX1032GISEL-NEXT: v_mov_b32_e32 v1, 0646; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)647; GFX1032GISEL-NEXT: global_store_dword v1, v0, s[2:3]648; GFX1032GISEL-NEXT: s_endpgm649;650; GFX1164DAGISEL-LABEL: divergent_cfg:651; GFX1164DAGISEL: ; %bb.0: ; %entry652; GFX1164DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0653; GFX1164DAGISEL-NEXT: s_mov_b64 s[0:1], exec654; GFX1164DAGISEL-NEXT: ; implicit-def: $sgpr2655; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)656; GFX1164DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v0657; GFX1164DAGISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]658; GFX1164DAGISEL-NEXT: ; %bb.1: ; %else659; GFX1164DAGISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c660; GFX1164DAGISEL-NEXT: ; implicit-def: $vgpr0661; GFX1164DAGISEL-NEXT: ; %bb.2: ; %Flow662; GFX1164DAGISEL-NEXT: s_or_saveexec_b64 s[0:1], s[0:1]663; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)664; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s2665; GFX1164DAGISEL-NEXT: s_xor_b64 exec, exec, s[0:1]666; GFX1164DAGISEL-NEXT: s_cbranch_execz .LBB2_6667; GFX1164DAGISEL-NEXT: ; %bb.3: ; %if668; GFX1164DAGISEL-NEXT: s_mov_b64 s[2:3], exec669; GFX1164DAGISEL-NEXT: s_mov_b32 s6, -1670; GFX1164DAGISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1671; GFX1164DAGISEL-NEXT: s_ctz_i32_b64 s7, s[2:3]672; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)673; GFX1164DAGISEL-NEXT: v_readlane_b32 s8, v0, s7674; GFX1164DAGISEL-NEXT: s_bitset0_b64 s[2:3], s7675; GFX1164DAGISEL-NEXT: s_min_u32 s6, s6, s8676; GFX1164DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 0677; GFX1164DAGISEL-NEXT: s_cbranch_scc1 .LBB2_4678; GFX1164DAGISEL-NEXT: ; %bb.5:679; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s6680; GFX1164DAGISEL-NEXT: .LBB2_6: ; %endif681; GFX1164DAGISEL-NEXT: s_or_b64 exec, exec, s[0:1]682; GFX1164DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24683; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, 0684; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)685; GFX1164DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]686; GFX1164DAGISEL-NEXT: s_endpgm687;688; GFX1164GISEL-LABEL: divergent_cfg:689; GFX1164GISEL: ; %bb.0: ; %entry690; GFX1164GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0691; GFX1164GISEL-NEXT: s_mov_b64 s[0:1], exec692; GFX1164GISEL-NEXT: ; implicit-def: $sgpr6693; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)694; GFX1164GISEL-NEXT: v_cmpx_le_u32_e32 16, v0695; GFX1164GISEL-NEXT: s_xor_b64 s[0:1], exec, s[0:1]696; GFX1164GISEL-NEXT: s_cbranch_execz .LBB2_2697; GFX1164GISEL-NEXT: ; %bb.1: ; %else698; GFX1164GISEL-NEXT: s_load_b32 s2, s[4:5], 0x2c699; GFX1164GISEL-NEXT: ; implicit-def: $vgpr0700; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)701; GFX1164GISEL-NEXT: s_mov_b32 s6, s2702; GFX1164GISEL-NEXT: .LBB2_2: ; %Flow703; GFX1164GISEL-NEXT: s_and_not1_saveexec_b64 s[0:1], s[0:1]704; GFX1164GISEL-NEXT: s_cbranch_execz .LBB2_5705; GFX1164GISEL-NEXT: ; %bb.3: ; %if706; GFX1164GISEL-NEXT: s_mov_b64 s[2:3], exec707; GFX1164GISEL-NEXT: s_mov_b32 s6, -1708; GFX1164GISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1709; GFX1164GISEL-NEXT: s_ctz_i32_b64 s7, s[2:3]710; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)711; GFX1164GISEL-NEXT: v_readlane_b32 s8, v0, s7712; GFX1164GISEL-NEXT: s_bitset0_b64 s[2:3], s7713; GFX1164GISEL-NEXT: s_min_u32 s6, s6, s8714; GFX1164GISEL-NEXT: s_cmp_lg_u64 s[2:3], 0715; GFX1164GISEL-NEXT: s_cbranch_scc1 .LBB2_4716; GFX1164GISEL-NEXT: .LBB2_5: ; %endif717; GFX1164GISEL-NEXT: s_or_b64 exec, exec, s[0:1]718; GFX1164GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24719; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, s6720; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, 0721; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)722; GFX1164GISEL-NEXT: global_store_b32 v1, v0, s[0:1]723; GFX1164GISEL-NEXT: s_endpgm724;725; GFX1132DAGISEL-LABEL: divergent_cfg:726; GFX1132DAGISEL: ; %bb.0: ; %entry727; GFX1132DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0728; GFX1132DAGISEL-NEXT: s_mov_b32 s0, exec_lo729; GFX1132DAGISEL-NEXT: ; implicit-def: $sgpr1730; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)731; GFX1132DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v0732; GFX1132DAGISEL-NEXT: s_xor_b32 s0, exec_lo, s0733; GFX1132DAGISEL-NEXT: ; %bb.1: ; %else734; GFX1132DAGISEL-NEXT: s_load_b32 s1, s[4:5], 0x2c735; GFX1132DAGISEL-NEXT: ; implicit-def: $vgpr0736; GFX1132DAGISEL-NEXT: ; %bb.2: ; %Flow737; GFX1132DAGISEL-NEXT: s_or_saveexec_b32 s0, s0738; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)739; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v1, s1740; GFX1132DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s0741; GFX1132DAGISEL-NEXT: s_cbranch_execz .LBB2_6742; GFX1132DAGISEL-NEXT: ; %bb.3: ; %if743; GFX1132DAGISEL-NEXT: s_mov_b32 s2, exec_lo744; GFX1132DAGISEL-NEXT: s_mov_b32 s1, -1745; GFX1132DAGISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1746; GFX1132DAGISEL-NEXT: s_ctz_i32_b32 s3, s2747; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)748; GFX1132DAGISEL-NEXT: v_readlane_b32 s6, v0, s3749; GFX1132DAGISEL-NEXT: s_bitset0_b32 s2, s3750; GFX1132DAGISEL-NEXT: s_min_u32 s1, s1, s6751; GFX1132DAGISEL-NEXT: s_cmp_lg_u32 s2, 0752; GFX1132DAGISEL-NEXT: s_cbranch_scc1 .LBB2_4753; GFX1132DAGISEL-NEXT: ; %bb.5:754; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v1, s1755; GFX1132DAGISEL-NEXT: .LBB2_6: ; %endif756; GFX1132DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s0757; GFX1132DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24758; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v0, 0759; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)760; GFX1132DAGISEL-NEXT: global_store_b32 v0, v1, s[0:1]761; GFX1132DAGISEL-NEXT: s_endpgm762;763; GFX1132GISEL-LABEL: divergent_cfg:764; GFX1132GISEL: ; %bb.0: ; %entry765; GFX1132GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v0766; GFX1132GISEL-NEXT: s_mov_b32 s1, exec_lo767; GFX1132GISEL-NEXT: ; implicit-def: $sgpr0768; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)769; GFX1132GISEL-NEXT: v_cmpx_le_u32_e32 16, v0770; GFX1132GISEL-NEXT: s_xor_b32 s1, exec_lo, s1771; GFX1132GISEL-NEXT: s_cbranch_execz .LBB2_2772; GFX1132GISEL-NEXT: ; %bb.1: ; %else773; GFX1132GISEL-NEXT: s_load_b32 s0, s[4:5], 0x2c774; GFX1132GISEL-NEXT: ; implicit-def: $vgpr0775; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)776; GFX1132GISEL-NEXT: s_mov_b32 s0, s0777; GFX1132GISEL-NEXT: .LBB2_2: ; %Flow778; GFX1132GISEL-NEXT: s_and_not1_saveexec_b32 s1, s1779; GFX1132GISEL-NEXT: s_cbranch_execz .LBB2_5780; GFX1132GISEL-NEXT: ; %bb.3: ; %if781; GFX1132GISEL-NEXT: s_mov_b32 s2, exec_lo782; GFX1132GISEL-NEXT: s_mov_b32 s0, -1783; GFX1132GISEL-NEXT: .LBB2_4: ; =>This Inner Loop Header: Depth=1784; GFX1132GISEL-NEXT: s_ctz_i32_b32 s3, s2785; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1)786; GFX1132GISEL-NEXT: v_readlane_b32 s6, v0, s3787; GFX1132GISEL-NEXT: s_bitset0_b32 s2, s3788; GFX1132GISEL-NEXT: s_min_u32 s0, s0, s6789; GFX1132GISEL-NEXT: s_cmp_lg_u32 s2, 0790; GFX1132GISEL-NEXT: s_cbranch_scc1 .LBB2_4791; GFX1132GISEL-NEXT: .LBB2_5: ; %endif792; GFX1132GISEL-NEXT: s_or_b32 exec_lo, exec_lo, s1793; GFX1132GISEL-NEXT: s_load_b64 s[2:3], s[4:5], 0x24794; GFX1132GISEL-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, 0795; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)796; GFX1132GISEL-NEXT: global_store_b32 v1, v0, s[2:3]797; GFX1132GISEL-NEXT: s_endpgm798entry:799 %tid = call i32 @llvm.amdgcn.workitem.id.x()800 %d_cmp = icmp ult i32 %tid, 16801 br i1 %d_cmp, label %if, label %else802 803if:804 %reducedValTid = call i32 @llvm.amdgcn.wave.reduce.umin.i32(i32 %tid, i32 1)805 br label %endif806 807else:808 %reducedValIn = call i32 @llvm.amdgcn.wave.reduce.umin.i32(i32 %in, i32 1)809 br label %endif810 811endif:812 %combine = phi i32 [%reducedValTid, %if], [%reducedValIn, %else]813 store i32 %combine, ptr addrspace(1) %out814 ret void815}816 817define amdgpu_kernel void @uniform_value_i64(ptr addrspace(1) %out, i64 %in) {818; GFX8DAGISEL-LABEL: uniform_value_i64:819; GFX8DAGISEL: ; %bb.0: ; %entry820; GFX8DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24821; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)822; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s2823; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s0824; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s1825; GFX8DAGISEL-NEXT: v_mov_b32_e32 v3, s3826; GFX8DAGISEL-NEXT: flat_store_dwordx2 v[0:1], v[2:3]827; GFX8DAGISEL-NEXT: s_endpgm828;829; GFX8GISEL-LABEL: uniform_value_i64:830; GFX8GISEL: ; %bb.0: ; %entry831; GFX8GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24832; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)833; GFX8GISEL-NEXT: v_mov_b32_e32 v0, s2834; GFX8GISEL-NEXT: v_mov_b32_e32 v3, s1835; GFX8GISEL-NEXT: v_mov_b32_e32 v1, s3836; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s0837; GFX8GISEL-NEXT: flat_store_dwordx2 v[2:3], v[0:1]838; GFX8GISEL-NEXT: s_endpgm839;840; GFX9DAGISEL-LABEL: uniform_value_i64:841; GFX9DAGISEL: ; %bb.0: ; %entry842; GFX9DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24843; GFX9DAGISEL-NEXT: v_mov_b32_e32 v2, 0844; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)845; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, s2846; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, s3847; GFX9DAGISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]848; GFX9DAGISEL-NEXT: s_endpgm849;850; GFX9GISEL-LABEL: uniform_value_i64:851; GFX9GISEL: ; %bb.0: ; %entry852; GFX9GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24853; GFX9GISEL-NEXT: v_mov_b32_e32 v2, 0854; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)855; GFX9GISEL-NEXT: v_mov_b32_e32 v0, s2856; GFX9GISEL-NEXT: v_mov_b32_e32 v1, s3857; GFX9GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]858; GFX9GISEL-NEXT: s_endpgm859;860; GFX10DAGISEL-LABEL: uniform_value_i64:861; GFX10DAGISEL: ; %bb.0: ; %entry862; GFX10DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24863; GFX10DAGISEL-NEXT: v_mov_b32_e32 v2, 0864; GFX10DAGISEL-NEXT: s_waitcnt lgkmcnt(0)865; GFX10DAGISEL-NEXT: v_mov_b32_e32 v0, s2866; GFX10DAGISEL-NEXT: v_mov_b32_e32 v1, s3867; GFX10DAGISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]868; GFX10DAGISEL-NEXT: s_endpgm869;870; GFX10GISEL-LABEL: uniform_value_i64:871; GFX10GISEL: ; %bb.0: ; %entry872; GFX10GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x24873; GFX10GISEL-NEXT: v_mov_b32_e32 v2, 0874; GFX10GISEL-NEXT: s_waitcnt lgkmcnt(0)875; GFX10GISEL-NEXT: v_mov_b32_e32 v0, s2876; GFX10GISEL-NEXT: v_mov_b32_e32 v1, s3877; GFX10GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]878; GFX10GISEL-NEXT: s_endpgm879;880; GFX1164DAGISEL-LABEL: uniform_value_i64:881; GFX1164DAGISEL: ; %bb.0: ; %entry882; GFX1164DAGISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24883; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v2, 0884; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)885; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, s2886; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s3887; GFX1164DAGISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]888; GFX1164DAGISEL-NEXT: s_endpgm889;890; GFX1164GISEL-LABEL: uniform_value_i64:891; GFX1164GISEL: ; %bb.0: ; %entry892; GFX1164GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24893; GFX1164GISEL-NEXT: v_mov_b32_e32 v2, 0894; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)895; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, s2896; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, s3897; GFX1164GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]898; GFX1164GISEL-NEXT: s_endpgm899;900; GFX1132DAGISEL-LABEL: uniform_value_i64:901; GFX1132DAGISEL: ; %bb.0: ; %entry902; GFX1132DAGISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24903; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v2, 0904; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)905; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3906; GFX1132DAGISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]907; GFX1132DAGISEL-NEXT: s_endpgm908;909; GFX1132GISEL-LABEL: uniform_value_i64:910; GFX1132GISEL: ; %bb.0: ; %entry911; GFX1132GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x24912; GFX1132GISEL-NEXT: v_mov_b32_e32 v2, 0913; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)914; GFX1132GISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3915; GFX1132GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]916; GFX1132GISEL-NEXT: s_endpgm917entry:918 %result = call i64 @llvm.amdgcn.wave.reduce.umin.i64(i64 %in, i32 1)919 store i64 %result, ptr addrspace(1) %out920 ret void921}922 923define void @divergent_value_i64(ptr addrspace(1) %out, i64 %id.x) {924; GFX8DAGISEL-LABEL: divergent_value_i64:925; GFX8DAGISEL: ; %bb.0: ; %entry926; GFX8DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)927; GFX8DAGISEL-NEXT: s_mov_b64 s[4:5], -1928; GFX8DAGISEL-NEXT: s_mov_b64 s[6:7], exec929; GFX8DAGISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=1930; GFX8DAGISEL-NEXT: s_ff1_i32_b64 s12, s[6:7]931; GFX8DAGISEL-NEXT: v_mov_b32_e32 v4, s4932; GFX8DAGISEL-NEXT: v_mov_b32_e32 v5, s5933; GFX8DAGISEL-NEXT: v_readlane_b32 s8, v2, s12934; GFX8DAGISEL-NEXT: v_readlane_b32 s9, v3, s12935; GFX8DAGISEL-NEXT: v_cmp_lt_u64_e32 vcc, s[8:9], v[4:5]936; GFX8DAGISEL-NEXT: s_and_b64 s[10:11], vcc, s[6:7]937; GFX8DAGISEL-NEXT: s_bitset0_b64 s[6:7], s12938; GFX8DAGISEL-NEXT: s_cselect_b64 s[4:5], s[8:9], s[4:5]939; GFX8DAGISEL-NEXT: s_cmp_lg_u64 s[6:7], 0940; GFX8DAGISEL-NEXT: s_cbranch_scc1 .LBB4_1941; GFX8DAGISEL-NEXT: ; %bb.2:942; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s4943; GFX8DAGISEL-NEXT: v_mov_b32_e32 v3, s5944; GFX8DAGISEL-NEXT: flat_store_dwordx2 v[0:1], v[2:3]945; GFX8DAGISEL-NEXT: s_waitcnt vmcnt(0)946; GFX8DAGISEL-NEXT: s_setpc_b64 s[30:31]947;948; GFX8GISEL-LABEL: divergent_value_i64:949; GFX8GISEL: ; %bb.0: ; %entry950; GFX8GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)951; GFX8GISEL-NEXT: s_mov_b64 s[4:5], -1952; GFX8GISEL-NEXT: s_mov_b64 s[6:7], exec953; GFX8GISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=1954; GFX8GISEL-NEXT: s_ff1_i32_b64 s12, s[6:7]955; GFX8GISEL-NEXT: v_mov_b32_e32 v4, s4956; GFX8GISEL-NEXT: v_mov_b32_e32 v5, s5957; GFX8GISEL-NEXT: v_readlane_b32 s8, v2, s12958; GFX8GISEL-NEXT: v_readlane_b32 s9, v3, s12959; GFX8GISEL-NEXT: v_cmp_lt_u64_e32 vcc, s[8:9], v[4:5]960; GFX8GISEL-NEXT: s_and_b64 s[10:11], vcc, s[6:7]961; GFX8GISEL-NEXT: s_bitset0_b64 s[6:7], s12962; GFX8GISEL-NEXT: s_cselect_b64 s[4:5], s[8:9], s[4:5]963; GFX8GISEL-NEXT: s_cmp_lg_u64 s[6:7], 0964; GFX8GISEL-NEXT: s_cbranch_scc1 .LBB4_1965; GFX8GISEL-NEXT: ; %bb.2:966; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s4967; GFX8GISEL-NEXT: v_mov_b32_e32 v3, s5968; GFX8GISEL-NEXT: flat_store_dwordx2 v[0:1], v[2:3]969; GFX8GISEL-NEXT: s_waitcnt vmcnt(0)970; GFX8GISEL-NEXT: s_setpc_b64 s[30:31]971;972; GFX9DAGISEL-LABEL: divergent_value_i64:973; GFX9DAGISEL: ; %bb.0: ; %entry974; GFX9DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)975; GFX9DAGISEL-NEXT: s_mov_b64 s[4:5], -1976; GFX9DAGISEL-NEXT: s_mov_b64 s[6:7], exec977; GFX9DAGISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=1978; GFX9DAGISEL-NEXT: s_ff1_i32_b64 s12, s[6:7]979; GFX9DAGISEL-NEXT: v_mov_b32_e32 v4, s4980; GFX9DAGISEL-NEXT: v_mov_b32_e32 v5, s5981; GFX9DAGISEL-NEXT: v_readlane_b32 s8, v2, s12982; GFX9DAGISEL-NEXT: v_readlane_b32 s9, v3, s12983; GFX9DAGISEL-NEXT: v_cmp_lt_u64_e32 vcc, s[8:9], v[4:5]984; GFX9DAGISEL-NEXT: s_and_b64 s[10:11], vcc, s[6:7]985; GFX9DAGISEL-NEXT: s_bitset0_b64 s[6:7], s12986; GFX9DAGISEL-NEXT: s_cselect_b64 s[4:5], s[8:9], s[4:5]987; GFX9DAGISEL-NEXT: s_cmp_lg_u64 s[6:7], 0988; GFX9DAGISEL-NEXT: s_cbranch_scc1 .LBB4_1989; GFX9DAGISEL-NEXT: ; %bb.2:990; GFX9DAGISEL-NEXT: v_mov_b32_e32 v2, s4991; GFX9DAGISEL-NEXT: v_mov_b32_e32 v3, s5992; GFX9DAGISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off993; GFX9DAGISEL-NEXT: s_waitcnt vmcnt(0)994; GFX9DAGISEL-NEXT: s_setpc_b64 s[30:31]995;996; GFX9GISEL-LABEL: divergent_value_i64:997; GFX9GISEL: ; %bb.0: ; %entry998; GFX9GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)999; GFX9GISEL-NEXT: s_mov_b64 s[4:5], -11000; GFX9GISEL-NEXT: s_mov_b64 s[6:7], exec1001; GFX9GISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11002; GFX9GISEL-NEXT: s_ff1_i32_b64 s12, s[6:7]1003; GFX9GISEL-NEXT: v_mov_b32_e32 v4, s41004; GFX9GISEL-NEXT: v_mov_b32_e32 v5, s51005; GFX9GISEL-NEXT: v_readlane_b32 s8, v2, s121006; GFX9GISEL-NEXT: v_readlane_b32 s9, v3, s121007; GFX9GISEL-NEXT: v_cmp_lt_u64_e32 vcc, s[8:9], v[4:5]1008; GFX9GISEL-NEXT: s_and_b64 s[10:11], vcc, s[6:7]1009; GFX9GISEL-NEXT: s_bitset0_b64 s[6:7], s121010; GFX9GISEL-NEXT: s_cselect_b64 s[4:5], s[8:9], s[4:5]1011; GFX9GISEL-NEXT: s_cmp_lg_u64 s[6:7], 01012; GFX9GISEL-NEXT: s_cbranch_scc1 .LBB4_11013; GFX9GISEL-NEXT: ; %bb.2:1014; GFX9GISEL-NEXT: v_mov_b32_e32 v2, s41015; GFX9GISEL-NEXT: v_mov_b32_e32 v3, s51016; GFX9GISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1017; GFX9GISEL-NEXT: s_waitcnt vmcnt(0)1018; GFX9GISEL-NEXT: s_setpc_b64 s[30:31]1019;1020; GFX1064DAGISEL-LABEL: divergent_value_i64:1021; GFX1064DAGISEL: ; %bb.0: ; %entry1022; GFX1064DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1023; GFX1064DAGISEL-NEXT: s_mov_b64 s[4:5], -11024; GFX1064DAGISEL-NEXT: s_mov_b64 s[6:7], exec1025; GFX1064DAGISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11026; GFX1064DAGISEL-NEXT: s_ff1_i32_b64 s12, s[6:7]1027; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v4, s41028; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v5, s51029; GFX1064DAGISEL-NEXT: v_readlane_b32 s8, v2, s121030; GFX1064DAGISEL-NEXT: v_readlane_b32 s9, v3, s121031; GFX1064DAGISEL-NEXT: v_cmp_lt_u64_e32 vcc, s[8:9], v[4:5]1032; GFX1064DAGISEL-NEXT: s_and_b64 s[10:11], vcc, s[6:7]1033; GFX1064DAGISEL-NEXT: s_bitset0_b64 s[6:7], s121034; GFX1064DAGISEL-NEXT: s_cselect_b64 s[4:5], s[8:9], s[4:5]1035; GFX1064DAGISEL-NEXT: s_cmp_lg_u64 s[6:7], 01036; GFX1064DAGISEL-NEXT: s_cbranch_scc1 .LBB4_11037; GFX1064DAGISEL-NEXT: ; %bb.2:1038; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v2, s41039; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v3, s51040; GFX1064DAGISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1041; GFX1064DAGISEL-NEXT: s_setpc_b64 s[30:31]1042;1043; GFX1064GISEL-LABEL: divergent_value_i64:1044; GFX1064GISEL: ; %bb.0: ; %entry1045; GFX1064GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1046; GFX1064GISEL-NEXT: s_mov_b64 s[4:5], -11047; GFX1064GISEL-NEXT: s_mov_b64 s[6:7], exec1048; GFX1064GISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11049; GFX1064GISEL-NEXT: s_ff1_i32_b64 s12, s[6:7]1050; GFX1064GISEL-NEXT: v_mov_b32_e32 v4, s41051; GFX1064GISEL-NEXT: v_mov_b32_e32 v5, s51052; GFX1064GISEL-NEXT: v_readlane_b32 s8, v2, s121053; GFX1064GISEL-NEXT: v_readlane_b32 s9, v3, s121054; GFX1064GISEL-NEXT: v_cmp_lt_u64_e32 vcc, s[8:9], v[4:5]1055; GFX1064GISEL-NEXT: s_and_b64 s[10:11], vcc, s[6:7]1056; GFX1064GISEL-NEXT: s_bitset0_b64 s[6:7], s121057; GFX1064GISEL-NEXT: s_cselect_b64 s[4:5], s[8:9], s[4:5]1058; GFX1064GISEL-NEXT: s_cmp_lg_u64 s[6:7], 01059; GFX1064GISEL-NEXT: s_cbranch_scc1 .LBB4_11060; GFX1064GISEL-NEXT: ; %bb.2:1061; GFX1064GISEL-NEXT: v_mov_b32_e32 v2, s41062; GFX1064GISEL-NEXT: v_mov_b32_e32 v3, s51063; GFX1064GISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1064; GFX1064GISEL-NEXT: s_setpc_b64 s[30:31]1065;1066; GFX1032DAGISEL-LABEL: divergent_value_i64:1067; GFX1032DAGISEL: ; %bb.0: ; %entry1068; GFX1032DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1069; GFX1032DAGISEL-NEXT: s_mov_b64 s[4:5], -11070; GFX1032DAGISEL-NEXT: s_mov_b32 s6, exec_lo1071; GFX1032DAGISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11072; GFX1032DAGISEL-NEXT: s_ff1_i32_b32 s7, s61073; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v4, s41074; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v5, s51075; GFX1032DAGISEL-NEXT: v_readlane_b32 s8, v2, s71076; GFX1032DAGISEL-NEXT: v_readlane_b32 s9, v3, s71077; GFX1032DAGISEL-NEXT: v_cmp_lt_u64_e32 vcc_lo, s[8:9], v[4:5]1078; GFX1032DAGISEL-NEXT: s_and_b32 s10, vcc_lo, s61079; GFX1032DAGISEL-NEXT: s_bitset0_b32 s6, s71080; GFX1032DAGISEL-NEXT: s_cselect_b64 s[4:5], s[8:9], s[4:5]1081; GFX1032DAGISEL-NEXT: s_cmp_lg_u32 s6, 01082; GFX1032DAGISEL-NEXT: s_cbranch_scc1 .LBB4_11083; GFX1032DAGISEL-NEXT: ; %bb.2:1084; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v2, s41085; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v3, s51086; GFX1032DAGISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1087; GFX1032DAGISEL-NEXT: s_setpc_b64 s[30:31]1088;1089; GFX1032GISEL-LABEL: divergent_value_i64:1090; GFX1032GISEL: ; %bb.0: ; %entry1091; GFX1032GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1092; GFX1032GISEL-NEXT: s_mov_b64 s[4:5], -11093; GFX1032GISEL-NEXT: s_mov_b32 s6, exec_lo1094; GFX1032GISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11095; GFX1032GISEL-NEXT: s_ff1_i32_b32 s7, s61096; GFX1032GISEL-NEXT: v_mov_b32_e32 v4, s41097; GFX1032GISEL-NEXT: v_mov_b32_e32 v5, s51098; GFX1032GISEL-NEXT: v_readlane_b32 s8, v2, s71099; GFX1032GISEL-NEXT: v_readlane_b32 s9, v3, s71100; GFX1032GISEL-NEXT: v_cmp_lt_u64_e32 vcc_lo, s[8:9], v[4:5]1101; GFX1032GISEL-NEXT: s_and_b32 s10, vcc_lo, s61102; GFX1032GISEL-NEXT: s_bitset0_b32 s6, s71103; GFX1032GISEL-NEXT: s_cselect_b64 s[4:5], s[8:9], s[4:5]1104; GFX1032GISEL-NEXT: s_cmp_lg_u32 s6, 01105; GFX1032GISEL-NEXT: s_cbranch_scc1 .LBB4_11106; GFX1032GISEL-NEXT: ; %bb.2:1107; GFX1032GISEL-NEXT: v_mov_b32_e32 v2, s41108; GFX1032GISEL-NEXT: v_mov_b32_e32 v3, s51109; GFX1032GISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1110; GFX1032GISEL-NEXT: s_setpc_b64 s[30:31]1111;1112; GFX1164DAGISEL-LABEL: divergent_value_i64:1113; GFX1164DAGISEL: ; %bb.0: ; %entry1114; GFX1164DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1115; GFX1164DAGISEL-NEXT: s_mov_b64 s[0:1], -11116; GFX1164DAGISEL-NEXT: s_mov_b64 s[2:3], exec1117; GFX1164DAGISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11118; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)1119; GFX1164DAGISEL-NEXT: s_ctz_i32_b64 s8, s[2:3]1120; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v4, s01121; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v5, s11122; GFX1164DAGISEL-NEXT: v_readlane_b32 s4, v2, s81123; GFX1164DAGISEL-NEXT: v_readlane_b32 s5, v3, s81124; GFX1164DAGISEL-NEXT: v_cmp_lt_u64_e32 vcc, s[4:5], v[4:5]1125; GFX1164DAGISEL-NEXT: s_and_b64 s[6:7], vcc, s[2:3]1126; GFX1164DAGISEL-NEXT: s_bitset0_b64 s[2:3], s81127; GFX1164DAGISEL-NEXT: s_cselect_b64 s[0:1], s[4:5], s[0:1]1128; GFX1164DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 01129; GFX1164DAGISEL-NEXT: s_cbranch_scc1 .LBB4_11130; GFX1164DAGISEL-NEXT: ; %bb.2:1131; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v3, s11132; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v2, s01133; GFX1164DAGISEL-NEXT: global_store_b64 v[0:1], v[2:3], off1134; GFX1164DAGISEL-NEXT: s_setpc_b64 s[30:31]1135;1136; GFX1164GISEL-LABEL: divergent_value_i64:1137; GFX1164GISEL: ; %bb.0: ; %entry1138; GFX1164GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1139; GFX1164GISEL-NEXT: s_mov_b64 s[0:1], -11140; GFX1164GISEL-NEXT: s_mov_b64 s[2:3], exec1141; GFX1164GISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11142; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)1143; GFX1164GISEL-NEXT: s_ctz_i32_b64 s8, s[2:3]1144; GFX1164GISEL-NEXT: v_mov_b32_e32 v4, s01145; GFX1164GISEL-NEXT: v_mov_b32_e32 v5, s11146; GFX1164GISEL-NEXT: v_readlane_b32 s4, v2, s81147; GFX1164GISEL-NEXT: v_readlane_b32 s5, v3, s81148; GFX1164GISEL-NEXT: v_cmp_lt_u64_e32 vcc, s[4:5], v[4:5]1149; GFX1164GISEL-NEXT: s_and_b64 s[6:7], vcc, s[2:3]1150; GFX1164GISEL-NEXT: s_bitset0_b64 s[2:3], s81151; GFX1164GISEL-NEXT: s_cselect_b64 s[0:1], s[4:5], s[0:1]1152; GFX1164GISEL-NEXT: s_cmp_lg_u64 s[2:3], 01153; GFX1164GISEL-NEXT: s_cbranch_scc1 .LBB4_11154; GFX1164GISEL-NEXT: ; %bb.2:1155; GFX1164GISEL-NEXT: v_mov_b32_e32 v3, s11156; GFX1164GISEL-NEXT: v_mov_b32_e32 v2, s01157; GFX1164GISEL-NEXT: global_store_b64 v[0:1], v[2:3], off1158; GFX1164GISEL-NEXT: s_setpc_b64 s[30:31]1159;1160; GFX1132DAGISEL-LABEL: divergent_value_i64:1161; GFX1132DAGISEL: ; %bb.0: ; %entry1162; GFX1132DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1163; GFX1132DAGISEL-NEXT: s_mov_b64 s[0:1], -11164; GFX1132DAGISEL-NEXT: s_mov_b32 s2, exec_lo1165; GFX1132DAGISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11166; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)1167; GFX1132DAGISEL-NEXT: s_ctz_i32_b32 s3, s21168; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v4, s0 :: v_dual_mov_b32 v5, s11169; GFX1132DAGISEL-NEXT: v_readlane_b32 s4, v2, s31170; GFX1132DAGISEL-NEXT: v_readlane_b32 s5, v3, s31171; GFX1132DAGISEL-NEXT: v_cmp_lt_u64_e32 vcc_lo, s[4:5], v[4:5]1172; GFX1132DAGISEL-NEXT: s_and_b32 s6, vcc_lo, s21173; GFX1132DAGISEL-NEXT: s_bitset0_b32 s2, s31174; GFX1132DAGISEL-NEXT: s_cselect_b64 s[0:1], s[4:5], s[0:1]1175; GFX1132DAGISEL-NEXT: s_cmp_lg_u32 s2, 01176; GFX1132DAGISEL-NEXT: s_cbranch_scc1 .LBB4_11177; GFX1132DAGISEL-NEXT: ; %bb.2:1178; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s01179; GFX1132DAGISEL-NEXT: global_store_b64 v[0:1], v[2:3], off1180; GFX1132DAGISEL-NEXT: s_setpc_b64 s[30:31]1181;1182; GFX1132GISEL-LABEL: divergent_value_i64:1183; GFX1132GISEL: ; %bb.0: ; %entry1184; GFX1132GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1185; GFX1132GISEL-NEXT: s_mov_b64 s[0:1], -11186; GFX1132GISEL-NEXT: s_mov_b32 s2, exec_lo1187; GFX1132GISEL-NEXT: .LBB4_1: ; =>This Inner Loop Header: Depth=11188; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)1189; GFX1132GISEL-NEXT: s_ctz_i32_b32 s3, s21190; GFX1132GISEL-NEXT: v_dual_mov_b32 v4, s0 :: v_dual_mov_b32 v5, s11191; GFX1132GISEL-NEXT: v_readlane_b32 s4, v2, s31192; GFX1132GISEL-NEXT: v_readlane_b32 s5, v3, s31193; GFX1132GISEL-NEXT: v_cmp_lt_u64_e32 vcc_lo, s[4:5], v[4:5]1194; GFX1132GISEL-NEXT: s_and_b32 s6, vcc_lo, s21195; GFX1132GISEL-NEXT: s_bitset0_b32 s2, s31196; GFX1132GISEL-NEXT: s_cselect_b64 s[0:1], s[4:5], s[0:1]1197; GFX1132GISEL-NEXT: s_cmp_lg_u32 s2, 01198; GFX1132GISEL-NEXT: s_cbranch_scc1 .LBB4_11199; GFX1132GISEL-NEXT: ; %bb.2:1200; GFX1132GISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s01201; GFX1132GISEL-NEXT: global_store_b64 v[0:1], v[2:3], off1202; GFX1132GISEL-NEXT: s_setpc_b64 s[30:31]1203entry:1204 %result = call i64 @llvm.amdgcn.wave.reduce.umin.i64(i64 %id.x, i32 1)1205 store i64 %result, ptr addrspace(1) %out1206 ret void1207}1208 1209define amdgpu_kernel void @divergent_cfg_i64(ptr addrspace(1) %out, i64 %in, i64 %in2) {1210; GFX8DAGISEL-LABEL: divergent_cfg_i64:1211; GFX8DAGISEL: ; %bb.0: ; %entry1212; GFX8DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241213; GFX8DAGISEL-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x341214; GFX8DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v01215; GFX8DAGISEL-NEXT: s_and_saveexec_b64 s[6:7], vcc1216; GFX8DAGISEL-NEXT: s_xor_b64 s[6:7], exec, s[6:7]1217; GFX8DAGISEL-NEXT: s_or_saveexec_b64 s[6:7], s[6:7]1218; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1219; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s21220; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s31221; GFX8DAGISEL-NEXT: s_xor_b64 exec, exec, s[6:7]1222; GFX8DAGISEL-NEXT: ; %bb.1: ; %if1223; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s41224; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s51225; GFX8DAGISEL-NEXT: ; %bb.2: ; %endif1226; GFX8DAGISEL-NEXT: s_or_b64 exec, exec, s[6:7]1227; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s01228; GFX8DAGISEL-NEXT: v_mov_b32_e32 v3, s11229; GFX8DAGISEL-NEXT: flat_store_dwordx2 v[2:3], v[0:1]1230; GFX8DAGISEL-NEXT: s_endpgm1231;1232; GFX8GISEL-LABEL: divergent_cfg_i64:1233; GFX8GISEL: ; %bb.0: ; %entry1234; GFX8GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241235; GFX8GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v01236; GFX8GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71237; GFX8GISEL-NEXT: s_and_saveexec_b64 s[8:9], vcc1238; GFX8GISEL-NEXT: s_xor_b64 s[8:9], exec, s[8:9]1239; GFX8GISEL-NEXT: s_cbranch_execz .LBB5_21240; GFX8GISEL-NEXT: ; %bb.1: ; %else1241; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)1242; GFX8GISEL-NEXT: s_mov_b64 s[6:7], s[2:3]1243; GFX8GISEL-NEXT: .LBB5_2: ; %Flow1244; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)1245; GFX8GISEL-NEXT: s_andn2_saveexec_b64 s[2:3], s[8:9]1246; GFX8GISEL-NEXT: s_cbranch_execz .LBB5_41247; GFX8GISEL-NEXT: ; %bb.3: ; %if1248; GFX8GISEL-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x341249; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)1250; GFX8GISEL-NEXT: s_mov_b64 s[6:7], s[4:5]1251; GFX8GISEL-NEXT: .LBB5_4: ; %endif1252; GFX8GISEL-NEXT: s_or_b64 exec, exec, s[2:3]1253; GFX8GISEL-NEXT: v_mov_b32_e32 v0, s61254; GFX8GISEL-NEXT: v_mov_b32_e32 v3, s11255; GFX8GISEL-NEXT: v_mov_b32_e32 v1, s71256; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s01257; GFX8GISEL-NEXT: flat_store_dwordx2 v[2:3], v[0:1]1258; GFX8GISEL-NEXT: s_endpgm1259;1260; GFX9DAGISEL-LABEL: divergent_cfg_i64:1261; GFX9DAGISEL: ; %bb.0: ; %entry1262; GFX9DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241263; GFX9DAGISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341264; GFX9DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v01265; GFX9DAGISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc1266; GFX9DAGISEL-NEXT: s_xor_b64 s[4:5], exec, s[4:5]1267; GFX9DAGISEL-NEXT: s_or_saveexec_b64 s[4:5], s[4:5]1268; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1269; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, s21270; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, s31271; GFX9DAGISEL-NEXT: s_xor_b64 exec, exec, s[4:5]1272; GFX9DAGISEL-NEXT: ; %bb.1: ; %if1273; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, s61274; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, s71275; GFX9DAGISEL-NEXT: ; %bb.2: ; %endif1276; GFX9DAGISEL-NEXT: s_or_b64 exec, exec, s[4:5]1277; GFX9DAGISEL-NEXT: v_mov_b32_e32 v2, 01278; GFX9DAGISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1279; GFX9DAGISEL-NEXT: s_endpgm1280;1281; GFX9GISEL-LABEL: divergent_cfg_i64:1282; GFX9GISEL: ; %bb.0: ; %entry1283; GFX9GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241284; GFX9GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v01285; GFX9GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71286; GFX9GISEL-NEXT: s_and_saveexec_b64 s[8:9], vcc1287; GFX9GISEL-NEXT: s_xor_b64 s[8:9], exec, s[8:9]1288; GFX9GISEL-NEXT: s_cbranch_execz .LBB5_21289; GFX9GISEL-NEXT: ; %bb.1: ; %else1290; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)1291; GFX9GISEL-NEXT: s_mov_b64 s[6:7], s[2:3]1292; GFX9GISEL-NEXT: .LBB5_2: ; %Flow1293; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)1294; GFX9GISEL-NEXT: s_andn2_saveexec_b64 s[2:3], s[8:9]1295; GFX9GISEL-NEXT: s_cbranch_execz .LBB5_41296; GFX9GISEL-NEXT: ; %bb.3: ; %if1297; GFX9GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341298; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)1299; GFX9GISEL-NEXT: s_mov_b64 s[6:7], s[6:7]1300; GFX9GISEL-NEXT: .LBB5_4: ; %endif1301; GFX9GISEL-NEXT: s_or_b64 exec, exec, s[2:3]1302; GFX9GISEL-NEXT: v_mov_b32_e32 v0, s61303; GFX9GISEL-NEXT: v_mov_b32_e32 v1, s71304; GFX9GISEL-NEXT: v_mov_b32_e32 v2, 01305; GFX9GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1306; GFX9GISEL-NEXT: s_endpgm1307;1308; GFX1064DAGISEL-LABEL: divergent_cfg_i64:1309; GFX1064DAGISEL: ; %bb.0: ; %entry1310; GFX1064DAGISEL-NEXT: s_clause 0x11311; GFX1064DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241312; GFX1064DAGISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341313; GFX1064DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v01314; GFX1064DAGISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc1315; GFX1064DAGISEL-NEXT: s_xor_b64 s[4:5], exec, s[4:5]1316; GFX1064DAGISEL-NEXT: s_or_saveexec_b64 s[4:5], s[4:5]1317; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1318; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, s21319; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, s31320; GFX1064DAGISEL-NEXT: s_xor_b64 exec, exec, s[4:5]1321; GFX1064DAGISEL-NEXT: ; %bb.1: ; %if1322; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, s61323; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, s71324; GFX1064DAGISEL-NEXT: ; %bb.2: ; %endif1325; GFX1064DAGISEL-NEXT: s_or_b64 exec, exec, s[4:5]1326; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v2, 01327; GFX1064DAGISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1328; GFX1064DAGISEL-NEXT: s_endpgm1329;1330; GFX1064GISEL-LABEL: divergent_cfg_i64:1331; GFX1064GISEL: ; %bb.0: ; %entry1332; GFX1064GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241333; GFX1064GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v01334; GFX1064GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71335; GFX1064GISEL-NEXT: s_and_saveexec_b64 s[8:9], vcc1336; GFX1064GISEL-NEXT: s_xor_b64 s[8:9], exec, s[8:9]1337; GFX1064GISEL-NEXT: s_cbranch_execz .LBB5_21338; GFX1064GISEL-NEXT: ; %bb.1: ; %else1339; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)1340; GFX1064GISEL-NEXT: s_mov_b64 s[6:7], s[2:3]1341; GFX1064GISEL-NEXT: .LBB5_2: ; %Flow1342; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)1343; GFX1064GISEL-NEXT: s_andn2_saveexec_b64 s[2:3], s[8:9]1344; GFX1064GISEL-NEXT: s_cbranch_execz .LBB5_41345; GFX1064GISEL-NEXT: ; %bb.3: ; %if1346; GFX1064GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341347; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)1348; GFX1064GISEL-NEXT: s_mov_b64 s[6:7], s[6:7]1349; GFX1064GISEL-NEXT: .LBB5_4: ; %endif1350; GFX1064GISEL-NEXT: s_or_b64 exec, exec, s[2:3]1351; GFX1064GISEL-NEXT: v_mov_b32_e32 v0, s61352; GFX1064GISEL-NEXT: v_mov_b32_e32 v1, s71353; GFX1064GISEL-NEXT: v_mov_b32_e32 v2, 01354; GFX1064GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1355; GFX1064GISEL-NEXT: s_endpgm1356;1357; GFX1032DAGISEL-LABEL: divergent_cfg_i64:1358; GFX1032DAGISEL: ; %bb.0: ; %entry1359; GFX1032DAGISEL-NEXT: s_clause 0x11360; GFX1032DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241361; GFX1032DAGISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341362; GFX1032DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc_lo, 15, v01363; GFX1032DAGISEL-NEXT: s_and_saveexec_b32 s4, vcc_lo1364; GFX1032DAGISEL-NEXT: s_xor_b32 s4, exec_lo, s41365; GFX1032DAGISEL-NEXT: s_or_saveexec_b32 s4, s41366; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1367; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, s21368; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, s31369; GFX1032DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s41370; GFX1032DAGISEL-NEXT: ; %bb.1: ; %if1371; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, s61372; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, s71373; GFX1032DAGISEL-NEXT: ; %bb.2: ; %endif1374; GFX1032DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s41375; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v2, 01376; GFX1032DAGISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1377; GFX1032DAGISEL-NEXT: s_endpgm1378;1379; GFX1032GISEL-LABEL: divergent_cfg_i64:1380; GFX1032GISEL: ; %bb.0: ; %entry1381; GFX1032GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241382; GFX1032GISEL-NEXT: v_cmp_le_u32_e32 vcc_lo, 16, v01383; GFX1032GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71384; GFX1032GISEL-NEXT: s_and_saveexec_b32 s8, vcc_lo1385; GFX1032GISEL-NEXT: s_xor_b32 s8, exec_lo, s81386; GFX1032GISEL-NEXT: s_cbranch_execz .LBB5_21387; GFX1032GISEL-NEXT: ; %bb.1: ; %else1388; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)1389; GFX1032GISEL-NEXT: s_mov_b64 s[6:7], s[2:3]1390; GFX1032GISEL-NEXT: .LBB5_2: ; %Flow1391; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)1392; GFX1032GISEL-NEXT: s_andn2_saveexec_b32 s2, s81393; GFX1032GISEL-NEXT: s_cbranch_execz .LBB5_41394; GFX1032GISEL-NEXT: ; %bb.3: ; %if1395; GFX1032GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341396; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)1397; GFX1032GISEL-NEXT: s_mov_b64 s[6:7], s[6:7]1398; GFX1032GISEL-NEXT: .LBB5_4: ; %endif1399; GFX1032GISEL-NEXT: s_or_b32 exec_lo, exec_lo, s21400; GFX1032GISEL-NEXT: v_mov_b32_e32 v0, s61401; GFX1032GISEL-NEXT: v_mov_b32_e32 v1, s71402; GFX1032GISEL-NEXT: v_mov_b32_e32 v2, 01403; GFX1032GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1404; GFX1032GISEL-NEXT: s_endpgm1405;1406; GFX1164DAGISEL-LABEL: divergent_cfg_i64:1407; GFX1164DAGISEL: ; %bb.0: ; %entry1408; GFX1164DAGISEL-NEXT: s_clause 0x11409; GFX1164DAGISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241410; GFX1164DAGISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x341411; GFX1164DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v01412; GFX1164DAGISEL-NEXT: s_mov_b64 s[6:7], exec1413; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)1414; GFX1164DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v01415; GFX1164DAGISEL-NEXT: s_xor_b64 s[6:7], exec, s[6:7]1416; GFX1164DAGISEL-NEXT: s_or_saveexec_b64 s[6:7], s[6:7]1417; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1418; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, s21419; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s31420; GFX1164DAGISEL-NEXT: s_xor_b64 exec, exec, s[6:7]1421; GFX1164DAGISEL-NEXT: ; %bb.1: ; %if1422; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, s41423; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s51424; GFX1164DAGISEL-NEXT: ; %bb.2: ; %endif1425; GFX1164DAGISEL-NEXT: s_or_b64 exec, exec, s[6:7]1426; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v2, 01427; GFX1164DAGISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1428; GFX1164DAGISEL-NEXT: s_endpgm1429;1430; GFX1164GISEL-LABEL: divergent_cfg_i64:1431; GFX1164GISEL: ; %bb.0: ; %entry1432; GFX1164GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241433; GFX1164GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v01434; GFX1164GISEL-NEXT: s_mov_b64 s[8:9], exec1435; GFX1164GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71436; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)1437; GFX1164GISEL-NEXT: v_cmpx_le_u32_e32 16, v01438; GFX1164GISEL-NEXT: s_xor_b64 s[8:9], exec, s[8:9]1439; GFX1164GISEL-NEXT: s_cbranch_execz .LBB5_21440; GFX1164GISEL-NEXT: ; %bb.1: ; %else1441; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)1442; GFX1164GISEL-NEXT: s_mov_b64 s[6:7], s[2:3]1443; GFX1164GISEL-NEXT: .LBB5_2: ; %Flow1444; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)1445; GFX1164GISEL-NEXT: s_and_not1_saveexec_b64 s[2:3], s[8:9]1446; GFX1164GISEL-NEXT: s_cbranch_execz .LBB5_41447; GFX1164GISEL-NEXT: ; %bb.3: ; %if1448; GFX1164GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x341449; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)1450; GFX1164GISEL-NEXT: s_mov_b64 s[6:7], s[4:5]1451; GFX1164GISEL-NEXT: .LBB5_4: ; %endif1452; GFX1164GISEL-NEXT: s_or_b64 exec, exec, s[2:3]1453; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, s61454; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, s71455; GFX1164GISEL-NEXT: v_mov_b32_e32 v2, 01456; GFX1164GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1457; GFX1164GISEL-NEXT: s_endpgm1458;1459; GFX1132DAGISEL-LABEL: divergent_cfg_i64:1460; GFX1132DAGISEL: ; %bb.0: ; %entry1461; GFX1132DAGISEL-NEXT: s_clause 0x11462; GFX1132DAGISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241463; GFX1132DAGISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x341464; GFX1132DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v01465; GFX1132DAGISEL-NEXT: s_mov_b32 s6, exec_lo1466; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)1467; GFX1132DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v01468; GFX1132DAGISEL-NEXT: s_xor_b32 s6, exec_lo, s61469; GFX1132DAGISEL-NEXT: s_or_saveexec_b32 s6, s61470; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1471; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s31472; GFX1132DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s61473; GFX1132DAGISEL-NEXT: ; %bb.1: ; %if1474; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v1, s51475; GFX1132DAGISEL-NEXT: ; %bb.2: ; %endif1476; GFX1132DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s61477; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v2, 01478; GFX1132DAGISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1479; GFX1132DAGISEL-NEXT: s_endpgm1480;1481; GFX1132GISEL-LABEL: divergent_cfg_i64:1482; GFX1132GISEL: ; %bb.0: ; %entry1483; GFX1132GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241484; GFX1132GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v01485; GFX1132GISEL-NEXT: s_mov_b32 s8, exec_lo1486; GFX1132GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71487; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)1488; GFX1132GISEL-NEXT: v_cmpx_le_u32_e32 16, v01489; GFX1132GISEL-NEXT: s_xor_b32 s8, exec_lo, s81490; GFX1132GISEL-NEXT: s_cbranch_execz .LBB5_21491; GFX1132GISEL-NEXT: ; %bb.1: ; %else1492; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)1493; GFX1132GISEL-NEXT: s_mov_b64 s[6:7], s[2:3]1494; GFX1132GISEL-NEXT: .LBB5_2: ; %Flow1495; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)1496; GFX1132GISEL-NEXT: s_and_not1_saveexec_b32 s2, s81497; GFX1132GISEL-NEXT: s_cbranch_execz .LBB5_41498; GFX1132GISEL-NEXT: ; %bb.3: ; %if1499; GFX1132GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x341500; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)1501; GFX1132GISEL-NEXT: s_mov_b64 s[6:7], s[4:5]1502; GFX1132GISEL-NEXT: .LBB5_4: ; %endif1503; GFX1132GISEL-NEXT: s_or_b32 exec_lo, exec_lo, s21504; GFX1132GISEL-NEXT: v_dual_mov_b32 v0, s6 :: v_dual_mov_b32 v1, s71505; GFX1132GISEL-NEXT: v_mov_b32_e32 v2, 01506; GFX1132GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1507; GFX1132GISEL-NEXT: s_endpgm1508entry:1509 %tid = call i32 @llvm.amdgcn.workitem.id.x()1510 %d_cmp = icmp ult i32 %tid, 161511 br i1 %d_cmp, label %if, label %else1512 1513if:1514 %reducedValTid = call i64 @llvm.amdgcn.wave.reduce.umin.i64(i64 %in2, i32 1)1515 br label %endif1516 1517else:1518 %reducedValIn = call i64 @llvm.amdgcn.wave.reduce.umin.i64(i64 %in, i32 1)1519 br label %endif1520 1521endif:1522 %combine = phi i64 [%reducedValTid, %if], [%reducedValIn, %else]1523 store i64 %combine, ptr addrspace(1) %out1524 ret void1525}1526;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:1527; GFX11DAGISEL: {{.*}}1528; GFX11GISEL: {{.*}}1529