1666 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.umax.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, i32 %in) {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, 0134; 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_max_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, 0154; 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_max_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, 0175; 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_max_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, 0193; 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_max_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, 0213; 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_max_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, 0231; 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_max_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, 0251; 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_max_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, 0269; 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_max_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, 0290; 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_max_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, 0310; 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_max_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, 0331; 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_max_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, 0351; 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_max_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.umax.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, 0390; 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_max_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, 0426; 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_max_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, 0461; 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_max_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, 0496; 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_max_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, 0530; 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_max_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, 0565; 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_max_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, 0599; 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_max_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, 0634; 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_max_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, 0670; 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_max_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, 0708; 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_max_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, 0745; 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_max_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, 0783; 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_max_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.umax.i32(i32 %tid, i32 1)805 br label %endif806 807else:808 %reducedValIn = call i32 @llvm.amdgcn.wave.reduce.umax.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.umax.i64(i64 %in, i32 1)919 store i64 %result, ptr addrspace(1) %out920 ret void921}922 923define amdgpu_kernel void @const_value_i64(ptr addrspace(1) %out) {924; GFX8DAGISEL-LABEL: const_value_i64:925; GFX8DAGISEL: ; %bb.0: ; %entry926; GFX8DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24927; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, 0x7b928; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, 0929; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)930; GFX8DAGISEL-NEXT: v_mov_b32_e32 v3, s1931; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s0932; GFX8DAGISEL-NEXT: flat_store_dwordx2 v[2:3], v[0:1]933; GFX8DAGISEL-NEXT: s_endpgm934;935; GFX8GISEL-LABEL: const_value_i64:936; GFX8GISEL: ; %bb.0: ; %entry937; GFX8GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24938; GFX8GISEL-NEXT: v_mov_b32_e32 v0, 0x7b939; GFX8GISEL-NEXT: v_mov_b32_e32 v1, 0940; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)941; GFX8GISEL-NEXT: v_mov_b32_e32 v3, s1942; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s0943; GFX8GISEL-NEXT: flat_store_dwordx2 v[2:3], v[0:1]944; GFX8GISEL-NEXT: s_endpgm945;946; GFX9DAGISEL-LABEL: const_value_i64:947; GFX9DAGISEL: ; %bb.0: ; %entry948; GFX9DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24949; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, 0950; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, 0x7b951; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)952; GFX9DAGISEL-NEXT: global_store_dwordx2 v1, v[0:1], s[0:1]953; GFX9DAGISEL-NEXT: s_endpgm954;955; GFX9GISEL-LABEL: const_value_i64:956; GFX9GISEL: ; %bb.0: ; %entry957; GFX9GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24958; GFX9GISEL-NEXT: v_mov_b32_e32 v0, 0x7b959; GFX9GISEL-NEXT: v_mov_b32_e32 v1, 0960; GFX9GISEL-NEXT: v_mov_b32_e32 v2, 0961; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)962; GFX9GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]963; GFX9GISEL-NEXT: s_endpgm964;965; GFX10DAGISEL-LABEL: const_value_i64:966; GFX10DAGISEL: ; %bb.0: ; %entry967; GFX10DAGISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24968; GFX10DAGISEL-NEXT: v_mov_b32_e32 v1, 0969; GFX10DAGISEL-NEXT: v_mov_b32_e32 v0, 0x7b970; GFX10DAGISEL-NEXT: s_waitcnt lgkmcnt(0)971; GFX10DAGISEL-NEXT: global_store_dwordx2 v1, v[0:1], s[0:1]972; GFX10DAGISEL-NEXT: s_endpgm973;974; GFX10GISEL-LABEL: const_value_i64:975; GFX10GISEL: ; %bb.0: ; %entry976; GFX10GISEL-NEXT: s_load_dwordx2 s[0:1], s[4:5], 0x24977; GFX10GISEL-NEXT: v_mov_b32_e32 v0, 0x7b978; GFX10GISEL-NEXT: v_mov_b32_e32 v1, 0979; GFX10GISEL-NEXT: v_mov_b32_e32 v2, 0980; GFX10GISEL-NEXT: s_waitcnt lgkmcnt(0)981; GFX10GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]982; GFX10GISEL-NEXT: s_endpgm983;984; GFX1164DAGISEL-LABEL: const_value_i64:985; GFX1164DAGISEL: ; %bb.0: ; %entry986; GFX1164DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24987; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, 0988; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, 0x7b989; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)990; GFX1164DAGISEL-NEXT: global_store_b64 v1, v[0:1], s[0:1]991; GFX1164DAGISEL-NEXT: s_endpgm992;993; GFX1164GISEL-LABEL: const_value_i64:994; GFX1164GISEL: ; %bb.0: ; %entry995; GFX1164GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x24996; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, 0x7b997; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, 0998; GFX1164GISEL-NEXT: v_mov_b32_e32 v2, 0999; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)1000; GFX1164GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1001; GFX1164GISEL-NEXT: s_endpgm1002;1003; GFX1132DAGISEL-LABEL: const_value_i64:1004; GFX1132DAGISEL: ; %bb.0: ; %entry1005; GFX1132DAGISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x241006; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, 0x7b1007; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1008; GFX1132DAGISEL-NEXT: global_store_b64 v1, v[0:1], s[0:1]1009; GFX1132DAGISEL-NEXT: s_endpgm1010;1011; GFX1132GISEL-LABEL: const_value_i64:1012; GFX1132GISEL: ; %bb.0: ; %entry1013; GFX1132GISEL-NEXT: s_load_b64 s[0:1], s[4:5], 0x241014; GFX1132GISEL-NEXT: v_mov_b32_e32 v0, 0x7b1015; GFX1132GISEL-NEXT: v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v2, 01016; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)1017; GFX1132GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1018; GFX1132GISEL-NEXT: s_endpgm1019entry:1020 %result = call i64 @llvm.amdgcn.wave.reduce.umax.i64(i64 123, i32 1)1021 store i64 %result, ptr addrspace(1) %out1022 ret void1023}1024 1025define amdgpu_kernel void @poison_value_i64(ptr addrspace(1) %out, i64 %in) {1026; GFX8DAGISEL-LABEL: poison_value_i64:1027; GFX8DAGISEL: ; %bb.0: ; %entry1028; GFX8DAGISEL-NEXT: s_endpgm1029;1030; GFX8GISEL-LABEL: poison_value_i64:1031; GFX8GISEL: ; %bb.0: ; %entry1032; GFX8GISEL-NEXT: s_endpgm1033;1034; GFX9DAGISEL-LABEL: poison_value_i64:1035; GFX9DAGISEL: ; %bb.0: ; %entry1036; GFX9DAGISEL-NEXT: s_endpgm1037;1038; GFX9GISEL-LABEL: poison_value_i64:1039; GFX9GISEL: ; %bb.0: ; %entry1040; GFX9GISEL-NEXT: s_endpgm1041;1042; GFX10DAGISEL-LABEL: poison_value_i64:1043; GFX10DAGISEL: ; %bb.0: ; %entry1044; GFX10DAGISEL-NEXT: s_endpgm1045;1046; GFX10GISEL-LABEL: poison_value_i64:1047; GFX10GISEL: ; %bb.0: ; %entry1048; GFX10GISEL-NEXT: s_endpgm1049;1050; GFX11DAGISEL-LABEL: poison_value_i64:1051; GFX11DAGISEL: ; %bb.0: ; %entry1052; GFX11DAGISEL-NEXT: s_endpgm1053;1054; GFX11GISEL-LABEL: poison_value_i64:1055; GFX11GISEL: ; %bb.0: ; %entry1056; GFX11GISEL-NEXT: s_endpgm1057entry:1058 %result = call i64 @llvm.amdgcn.wave.reduce.umax.i64(i64 poison, i32 1)1059 store i64 %result, ptr addrspace(1) %out1060 ret void1061}1062 1063define void @divergent_value_i64(ptr addrspace(1) %out, i64 %id.x) {1064; GFX8DAGISEL-LABEL: divergent_value_i64:1065; GFX8DAGISEL: ; %bb.0: ; %entry1066; GFX8DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1067; GFX8DAGISEL-NEXT: s_mov_b64 s[4:5], 01068; GFX8DAGISEL-NEXT: s_mov_b64 s[6:7], exec1069; GFX8DAGISEL-NEXT: .LBB6_1: ; =>This Inner Loop Header: Depth=11070; GFX8DAGISEL-NEXT: s_ff1_i32_b64 s12, s[6:7]1071; GFX8DAGISEL-NEXT: v_mov_b32_e32 v4, s41072; GFX8DAGISEL-NEXT: v_mov_b32_e32 v5, s51073; GFX8DAGISEL-NEXT: v_readlane_b32 s8, v2, s121074; GFX8DAGISEL-NEXT: v_readlane_b32 s9, v3, s121075; GFX8DAGISEL-NEXT: v_cmp_gt_u64_e32 vcc, s[8:9], v[4:5]1076; GFX8DAGISEL-NEXT: s_and_b64 s[10:11], vcc, s[6:7]1077; GFX8DAGISEL-NEXT: s_bitset0_b64 s[6:7], s121078; GFX8DAGISEL-NEXT: s_cselect_b64 s[4:5], s[8:9], s[4:5]1079; GFX8DAGISEL-NEXT: s_cmp_lg_u64 s[6:7], 01080; GFX8DAGISEL-NEXT: s_cbranch_scc1 .LBB6_11081; GFX8DAGISEL-NEXT: ; %bb.2:1082; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s41083; GFX8DAGISEL-NEXT: v_mov_b32_e32 v3, s51084; GFX8DAGISEL-NEXT: flat_store_dwordx2 v[0:1], v[2:3]1085; GFX8DAGISEL-NEXT: s_waitcnt vmcnt(0)1086; GFX8DAGISEL-NEXT: s_setpc_b64 s[30:31]1087;1088; GFX8GISEL-LABEL: divergent_value_i64:1089; GFX8GISEL: ; %bb.0: ; %entry1090; GFX8GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1091; GFX8GISEL-NEXT: s_mov_b64 s[4:5], 01092; GFX8GISEL-NEXT: s_mov_b64 s[6:7], exec1093; GFX8GISEL-NEXT: .LBB6_1: ; =>This Inner Loop Header: Depth=11094; GFX8GISEL-NEXT: s_ff1_i32_b64 s12, s[6:7]1095; GFX8GISEL-NEXT: v_mov_b32_e32 v4, s41096; GFX8GISEL-NEXT: v_mov_b32_e32 v5, s51097; GFX8GISEL-NEXT: v_readlane_b32 s8, v2, s121098; GFX8GISEL-NEXT: v_readlane_b32 s9, v3, s121099; GFX8GISEL-NEXT: v_cmp_gt_u64_e32 vcc, s[8:9], v[4:5]1100; GFX8GISEL-NEXT: s_and_b64 s[10:11], vcc, s[6:7]1101; GFX8GISEL-NEXT: s_bitset0_b64 s[6:7], s121102; GFX8GISEL-NEXT: s_cselect_b64 s[4:5], s[8:9], s[4:5]1103; GFX8GISEL-NEXT: s_cmp_lg_u64 s[6:7], 01104; GFX8GISEL-NEXT: s_cbranch_scc1 .LBB6_11105; GFX8GISEL-NEXT: ; %bb.2:1106; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s41107; GFX8GISEL-NEXT: v_mov_b32_e32 v3, s51108; GFX8GISEL-NEXT: flat_store_dwordx2 v[0:1], v[2:3]1109; GFX8GISEL-NEXT: s_waitcnt vmcnt(0)1110; GFX8GISEL-NEXT: s_setpc_b64 s[30:31]1111;1112; GFX9DAGISEL-LABEL: divergent_value_i64:1113; GFX9DAGISEL: ; %bb.0: ; %entry1114; GFX9DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1115; GFX9DAGISEL-NEXT: s_mov_b64 s[4:5], 01116; GFX9DAGISEL-NEXT: s_mov_b64 s[6:7], exec1117; GFX9DAGISEL-NEXT: .LBB6_1: ; =>This Inner Loop Header: Depth=11118; GFX9DAGISEL-NEXT: s_ff1_i32_b64 s12, s[6:7]1119; GFX9DAGISEL-NEXT: v_mov_b32_e32 v4, s41120; GFX9DAGISEL-NEXT: v_mov_b32_e32 v5, s51121; GFX9DAGISEL-NEXT: v_readlane_b32 s8, v2, s121122; GFX9DAGISEL-NEXT: v_readlane_b32 s9, v3, s121123; GFX9DAGISEL-NEXT: v_cmp_gt_u64_e32 vcc, s[8:9], v[4:5]1124; GFX9DAGISEL-NEXT: s_and_b64 s[10:11], vcc, s[6:7]1125; GFX9DAGISEL-NEXT: s_bitset0_b64 s[6:7], s121126; GFX9DAGISEL-NEXT: s_cselect_b64 s[4:5], s[8:9], s[4:5]1127; GFX9DAGISEL-NEXT: s_cmp_lg_u64 s[6:7], 01128; GFX9DAGISEL-NEXT: s_cbranch_scc1 .LBB6_11129; GFX9DAGISEL-NEXT: ; %bb.2:1130; GFX9DAGISEL-NEXT: v_mov_b32_e32 v2, s41131; GFX9DAGISEL-NEXT: v_mov_b32_e32 v3, s51132; GFX9DAGISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1133; GFX9DAGISEL-NEXT: s_waitcnt vmcnt(0)1134; GFX9DAGISEL-NEXT: s_setpc_b64 s[30:31]1135;1136; GFX9GISEL-LABEL: divergent_value_i64:1137; GFX9GISEL: ; %bb.0: ; %entry1138; GFX9GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1139; GFX9GISEL-NEXT: s_mov_b64 s[4:5], 01140; GFX9GISEL-NEXT: s_mov_b64 s[6:7], exec1141; GFX9GISEL-NEXT: .LBB6_1: ; =>This Inner Loop Header: Depth=11142; GFX9GISEL-NEXT: s_ff1_i32_b64 s12, s[6:7]1143; GFX9GISEL-NEXT: v_mov_b32_e32 v4, s41144; GFX9GISEL-NEXT: v_mov_b32_e32 v5, s51145; GFX9GISEL-NEXT: v_readlane_b32 s8, v2, s121146; GFX9GISEL-NEXT: v_readlane_b32 s9, v3, s121147; GFX9GISEL-NEXT: v_cmp_gt_u64_e32 vcc, s[8:9], v[4:5]1148; GFX9GISEL-NEXT: s_and_b64 s[10:11], vcc, s[6:7]1149; GFX9GISEL-NEXT: s_bitset0_b64 s[6:7], s121150; GFX9GISEL-NEXT: s_cselect_b64 s[4:5], s[8:9], s[4:5]1151; GFX9GISEL-NEXT: s_cmp_lg_u64 s[6:7], 01152; GFX9GISEL-NEXT: s_cbranch_scc1 .LBB6_11153; GFX9GISEL-NEXT: ; %bb.2:1154; GFX9GISEL-NEXT: v_mov_b32_e32 v2, s41155; GFX9GISEL-NEXT: v_mov_b32_e32 v3, s51156; GFX9GISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1157; GFX9GISEL-NEXT: s_waitcnt vmcnt(0)1158; GFX9GISEL-NEXT: s_setpc_b64 s[30:31]1159;1160; GFX1064DAGISEL-LABEL: divergent_value_i64:1161; GFX1064DAGISEL: ; %bb.0: ; %entry1162; GFX1064DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1163; GFX1064DAGISEL-NEXT: s_mov_b64 s[4:5], 01164; GFX1064DAGISEL-NEXT: s_mov_b64 s[6:7], exec1165; GFX1064DAGISEL-NEXT: .LBB6_1: ; =>This Inner Loop Header: Depth=11166; GFX1064DAGISEL-NEXT: s_ff1_i32_b64 s12, s[6:7]1167; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v4, s41168; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v5, s51169; GFX1064DAGISEL-NEXT: v_readlane_b32 s8, v2, s121170; GFX1064DAGISEL-NEXT: v_readlane_b32 s9, v3, s121171; GFX1064DAGISEL-NEXT: v_cmp_gt_u64_e32 vcc, s[8:9], v[4:5]1172; GFX1064DAGISEL-NEXT: s_and_b64 s[10:11], vcc, s[6:7]1173; GFX1064DAGISEL-NEXT: s_bitset0_b64 s[6:7], s121174; GFX1064DAGISEL-NEXT: s_cselect_b64 s[4:5], s[8:9], s[4:5]1175; GFX1064DAGISEL-NEXT: s_cmp_lg_u64 s[6:7], 01176; GFX1064DAGISEL-NEXT: s_cbranch_scc1 .LBB6_11177; GFX1064DAGISEL-NEXT: ; %bb.2:1178; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v2, s41179; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v3, s51180; GFX1064DAGISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1181; GFX1064DAGISEL-NEXT: s_setpc_b64 s[30:31]1182;1183; GFX1064GISEL-LABEL: divergent_value_i64:1184; GFX1064GISEL: ; %bb.0: ; %entry1185; GFX1064GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1186; GFX1064GISEL-NEXT: s_mov_b64 s[4:5], 01187; GFX1064GISEL-NEXT: s_mov_b64 s[6:7], exec1188; GFX1064GISEL-NEXT: .LBB6_1: ; =>This Inner Loop Header: Depth=11189; GFX1064GISEL-NEXT: s_ff1_i32_b64 s12, s[6:7]1190; GFX1064GISEL-NEXT: v_mov_b32_e32 v4, s41191; GFX1064GISEL-NEXT: v_mov_b32_e32 v5, s51192; GFX1064GISEL-NEXT: v_readlane_b32 s8, v2, s121193; GFX1064GISEL-NEXT: v_readlane_b32 s9, v3, s121194; GFX1064GISEL-NEXT: v_cmp_gt_u64_e32 vcc, s[8:9], v[4:5]1195; GFX1064GISEL-NEXT: s_and_b64 s[10:11], vcc, s[6:7]1196; GFX1064GISEL-NEXT: s_bitset0_b64 s[6:7], s121197; GFX1064GISEL-NEXT: s_cselect_b64 s[4:5], s[8:9], s[4:5]1198; GFX1064GISEL-NEXT: s_cmp_lg_u64 s[6:7], 01199; GFX1064GISEL-NEXT: s_cbranch_scc1 .LBB6_11200; GFX1064GISEL-NEXT: ; %bb.2:1201; GFX1064GISEL-NEXT: v_mov_b32_e32 v2, s41202; GFX1064GISEL-NEXT: v_mov_b32_e32 v3, s51203; GFX1064GISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1204; GFX1064GISEL-NEXT: s_setpc_b64 s[30:31]1205;1206; GFX1032DAGISEL-LABEL: divergent_value_i64:1207; GFX1032DAGISEL: ; %bb.0: ; %entry1208; GFX1032DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1209; GFX1032DAGISEL-NEXT: s_mov_b64 s[4:5], 01210; GFX1032DAGISEL-NEXT: s_mov_b32 s6, exec_lo1211; GFX1032DAGISEL-NEXT: .LBB6_1: ; =>This Inner Loop Header: Depth=11212; GFX1032DAGISEL-NEXT: s_ff1_i32_b32 s7, s61213; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v4, s41214; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v5, s51215; GFX1032DAGISEL-NEXT: v_readlane_b32 s8, v2, s71216; GFX1032DAGISEL-NEXT: v_readlane_b32 s9, v3, s71217; GFX1032DAGISEL-NEXT: v_cmp_gt_u64_e32 vcc_lo, s[8:9], v[4:5]1218; GFX1032DAGISEL-NEXT: s_and_b32 s10, vcc_lo, s61219; GFX1032DAGISEL-NEXT: s_bitset0_b32 s6, s71220; GFX1032DAGISEL-NEXT: s_cselect_b64 s[4:5], s[8:9], s[4:5]1221; GFX1032DAGISEL-NEXT: s_cmp_lg_u32 s6, 01222; GFX1032DAGISEL-NEXT: s_cbranch_scc1 .LBB6_11223; GFX1032DAGISEL-NEXT: ; %bb.2:1224; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v2, s41225; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v3, s51226; GFX1032DAGISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1227; GFX1032DAGISEL-NEXT: s_setpc_b64 s[30:31]1228;1229; GFX1032GISEL-LABEL: divergent_value_i64:1230; GFX1032GISEL: ; %bb.0: ; %entry1231; GFX1032GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1232; GFX1032GISEL-NEXT: s_mov_b64 s[4:5], 01233; GFX1032GISEL-NEXT: s_mov_b32 s6, exec_lo1234; GFX1032GISEL-NEXT: .LBB6_1: ; =>This Inner Loop Header: Depth=11235; GFX1032GISEL-NEXT: s_ff1_i32_b32 s7, s61236; GFX1032GISEL-NEXT: v_mov_b32_e32 v4, s41237; GFX1032GISEL-NEXT: v_mov_b32_e32 v5, s51238; GFX1032GISEL-NEXT: v_readlane_b32 s8, v2, s71239; GFX1032GISEL-NEXT: v_readlane_b32 s9, v3, s71240; GFX1032GISEL-NEXT: v_cmp_gt_u64_e32 vcc_lo, s[8:9], v[4:5]1241; GFX1032GISEL-NEXT: s_and_b32 s10, vcc_lo, s61242; GFX1032GISEL-NEXT: s_bitset0_b32 s6, s71243; GFX1032GISEL-NEXT: s_cselect_b64 s[4:5], s[8:9], s[4:5]1244; GFX1032GISEL-NEXT: s_cmp_lg_u32 s6, 01245; GFX1032GISEL-NEXT: s_cbranch_scc1 .LBB6_11246; GFX1032GISEL-NEXT: ; %bb.2:1247; GFX1032GISEL-NEXT: v_mov_b32_e32 v2, s41248; GFX1032GISEL-NEXT: v_mov_b32_e32 v3, s51249; GFX1032GISEL-NEXT: global_store_dwordx2 v[0:1], v[2:3], off1250; GFX1032GISEL-NEXT: s_setpc_b64 s[30:31]1251;1252; GFX1164DAGISEL-LABEL: divergent_value_i64:1253; GFX1164DAGISEL: ; %bb.0: ; %entry1254; GFX1164DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1255; GFX1164DAGISEL-NEXT: s_mov_b64 s[0:1], 01256; GFX1164DAGISEL-NEXT: s_mov_b64 s[2:3], exec1257; GFX1164DAGISEL-NEXT: .LBB6_1: ; =>This Inner Loop Header: Depth=11258; GFX1164DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)1259; GFX1164DAGISEL-NEXT: s_ctz_i32_b64 s8, s[2:3]1260; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v4, s01261; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v5, s11262; GFX1164DAGISEL-NEXT: v_readlane_b32 s4, v2, s81263; GFX1164DAGISEL-NEXT: v_readlane_b32 s5, v3, s81264; GFX1164DAGISEL-NEXT: v_cmp_gt_u64_e32 vcc, s[4:5], v[4:5]1265; GFX1164DAGISEL-NEXT: s_and_b64 s[6:7], vcc, s[2:3]1266; GFX1164DAGISEL-NEXT: s_bitset0_b64 s[2:3], s81267; GFX1164DAGISEL-NEXT: s_cselect_b64 s[0:1], s[4:5], s[0:1]1268; GFX1164DAGISEL-NEXT: s_cmp_lg_u64 s[2:3], 01269; GFX1164DAGISEL-NEXT: s_cbranch_scc1 .LBB6_11270; GFX1164DAGISEL-NEXT: ; %bb.2:1271; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v3, s11272; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v2, s01273; GFX1164DAGISEL-NEXT: global_store_b64 v[0:1], v[2:3], off1274; GFX1164DAGISEL-NEXT: s_setpc_b64 s[30:31]1275;1276; GFX1164GISEL-LABEL: divergent_value_i64:1277; GFX1164GISEL: ; %bb.0: ; %entry1278; GFX1164GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1279; GFX1164GISEL-NEXT: s_mov_b64 s[0:1], 01280; GFX1164GISEL-NEXT: s_mov_b64 s[2:3], exec1281; GFX1164GISEL-NEXT: .LBB6_1: ; =>This Inner Loop Header: Depth=11282; GFX1164GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)1283; GFX1164GISEL-NEXT: s_ctz_i32_b64 s8, s[2:3]1284; GFX1164GISEL-NEXT: v_mov_b32_e32 v4, s01285; GFX1164GISEL-NEXT: v_mov_b32_e32 v5, s11286; GFX1164GISEL-NEXT: v_readlane_b32 s4, v2, s81287; GFX1164GISEL-NEXT: v_readlane_b32 s5, v3, s81288; GFX1164GISEL-NEXT: v_cmp_gt_u64_e32 vcc, s[4:5], v[4:5]1289; GFX1164GISEL-NEXT: s_and_b64 s[6:7], vcc, s[2:3]1290; GFX1164GISEL-NEXT: s_bitset0_b64 s[2:3], s81291; GFX1164GISEL-NEXT: s_cselect_b64 s[0:1], s[4:5], s[0:1]1292; GFX1164GISEL-NEXT: s_cmp_lg_u64 s[2:3], 01293; GFX1164GISEL-NEXT: s_cbranch_scc1 .LBB6_11294; GFX1164GISEL-NEXT: ; %bb.2:1295; GFX1164GISEL-NEXT: v_mov_b32_e32 v3, s11296; GFX1164GISEL-NEXT: v_mov_b32_e32 v2, s01297; GFX1164GISEL-NEXT: global_store_b64 v[0:1], v[2:3], off1298; GFX1164GISEL-NEXT: s_setpc_b64 s[30:31]1299;1300; GFX1132DAGISEL-LABEL: divergent_value_i64:1301; GFX1132DAGISEL: ; %bb.0: ; %entry1302; GFX1132DAGISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1303; GFX1132DAGISEL-NEXT: s_mov_b64 s[0:1], 01304; GFX1132DAGISEL-NEXT: s_mov_b32 s2, exec_lo1305; GFX1132DAGISEL-NEXT: .LBB6_1: ; =>This Inner Loop Header: Depth=11306; GFX1132DAGISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)1307; GFX1132DAGISEL-NEXT: s_ctz_i32_b32 s3, s21308; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v4, s0 :: v_dual_mov_b32 v5, s11309; GFX1132DAGISEL-NEXT: v_readlane_b32 s4, v2, s31310; GFX1132DAGISEL-NEXT: v_readlane_b32 s5, v3, s31311; GFX1132DAGISEL-NEXT: v_cmp_gt_u64_e32 vcc_lo, s[4:5], v[4:5]1312; GFX1132DAGISEL-NEXT: s_and_b32 s6, vcc_lo, s21313; GFX1132DAGISEL-NEXT: s_bitset0_b32 s2, s31314; GFX1132DAGISEL-NEXT: s_cselect_b64 s[0:1], s[4:5], s[0:1]1315; GFX1132DAGISEL-NEXT: s_cmp_lg_u32 s2, 01316; GFX1132DAGISEL-NEXT: s_cbranch_scc1 .LBB6_11317; GFX1132DAGISEL-NEXT: ; %bb.2:1318; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s01319; GFX1132DAGISEL-NEXT: global_store_b64 v[0:1], v[2:3], off1320; GFX1132DAGISEL-NEXT: s_setpc_b64 s[30:31]1321;1322; GFX1132GISEL-LABEL: divergent_value_i64:1323; GFX1132GISEL: ; %bb.0: ; %entry1324; GFX1132GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1325; GFX1132GISEL-NEXT: s_mov_b64 s[0:1], 01326; GFX1132GISEL-NEXT: s_mov_b32 s2, exec_lo1327; GFX1132GISEL-NEXT: .LBB6_1: ; =>This Inner Loop Header: Depth=11328; GFX1132GISEL-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)1329; GFX1132GISEL-NEXT: s_ctz_i32_b32 s3, s21330; GFX1132GISEL-NEXT: v_dual_mov_b32 v4, s0 :: v_dual_mov_b32 v5, s11331; GFX1132GISEL-NEXT: v_readlane_b32 s4, v2, s31332; GFX1132GISEL-NEXT: v_readlane_b32 s5, v3, s31333; GFX1132GISEL-NEXT: v_cmp_gt_u64_e32 vcc_lo, s[4:5], v[4:5]1334; GFX1132GISEL-NEXT: s_and_b32 s6, vcc_lo, s21335; GFX1132GISEL-NEXT: s_bitset0_b32 s2, s31336; GFX1132GISEL-NEXT: s_cselect_b64 s[0:1], s[4:5], s[0:1]1337; GFX1132GISEL-NEXT: s_cmp_lg_u32 s2, 01338; GFX1132GISEL-NEXT: s_cbranch_scc1 .LBB6_11339; GFX1132GISEL-NEXT: ; %bb.2:1340; GFX1132GISEL-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s01341; GFX1132GISEL-NEXT: global_store_b64 v[0:1], v[2:3], off1342; GFX1132GISEL-NEXT: s_setpc_b64 s[30:31]1343entry:1344 %result = call i64 @llvm.amdgcn.wave.reduce.umax.i64(i64 %id.x, i32 1)1345 store i64 %result, ptr addrspace(1) %out1346 ret void1347}1348 1349define amdgpu_kernel void @divergent_cfg_i64(ptr addrspace(1) %out, i64 %in, i64 %in2) {1350; GFX8DAGISEL-LABEL: divergent_cfg_i64:1351; GFX8DAGISEL: ; %bb.0: ; %entry1352; GFX8DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241353; GFX8DAGISEL-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x341354; GFX8DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v01355; GFX8DAGISEL-NEXT: s_and_saveexec_b64 s[6:7], vcc1356; GFX8DAGISEL-NEXT: s_xor_b64 s[6:7], exec, s[6:7]1357; GFX8DAGISEL-NEXT: s_or_saveexec_b64 s[6:7], s[6:7]1358; GFX8DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1359; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s21360; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s31361; GFX8DAGISEL-NEXT: s_xor_b64 exec, exec, s[6:7]1362; GFX8DAGISEL-NEXT: ; %bb.1: ; %if1363; GFX8DAGISEL-NEXT: v_mov_b32_e32 v0, s41364; GFX8DAGISEL-NEXT: v_mov_b32_e32 v1, s51365; GFX8DAGISEL-NEXT: ; %bb.2: ; %endif1366; GFX8DAGISEL-NEXT: s_or_b64 exec, exec, s[6:7]1367; GFX8DAGISEL-NEXT: v_mov_b32_e32 v2, s01368; GFX8DAGISEL-NEXT: v_mov_b32_e32 v3, s11369; GFX8DAGISEL-NEXT: flat_store_dwordx2 v[2:3], v[0:1]1370; GFX8DAGISEL-NEXT: s_endpgm1371;1372; GFX8GISEL-LABEL: divergent_cfg_i64:1373; GFX8GISEL: ; %bb.0: ; %entry1374; GFX8GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241375; GFX8GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v01376; GFX8GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71377; GFX8GISEL-NEXT: s_and_saveexec_b64 s[8:9], vcc1378; GFX8GISEL-NEXT: s_xor_b64 s[8:9], exec, s[8:9]1379; GFX8GISEL-NEXT: s_cbranch_execz .LBB7_21380; GFX8GISEL-NEXT: ; %bb.1: ; %else1381; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)1382; GFX8GISEL-NEXT: s_mov_b64 s[6:7], s[2:3]1383; GFX8GISEL-NEXT: .LBB7_2: ; %Flow1384; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)1385; GFX8GISEL-NEXT: s_andn2_saveexec_b64 s[2:3], s[8:9]1386; GFX8GISEL-NEXT: s_cbranch_execz .LBB7_41387; GFX8GISEL-NEXT: ; %bb.3: ; %if1388; GFX8GISEL-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x341389; GFX8GISEL-NEXT: s_waitcnt lgkmcnt(0)1390; GFX8GISEL-NEXT: s_mov_b64 s[6:7], s[4:5]1391; GFX8GISEL-NEXT: .LBB7_4: ; %endif1392; GFX8GISEL-NEXT: s_or_b64 exec, exec, s[2:3]1393; GFX8GISEL-NEXT: v_mov_b32_e32 v0, s61394; GFX8GISEL-NEXT: v_mov_b32_e32 v3, s11395; GFX8GISEL-NEXT: v_mov_b32_e32 v1, s71396; GFX8GISEL-NEXT: v_mov_b32_e32 v2, s01397; GFX8GISEL-NEXT: flat_store_dwordx2 v[2:3], v[0:1]1398; GFX8GISEL-NEXT: s_endpgm1399;1400; GFX9DAGISEL-LABEL: divergent_cfg_i64:1401; GFX9DAGISEL: ; %bb.0: ; %entry1402; GFX9DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241403; GFX9DAGISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341404; GFX9DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v01405; GFX9DAGISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc1406; GFX9DAGISEL-NEXT: s_xor_b64 s[4:5], exec, s[4:5]1407; GFX9DAGISEL-NEXT: s_or_saveexec_b64 s[4:5], s[4:5]1408; GFX9DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1409; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, s21410; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, s31411; GFX9DAGISEL-NEXT: s_xor_b64 exec, exec, s[4:5]1412; GFX9DAGISEL-NEXT: ; %bb.1: ; %if1413; GFX9DAGISEL-NEXT: v_mov_b32_e32 v0, s61414; GFX9DAGISEL-NEXT: v_mov_b32_e32 v1, s71415; GFX9DAGISEL-NEXT: ; %bb.2: ; %endif1416; GFX9DAGISEL-NEXT: s_or_b64 exec, exec, s[4:5]1417; GFX9DAGISEL-NEXT: v_mov_b32_e32 v2, 01418; GFX9DAGISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1419; GFX9DAGISEL-NEXT: s_endpgm1420;1421; GFX9GISEL-LABEL: divergent_cfg_i64:1422; GFX9GISEL: ; %bb.0: ; %entry1423; GFX9GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241424; GFX9GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v01425; GFX9GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71426; GFX9GISEL-NEXT: s_and_saveexec_b64 s[8:9], vcc1427; GFX9GISEL-NEXT: s_xor_b64 s[8:9], exec, s[8:9]1428; GFX9GISEL-NEXT: s_cbranch_execz .LBB7_21429; GFX9GISEL-NEXT: ; %bb.1: ; %else1430; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)1431; GFX9GISEL-NEXT: s_mov_b64 s[6:7], s[2:3]1432; GFX9GISEL-NEXT: .LBB7_2: ; %Flow1433; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)1434; GFX9GISEL-NEXT: s_andn2_saveexec_b64 s[2:3], s[8:9]1435; GFX9GISEL-NEXT: s_cbranch_execz .LBB7_41436; GFX9GISEL-NEXT: ; %bb.3: ; %if1437; GFX9GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341438; GFX9GISEL-NEXT: s_waitcnt lgkmcnt(0)1439; GFX9GISEL-NEXT: s_mov_b64 s[6:7], s[6:7]1440; GFX9GISEL-NEXT: .LBB7_4: ; %endif1441; GFX9GISEL-NEXT: s_or_b64 exec, exec, s[2:3]1442; GFX9GISEL-NEXT: v_mov_b32_e32 v0, s61443; GFX9GISEL-NEXT: v_mov_b32_e32 v1, s71444; GFX9GISEL-NEXT: v_mov_b32_e32 v2, 01445; GFX9GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1446; GFX9GISEL-NEXT: s_endpgm1447;1448; GFX1064DAGISEL-LABEL: divergent_cfg_i64:1449; GFX1064DAGISEL: ; %bb.0: ; %entry1450; GFX1064DAGISEL-NEXT: s_clause 0x11451; GFX1064DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241452; GFX1064DAGISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341453; GFX1064DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc, 15, v01454; GFX1064DAGISEL-NEXT: s_and_saveexec_b64 s[4:5], vcc1455; GFX1064DAGISEL-NEXT: s_xor_b64 s[4:5], exec, s[4:5]1456; GFX1064DAGISEL-NEXT: s_or_saveexec_b64 s[4:5], s[4:5]1457; GFX1064DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1458; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, s21459; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, s31460; GFX1064DAGISEL-NEXT: s_xor_b64 exec, exec, s[4:5]1461; GFX1064DAGISEL-NEXT: ; %bb.1: ; %if1462; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v0, s61463; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v1, s71464; GFX1064DAGISEL-NEXT: ; %bb.2: ; %endif1465; GFX1064DAGISEL-NEXT: s_or_b64 exec, exec, s[4:5]1466; GFX1064DAGISEL-NEXT: v_mov_b32_e32 v2, 01467; GFX1064DAGISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1468; GFX1064DAGISEL-NEXT: s_endpgm1469;1470; GFX1064GISEL-LABEL: divergent_cfg_i64:1471; GFX1064GISEL: ; %bb.0: ; %entry1472; GFX1064GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241473; GFX1064GISEL-NEXT: v_cmp_le_u32_e32 vcc, 16, v01474; GFX1064GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71475; GFX1064GISEL-NEXT: s_and_saveexec_b64 s[8:9], vcc1476; GFX1064GISEL-NEXT: s_xor_b64 s[8:9], exec, s[8:9]1477; GFX1064GISEL-NEXT: s_cbranch_execz .LBB7_21478; GFX1064GISEL-NEXT: ; %bb.1: ; %else1479; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)1480; GFX1064GISEL-NEXT: s_mov_b64 s[6:7], s[2:3]1481; GFX1064GISEL-NEXT: .LBB7_2: ; %Flow1482; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)1483; GFX1064GISEL-NEXT: s_andn2_saveexec_b64 s[2:3], s[8:9]1484; GFX1064GISEL-NEXT: s_cbranch_execz .LBB7_41485; GFX1064GISEL-NEXT: ; %bb.3: ; %if1486; GFX1064GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341487; GFX1064GISEL-NEXT: s_waitcnt lgkmcnt(0)1488; GFX1064GISEL-NEXT: s_mov_b64 s[6:7], s[6:7]1489; GFX1064GISEL-NEXT: .LBB7_4: ; %endif1490; GFX1064GISEL-NEXT: s_or_b64 exec, exec, s[2:3]1491; GFX1064GISEL-NEXT: v_mov_b32_e32 v0, s61492; GFX1064GISEL-NEXT: v_mov_b32_e32 v1, s71493; GFX1064GISEL-NEXT: v_mov_b32_e32 v2, 01494; GFX1064GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1495; GFX1064GISEL-NEXT: s_endpgm1496;1497; GFX1032DAGISEL-LABEL: divergent_cfg_i64:1498; GFX1032DAGISEL: ; %bb.0: ; %entry1499; GFX1032DAGISEL-NEXT: s_clause 0x11500; GFX1032DAGISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241501; GFX1032DAGISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341502; GFX1032DAGISEL-NEXT: v_cmp_lt_u32_e32 vcc_lo, 15, v01503; GFX1032DAGISEL-NEXT: s_and_saveexec_b32 s4, vcc_lo1504; GFX1032DAGISEL-NEXT: s_xor_b32 s4, exec_lo, s41505; GFX1032DAGISEL-NEXT: s_or_saveexec_b32 s4, s41506; GFX1032DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1507; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, s21508; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, s31509; GFX1032DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s41510; GFX1032DAGISEL-NEXT: ; %bb.1: ; %if1511; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v0, s61512; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v1, s71513; GFX1032DAGISEL-NEXT: ; %bb.2: ; %endif1514; GFX1032DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s41515; GFX1032DAGISEL-NEXT: v_mov_b32_e32 v2, 01516; GFX1032DAGISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1517; GFX1032DAGISEL-NEXT: s_endpgm1518;1519; GFX1032GISEL-LABEL: divergent_cfg_i64:1520; GFX1032GISEL: ; %bb.0: ; %entry1521; GFX1032GISEL-NEXT: s_load_dwordx4 s[0:3], s[4:5], 0x241522; GFX1032GISEL-NEXT: v_cmp_le_u32_e32 vcc_lo, 16, v01523; GFX1032GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71524; GFX1032GISEL-NEXT: s_and_saveexec_b32 s8, vcc_lo1525; GFX1032GISEL-NEXT: s_xor_b32 s8, exec_lo, s81526; GFX1032GISEL-NEXT: s_cbranch_execz .LBB7_21527; GFX1032GISEL-NEXT: ; %bb.1: ; %else1528; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)1529; GFX1032GISEL-NEXT: s_mov_b64 s[6:7], s[2:3]1530; GFX1032GISEL-NEXT: .LBB7_2: ; %Flow1531; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)1532; GFX1032GISEL-NEXT: s_andn2_saveexec_b32 s2, s81533; GFX1032GISEL-NEXT: s_cbranch_execz .LBB7_41534; GFX1032GISEL-NEXT: ; %bb.3: ; %if1535; GFX1032GISEL-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x341536; GFX1032GISEL-NEXT: s_waitcnt lgkmcnt(0)1537; GFX1032GISEL-NEXT: s_mov_b64 s[6:7], s[6:7]1538; GFX1032GISEL-NEXT: .LBB7_4: ; %endif1539; GFX1032GISEL-NEXT: s_or_b32 exec_lo, exec_lo, s21540; GFX1032GISEL-NEXT: v_mov_b32_e32 v0, s61541; GFX1032GISEL-NEXT: v_mov_b32_e32 v1, s71542; GFX1032GISEL-NEXT: v_mov_b32_e32 v2, 01543; GFX1032GISEL-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1544; GFX1032GISEL-NEXT: s_endpgm1545;1546; GFX1164DAGISEL-LABEL: divergent_cfg_i64:1547; GFX1164DAGISEL: ; %bb.0: ; %entry1548; GFX1164DAGISEL-NEXT: s_clause 0x11549; GFX1164DAGISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241550; GFX1164DAGISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x341551; GFX1164DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v01552; GFX1164DAGISEL-NEXT: s_mov_b64 s[6:7], exec1553; GFX1164DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)1554; GFX1164DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v01555; GFX1164DAGISEL-NEXT: s_xor_b64 s[6:7], exec, s[6:7]1556; GFX1164DAGISEL-NEXT: s_or_saveexec_b64 s[6:7], s[6:7]1557; GFX1164DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1558; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, s21559; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s31560; GFX1164DAGISEL-NEXT: s_xor_b64 exec, exec, s[6:7]1561; GFX1164DAGISEL-NEXT: ; %bb.1: ; %if1562; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v0, s41563; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v1, s51564; GFX1164DAGISEL-NEXT: ; %bb.2: ; %endif1565; GFX1164DAGISEL-NEXT: s_or_b64 exec, exec, s[6:7]1566; GFX1164DAGISEL-NEXT: v_mov_b32_e32 v2, 01567; GFX1164DAGISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1568; GFX1164DAGISEL-NEXT: s_endpgm1569;1570; GFX1164GISEL-LABEL: divergent_cfg_i64:1571; GFX1164GISEL: ; %bb.0: ; %entry1572; GFX1164GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241573; GFX1164GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v01574; GFX1164GISEL-NEXT: s_mov_b64 s[8:9], exec1575; GFX1164GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71576; GFX1164GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)1577; GFX1164GISEL-NEXT: v_cmpx_le_u32_e32 16, v01578; GFX1164GISEL-NEXT: s_xor_b64 s[8:9], exec, s[8:9]1579; GFX1164GISEL-NEXT: s_cbranch_execz .LBB7_21580; GFX1164GISEL-NEXT: ; %bb.1: ; %else1581; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)1582; GFX1164GISEL-NEXT: s_mov_b64 s[6:7], s[2:3]1583; GFX1164GISEL-NEXT: .LBB7_2: ; %Flow1584; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)1585; GFX1164GISEL-NEXT: s_and_not1_saveexec_b64 s[2:3], s[8:9]1586; GFX1164GISEL-NEXT: s_cbranch_execz .LBB7_41587; GFX1164GISEL-NEXT: ; %bb.3: ; %if1588; GFX1164GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x341589; GFX1164GISEL-NEXT: s_waitcnt lgkmcnt(0)1590; GFX1164GISEL-NEXT: s_mov_b64 s[6:7], s[4:5]1591; GFX1164GISEL-NEXT: .LBB7_4: ; %endif1592; GFX1164GISEL-NEXT: s_or_b64 exec, exec, s[2:3]1593; GFX1164GISEL-NEXT: v_mov_b32_e32 v0, s61594; GFX1164GISEL-NEXT: v_mov_b32_e32 v1, s71595; GFX1164GISEL-NEXT: v_mov_b32_e32 v2, 01596; GFX1164GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1597; GFX1164GISEL-NEXT: s_endpgm1598;1599; GFX1132DAGISEL-LABEL: divergent_cfg_i64:1600; GFX1132DAGISEL: ; %bb.0: ; %entry1601; GFX1132DAGISEL-NEXT: s_clause 0x11602; GFX1132DAGISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241603; GFX1132DAGISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x341604; GFX1132DAGISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v01605; GFX1132DAGISEL-NEXT: s_mov_b32 s6, exec_lo1606; GFX1132DAGISEL-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)1607; GFX1132DAGISEL-NEXT: v_cmpx_lt_u32_e32 15, v01608; GFX1132DAGISEL-NEXT: s_xor_b32 s6, exec_lo, s61609; GFX1132DAGISEL-NEXT: s_or_saveexec_b32 s6, s61610; GFX1132DAGISEL-NEXT: s_waitcnt lgkmcnt(0)1611; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s31612; GFX1132DAGISEL-NEXT: s_xor_b32 exec_lo, exec_lo, s61613; GFX1132DAGISEL-NEXT: ; %bb.1: ; %if1614; GFX1132DAGISEL-NEXT: v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v1, s51615; GFX1132DAGISEL-NEXT: ; %bb.2: ; %endif1616; GFX1132DAGISEL-NEXT: s_or_b32 exec_lo, exec_lo, s61617; GFX1132DAGISEL-NEXT: v_mov_b32_e32 v2, 01618; GFX1132DAGISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1619; GFX1132DAGISEL-NEXT: s_endpgm1620;1621; GFX1132GISEL-LABEL: divergent_cfg_i64:1622; GFX1132GISEL: ; %bb.0: ; %entry1623; GFX1132GISEL-NEXT: s_load_b128 s[0:3], s[4:5], 0x241624; GFX1132GISEL-NEXT: v_and_b32_e32 v0, 0x3ff, v01625; GFX1132GISEL-NEXT: s_mov_b32 s8, exec_lo1626; GFX1132GISEL-NEXT: ; implicit-def: $sgpr6_sgpr71627; GFX1132GISEL-NEXT: s_delay_alu instid0(VALU_DEP_1)1628; GFX1132GISEL-NEXT: v_cmpx_le_u32_e32 16, v01629; GFX1132GISEL-NEXT: s_xor_b32 s8, exec_lo, s81630; GFX1132GISEL-NEXT: s_cbranch_execz .LBB7_21631; GFX1132GISEL-NEXT: ; %bb.1: ; %else1632; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)1633; GFX1132GISEL-NEXT: s_mov_b64 s[6:7], s[2:3]1634; GFX1132GISEL-NEXT: .LBB7_2: ; %Flow1635; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)1636; GFX1132GISEL-NEXT: s_and_not1_saveexec_b32 s2, s81637; GFX1132GISEL-NEXT: s_cbranch_execz .LBB7_41638; GFX1132GISEL-NEXT: ; %bb.3: ; %if1639; GFX1132GISEL-NEXT: s_load_b64 s[4:5], s[4:5], 0x341640; GFX1132GISEL-NEXT: s_waitcnt lgkmcnt(0)1641; GFX1132GISEL-NEXT: s_mov_b64 s[6:7], s[4:5]1642; GFX1132GISEL-NEXT: .LBB7_4: ; %endif1643; GFX1132GISEL-NEXT: s_or_b32 exec_lo, exec_lo, s21644; GFX1132GISEL-NEXT: v_dual_mov_b32 v0, s6 :: v_dual_mov_b32 v1, s71645; GFX1132GISEL-NEXT: v_mov_b32_e32 v2, 01646; GFX1132GISEL-NEXT: global_store_b64 v2, v[0:1], s[0:1]1647; GFX1132GISEL-NEXT: s_endpgm1648entry:1649 %tid = call i32 @llvm.amdgcn.workitem.id.x()1650 %d_cmp = icmp ult i32 %tid, 161651 br i1 %d_cmp, label %if, label %else1652 1653if:1654 %reducedValTid = call i64 @llvm.amdgcn.wave.reduce.umax.i64(i64 %in2, i32 1)1655 br label %endif1656 1657else:1658 %reducedValIn = call i64 @llvm.amdgcn.wave.reduce.umax.i64(i64 %in, i32 1)1659 br label %endif1660 1661endif:1662 %combine = phi i64 [%reducedValTid, %if], [%reducedValIn, %else]1663 store i64 %combine, ptr addrspace(1) %out1664 ret void1665}1666