brintos

brintos / llvm-project-archived public Read only

0
0
Text · 65.7 KiB · f39dd86 Raw
1482 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 15define amdgpu_kernel void @uniform_value(ptr addrspace(1) %out, i32 %in) {16; GFX8DAGISEL-LABEL: uniform_value:17; GFX8DAGISEL:       ; %bb.0: ; %entry18; GFX8DAGISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2419; GFX8DAGISEL-NEXT:    s_load_dword s2, s[4:5], 0x2c20; GFX8DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)21; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v0, s022; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v1, s123; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v2, s224; GFX8DAGISEL-NEXT:    flat_store_dword v[0:1], v225; GFX8DAGISEL-NEXT:    s_endpgm26;27; GFX8GISEL-LABEL: uniform_value:28; GFX8GISEL:       ; %bb.0: ; %entry29; GFX8GISEL-NEXT:    s_load_dword s2, s[4:5], 0x2c30; GFX8GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2431; GFX8GISEL-NEXT:    s_waitcnt lgkmcnt(0)32; GFX8GISEL-NEXT:    v_mov_b32_e32 v2, s233; GFX8GISEL-NEXT:    v_mov_b32_e32 v0, s034; GFX8GISEL-NEXT:    v_mov_b32_e32 v1, s135; GFX8GISEL-NEXT:    flat_store_dword v[0:1], v236; GFX8GISEL-NEXT:    s_endpgm37;38; GFX9DAGISEL-LABEL: uniform_value:39; GFX9DAGISEL:       ; %bb.0: ; %entry40; GFX9DAGISEL-NEXT:    s_load_dword s2, s[4:5], 0x2c41; GFX9DAGISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2442; GFX9DAGISEL-NEXT:    v_mov_b32_e32 v0, 043; GFX9DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)44; GFX9DAGISEL-NEXT:    v_mov_b32_e32 v1, s245; GFX9DAGISEL-NEXT:    global_store_dword v0, v1, s[0:1]46; GFX9DAGISEL-NEXT:    s_endpgm47;48; GFX9GISEL-LABEL: uniform_value:49; GFX9GISEL:       ; %bb.0: ; %entry50; GFX9GISEL-NEXT:    s_load_dword s2, s[4:5], 0x2c51; GFX9GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2452; GFX9GISEL-NEXT:    v_mov_b32_e32 v1, 053; GFX9GISEL-NEXT:    s_waitcnt lgkmcnt(0)54; GFX9GISEL-NEXT:    v_mov_b32_e32 v0, s255; GFX9GISEL-NEXT:    global_store_dword v1, v0, s[0:1]56; GFX9GISEL-NEXT:    s_endpgm57;58; GFX10DAGISEL-LABEL: uniform_value:59; GFX10DAGISEL:       ; %bb.0: ; %entry60; GFX10DAGISEL-NEXT:    s_clause 0x161; GFX10DAGISEL-NEXT:    s_load_dword s2, s[4:5], 0x2c62; GFX10DAGISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2463; GFX10DAGISEL-NEXT:    v_mov_b32_e32 v0, 064; GFX10DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)65; GFX10DAGISEL-NEXT:    v_mov_b32_e32 v1, s266; GFX10DAGISEL-NEXT:    global_store_dword v0, v1, s[0:1]67; GFX10DAGISEL-NEXT:    s_endpgm68;69; GFX10GISEL-LABEL: uniform_value:70; GFX10GISEL:       ; %bb.0: ; %entry71; GFX10GISEL-NEXT:    s_clause 0x172; GFX10GISEL-NEXT:    s_load_dword s2, s[4:5], 0x2c73; GFX10GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2474; GFX10GISEL-NEXT:    v_mov_b32_e32 v1, 075; GFX10GISEL-NEXT:    s_waitcnt lgkmcnt(0)76; GFX10GISEL-NEXT:    v_mov_b32_e32 v0, s277; GFX10GISEL-NEXT:    global_store_dword v1, v0, s[0:1]78; GFX10GISEL-NEXT:    s_endpgm79;80; GFX1164DAGISEL-LABEL: uniform_value:81; GFX1164DAGISEL:       ; %bb.0: ; %entry82; GFX1164DAGISEL-NEXT:    s_clause 0x183; GFX1164DAGISEL-NEXT:    s_load_b32 s2, s[4:5], 0x2c84; GFX1164DAGISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x2485; GFX1164DAGISEL-NEXT:    v_mov_b32_e32 v0, 086; GFX1164DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)87; GFX1164DAGISEL-NEXT:    v_mov_b32_e32 v1, s288; GFX1164DAGISEL-NEXT:    global_store_b32 v0, v1, s[0:1]89; GFX1164DAGISEL-NEXT:    s_endpgm90;91; GFX1164GISEL-LABEL: uniform_value:92; GFX1164GISEL:       ; %bb.0: ; %entry93; GFX1164GISEL-NEXT:    s_clause 0x194; GFX1164GISEL-NEXT:    s_load_b32 s2, s[4:5], 0x2c95; GFX1164GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x2496; GFX1164GISEL-NEXT:    v_mov_b32_e32 v1, 097; GFX1164GISEL-NEXT:    s_waitcnt lgkmcnt(0)98; GFX1164GISEL-NEXT:    v_mov_b32_e32 v0, s299; GFX1164GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]100; GFX1164GISEL-NEXT:    s_endpgm101;102; GFX1132DAGISEL-LABEL: uniform_value:103; GFX1132DAGISEL:       ; %bb.0: ; %entry104; GFX1132DAGISEL-NEXT:    s_clause 0x1105; GFX1132DAGISEL-NEXT:    s_load_b32 s2, s[4:5], 0x2c106; GFX1132DAGISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24107; GFX1132DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)108; GFX1132DAGISEL-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2109; GFX1132DAGISEL-NEXT:    global_store_b32 v0, v1, s[0:1]110; GFX1132DAGISEL-NEXT:    s_endpgm111;112; GFX1132GISEL-LABEL: uniform_value:113; GFX1132GISEL:       ; %bb.0: ; %entry114; GFX1132GISEL-NEXT:    s_clause 0x1115; GFX1132GISEL-NEXT:    s_load_b32 s2, s[4:5], 0x2c116; GFX1132GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24117; GFX1132GISEL-NEXT:    s_waitcnt lgkmcnt(0)118; GFX1132GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2119; GFX1132GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]120; GFX1132GISEL-NEXT:    s_endpgm121entry:122  %result = call i32 @llvm.amdgcn.wave.reduce.and.i32(i32 %in, i32 1)123  store i32 %result, ptr addrspace(1) %out124  ret void125}126 127define amdgpu_kernel void @divergent_value(ptr addrspace(1) %out) {128; GFX8DAGISEL-LABEL: divergent_value:129; GFX8DAGISEL:       ; %bb.0: ; %entry130; GFX8DAGISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24131; GFX8DAGISEL-NEXT:    s_mov_b64 s[2:3], exec132; GFX8DAGISEL-NEXT:    s_mov_b32 s4, -1133; GFX8DAGISEL-NEXT:  .LBB1_1: ; =>This Inner Loop Header: Depth=1134; GFX8DAGISEL-NEXT:    s_ff1_i32_b64 s5, s[2:3]135; GFX8DAGISEL-NEXT:    v_readlane_b32 s6, v0, s5136; GFX8DAGISEL-NEXT:    s_bitset0_b64 s[2:3], s5137; GFX8DAGISEL-NEXT:    s_and_b32 s4, s4, s6138; GFX8DAGISEL-NEXT:    s_cmp_lg_u64 s[2:3], 0139; GFX8DAGISEL-NEXT:    s_cbranch_scc1 .LBB1_1140; GFX8DAGISEL-NEXT:  ; %bb.2:141; GFX8DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)142; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v0, s0143; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v1, s1144; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v2, s4145; GFX8DAGISEL-NEXT:    flat_store_dword v[0:1], v2146; GFX8DAGISEL-NEXT:    s_endpgm147;148; GFX8GISEL-LABEL: divergent_value:149; GFX8GISEL:       ; %bb.0: ; %entry150; GFX8GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24151; GFX8GISEL-NEXT:    s_mov_b64 s[2:3], exec152; GFX8GISEL-NEXT:    s_mov_b32 s4, -1153; GFX8GISEL-NEXT:  .LBB1_1: ; =>This Inner Loop Header: Depth=1154; GFX8GISEL-NEXT:    s_ff1_i32_b64 s5, s[2:3]155; GFX8GISEL-NEXT:    v_readlane_b32 s6, v0, s5156; GFX8GISEL-NEXT:    s_bitset0_b64 s[2:3], s5157; GFX8GISEL-NEXT:    s_and_b32 s4, s4, s6158; GFX8GISEL-NEXT:    s_cmp_lg_u64 s[2:3], 0159; GFX8GISEL-NEXT:    s_cbranch_scc1 .LBB1_1160; GFX8GISEL-NEXT:  ; %bb.2:161; GFX8GISEL-NEXT:    s_waitcnt lgkmcnt(0)162; GFX8GISEL-NEXT:    v_mov_b32_e32 v0, s0163; GFX8GISEL-NEXT:    v_mov_b32_e32 v2, s4164; GFX8GISEL-NEXT:    v_mov_b32_e32 v1, s1165; GFX8GISEL-NEXT:    flat_store_dword v[0:1], v2166; GFX8GISEL-NEXT:    s_endpgm167;168; GFX9DAGISEL-LABEL: divergent_value:169; GFX9DAGISEL:       ; %bb.0: ; %entry170; GFX9DAGISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24171; GFX9DAGISEL-NEXT:    v_mov_b32_e32 v1, 0172; GFX9DAGISEL-NEXT:    s_mov_b64 s[2:3], exec173; GFX9DAGISEL-NEXT:    s_mov_b32 s4, -1174; GFX9DAGISEL-NEXT:  .LBB1_1: ; =>This Inner Loop Header: Depth=1175; GFX9DAGISEL-NEXT:    s_ff1_i32_b64 s5, s[2:3]176; GFX9DAGISEL-NEXT:    v_readlane_b32 s6, v0, s5177; GFX9DAGISEL-NEXT:    s_bitset0_b64 s[2:3], s5178; GFX9DAGISEL-NEXT:    s_and_b32 s4, s4, s6179; GFX9DAGISEL-NEXT:    s_cmp_lg_u64 s[2:3], 0180; GFX9DAGISEL-NEXT:    s_cbranch_scc1 .LBB1_1181; GFX9DAGISEL-NEXT:  ; %bb.2:182; GFX9DAGISEL-NEXT:    v_mov_b32_e32 v0, s4183; GFX9DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)184; GFX9DAGISEL-NEXT:    global_store_dword v1, v0, s[0:1]185; GFX9DAGISEL-NEXT:    s_endpgm186;187; GFX9GISEL-LABEL: divergent_value:188; GFX9GISEL:       ; %bb.0: ; %entry189; GFX9GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24190; GFX9GISEL-NEXT:    s_mov_b64 s[2:3], exec191; GFX9GISEL-NEXT:    s_mov_b32 s4, -1192; GFX9GISEL-NEXT:  .LBB1_1: ; =>This Inner Loop Header: Depth=1193; GFX9GISEL-NEXT:    s_ff1_i32_b64 s5, s[2:3]194; GFX9GISEL-NEXT:    v_readlane_b32 s6, v0, s5195; GFX9GISEL-NEXT:    s_bitset0_b64 s[2:3], s5196; GFX9GISEL-NEXT:    s_and_b32 s4, s4, s6197; GFX9GISEL-NEXT:    s_cmp_lg_u64 s[2:3], 0198; GFX9GISEL-NEXT:    s_cbranch_scc1 .LBB1_1199; GFX9GISEL-NEXT:  ; %bb.2:200; GFX9GISEL-NEXT:    v_mov_b32_e32 v0, s4201; GFX9GISEL-NEXT:    v_mov_b32_e32 v1, 0202; GFX9GISEL-NEXT:    s_waitcnt lgkmcnt(0)203; GFX9GISEL-NEXT:    global_store_dword v1, v0, s[0:1]204; GFX9GISEL-NEXT:    s_endpgm205;206; GFX1064DAGISEL-LABEL: divergent_value:207; GFX1064DAGISEL:       ; %bb.0: ; %entry208; GFX1064DAGISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24209; GFX1064DAGISEL-NEXT:    v_mov_b32_e32 v1, 0210; GFX1064DAGISEL-NEXT:    s_mov_b64 s[2:3], exec211; GFX1064DAGISEL-NEXT:    s_mov_b32 s4, -1212; GFX1064DAGISEL-NEXT:  .LBB1_1: ; =>This Inner Loop Header: Depth=1213; GFX1064DAGISEL-NEXT:    s_ff1_i32_b64 s5, s[2:3]214; GFX1064DAGISEL-NEXT:    v_readlane_b32 s6, v0, s5215; GFX1064DAGISEL-NEXT:    s_bitset0_b64 s[2:3], s5216; GFX1064DAGISEL-NEXT:    s_and_b32 s4, s4, s6217; GFX1064DAGISEL-NEXT:    s_cmp_lg_u64 s[2:3], 0218; GFX1064DAGISEL-NEXT:    s_cbranch_scc1 .LBB1_1219; GFX1064DAGISEL-NEXT:  ; %bb.2:220; GFX1064DAGISEL-NEXT:    v_mov_b32_e32 v0, s4221; GFX1064DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)222; GFX1064DAGISEL-NEXT:    global_store_dword v1, v0, s[0:1]223; GFX1064DAGISEL-NEXT:    s_endpgm224;225; GFX1064GISEL-LABEL: divergent_value:226; GFX1064GISEL:       ; %bb.0: ; %entry227; GFX1064GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24228; GFX1064GISEL-NEXT:    s_mov_b64 s[2:3], exec229; GFX1064GISEL-NEXT:    s_mov_b32 s4, -1230; GFX1064GISEL-NEXT:  .LBB1_1: ; =>This Inner Loop Header: Depth=1231; GFX1064GISEL-NEXT:    s_ff1_i32_b64 s5, s[2:3]232; GFX1064GISEL-NEXT:    v_readlane_b32 s6, v0, s5233; GFX1064GISEL-NEXT:    s_bitset0_b64 s[2:3], s5234; GFX1064GISEL-NEXT:    s_and_b32 s4, s4, s6235; GFX1064GISEL-NEXT:    s_cmp_lg_u64 s[2:3], 0236; GFX1064GISEL-NEXT:    s_cbranch_scc1 .LBB1_1237; GFX1064GISEL-NEXT:  ; %bb.2:238; GFX1064GISEL-NEXT:    v_mov_b32_e32 v0, s4239; GFX1064GISEL-NEXT:    v_mov_b32_e32 v1, 0240; GFX1064GISEL-NEXT:    s_waitcnt lgkmcnt(0)241; GFX1064GISEL-NEXT:    global_store_dword v1, v0, s[0:1]242; GFX1064GISEL-NEXT:    s_endpgm243;244; GFX1032DAGISEL-LABEL: divergent_value:245; GFX1032DAGISEL:       ; %bb.0: ; %entry246; GFX1032DAGISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24247; GFX1032DAGISEL-NEXT:    v_mov_b32_e32 v1, 0248; GFX1032DAGISEL-NEXT:    s_mov_b32 s3, exec_lo249; GFX1032DAGISEL-NEXT:    s_mov_b32 s2, -1250; GFX1032DAGISEL-NEXT:  .LBB1_1: ; =>This Inner Loop Header: Depth=1251; GFX1032DAGISEL-NEXT:    s_ff1_i32_b32 s4, s3252; GFX1032DAGISEL-NEXT:    v_readlane_b32 s5, v0, s4253; GFX1032DAGISEL-NEXT:    s_bitset0_b32 s3, s4254; GFX1032DAGISEL-NEXT:    s_and_b32 s2, s2, s5255; GFX1032DAGISEL-NEXT:    s_cmp_lg_u32 s3, 0256; GFX1032DAGISEL-NEXT:    s_cbranch_scc1 .LBB1_1257; GFX1032DAGISEL-NEXT:  ; %bb.2:258; GFX1032DAGISEL-NEXT:    v_mov_b32_e32 v0, s2259; GFX1032DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)260; GFX1032DAGISEL-NEXT:    global_store_dword v1, v0, s[0:1]261; GFX1032DAGISEL-NEXT:    s_endpgm262;263; GFX1032GISEL-LABEL: divergent_value:264; GFX1032GISEL:       ; %bb.0: ; %entry265; GFX1032GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24266; GFX1032GISEL-NEXT:    s_mov_b32 s3, exec_lo267; GFX1032GISEL-NEXT:    s_mov_b32 s2, -1268; GFX1032GISEL-NEXT:  .LBB1_1: ; =>This Inner Loop Header: Depth=1269; GFX1032GISEL-NEXT:    s_ff1_i32_b32 s4, s3270; GFX1032GISEL-NEXT:    v_readlane_b32 s5, v0, s4271; GFX1032GISEL-NEXT:    s_bitset0_b32 s3, s4272; GFX1032GISEL-NEXT:    s_and_b32 s2, s2, s5273; GFX1032GISEL-NEXT:    s_cmp_lg_u32 s3, 0274; GFX1032GISEL-NEXT:    s_cbranch_scc1 .LBB1_1275; GFX1032GISEL-NEXT:  ; %bb.2:276; GFX1032GISEL-NEXT:    v_mov_b32_e32 v0, s2277; GFX1032GISEL-NEXT:    v_mov_b32_e32 v1, 0278; GFX1032GISEL-NEXT:    s_waitcnt lgkmcnt(0)279; GFX1032GISEL-NEXT:    global_store_dword v1, v0, s[0:1]280; GFX1032GISEL-NEXT:    s_endpgm281;282; GFX1164DAGISEL-LABEL: divergent_value:283; GFX1164DAGISEL:       ; %bb.0: ; %entry284; GFX1164DAGISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24285; GFX1164DAGISEL-NEXT:    v_mov_b32_e32 v1, 0286; GFX1164DAGISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0287; GFX1164DAGISEL-NEXT:    s_mov_b64 s[2:3], exec288; GFX1164DAGISEL-NEXT:    s_mov_b32 s4, -1289; GFX1164DAGISEL-NEXT:  .LBB1_1: ; =>This Inner Loop Header: Depth=1290; GFX1164DAGISEL-NEXT:    s_ctz_i32_b64 s5, s[2:3]291; GFX1164DAGISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)292; GFX1164DAGISEL-NEXT:    v_readlane_b32 s6, v0, s5293; GFX1164DAGISEL-NEXT:    s_bitset0_b64 s[2:3], s5294; GFX1164DAGISEL-NEXT:    s_and_b32 s4, s4, s6295; GFX1164DAGISEL-NEXT:    s_cmp_lg_u64 s[2:3], 0296; GFX1164DAGISEL-NEXT:    s_cbranch_scc1 .LBB1_1297; GFX1164DAGISEL-NEXT:  ; %bb.2:298; GFX1164DAGISEL-NEXT:    v_mov_b32_e32 v0, s4299; GFX1164DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)300; GFX1164DAGISEL-NEXT:    global_store_b32 v1, v0, s[0:1]301; GFX1164DAGISEL-NEXT:    s_endpgm302;303; GFX1164GISEL-LABEL: divergent_value:304; GFX1164GISEL:       ; %bb.0: ; %entry305; GFX1164GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24306; GFX1164GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0307; GFX1164GISEL-NEXT:    s_mov_b64 s[2:3], exec308; GFX1164GISEL-NEXT:    s_mov_b32 s4, -1309; GFX1164GISEL-NEXT:  .LBB1_1: ; =>This Inner Loop Header: Depth=1310; GFX1164GISEL-NEXT:    s_ctz_i32_b64 s5, s[2:3]311; GFX1164GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)312; GFX1164GISEL-NEXT:    v_readlane_b32 s6, v0, s5313; GFX1164GISEL-NEXT:    s_bitset0_b64 s[2:3], s5314; GFX1164GISEL-NEXT:    s_and_b32 s4, s4, s6315; GFX1164GISEL-NEXT:    s_cmp_lg_u64 s[2:3], 0316; GFX1164GISEL-NEXT:    s_cbranch_scc1 .LBB1_1317; GFX1164GISEL-NEXT:  ; %bb.2:318; GFX1164GISEL-NEXT:    v_mov_b32_e32 v0, s4319; GFX1164GISEL-NEXT:    v_mov_b32_e32 v1, 0320; GFX1164GISEL-NEXT:    s_waitcnt lgkmcnt(0)321; GFX1164GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]322; GFX1164GISEL-NEXT:    s_endpgm323;324; GFX1132DAGISEL-LABEL: divergent_value:325; GFX1132DAGISEL:       ; %bb.0: ; %entry326; GFX1132DAGISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24327; GFX1132DAGISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0328; GFX1132DAGISEL-NEXT:    s_mov_b32 s3, exec_lo329; GFX1132DAGISEL-NEXT:    s_mov_b32 s2, -1330; GFX1132DAGISEL-NEXT:  .LBB1_1: ; =>This Inner Loop Header: Depth=1331; GFX1132DAGISEL-NEXT:    s_ctz_i32_b32 s4, s3332; GFX1132DAGISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)333; GFX1132DAGISEL-NEXT:    v_readlane_b32 s5, v0, s4334; GFX1132DAGISEL-NEXT:    s_bitset0_b32 s3, s4335; GFX1132DAGISEL-NEXT:    s_and_b32 s2, s2, s5336; GFX1132DAGISEL-NEXT:    s_cmp_lg_u32 s3, 0337; GFX1132DAGISEL-NEXT:    s_cbranch_scc1 .LBB1_1338; GFX1132DAGISEL-NEXT:  ; %bb.2:339; GFX1132DAGISEL-NEXT:    v_mov_b32_e32 v0, s2340; GFX1132DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)341; GFX1132DAGISEL-NEXT:    global_store_b32 v1, v0, s[0:1]342; GFX1132DAGISEL-NEXT:    s_endpgm343;344; GFX1132GISEL-LABEL: divergent_value:345; GFX1132GISEL:       ; %bb.0: ; %entry346; GFX1132GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24347; GFX1132GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0348; GFX1132GISEL-NEXT:    s_mov_b32 s3, exec_lo349; GFX1132GISEL-NEXT:    s_mov_b32 s2, -1350; GFX1132GISEL-NEXT:  .LBB1_1: ; =>This Inner Loop Header: Depth=1351; GFX1132GISEL-NEXT:    s_ctz_i32_b32 s4, s3352; GFX1132GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)353; GFX1132GISEL-NEXT:    v_readlane_b32 s5, v0, s4354; GFX1132GISEL-NEXT:    s_bitset0_b32 s3, s4355; GFX1132GISEL-NEXT:    s_and_b32 s2, s2, s5356; GFX1132GISEL-NEXT:    s_cmp_lg_u32 s3, 0357; GFX1132GISEL-NEXT:    s_cbranch_scc1 .LBB1_1358; GFX1132GISEL-NEXT:  ; %bb.2:359; GFX1132GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, 0360; GFX1132GISEL-NEXT:    s_waitcnt lgkmcnt(0)361; GFX1132GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]362; GFX1132GISEL-NEXT:    s_endpgm363entry:364  %id.x = call i32 @llvm.amdgcn.workitem.id.x()365  %result = call i32 @llvm.amdgcn.wave.reduce.and.i32(i32 %id.x, i32 1)366  store i32 %result, ptr addrspace(1) %out367  ret void368}369 370define amdgpu_kernel void @divergent_cfg(ptr addrspace(1) %out, i32 %in) {371; GFX8DAGISEL-LABEL: divergent_cfg:372; GFX8DAGISEL:       ; %bb.0: ; %entry373; GFX8DAGISEL-NEXT:    v_cmp_lt_u32_e32 vcc, 15, v0374; GFX8DAGISEL-NEXT:    ; implicit-def: $sgpr2375; GFX8DAGISEL-NEXT:    s_and_saveexec_b64 s[0:1], vcc376; GFX8DAGISEL-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]377; GFX8DAGISEL-NEXT:  ; %bb.1: ; %else378; GFX8DAGISEL-NEXT:    s_load_dword s2, s[4:5], 0x2c379; GFX8DAGISEL-NEXT:    ; implicit-def: $vgpr0380; GFX8DAGISEL-NEXT:  ; %bb.2: ; %Flow381; GFX8DAGISEL-NEXT:    s_or_saveexec_b64 s[0:1], s[0:1]382; GFX8DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)383; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v1, s2384; GFX8DAGISEL-NEXT:    s_xor_b64 exec, exec, s[0:1]385; GFX8DAGISEL-NEXT:    s_cbranch_execz .LBB2_6386; GFX8DAGISEL-NEXT:  ; %bb.3: ; %if387; GFX8DAGISEL-NEXT:    s_mov_b64 s[2:3], exec388; GFX8DAGISEL-NEXT:    s_mov_b32 s6, -1389; GFX8DAGISEL-NEXT:  .LBB2_4: ; =>This Inner Loop Header: Depth=1390; GFX8DAGISEL-NEXT:    s_ff1_i32_b64 s7, s[2:3]391; GFX8DAGISEL-NEXT:    v_readlane_b32 s8, v0, s7392; GFX8DAGISEL-NEXT:    s_bitset0_b64 s[2:3], s7393; GFX8DAGISEL-NEXT:    s_and_b32 s6, s6, s8394; GFX8DAGISEL-NEXT:    s_cmp_lg_u64 s[2:3], 0395; GFX8DAGISEL-NEXT:    s_cbranch_scc1 .LBB2_4396; GFX8DAGISEL-NEXT:  ; %bb.5:397; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v1, s6398; GFX8DAGISEL-NEXT:  .LBB2_6: ; %endif399; GFX8DAGISEL-NEXT:    s_or_b64 exec, exec, s[0:1]400; GFX8DAGISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24401; GFX8DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)402; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v3, s1403; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v2, s0404; GFX8DAGISEL-NEXT:    flat_store_dword v[2:3], v1405; GFX8DAGISEL-NEXT:    s_endpgm406;407; GFX8GISEL-LABEL: divergent_cfg:408; GFX8GISEL:       ; %bb.0: ; %entry409; GFX8GISEL-NEXT:    v_cmp_le_u32_e32 vcc, 16, v0410; GFX8GISEL-NEXT:    ; implicit-def: $sgpr6411; GFX8GISEL-NEXT:    s_and_saveexec_b64 s[0:1], vcc412; GFX8GISEL-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]413; GFX8GISEL-NEXT:    s_cbranch_execz .LBB2_2414; GFX8GISEL-NEXT:  ; %bb.1: ; %else415; GFX8GISEL-NEXT:    s_load_dword s2, s[4:5], 0x2c416; GFX8GISEL-NEXT:    ; implicit-def: $vgpr0417; GFX8GISEL-NEXT:    s_waitcnt lgkmcnt(0)418; GFX8GISEL-NEXT:    s_mov_b32 s6, s2419; GFX8GISEL-NEXT:  .LBB2_2: ; %Flow420; GFX8GISEL-NEXT:    s_andn2_saveexec_b64 s[0:1], s[0:1]421; GFX8GISEL-NEXT:    s_cbranch_execz .LBB2_5422; GFX8GISEL-NEXT:  ; %bb.3: ; %if423; GFX8GISEL-NEXT:    s_mov_b64 s[2:3], exec424; GFX8GISEL-NEXT:    s_mov_b32 s6, -1425; GFX8GISEL-NEXT:  .LBB2_4: ; =>This Inner Loop Header: Depth=1426; GFX8GISEL-NEXT:    s_ff1_i32_b64 s7, s[2:3]427; GFX8GISEL-NEXT:    v_readlane_b32 s8, v0, s7428; GFX8GISEL-NEXT:    s_bitset0_b64 s[2:3], s7429; GFX8GISEL-NEXT:    s_and_b32 s6, s6, s8430; GFX8GISEL-NEXT:    s_cmp_lg_u64 s[2:3], 0431; GFX8GISEL-NEXT:    s_cbranch_scc1 .LBB2_4432; GFX8GISEL-NEXT:  .LBB2_5: ; %endif433; GFX8GISEL-NEXT:    s_or_b64 exec, exec, s[0:1]434; GFX8GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24435; GFX8GISEL-NEXT:    v_mov_b32_e32 v2, s6436; GFX8GISEL-NEXT:    s_waitcnt lgkmcnt(0)437; GFX8GISEL-NEXT:    v_mov_b32_e32 v0, s0438; GFX8GISEL-NEXT:    v_mov_b32_e32 v1, s1439; GFX8GISEL-NEXT:    flat_store_dword v[0:1], v2440; GFX8GISEL-NEXT:    s_endpgm441;442; GFX9DAGISEL-LABEL: divergent_cfg:443; GFX9DAGISEL:       ; %bb.0: ; %entry444; GFX9DAGISEL-NEXT:    v_cmp_lt_u32_e32 vcc, 15, v0445; GFX9DAGISEL-NEXT:    ; implicit-def: $sgpr2446; GFX9DAGISEL-NEXT:    s_and_saveexec_b64 s[0:1], vcc447; GFX9DAGISEL-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]448; GFX9DAGISEL-NEXT:  ; %bb.1: ; %else449; GFX9DAGISEL-NEXT:    s_load_dword s2, s[4:5], 0x2c450; GFX9DAGISEL-NEXT:    ; implicit-def: $vgpr0451; GFX9DAGISEL-NEXT:  ; %bb.2: ; %Flow452; GFX9DAGISEL-NEXT:    s_or_saveexec_b64 s[0:1], s[0:1]453; GFX9DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)454; GFX9DAGISEL-NEXT:    v_mov_b32_e32 v1, s2455; GFX9DAGISEL-NEXT:    s_xor_b64 exec, exec, s[0:1]456; GFX9DAGISEL-NEXT:    s_cbranch_execz .LBB2_6457; GFX9DAGISEL-NEXT:  ; %bb.3: ; %if458; GFX9DAGISEL-NEXT:    s_mov_b64 s[2:3], exec459; GFX9DAGISEL-NEXT:    s_mov_b32 s6, -1460; GFX9DAGISEL-NEXT:  .LBB2_4: ; =>This Inner Loop Header: Depth=1461; GFX9DAGISEL-NEXT:    s_ff1_i32_b64 s7, s[2:3]462; GFX9DAGISEL-NEXT:    v_readlane_b32 s8, v0, s7463; GFX9DAGISEL-NEXT:    s_bitset0_b64 s[2:3], s7464; GFX9DAGISEL-NEXT:    s_and_b32 s6, s6, s8465; GFX9DAGISEL-NEXT:    s_cmp_lg_u64 s[2:3], 0466; GFX9DAGISEL-NEXT:    s_cbranch_scc1 .LBB2_4467; GFX9DAGISEL-NEXT:  ; %bb.5:468; GFX9DAGISEL-NEXT:    v_mov_b32_e32 v1, s6469; GFX9DAGISEL-NEXT:  .LBB2_6: ; %endif470; GFX9DAGISEL-NEXT:    s_or_b64 exec, exec, s[0:1]471; GFX9DAGISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24472; GFX9DAGISEL-NEXT:    v_mov_b32_e32 v0, 0473; GFX9DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)474; GFX9DAGISEL-NEXT:    global_store_dword v0, v1, s[0:1]475; GFX9DAGISEL-NEXT:    s_endpgm476;477; GFX9GISEL-LABEL: divergent_cfg:478; GFX9GISEL:       ; %bb.0: ; %entry479; GFX9GISEL-NEXT:    v_cmp_le_u32_e32 vcc, 16, v0480; GFX9GISEL-NEXT:    ; implicit-def: $sgpr6481; GFX9GISEL-NEXT:    s_and_saveexec_b64 s[0:1], vcc482; GFX9GISEL-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]483; GFX9GISEL-NEXT:    s_cbranch_execz .LBB2_2484; GFX9GISEL-NEXT:  ; %bb.1: ; %else485; GFX9GISEL-NEXT:    s_load_dword s2, s[4:5], 0x2c486; GFX9GISEL-NEXT:    ; implicit-def: $vgpr0487; GFX9GISEL-NEXT:    s_waitcnt lgkmcnt(0)488; GFX9GISEL-NEXT:    s_mov_b32 s6, s2489; GFX9GISEL-NEXT:  .LBB2_2: ; %Flow490; GFX9GISEL-NEXT:    s_andn2_saveexec_b64 s[0:1], s[0:1]491; GFX9GISEL-NEXT:    s_cbranch_execz .LBB2_5492; GFX9GISEL-NEXT:  ; %bb.3: ; %if493; GFX9GISEL-NEXT:    s_mov_b64 s[2:3], exec494; GFX9GISEL-NEXT:    s_mov_b32 s6, -1495; GFX9GISEL-NEXT:  .LBB2_4: ; =>This Inner Loop Header: Depth=1496; GFX9GISEL-NEXT:    s_ff1_i32_b64 s7, s[2:3]497; GFX9GISEL-NEXT:    v_readlane_b32 s8, v0, s7498; GFX9GISEL-NEXT:    s_bitset0_b64 s[2:3], s7499; GFX9GISEL-NEXT:    s_and_b32 s6, s6, s8500; GFX9GISEL-NEXT:    s_cmp_lg_u64 s[2:3], 0501; GFX9GISEL-NEXT:    s_cbranch_scc1 .LBB2_4502; GFX9GISEL-NEXT:  .LBB2_5: ; %endif503; GFX9GISEL-NEXT:    s_or_b64 exec, exec, s[0:1]504; GFX9GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24505; GFX9GISEL-NEXT:    v_mov_b32_e32 v0, s6506; GFX9GISEL-NEXT:    v_mov_b32_e32 v1, 0507; GFX9GISEL-NEXT:    s_waitcnt lgkmcnt(0)508; GFX9GISEL-NEXT:    global_store_dword v1, v0, s[0:1]509; GFX9GISEL-NEXT:    s_endpgm510;511; GFX1064DAGISEL-LABEL: divergent_cfg:512; GFX1064DAGISEL:       ; %bb.0: ; %entry513; GFX1064DAGISEL-NEXT:    v_cmp_lt_u32_e32 vcc, 15, v0514; GFX1064DAGISEL-NEXT:    ; implicit-def: $sgpr2515; GFX1064DAGISEL-NEXT:    s_and_saveexec_b64 s[0:1], vcc516; GFX1064DAGISEL-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]517; GFX1064DAGISEL-NEXT:  ; %bb.1: ; %else518; GFX1064DAGISEL-NEXT:    s_load_dword s2, s[4:5], 0x2c519; GFX1064DAGISEL-NEXT:    ; implicit-def: $vgpr0520; GFX1064DAGISEL-NEXT:  ; %bb.2: ; %Flow521; GFX1064DAGISEL-NEXT:    s_or_saveexec_b64 s[0:1], s[0:1]522; GFX1064DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)523; GFX1064DAGISEL-NEXT:    v_mov_b32_e32 v1, s2524; GFX1064DAGISEL-NEXT:    s_xor_b64 exec, exec, s[0:1]525; GFX1064DAGISEL-NEXT:    s_cbranch_execz .LBB2_6526; GFX1064DAGISEL-NEXT:  ; %bb.3: ; %if527; GFX1064DAGISEL-NEXT:    s_mov_b64 s[2:3], exec528; GFX1064DAGISEL-NEXT:    s_mov_b32 s6, -1529; GFX1064DAGISEL-NEXT:  .LBB2_4: ; =>This Inner Loop Header: Depth=1530; GFX1064DAGISEL-NEXT:    s_ff1_i32_b64 s7, s[2:3]531; GFX1064DAGISEL-NEXT:    v_readlane_b32 s8, v0, s7532; GFX1064DAGISEL-NEXT:    s_bitset0_b64 s[2:3], s7533; GFX1064DAGISEL-NEXT:    s_and_b32 s6, s6, s8534; GFX1064DAGISEL-NEXT:    s_cmp_lg_u64 s[2:3], 0535; GFX1064DAGISEL-NEXT:    s_cbranch_scc1 .LBB2_4536; GFX1064DAGISEL-NEXT:  ; %bb.5:537; GFX1064DAGISEL-NEXT:    v_mov_b32_e32 v1, s6538; GFX1064DAGISEL-NEXT:  .LBB2_6: ; %endif539; GFX1064DAGISEL-NEXT:    s_or_b64 exec, exec, s[0:1]540; GFX1064DAGISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24541; GFX1064DAGISEL-NEXT:    v_mov_b32_e32 v0, 0542; GFX1064DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)543; GFX1064DAGISEL-NEXT:    global_store_dword v0, v1, s[0:1]544; GFX1064DAGISEL-NEXT:    s_endpgm545;546; GFX1064GISEL-LABEL: divergent_cfg:547; GFX1064GISEL:       ; %bb.0: ; %entry548; GFX1064GISEL-NEXT:    v_cmp_le_u32_e32 vcc, 16, v0549; GFX1064GISEL-NEXT:    ; implicit-def: $sgpr6550; GFX1064GISEL-NEXT:    s_and_saveexec_b64 s[0:1], vcc551; GFX1064GISEL-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]552; GFX1064GISEL-NEXT:    s_cbranch_execz .LBB2_2553; GFX1064GISEL-NEXT:  ; %bb.1: ; %else554; GFX1064GISEL-NEXT:    s_load_dword s2, s[4:5], 0x2c555; GFX1064GISEL-NEXT:    ; implicit-def: $vgpr0556; GFX1064GISEL-NEXT:    s_waitcnt lgkmcnt(0)557; GFX1064GISEL-NEXT:    s_mov_b32 s6, s2558; GFX1064GISEL-NEXT:  .LBB2_2: ; %Flow559; GFX1064GISEL-NEXT:    s_andn2_saveexec_b64 s[0:1], s[0:1]560; GFX1064GISEL-NEXT:    s_cbranch_execz .LBB2_5561; GFX1064GISEL-NEXT:  ; %bb.3: ; %if562; GFX1064GISEL-NEXT:    s_mov_b64 s[2:3], exec563; GFX1064GISEL-NEXT:    s_mov_b32 s6, -1564; GFX1064GISEL-NEXT:  .LBB2_4: ; =>This Inner Loop Header: Depth=1565; GFX1064GISEL-NEXT:    s_ff1_i32_b64 s7, s[2:3]566; GFX1064GISEL-NEXT:    v_readlane_b32 s8, v0, s7567; GFX1064GISEL-NEXT:    s_bitset0_b64 s[2:3], s7568; GFX1064GISEL-NEXT:    s_and_b32 s6, s6, s8569; GFX1064GISEL-NEXT:    s_cmp_lg_u64 s[2:3], 0570; GFX1064GISEL-NEXT:    s_cbranch_scc1 .LBB2_4571; GFX1064GISEL-NEXT:  .LBB2_5: ; %endif572; GFX1064GISEL-NEXT:    s_or_b64 exec, exec, s[0:1]573; GFX1064GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24574; GFX1064GISEL-NEXT:    v_mov_b32_e32 v0, s6575; GFX1064GISEL-NEXT:    v_mov_b32_e32 v1, 0576; GFX1064GISEL-NEXT:    s_waitcnt lgkmcnt(0)577; GFX1064GISEL-NEXT:    global_store_dword v1, v0, s[0:1]578; GFX1064GISEL-NEXT:    s_endpgm579;580; GFX1032DAGISEL-LABEL: divergent_cfg:581; GFX1032DAGISEL:       ; %bb.0: ; %entry582; GFX1032DAGISEL-NEXT:    v_cmp_lt_u32_e32 vcc_lo, 15, v0583; GFX1032DAGISEL-NEXT:    ; implicit-def: $sgpr1584; GFX1032DAGISEL-NEXT:    s_and_saveexec_b32 s0, vcc_lo585; GFX1032DAGISEL-NEXT:    s_xor_b32 s0, exec_lo, s0586; GFX1032DAGISEL-NEXT:  ; %bb.1: ; %else587; GFX1032DAGISEL-NEXT:    s_load_dword s1, s[4:5], 0x2c588; GFX1032DAGISEL-NEXT:    ; implicit-def: $vgpr0589; GFX1032DAGISEL-NEXT:  ; %bb.2: ; %Flow590; GFX1032DAGISEL-NEXT:    s_or_saveexec_b32 s0, s0591; GFX1032DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)592; GFX1032DAGISEL-NEXT:    v_mov_b32_e32 v1, s1593; GFX1032DAGISEL-NEXT:    s_xor_b32 exec_lo, exec_lo, s0594; GFX1032DAGISEL-NEXT:    s_cbranch_execz .LBB2_6595; GFX1032DAGISEL-NEXT:  ; %bb.3: ; %if596; GFX1032DAGISEL-NEXT:    s_mov_b32 s2, exec_lo597; GFX1032DAGISEL-NEXT:    s_mov_b32 s1, -1598; GFX1032DAGISEL-NEXT:  .LBB2_4: ; =>This Inner Loop Header: Depth=1599; GFX1032DAGISEL-NEXT:    s_ff1_i32_b32 s3, s2600; GFX1032DAGISEL-NEXT:    v_readlane_b32 s6, v0, s3601; GFX1032DAGISEL-NEXT:    s_bitset0_b32 s2, s3602; GFX1032DAGISEL-NEXT:    s_and_b32 s1, s1, s6603; GFX1032DAGISEL-NEXT:    s_cmp_lg_u32 s2, 0604; GFX1032DAGISEL-NEXT:    s_cbranch_scc1 .LBB2_4605; GFX1032DAGISEL-NEXT:  ; %bb.5:606; GFX1032DAGISEL-NEXT:    v_mov_b32_e32 v1, s1607; GFX1032DAGISEL-NEXT:  .LBB2_6: ; %endif608; GFX1032DAGISEL-NEXT:    s_or_b32 exec_lo, exec_lo, s0609; GFX1032DAGISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24610; GFX1032DAGISEL-NEXT:    v_mov_b32_e32 v0, 0611; GFX1032DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)612; GFX1032DAGISEL-NEXT:    global_store_dword v0, v1, s[0:1]613; GFX1032DAGISEL-NEXT:    s_endpgm614;615; GFX1032GISEL-LABEL: divergent_cfg:616; GFX1032GISEL:       ; %bb.0: ; %entry617; GFX1032GISEL-NEXT:    v_cmp_le_u32_e32 vcc_lo, 16, v0618; GFX1032GISEL-NEXT:    ; implicit-def: $sgpr0619; GFX1032GISEL-NEXT:    s_and_saveexec_b32 s1, vcc_lo620; GFX1032GISEL-NEXT:    s_xor_b32 s1, exec_lo, s1621; GFX1032GISEL-NEXT:    s_cbranch_execz .LBB2_2622; GFX1032GISEL-NEXT:  ; %bb.1: ; %else623; GFX1032GISEL-NEXT:    s_load_dword s0, s[4:5], 0x2c624; GFX1032GISEL-NEXT:    ; implicit-def: $vgpr0625; GFX1032GISEL-NEXT:    s_waitcnt lgkmcnt(0)626; GFX1032GISEL-NEXT:    s_mov_b32 s0, s0627; GFX1032GISEL-NEXT:  .LBB2_2: ; %Flow628; GFX1032GISEL-NEXT:    s_andn2_saveexec_b32 s1, s1629; GFX1032GISEL-NEXT:    s_cbranch_execz .LBB2_5630; GFX1032GISEL-NEXT:  ; %bb.3: ; %if631; GFX1032GISEL-NEXT:    s_mov_b32 s2, exec_lo632; GFX1032GISEL-NEXT:    s_mov_b32 s0, -1633; GFX1032GISEL-NEXT:  .LBB2_4: ; =>This Inner Loop Header: Depth=1634; GFX1032GISEL-NEXT:    s_ff1_i32_b32 s3, s2635; GFX1032GISEL-NEXT:    v_readlane_b32 s6, v0, s3636; GFX1032GISEL-NEXT:    s_bitset0_b32 s2, s3637; GFX1032GISEL-NEXT:    s_and_b32 s0, s0, s6638; GFX1032GISEL-NEXT:    s_cmp_lg_u32 s2, 0639; GFX1032GISEL-NEXT:    s_cbranch_scc1 .LBB2_4640; GFX1032GISEL-NEXT:  .LBB2_5: ; %endif641; GFX1032GISEL-NEXT:    s_or_b32 exec_lo, exec_lo, s1642; GFX1032GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24643; GFX1032GISEL-NEXT:    v_mov_b32_e32 v0, s0644; GFX1032GISEL-NEXT:    v_mov_b32_e32 v1, 0645; GFX1032GISEL-NEXT:    s_waitcnt lgkmcnt(0)646; GFX1032GISEL-NEXT:    global_store_dword v1, v0, s[2:3]647; GFX1032GISEL-NEXT:    s_endpgm648;649; GFX1164DAGISEL-LABEL: divergent_cfg:650; GFX1164DAGISEL:       ; %bb.0: ; %entry651; GFX1164DAGISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0652; GFX1164DAGISEL-NEXT:    s_mov_b64 s[0:1], exec653; GFX1164DAGISEL-NEXT:    ; implicit-def: $sgpr2654; GFX1164DAGISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)655; GFX1164DAGISEL-NEXT:    v_cmpx_lt_u32_e32 15, v0656; GFX1164DAGISEL-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]657; GFX1164DAGISEL-NEXT:  ; %bb.1: ; %else658; GFX1164DAGISEL-NEXT:    s_load_b32 s2, s[4:5], 0x2c659; GFX1164DAGISEL-NEXT:    ; implicit-def: $vgpr0660; GFX1164DAGISEL-NEXT:  ; %bb.2: ; %Flow661; GFX1164DAGISEL-NEXT:    s_or_saveexec_b64 s[0:1], s[0:1]662; GFX1164DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)663; GFX1164DAGISEL-NEXT:    v_mov_b32_e32 v1, s2664; GFX1164DAGISEL-NEXT:    s_xor_b64 exec, exec, s[0:1]665; GFX1164DAGISEL-NEXT:    s_cbranch_execz .LBB2_6666; GFX1164DAGISEL-NEXT:  ; %bb.3: ; %if667; GFX1164DAGISEL-NEXT:    s_mov_b64 s[2:3], exec668; GFX1164DAGISEL-NEXT:    s_mov_b32 s6, -1669; GFX1164DAGISEL-NEXT:  .LBB2_4: ; =>This Inner Loop Header: Depth=1670; GFX1164DAGISEL-NEXT:    s_ctz_i32_b64 s7, s[2:3]671; GFX1164DAGISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)672; GFX1164DAGISEL-NEXT:    v_readlane_b32 s8, v0, s7673; GFX1164DAGISEL-NEXT:    s_bitset0_b64 s[2:3], s7674; GFX1164DAGISEL-NEXT:    s_and_b32 s6, s6, s8675; GFX1164DAGISEL-NEXT:    s_cmp_lg_u64 s[2:3], 0676; GFX1164DAGISEL-NEXT:    s_cbranch_scc1 .LBB2_4677; GFX1164DAGISEL-NEXT:  ; %bb.5:678; GFX1164DAGISEL-NEXT:    v_mov_b32_e32 v1, s6679; GFX1164DAGISEL-NEXT:  .LBB2_6: ; %endif680; GFX1164DAGISEL-NEXT:    s_or_b64 exec, exec, s[0:1]681; GFX1164DAGISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24682; GFX1164DAGISEL-NEXT:    v_mov_b32_e32 v0, 0683; GFX1164DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)684; GFX1164DAGISEL-NEXT:    global_store_b32 v0, v1, s[0:1]685; GFX1164DAGISEL-NEXT:    s_endpgm686;687; GFX1164GISEL-LABEL: divergent_cfg:688; GFX1164GISEL:       ; %bb.0: ; %entry689; GFX1164GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0690; GFX1164GISEL-NEXT:    s_mov_b64 s[0:1], exec691; GFX1164GISEL-NEXT:    ; implicit-def: $sgpr6692; GFX1164GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)693; GFX1164GISEL-NEXT:    v_cmpx_le_u32_e32 16, v0694; GFX1164GISEL-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]695; GFX1164GISEL-NEXT:    s_cbranch_execz .LBB2_2696; GFX1164GISEL-NEXT:  ; %bb.1: ; %else697; GFX1164GISEL-NEXT:    s_load_b32 s2, s[4:5], 0x2c698; GFX1164GISEL-NEXT:    ; implicit-def: $vgpr0699; GFX1164GISEL-NEXT:    s_waitcnt lgkmcnt(0)700; GFX1164GISEL-NEXT:    s_mov_b32 s6, s2701; GFX1164GISEL-NEXT:  .LBB2_2: ; %Flow702; GFX1164GISEL-NEXT:    s_and_not1_saveexec_b64 s[0:1], s[0:1]703; GFX1164GISEL-NEXT:    s_cbranch_execz .LBB2_5704; GFX1164GISEL-NEXT:  ; %bb.3: ; %if705; GFX1164GISEL-NEXT:    s_mov_b64 s[2:3], exec706; GFX1164GISEL-NEXT:    s_mov_b32 s6, -1707; GFX1164GISEL-NEXT:  .LBB2_4: ; =>This Inner Loop Header: Depth=1708; GFX1164GISEL-NEXT:    s_ctz_i32_b64 s7, s[2:3]709; GFX1164GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)710; GFX1164GISEL-NEXT:    v_readlane_b32 s8, v0, s7711; GFX1164GISEL-NEXT:    s_bitset0_b64 s[2:3], s7712; GFX1164GISEL-NEXT:    s_and_b32 s6, s6, s8713; GFX1164GISEL-NEXT:    s_cmp_lg_u64 s[2:3], 0714; GFX1164GISEL-NEXT:    s_cbranch_scc1 .LBB2_4715; GFX1164GISEL-NEXT:  .LBB2_5: ; %endif716; GFX1164GISEL-NEXT:    s_or_b64 exec, exec, s[0:1]717; GFX1164GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24718; GFX1164GISEL-NEXT:    v_mov_b32_e32 v0, s6719; GFX1164GISEL-NEXT:    v_mov_b32_e32 v1, 0720; GFX1164GISEL-NEXT:    s_waitcnt lgkmcnt(0)721; GFX1164GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]722; GFX1164GISEL-NEXT:    s_endpgm723;724; GFX1132DAGISEL-LABEL: divergent_cfg:725; GFX1132DAGISEL:       ; %bb.0: ; %entry726; GFX1132DAGISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0727; GFX1132DAGISEL-NEXT:    s_mov_b32 s0, exec_lo728; GFX1132DAGISEL-NEXT:    ; implicit-def: $sgpr1729; GFX1132DAGISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)730; GFX1132DAGISEL-NEXT:    v_cmpx_lt_u32_e32 15, v0731; GFX1132DAGISEL-NEXT:    s_xor_b32 s0, exec_lo, s0732; GFX1132DAGISEL-NEXT:  ; %bb.1: ; %else733; GFX1132DAGISEL-NEXT:    s_load_b32 s1, s[4:5], 0x2c734; GFX1132DAGISEL-NEXT:    ; implicit-def: $vgpr0735; GFX1132DAGISEL-NEXT:  ; %bb.2: ; %Flow736; GFX1132DAGISEL-NEXT:    s_or_saveexec_b32 s0, s0737; GFX1132DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)738; GFX1132DAGISEL-NEXT:    v_mov_b32_e32 v1, s1739; GFX1132DAGISEL-NEXT:    s_xor_b32 exec_lo, exec_lo, s0740; GFX1132DAGISEL-NEXT:    s_cbranch_execz .LBB2_6741; GFX1132DAGISEL-NEXT:  ; %bb.3: ; %if742; GFX1132DAGISEL-NEXT:    s_mov_b32 s2, exec_lo743; GFX1132DAGISEL-NEXT:    s_mov_b32 s1, -1744; GFX1132DAGISEL-NEXT:  .LBB2_4: ; =>This Inner Loop Header: Depth=1745; GFX1132DAGISEL-NEXT:    s_ctz_i32_b32 s3, s2746; GFX1132DAGISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)747; GFX1132DAGISEL-NEXT:    v_readlane_b32 s6, v0, s3748; GFX1132DAGISEL-NEXT:    s_bitset0_b32 s2, s3749; GFX1132DAGISEL-NEXT:    s_and_b32 s1, s1, s6750; GFX1132DAGISEL-NEXT:    s_cmp_lg_u32 s2, 0751; GFX1132DAGISEL-NEXT:    s_cbranch_scc1 .LBB2_4752; GFX1132DAGISEL-NEXT:  ; %bb.5:753; GFX1132DAGISEL-NEXT:    v_mov_b32_e32 v1, s1754; GFX1132DAGISEL-NEXT:  .LBB2_6: ; %endif755; GFX1132DAGISEL-NEXT:    s_or_b32 exec_lo, exec_lo, s0756; GFX1132DAGISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24757; GFX1132DAGISEL-NEXT:    v_mov_b32_e32 v0, 0758; GFX1132DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)759; GFX1132DAGISEL-NEXT:    global_store_b32 v0, v1, s[0:1]760; GFX1132DAGISEL-NEXT:    s_endpgm761;762; GFX1132GISEL-LABEL: divergent_cfg:763; GFX1132GISEL:       ; %bb.0: ; %entry764; GFX1132GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0765; GFX1132GISEL-NEXT:    s_mov_b32 s1, exec_lo766; GFX1132GISEL-NEXT:    ; implicit-def: $sgpr0767; GFX1132GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)768; GFX1132GISEL-NEXT:    v_cmpx_le_u32_e32 16, v0769; GFX1132GISEL-NEXT:    s_xor_b32 s1, exec_lo, s1770; GFX1132GISEL-NEXT:    s_cbranch_execz .LBB2_2771; GFX1132GISEL-NEXT:  ; %bb.1: ; %else772; GFX1132GISEL-NEXT:    s_load_b32 s0, s[4:5], 0x2c773; GFX1132GISEL-NEXT:    ; implicit-def: $vgpr0774; GFX1132GISEL-NEXT:    s_waitcnt lgkmcnt(0)775; GFX1132GISEL-NEXT:    s_mov_b32 s0, s0776; GFX1132GISEL-NEXT:  .LBB2_2: ; %Flow777; GFX1132GISEL-NEXT:    s_and_not1_saveexec_b32 s1, s1778; GFX1132GISEL-NEXT:    s_cbranch_execz .LBB2_5779; GFX1132GISEL-NEXT:  ; %bb.3: ; %if780; GFX1132GISEL-NEXT:    s_mov_b32 s2, exec_lo781; GFX1132GISEL-NEXT:    s_mov_b32 s0, -1782; GFX1132GISEL-NEXT:  .LBB2_4: ; =>This Inner Loop Header: Depth=1783; GFX1132GISEL-NEXT:    s_ctz_i32_b32 s3, s2784; GFX1132GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)785; GFX1132GISEL-NEXT:    v_readlane_b32 s6, v0, s3786; GFX1132GISEL-NEXT:    s_bitset0_b32 s2, s3787; GFX1132GISEL-NEXT:    s_and_b32 s0, s0, s6788; GFX1132GISEL-NEXT:    s_cmp_lg_u32 s2, 0789; GFX1132GISEL-NEXT:    s_cbranch_scc1 .LBB2_4790; GFX1132GISEL-NEXT:  .LBB2_5: ; %endif791; GFX1132GISEL-NEXT:    s_or_b32 exec_lo, exec_lo, s1792; GFX1132GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24793; GFX1132GISEL-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, 0794; GFX1132GISEL-NEXT:    s_waitcnt lgkmcnt(0)795; GFX1132GISEL-NEXT:    global_store_b32 v1, v0, s[2:3]796; GFX1132GISEL-NEXT:    s_endpgm797entry:798  %tid = call i32 @llvm.amdgcn.workitem.id.x()799  %d_cmp = icmp ult i32 %tid, 16800  br i1 %d_cmp, label %if, label %else801 802if:803  %reducedValTid = call i32 @llvm.amdgcn.wave.reduce.and.i32(i32 %tid, i32 1)804  br label %endif805 806else:807  %reducedValIn = call i32 @llvm.amdgcn.wave.reduce.and.i32(i32 %in, i32 1)808  br label %endif809 810endif:811  %combine = phi i32 [%reducedValTid, %if], [%reducedValIn, %else]812  store i32 %combine, ptr addrspace(1) %out813  ret void814}815 816define amdgpu_kernel void @uniform_value_i64(ptr addrspace(1) %out, i64 %in) {817; GFX8DAGISEL-LABEL: uniform_value_i64:818; GFX8DAGISEL:       ; %bb.0: ; %entry819; GFX8DAGISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24820; GFX8DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)821; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v2, s2822; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v0, s0823; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v1, s1824; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v3, s3825; GFX8DAGISEL-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]826; GFX8DAGISEL-NEXT:    s_endpgm827;828; GFX8GISEL-LABEL: uniform_value_i64:829; GFX8GISEL:       ; %bb.0: ; %entry830; GFX8GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24831; GFX8GISEL-NEXT:    s_waitcnt lgkmcnt(0)832; GFX8GISEL-NEXT:    v_mov_b32_e32 v0, s2833; GFX8GISEL-NEXT:    v_mov_b32_e32 v3, s1834; GFX8GISEL-NEXT:    v_mov_b32_e32 v1, s3835; GFX8GISEL-NEXT:    v_mov_b32_e32 v2, s0836; GFX8GISEL-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]837; GFX8GISEL-NEXT:    s_endpgm838;839; GFX9DAGISEL-LABEL: uniform_value_i64:840; GFX9DAGISEL:       ; %bb.0: ; %entry841; GFX9DAGISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24842; GFX9DAGISEL-NEXT:    v_mov_b32_e32 v2, 0843; GFX9DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)844; GFX9DAGISEL-NEXT:    v_mov_b32_e32 v0, s2845; GFX9DAGISEL-NEXT:    v_mov_b32_e32 v1, s3846; GFX9DAGISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]847; GFX9DAGISEL-NEXT:    s_endpgm848;849; GFX9GISEL-LABEL: uniform_value_i64:850; GFX9GISEL:       ; %bb.0: ; %entry851; GFX9GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24852; GFX9GISEL-NEXT:    v_mov_b32_e32 v2, 0853; GFX9GISEL-NEXT:    s_waitcnt lgkmcnt(0)854; GFX9GISEL-NEXT:    v_mov_b32_e32 v0, s2855; GFX9GISEL-NEXT:    v_mov_b32_e32 v1, s3856; GFX9GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]857; GFX9GISEL-NEXT:    s_endpgm858;859; GFX10DAGISEL-LABEL: uniform_value_i64:860; GFX10DAGISEL:       ; %bb.0: ; %entry861; GFX10DAGISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24862; GFX10DAGISEL-NEXT:    v_mov_b32_e32 v2, 0863; GFX10DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)864; GFX10DAGISEL-NEXT:    v_mov_b32_e32 v0, s2865; GFX10DAGISEL-NEXT:    v_mov_b32_e32 v1, s3866; GFX10DAGISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]867; GFX10DAGISEL-NEXT:    s_endpgm868;869; GFX10GISEL-LABEL: uniform_value_i64:870; GFX10GISEL:       ; %bb.0: ; %entry871; GFX10GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24872; GFX10GISEL-NEXT:    v_mov_b32_e32 v2, 0873; GFX10GISEL-NEXT:    s_waitcnt lgkmcnt(0)874; GFX10GISEL-NEXT:    v_mov_b32_e32 v0, s2875; GFX10GISEL-NEXT:    v_mov_b32_e32 v1, s3876; GFX10GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]877; GFX10GISEL-NEXT:    s_endpgm878;879; GFX1164DAGISEL-LABEL: uniform_value_i64:880; GFX1164DAGISEL:       ; %bb.0: ; %entry881; GFX1164DAGISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24882; GFX1164DAGISEL-NEXT:    v_mov_b32_e32 v2, 0883; GFX1164DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)884; GFX1164DAGISEL-NEXT:    v_mov_b32_e32 v0, s2885; GFX1164DAGISEL-NEXT:    v_mov_b32_e32 v1, s3886; GFX1164DAGISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]887; GFX1164DAGISEL-NEXT:    s_endpgm888;889; GFX1164GISEL-LABEL: uniform_value_i64:890; GFX1164GISEL:       ; %bb.0: ; %entry891; GFX1164GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24892; GFX1164GISEL-NEXT:    v_mov_b32_e32 v2, 0893; GFX1164GISEL-NEXT:    s_waitcnt lgkmcnt(0)894; GFX1164GISEL-NEXT:    v_mov_b32_e32 v0, s2895; GFX1164GISEL-NEXT:    v_mov_b32_e32 v1, s3896; GFX1164GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]897; GFX1164GISEL-NEXT:    s_endpgm898;899; GFX1132DAGISEL-LABEL: uniform_value_i64:900; GFX1132DAGISEL:       ; %bb.0: ; %entry901; GFX1132DAGISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24902; GFX1132DAGISEL-NEXT:    v_mov_b32_e32 v2, 0903; GFX1132DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)904; GFX1132DAGISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3905; GFX1132DAGISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]906; GFX1132DAGISEL-NEXT:    s_endpgm907;908; GFX1132GISEL-LABEL: uniform_value_i64:909; GFX1132GISEL:       ; %bb.0: ; %entry910; GFX1132GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24911; GFX1132GISEL-NEXT:    v_mov_b32_e32 v2, 0912; GFX1132GISEL-NEXT:    s_waitcnt lgkmcnt(0)913; GFX1132GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3914; GFX1132GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]915; GFX1132GISEL-NEXT:    s_endpgm916entry:917  %result = call i64 @llvm.amdgcn.wave.reduce.and.i64(i64 %in, i32 1)918  store i64 %result, ptr addrspace(1) %out919  ret void920}921 922define void @divergent_value_i64(ptr addrspace(1) %out, i64 %id.x) {923; GFX8DAGISEL-LABEL: divergent_value_i64:924; GFX8DAGISEL:       ; %bb.0: ; %entry925; GFX8DAGISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)926; GFX8DAGISEL-NEXT:    s_mov_b64 s[4:5], -1927; GFX8DAGISEL-NEXT:    s_mov_b64 s[6:7], exec928; GFX8DAGISEL-NEXT:  .LBB4_1: ; =>This Inner Loop Header: Depth=1929; GFX8DAGISEL-NEXT:    s_ff1_i32_b64 s10, s[6:7]930; GFX8DAGISEL-NEXT:    v_readlane_b32 s8, v2, s10931; GFX8DAGISEL-NEXT:    v_readlane_b32 s9, v3, s10932; GFX8DAGISEL-NEXT:    s_bitset0_b64 s[6:7], s10933; GFX8DAGISEL-NEXT:    s_and_b64 s[4:5], s[4:5], s[8:9]934; GFX8DAGISEL-NEXT:    s_cmp_lg_u64 s[6:7], 0935; GFX8DAGISEL-NEXT:    s_cbranch_scc1 .LBB4_1936; GFX8DAGISEL-NEXT:  ; %bb.2:937; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v2, s4938; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v3, s5939; GFX8DAGISEL-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]940; GFX8DAGISEL-NEXT:    s_waitcnt vmcnt(0)941; GFX8DAGISEL-NEXT:    s_setpc_b64 s[30:31]942;943; GFX8GISEL-LABEL: divergent_value_i64:944; GFX8GISEL:       ; %bb.0: ; %entry945; GFX8GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)946; GFX8GISEL-NEXT:    s_mov_b64 s[4:5], -1947; GFX8GISEL-NEXT:    s_mov_b64 s[6:7], exec948; GFX8GISEL-NEXT:  .LBB4_1: ; =>This Inner Loop Header: Depth=1949; GFX8GISEL-NEXT:    s_ff1_i32_b64 s10, s[6:7]950; GFX8GISEL-NEXT:    v_readlane_b32 s8, v2, s10951; GFX8GISEL-NEXT:    v_readlane_b32 s9, v3, s10952; GFX8GISEL-NEXT:    s_bitset0_b64 s[6:7], s10953; GFX8GISEL-NEXT:    s_and_b64 s[4:5], s[4:5], s[8:9]954; GFX8GISEL-NEXT:    s_cmp_lg_u64 s[6:7], 0955; GFX8GISEL-NEXT:    s_cbranch_scc1 .LBB4_1956; GFX8GISEL-NEXT:  ; %bb.2:957; GFX8GISEL-NEXT:    v_mov_b32_e32 v2, s4958; GFX8GISEL-NEXT:    v_mov_b32_e32 v3, s5959; GFX8GISEL-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]960; GFX8GISEL-NEXT:    s_waitcnt vmcnt(0)961; GFX8GISEL-NEXT:    s_setpc_b64 s[30:31]962;963; GFX9DAGISEL-LABEL: divergent_value_i64:964; GFX9DAGISEL:       ; %bb.0: ; %entry965; GFX9DAGISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)966; GFX9DAGISEL-NEXT:    s_mov_b64 s[4:5], -1967; GFX9DAGISEL-NEXT:    s_mov_b64 s[6:7], exec968; GFX9DAGISEL-NEXT:  .LBB4_1: ; =>This Inner Loop Header: Depth=1969; GFX9DAGISEL-NEXT:    s_ff1_i32_b64 s10, s[6:7]970; GFX9DAGISEL-NEXT:    v_readlane_b32 s8, v2, s10971; GFX9DAGISEL-NEXT:    v_readlane_b32 s9, v3, s10972; GFX9DAGISEL-NEXT:    s_bitset0_b64 s[6:7], s10973; GFX9DAGISEL-NEXT:    s_and_b64 s[4:5], s[4:5], s[8:9]974; GFX9DAGISEL-NEXT:    s_cmp_lg_u64 s[6:7], 0975; GFX9DAGISEL-NEXT:    s_cbranch_scc1 .LBB4_1976; GFX9DAGISEL-NEXT:  ; %bb.2:977; GFX9DAGISEL-NEXT:    v_mov_b32_e32 v2, s4978; GFX9DAGISEL-NEXT:    v_mov_b32_e32 v3, s5979; GFX9DAGISEL-NEXT:    global_store_dwordx2 v[0:1], v[2:3], off980; GFX9DAGISEL-NEXT:    s_waitcnt vmcnt(0)981; GFX9DAGISEL-NEXT:    s_setpc_b64 s[30:31]982;983; GFX9GISEL-LABEL: divergent_value_i64:984; GFX9GISEL:       ; %bb.0: ; %entry985; GFX9GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)986; GFX9GISEL-NEXT:    s_mov_b64 s[4:5], -1987; GFX9GISEL-NEXT:    s_mov_b64 s[6:7], exec988; GFX9GISEL-NEXT:  .LBB4_1: ; =>This Inner Loop Header: Depth=1989; GFX9GISEL-NEXT:    s_ff1_i32_b64 s10, s[6:7]990; GFX9GISEL-NEXT:    v_readlane_b32 s8, v2, s10991; GFX9GISEL-NEXT:    v_readlane_b32 s9, v3, s10992; GFX9GISEL-NEXT:    s_bitset0_b64 s[6:7], s10993; GFX9GISEL-NEXT:    s_and_b64 s[4:5], s[4:5], s[8:9]994; GFX9GISEL-NEXT:    s_cmp_lg_u64 s[6:7], 0995; GFX9GISEL-NEXT:    s_cbranch_scc1 .LBB4_1996; GFX9GISEL-NEXT:  ; %bb.2:997; GFX9GISEL-NEXT:    v_mov_b32_e32 v2, s4998; GFX9GISEL-NEXT:    v_mov_b32_e32 v3, s5999; GFX9GISEL-NEXT:    global_store_dwordx2 v[0:1], v[2:3], off1000; GFX9GISEL-NEXT:    s_waitcnt vmcnt(0)1001; GFX9GISEL-NEXT:    s_setpc_b64 s[30:31]1002;1003; GFX1064DAGISEL-LABEL: divergent_value_i64:1004; GFX1064DAGISEL:       ; %bb.0: ; %entry1005; GFX1064DAGISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1006; GFX1064DAGISEL-NEXT:    s_mov_b64 s[4:5], -11007; GFX1064DAGISEL-NEXT:    s_mov_b64 s[6:7], exec1008; GFX1064DAGISEL-NEXT:  .LBB4_1: ; =>This Inner Loop Header: Depth=11009; GFX1064DAGISEL-NEXT:    s_ff1_i32_b64 s10, s[6:7]1010; GFX1064DAGISEL-NEXT:    v_readlane_b32 s8, v2, s101011; GFX1064DAGISEL-NEXT:    v_readlane_b32 s9, v3, s101012; GFX1064DAGISEL-NEXT:    s_bitset0_b64 s[6:7], s101013; GFX1064DAGISEL-NEXT:    s_and_b64 s[4:5], s[4:5], s[8:9]1014; GFX1064DAGISEL-NEXT:    s_cmp_lg_u64 s[6:7], 01015; GFX1064DAGISEL-NEXT:    s_cbranch_scc1 .LBB4_11016; GFX1064DAGISEL-NEXT:  ; %bb.2:1017; GFX1064DAGISEL-NEXT:    v_mov_b32_e32 v2, s41018; GFX1064DAGISEL-NEXT:    v_mov_b32_e32 v3, s51019; GFX1064DAGISEL-NEXT:    global_store_dwordx2 v[0:1], v[2:3], off1020; GFX1064DAGISEL-NEXT:    s_setpc_b64 s[30:31]1021;1022; GFX1064GISEL-LABEL: divergent_value_i64:1023; GFX1064GISEL:       ; %bb.0: ; %entry1024; GFX1064GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1025; GFX1064GISEL-NEXT:    s_mov_b64 s[4:5], -11026; GFX1064GISEL-NEXT:    s_mov_b64 s[6:7], exec1027; GFX1064GISEL-NEXT:  .LBB4_1: ; =>This Inner Loop Header: Depth=11028; GFX1064GISEL-NEXT:    s_ff1_i32_b64 s10, s[6:7]1029; GFX1064GISEL-NEXT:    v_readlane_b32 s8, v2, s101030; GFX1064GISEL-NEXT:    v_readlane_b32 s9, v3, s101031; GFX1064GISEL-NEXT:    s_bitset0_b64 s[6:7], s101032; GFX1064GISEL-NEXT:    s_and_b64 s[4:5], s[4:5], s[8:9]1033; GFX1064GISEL-NEXT:    s_cmp_lg_u64 s[6:7], 01034; GFX1064GISEL-NEXT:    s_cbranch_scc1 .LBB4_11035; GFX1064GISEL-NEXT:  ; %bb.2:1036; GFX1064GISEL-NEXT:    v_mov_b32_e32 v2, s41037; GFX1064GISEL-NEXT:    v_mov_b32_e32 v3, s51038; GFX1064GISEL-NEXT:    global_store_dwordx2 v[0:1], v[2:3], off1039; GFX1064GISEL-NEXT:    s_setpc_b64 s[30:31]1040;1041; GFX1032DAGISEL-LABEL: divergent_value_i64:1042; GFX1032DAGISEL:       ; %bb.0: ; %entry1043; GFX1032DAGISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1044; GFX1032DAGISEL-NEXT:    s_mov_b64 s[4:5], -11045; GFX1032DAGISEL-NEXT:    s_mov_b32 s6, exec_lo1046; GFX1032DAGISEL-NEXT:  .LBB4_1: ; =>This Inner Loop Header: Depth=11047; GFX1032DAGISEL-NEXT:    s_ff1_i32_b32 s7, s61048; GFX1032DAGISEL-NEXT:    v_readlane_b32 s8, v2, s71049; GFX1032DAGISEL-NEXT:    v_readlane_b32 s9, v3, s71050; GFX1032DAGISEL-NEXT:    s_bitset0_b32 s6, s71051; GFX1032DAGISEL-NEXT:    s_and_b64 s[4:5], s[4:5], s[8:9]1052; GFX1032DAGISEL-NEXT:    s_cmp_lg_u32 s6, 01053; GFX1032DAGISEL-NEXT:    s_cbranch_scc1 .LBB4_11054; GFX1032DAGISEL-NEXT:  ; %bb.2:1055; GFX1032DAGISEL-NEXT:    v_mov_b32_e32 v2, s41056; GFX1032DAGISEL-NEXT:    v_mov_b32_e32 v3, s51057; GFX1032DAGISEL-NEXT:    global_store_dwordx2 v[0:1], v[2:3], off1058; GFX1032DAGISEL-NEXT:    s_setpc_b64 s[30:31]1059;1060; GFX1032GISEL-LABEL: divergent_value_i64:1061; GFX1032GISEL:       ; %bb.0: ; %entry1062; GFX1032GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1063; GFX1032GISEL-NEXT:    s_mov_b64 s[4:5], -11064; GFX1032GISEL-NEXT:    s_mov_b32 s6, exec_lo1065; GFX1032GISEL-NEXT:  .LBB4_1: ; =>This Inner Loop Header: Depth=11066; GFX1032GISEL-NEXT:    s_ff1_i32_b32 s7, s61067; GFX1032GISEL-NEXT:    v_readlane_b32 s8, v2, s71068; GFX1032GISEL-NEXT:    v_readlane_b32 s9, v3, s71069; GFX1032GISEL-NEXT:    s_bitset0_b32 s6, s71070; GFX1032GISEL-NEXT:    s_and_b64 s[4:5], s[4:5], s[8:9]1071; GFX1032GISEL-NEXT:    s_cmp_lg_u32 s6, 01072; GFX1032GISEL-NEXT:    s_cbranch_scc1 .LBB4_11073; GFX1032GISEL-NEXT:  ; %bb.2:1074; GFX1032GISEL-NEXT:    v_mov_b32_e32 v2, s41075; GFX1032GISEL-NEXT:    v_mov_b32_e32 v3, s51076; GFX1032GISEL-NEXT:    global_store_dwordx2 v[0:1], v[2:3], off1077; GFX1032GISEL-NEXT:    s_setpc_b64 s[30:31]1078;1079; GFX1164DAGISEL-LABEL: divergent_value_i64:1080; GFX1164DAGISEL:       ; %bb.0: ; %entry1081; GFX1164DAGISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1082; GFX1164DAGISEL-NEXT:    s_mov_b64 s[0:1], -11083; GFX1164DAGISEL-NEXT:    s_mov_b64 s[2:3], exec1084; GFX1164DAGISEL-NEXT:  .LBB4_1: ; =>This Inner Loop Header: Depth=11085; GFX1164DAGISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1086; GFX1164DAGISEL-NEXT:    s_ctz_i32_b64 s6, s[2:3]1087; GFX1164DAGISEL-NEXT:    v_readlane_b32 s4, v2, s61088; GFX1164DAGISEL-NEXT:    v_readlane_b32 s5, v3, s61089; GFX1164DAGISEL-NEXT:    s_bitset0_b64 s[2:3], s61090; GFX1164DAGISEL-NEXT:    s_and_b64 s[0:1], s[0:1], s[4:5]1091; GFX1164DAGISEL-NEXT:    s_cmp_lg_u64 s[2:3], 01092; GFX1164DAGISEL-NEXT:    s_cbranch_scc1 .LBB4_11093; GFX1164DAGISEL-NEXT:  ; %bb.2:1094; GFX1164DAGISEL-NEXT:    v_mov_b32_e32 v3, s11095; GFX1164DAGISEL-NEXT:    v_mov_b32_e32 v2, s01096; GFX1164DAGISEL-NEXT:    global_store_b64 v[0:1], v[2:3], off1097; GFX1164DAGISEL-NEXT:    s_setpc_b64 s[30:31]1098;1099; GFX1164GISEL-LABEL: divergent_value_i64:1100; GFX1164GISEL:       ; %bb.0: ; %entry1101; GFX1164GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1102; GFX1164GISEL-NEXT:    s_mov_b64 s[0:1], -11103; GFX1164GISEL-NEXT:    s_mov_b64 s[2:3], exec1104; GFX1164GISEL-NEXT:  .LBB4_1: ; =>This Inner Loop Header: Depth=11105; GFX1164GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1106; GFX1164GISEL-NEXT:    s_ctz_i32_b64 s6, s[2:3]1107; GFX1164GISEL-NEXT:    v_readlane_b32 s4, v2, s61108; GFX1164GISEL-NEXT:    v_readlane_b32 s5, v3, s61109; GFX1164GISEL-NEXT:    s_bitset0_b64 s[2:3], s61110; GFX1164GISEL-NEXT:    s_and_b64 s[0:1], s[0:1], s[4:5]1111; GFX1164GISEL-NEXT:    s_cmp_lg_u64 s[2:3], 01112; GFX1164GISEL-NEXT:    s_cbranch_scc1 .LBB4_11113; GFX1164GISEL-NEXT:  ; %bb.2:1114; GFX1164GISEL-NEXT:    v_mov_b32_e32 v3, s11115; GFX1164GISEL-NEXT:    v_mov_b32_e32 v2, s01116; GFX1164GISEL-NEXT:    global_store_b64 v[0:1], v[2:3], off1117; GFX1164GISEL-NEXT:    s_setpc_b64 s[30:31]1118;1119; GFX1132DAGISEL-LABEL: divergent_value_i64:1120; GFX1132DAGISEL:       ; %bb.0: ; %entry1121; GFX1132DAGISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1122; GFX1132DAGISEL-NEXT:    s_mov_b64 s[0:1], -11123; GFX1132DAGISEL-NEXT:    s_mov_b32 s2, exec_lo1124; GFX1132DAGISEL-NEXT:  .LBB4_1: ; =>This Inner Loop Header: Depth=11125; GFX1132DAGISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1126; GFX1132DAGISEL-NEXT:    s_ctz_i32_b32 s3, s21127; GFX1132DAGISEL-NEXT:    v_readlane_b32 s4, v2, s31128; GFX1132DAGISEL-NEXT:    v_readlane_b32 s5, v3, s31129; GFX1132DAGISEL-NEXT:    s_bitset0_b32 s2, s31130; GFX1132DAGISEL-NEXT:    s_and_b64 s[0:1], s[0:1], s[4:5]1131; GFX1132DAGISEL-NEXT:    s_cmp_lg_u32 s2, 01132; GFX1132DAGISEL-NEXT:    s_cbranch_scc1 .LBB4_11133; GFX1132DAGISEL-NEXT:  ; %bb.2:1134; GFX1132DAGISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s01135; GFX1132DAGISEL-NEXT:    global_store_b64 v[0:1], v[2:3], off1136; GFX1132DAGISEL-NEXT:    s_setpc_b64 s[30:31]1137;1138; GFX1132GISEL-LABEL: divergent_value_i64:1139; GFX1132GISEL:       ; %bb.0: ; %entry1140; GFX1132GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1141; GFX1132GISEL-NEXT:    s_mov_b64 s[0:1], -11142; GFX1132GISEL-NEXT:    s_mov_b32 s2, exec_lo1143; GFX1132GISEL-NEXT:  .LBB4_1: ; =>This Inner Loop Header: Depth=11144; GFX1132GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)1145; GFX1132GISEL-NEXT:    s_ctz_i32_b32 s3, s21146; GFX1132GISEL-NEXT:    v_readlane_b32 s4, v2, s31147; GFX1132GISEL-NEXT:    v_readlane_b32 s5, v3, s31148; GFX1132GISEL-NEXT:    s_bitset0_b32 s2, s31149; GFX1132GISEL-NEXT:    s_and_b64 s[0:1], s[0:1], s[4:5]1150; GFX1132GISEL-NEXT:    s_cmp_lg_u32 s2, 01151; GFX1132GISEL-NEXT:    s_cbranch_scc1 .LBB4_11152; GFX1132GISEL-NEXT:  ; %bb.2:1153; GFX1132GISEL-NEXT:    v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s01154; GFX1132GISEL-NEXT:    global_store_b64 v[0:1], v[2:3], off1155; GFX1132GISEL-NEXT:    s_setpc_b64 s[30:31]1156entry:1157  %result = call i64 @llvm.amdgcn.wave.reduce.and.i64(i64 %id.x, i32 1)1158  store i64 %result, ptr addrspace(1) %out1159  ret void1160}1161 1162define amdgpu_kernel void @divergent_cfg_i64(ptr addrspace(1) %out, i64 %in, i64 %in2) {1163; GFX8DAGISEL-LABEL: divergent_cfg_i64:1164; GFX8DAGISEL:       ; %bb.0: ; %entry1165; GFX8DAGISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241166; GFX8DAGISEL-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x341167; GFX8DAGISEL-NEXT:    v_cmp_lt_u32_e32 vcc, 15, v01168; GFX8DAGISEL-NEXT:    s_and_saveexec_b64 s[6:7], vcc1169; GFX8DAGISEL-NEXT:    s_xor_b64 s[6:7], exec, s[6:7]1170; GFX8DAGISEL-NEXT:    s_or_saveexec_b64 s[6:7], s[6:7]1171; GFX8DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)1172; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v0, s21173; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v1, s31174; GFX8DAGISEL-NEXT:    s_xor_b64 exec, exec, s[6:7]1175; GFX8DAGISEL-NEXT:  ; %bb.1: ; %if1176; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v0, s41177; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v1, s51178; GFX8DAGISEL-NEXT:  ; %bb.2: ; %endif1179; GFX8DAGISEL-NEXT:    s_or_b64 exec, exec, s[6:7]1180; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v2, s01181; GFX8DAGISEL-NEXT:    v_mov_b32_e32 v3, s11182; GFX8DAGISEL-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]1183; GFX8DAGISEL-NEXT:    s_endpgm1184;1185; GFX8GISEL-LABEL: divergent_cfg_i64:1186; GFX8GISEL:       ; %bb.0: ; %entry1187; GFX8GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241188; GFX8GISEL-NEXT:    v_cmp_le_u32_e32 vcc, 16, v01189; GFX8GISEL-NEXT:    ; implicit-def: $sgpr6_sgpr71190; GFX8GISEL-NEXT:    s_and_saveexec_b64 s[8:9], vcc1191; GFX8GISEL-NEXT:    s_xor_b64 s[8:9], exec, s[8:9]1192; GFX8GISEL-NEXT:    s_cbranch_execz .LBB5_21193; GFX8GISEL-NEXT:  ; %bb.1: ; %else1194; GFX8GISEL-NEXT:    s_waitcnt lgkmcnt(0)1195; GFX8GISEL-NEXT:    s_mov_b64 s[6:7], s[2:3]1196; GFX8GISEL-NEXT:  .LBB5_2: ; %Flow1197; GFX8GISEL-NEXT:    s_waitcnt lgkmcnt(0)1198; GFX8GISEL-NEXT:    s_andn2_saveexec_b64 s[2:3], s[8:9]1199; GFX8GISEL-NEXT:    s_cbranch_execz .LBB5_41200; GFX8GISEL-NEXT:  ; %bb.3: ; %if1201; GFX8GISEL-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x341202; GFX8GISEL-NEXT:    s_waitcnt lgkmcnt(0)1203; GFX8GISEL-NEXT:    s_mov_b64 s[6:7], s[4:5]1204; GFX8GISEL-NEXT:  .LBB5_4: ; %endif1205; GFX8GISEL-NEXT:    s_or_b64 exec, exec, s[2:3]1206; GFX8GISEL-NEXT:    v_mov_b32_e32 v0, s61207; GFX8GISEL-NEXT:    v_mov_b32_e32 v3, s11208; GFX8GISEL-NEXT:    v_mov_b32_e32 v1, s71209; GFX8GISEL-NEXT:    v_mov_b32_e32 v2, s01210; GFX8GISEL-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]1211; GFX8GISEL-NEXT:    s_endpgm1212;1213; GFX9DAGISEL-LABEL: divergent_cfg_i64:1214; GFX9DAGISEL:       ; %bb.0: ; %entry1215; GFX9DAGISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241216; GFX9DAGISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x341217; GFX9DAGISEL-NEXT:    v_cmp_lt_u32_e32 vcc, 15, v01218; GFX9DAGISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc1219; GFX9DAGISEL-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]1220; GFX9DAGISEL-NEXT:    s_or_saveexec_b64 s[4:5], s[4:5]1221; GFX9DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)1222; GFX9DAGISEL-NEXT:    v_mov_b32_e32 v0, s21223; GFX9DAGISEL-NEXT:    v_mov_b32_e32 v1, s31224; GFX9DAGISEL-NEXT:    s_xor_b64 exec, exec, s[4:5]1225; GFX9DAGISEL-NEXT:  ; %bb.1: ; %if1226; GFX9DAGISEL-NEXT:    v_mov_b32_e32 v0, s61227; GFX9DAGISEL-NEXT:    v_mov_b32_e32 v1, s71228; GFX9DAGISEL-NEXT:  ; %bb.2: ; %endif1229; GFX9DAGISEL-NEXT:    s_or_b64 exec, exec, s[4:5]1230; GFX9DAGISEL-NEXT:    v_mov_b32_e32 v2, 01231; GFX9DAGISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]1232; GFX9DAGISEL-NEXT:    s_endpgm1233;1234; GFX9GISEL-LABEL: divergent_cfg_i64:1235; GFX9GISEL:       ; %bb.0: ; %entry1236; GFX9GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241237; GFX9GISEL-NEXT:    v_cmp_le_u32_e32 vcc, 16, v01238; GFX9GISEL-NEXT:    ; implicit-def: $sgpr6_sgpr71239; GFX9GISEL-NEXT:    s_and_saveexec_b64 s[8:9], vcc1240; GFX9GISEL-NEXT:    s_xor_b64 s[8:9], exec, s[8:9]1241; GFX9GISEL-NEXT:    s_cbranch_execz .LBB5_21242; GFX9GISEL-NEXT:  ; %bb.1: ; %else1243; GFX9GISEL-NEXT:    s_waitcnt lgkmcnt(0)1244; GFX9GISEL-NEXT:    s_mov_b64 s[6:7], s[2:3]1245; GFX9GISEL-NEXT:  .LBB5_2: ; %Flow1246; GFX9GISEL-NEXT:    s_waitcnt lgkmcnt(0)1247; GFX9GISEL-NEXT:    s_andn2_saveexec_b64 s[2:3], s[8:9]1248; GFX9GISEL-NEXT:    s_cbranch_execz .LBB5_41249; GFX9GISEL-NEXT:  ; %bb.3: ; %if1250; GFX9GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x341251; GFX9GISEL-NEXT:    s_waitcnt lgkmcnt(0)1252; GFX9GISEL-NEXT:    s_mov_b64 s[6:7], s[6:7]1253; GFX9GISEL-NEXT:  .LBB5_4: ; %endif1254; GFX9GISEL-NEXT:    s_or_b64 exec, exec, s[2:3]1255; GFX9GISEL-NEXT:    v_mov_b32_e32 v0, s61256; GFX9GISEL-NEXT:    v_mov_b32_e32 v1, s71257; GFX9GISEL-NEXT:    v_mov_b32_e32 v2, 01258; GFX9GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]1259; GFX9GISEL-NEXT:    s_endpgm1260;1261; GFX1064DAGISEL-LABEL: divergent_cfg_i64:1262; GFX1064DAGISEL:       ; %bb.0: ; %entry1263; GFX1064DAGISEL-NEXT:    s_clause 0x11264; GFX1064DAGISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241265; GFX1064DAGISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x341266; GFX1064DAGISEL-NEXT:    v_cmp_lt_u32_e32 vcc, 15, v01267; GFX1064DAGISEL-NEXT:    s_and_saveexec_b64 s[4:5], vcc1268; GFX1064DAGISEL-NEXT:    s_xor_b64 s[4:5], exec, s[4:5]1269; GFX1064DAGISEL-NEXT:    s_or_saveexec_b64 s[4:5], s[4:5]1270; GFX1064DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)1271; GFX1064DAGISEL-NEXT:    v_mov_b32_e32 v0, s21272; GFX1064DAGISEL-NEXT:    v_mov_b32_e32 v1, s31273; GFX1064DAGISEL-NEXT:    s_xor_b64 exec, exec, s[4:5]1274; GFX1064DAGISEL-NEXT:  ; %bb.1: ; %if1275; GFX1064DAGISEL-NEXT:    v_mov_b32_e32 v0, s61276; GFX1064DAGISEL-NEXT:    v_mov_b32_e32 v1, s71277; GFX1064DAGISEL-NEXT:  ; %bb.2: ; %endif1278; GFX1064DAGISEL-NEXT:    s_or_b64 exec, exec, s[4:5]1279; GFX1064DAGISEL-NEXT:    v_mov_b32_e32 v2, 01280; GFX1064DAGISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]1281; GFX1064DAGISEL-NEXT:    s_endpgm1282;1283; GFX1064GISEL-LABEL: divergent_cfg_i64:1284; GFX1064GISEL:       ; %bb.0: ; %entry1285; GFX1064GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241286; GFX1064GISEL-NEXT:    v_cmp_le_u32_e32 vcc, 16, v01287; GFX1064GISEL-NEXT:    ; implicit-def: $sgpr6_sgpr71288; GFX1064GISEL-NEXT:    s_and_saveexec_b64 s[8:9], vcc1289; GFX1064GISEL-NEXT:    s_xor_b64 s[8:9], exec, s[8:9]1290; GFX1064GISEL-NEXT:    s_cbranch_execz .LBB5_21291; GFX1064GISEL-NEXT:  ; %bb.1: ; %else1292; GFX1064GISEL-NEXT:    s_waitcnt lgkmcnt(0)1293; GFX1064GISEL-NEXT:    s_mov_b64 s[6:7], s[2:3]1294; GFX1064GISEL-NEXT:  .LBB5_2: ; %Flow1295; GFX1064GISEL-NEXT:    s_waitcnt lgkmcnt(0)1296; GFX1064GISEL-NEXT:    s_andn2_saveexec_b64 s[2:3], s[8:9]1297; GFX1064GISEL-NEXT:    s_cbranch_execz .LBB5_41298; GFX1064GISEL-NEXT:  ; %bb.3: ; %if1299; GFX1064GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x341300; GFX1064GISEL-NEXT:    s_waitcnt lgkmcnt(0)1301; GFX1064GISEL-NEXT:    s_mov_b64 s[6:7], s[6:7]1302; GFX1064GISEL-NEXT:  .LBB5_4: ; %endif1303; GFX1064GISEL-NEXT:    s_or_b64 exec, exec, s[2:3]1304; GFX1064GISEL-NEXT:    v_mov_b32_e32 v0, s61305; GFX1064GISEL-NEXT:    v_mov_b32_e32 v1, s71306; GFX1064GISEL-NEXT:    v_mov_b32_e32 v2, 01307; GFX1064GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]1308; GFX1064GISEL-NEXT:    s_endpgm1309;1310; GFX1032DAGISEL-LABEL: divergent_cfg_i64:1311; GFX1032DAGISEL:       ; %bb.0: ; %entry1312; GFX1032DAGISEL-NEXT:    s_clause 0x11313; GFX1032DAGISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241314; GFX1032DAGISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x341315; GFX1032DAGISEL-NEXT:    v_cmp_lt_u32_e32 vcc_lo, 15, v01316; GFX1032DAGISEL-NEXT:    s_and_saveexec_b32 s4, vcc_lo1317; GFX1032DAGISEL-NEXT:    s_xor_b32 s4, exec_lo, s41318; GFX1032DAGISEL-NEXT:    s_or_saveexec_b32 s4, s41319; GFX1032DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)1320; GFX1032DAGISEL-NEXT:    v_mov_b32_e32 v0, s21321; GFX1032DAGISEL-NEXT:    v_mov_b32_e32 v1, s31322; GFX1032DAGISEL-NEXT:    s_xor_b32 exec_lo, exec_lo, s41323; GFX1032DAGISEL-NEXT:  ; %bb.1: ; %if1324; GFX1032DAGISEL-NEXT:    v_mov_b32_e32 v0, s61325; GFX1032DAGISEL-NEXT:    v_mov_b32_e32 v1, s71326; GFX1032DAGISEL-NEXT:  ; %bb.2: ; %endif1327; GFX1032DAGISEL-NEXT:    s_or_b32 exec_lo, exec_lo, s41328; GFX1032DAGISEL-NEXT:    v_mov_b32_e32 v2, 01329; GFX1032DAGISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]1330; GFX1032DAGISEL-NEXT:    s_endpgm1331;1332; GFX1032GISEL-LABEL: divergent_cfg_i64:1333; GFX1032GISEL:       ; %bb.0: ; %entry1334; GFX1032GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x241335; GFX1032GISEL-NEXT:    v_cmp_le_u32_e32 vcc_lo, 16, v01336; GFX1032GISEL-NEXT:    ; implicit-def: $sgpr6_sgpr71337; GFX1032GISEL-NEXT:    s_and_saveexec_b32 s8, vcc_lo1338; GFX1032GISEL-NEXT:    s_xor_b32 s8, exec_lo, s81339; GFX1032GISEL-NEXT:    s_cbranch_execz .LBB5_21340; GFX1032GISEL-NEXT:  ; %bb.1: ; %else1341; GFX1032GISEL-NEXT:    s_waitcnt lgkmcnt(0)1342; GFX1032GISEL-NEXT:    s_mov_b64 s[6:7], s[2:3]1343; GFX1032GISEL-NEXT:  .LBB5_2: ; %Flow1344; GFX1032GISEL-NEXT:    s_waitcnt lgkmcnt(0)1345; GFX1032GISEL-NEXT:    s_andn2_saveexec_b32 s2, s81346; GFX1032GISEL-NEXT:    s_cbranch_execz .LBB5_41347; GFX1032GISEL-NEXT:  ; %bb.3: ; %if1348; GFX1032GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x341349; GFX1032GISEL-NEXT:    s_waitcnt lgkmcnt(0)1350; GFX1032GISEL-NEXT:    s_mov_b64 s[6:7], s[6:7]1351; GFX1032GISEL-NEXT:  .LBB5_4: ; %endif1352; GFX1032GISEL-NEXT:    s_or_b32 exec_lo, exec_lo, s21353; GFX1032GISEL-NEXT:    v_mov_b32_e32 v0, s61354; GFX1032GISEL-NEXT:    v_mov_b32_e32 v1, s71355; GFX1032GISEL-NEXT:    v_mov_b32_e32 v2, 01356; GFX1032GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]1357; GFX1032GISEL-NEXT:    s_endpgm1358;1359; GFX1164DAGISEL-LABEL: divergent_cfg_i64:1360; GFX1164DAGISEL:       ; %bb.0: ; %entry1361; GFX1164DAGISEL-NEXT:    s_clause 0x11362; GFX1164DAGISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241363; GFX1164DAGISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x341364; GFX1164DAGISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v01365; GFX1164DAGISEL-NEXT:    s_mov_b64 s[6:7], exec1366; GFX1164DAGISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)1367; GFX1164DAGISEL-NEXT:    v_cmpx_lt_u32_e32 15, v01368; GFX1164DAGISEL-NEXT:    s_xor_b64 s[6:7], exec, s[6:7]1369; GFX1164DAGISEL-NEXT:    s_or_saveexec_b64 s[6:7], s[6:7]1370; GFX1164DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)1371; GFX1164DAGISEL-NEXT:    v_mov_b32_e32 v0, s21372; GFX1164DAGISEL-NEXT:    v_mov_b32_e32 v1, s31373; GFX1164DAGISEL-NEXT:    s_xor_b64 exec, exec, s[6:7]1374; GFX1164DAGISEL-NEXT:  ; %bb.1: ; %if1375; GFX1164DAGISEL-NEXT:    v_mov_b32_e32 v0, s41376; GFX1164DAGISEL-NEXT:    v_mov_b32_e32 v1, s51377; GFX1164DAGISEL-NEXT:  ; %bb.2: ; %endif1378; GFX1164DAGISEL-NEXT:    s_or_b64 exec, exec, s[6:7]1379; GFX1164DAGISEL-NEXT:    v_mov_b32_e32 v2, 01380; GFX1164DAGISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1381; GFX1164DAGISEL-NEXT:    s_endpgm1382;1383; GFX1164GISEL-LABEL: divergent_cfg_i64:1384; GFX1164GISEL:       ; %bb.0: ; %entry1385; GFX1164GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241386; GFX1164GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v01387; GFX1164GISEL-NEXT:    s_mov_b64 s[8:9], exec1388; GFX1164GISEL-NEXT:    ; implicit-def: $sgpr6_sgpr71389; GFX1164GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)1390; GFX1164GISEL-NEXT:    v_cmpx_le_u32_e32 16, v01391; GFX1164GISEL-NEXT:    s_xor_b64 s[8:9], exec, s[8:9]1392; GFX1164GISEL-NEXT:    s_cbranch_execz .LBB5_21393; GFX1164GISEL-NEXT:  ; %bb.1: ; %else1394; GFX1164GISEL-NEXT:    s_waitcnt lgkmcnt(0)1395; GFX1164GISEL-NEXT:    s_mov_b64 s[6:7], s[2:3]1396; GFX1164GISEL-NEXT:  .LBB5_2: ; %Flow1397; GFX1164GISEL-NEXT:    s_waitcnt lgkmcnt(0)1398; GFX1164GISEL-NEXT:    s_and_not1_saveexec_b64 s[2:3], s[8:9]1399; GFX1164GISEL-NEXT:    s_cbranch_execz .LBB5_41400; GFX1164GISEL-NEXT:  ; %bb.3: ; %if1401; GFX1164GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x341402; GFX1164GISEL-NEXT:    s_waitcnt lgkmcnt(0)1403; GFX1164GISEL-NEXT:    s_mov_b64 s[6:7], s[4:5]1404; GFX1164GISEL-NEXT:  .LBB5_4: ; %endif1405; GFX1164GISEL-NEXT:    s_or_b64 exec, exec, s[2:3]1406; GFX1164GISEL-NEXT:    v_mov_b32_e32 v0, s61407; GFX1164GISEL-NEXT:    v_mov_b32_e32 v1, s71408; GFX1164GISEL-NEXT:    v_mov_b32_e32 v2, 01409; GFX1164GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1410; GFX1164GISEL-NEXT:    s_endpgm1411;1412; GFX1132DAGISEL-LABEL: divergent_cfg_i64:1413; GFX1132DAGISEL:       ; %bb.0: ; %entry1414; GFX1132DAGISEL-NEXT:    s_clause 0x11415; GFX1132DAGISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241416; GFX1132DAGISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x341417; GFX1132DAGISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v01418; GFX1132DAGISEL-NEXT:    s_mov_b32 s6, exec_lo1419; GFX1132DAGISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)1420; GFX1132DAGISEL-NEXT:    v_cmpx_lt_u32_e32 15, v01421; GFX1132DAGISEL-NEXT:    s_xor_b32 s6, exec_lo, s61422; GFX1132DAGISEL-NEXT:    s_or_saveexec_b32 s6, s61423; GFX1132DAGISEL-NEXT:    s_waitcnt lgkmcnt(0)1424; GFX1132DAGISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s31425; GFX1132DAGISEL-NEXT:    s_xor_b32 exec_lo, exec_lo, s61426; GFX1132DAGISEL-NEXT:  ; %bb.1: ; %if1427; GFX1132DAGISEL-NEXT:    v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v1, s51428; GFX1132DAGISEL-NEXT:  ; %bb.2: ; %endif1429; GFX1132DAGISEL-NEXT:    s_or_b32 exec_lo, exec_lo, s61430; GFX1132DAGISEL-NEXT:    v_mov_b32_e32 v2, 01431; GFX1132DAGISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1432; GFX1132DAGISEL-NEXT:    s_endpgm1433;1434; GFX1132GISEL-LABEL: divergent_cfg_i64:1435; GFX1132GISEL:       ; %bb.0: ; %entry1436; GFX1132GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x241437; GFX1132GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v01438; GFX1132GISEL-NEXT:    s_mov_b32 s8, exec_lo1439; GFX1132GISEL-NEXT:    ; implicit-def: $sgpr6_sgpr71440; GFX1132GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)1441; GFX1132GISEL-NEXT:    v_cmpx_le_u32_e32 16, v01442; GFX1132GISEL-NEXT:    s_xor_b32 s8, exec_lo, s81443; GFX1132GISEL-NEXT:    s_cbranch_execz .LBB5_21444; GFX1132GISEL-NEXT:  ; %bb.1: ; %else1445; GFX1132GISEL-NEXT:    s_waitcnt lgkmcnt(0)1446; GFX1132GISEL-NEXT:    s_mov_b64 s[6:7], s[2:3]1447; GFX1132GISEL-NEXT:  .LBB5_2: ; %Flow1448; GFX1132GISEL-NEXT:    s_waitcnt lgkmcnt(0)1449; GFX1132GISEL-NEXT:    s_and_not1_saveexec_b32 s2, s81450; GFX1132GISEL-NEXT:    s_cbranch_execz .LBB5_41451; GFX1132GISEL-NEXT:  ; %bb.3: ; %if1452; GFX1132GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x341453; GFX1132GISEL-NEXT:    s_waitcnt lgkmcnt(0)1454; GFX1132GISEL-NEXT:    s_mov_b64 s[6:7], s[4:5]1455; GFX1132GISEL-NEXT:  .LBB5_4: ; %endif1456; GFX1132GISEL-NEXT:    s_or_b32 exec_lo, exec_lo, s21457; GFX1132GISEL-NEXT:    v_dual_mov_b32 v0, s6 :: v_dual_mov_b32 v1, s71458; GFX1132GISEL-NEXT:    v_mov_b32_e32 v2, 01459; GFX1132GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]1460; GFX1132GISEL-NEXT:    s_endpgm1461entry:1462  %tid = call i32 @llvm.amdgcn.workitem.id.x()1463  %d_cmp = icmp ult i32 %tid, 161464  br i1 %d_cmp, label %if, label %else1465 1466if:1467  %reducedValTid = call i64 @llvm.amdgcn.wave.reduce.and.i64(i64 %in2, i32 1)1468  br label %endif1469 1470else:1471  %reducedValIn = call i64 @llvm.amdgcn.wave.reduce.and.i64(i64 %in, i32 1)1472  br label %endif1473 1474endif:1475  %combine = phi i64 [%reducedValTid, %if], [%reducedValIn, %else]1476  store i64 %combine, ptr addrspace(1) %out1477  ret void1478}1479;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:1480; GFX11DAGISEL: {{.*}}1481; GFX11GISEL: {{.*}}1482