brintos

brintos / llvm-project-archived public Read only

0
0
Text · 22.1 KiB · d0c7b24 Raw
524 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -O3 -mtriple=amdgcn -mcpu=fiji %s -o - | FileCheck %s --check-prefixes=GFX8,DAGISEL-GFX83; RUN: llc -O3 -mtriple=amdgcn -mcpu=gfx942 %s -o - | FileCheck %s --check-prefixes=GFX942,DAGISEL-GFX9424; RUN: llc -O3 -mtriple=amdgcn -mcpu=gfx1200 %s -o - | FileCheck %s --check-prefixes=GFX12,DAGISEL-GFX125 6; RUN: llc -O3 -global-isel -mtriple=amdgcn -mcpu=fiji %s -o - | FileCheck %s --check-prefixes=GFX8,GISEL-GFX87; RUN: llc -O3 -global-isel -mtriple=amdgcn -mcpu=gfx942 %s -o - | FileCheck %s --check-prefixes=GFX942,GISEL-GFX9428; RUN: llc -O3 -global-isel -mtriple=amdgcn -mcpu=gfx1200 %s -o - | FileCheck %s --check-prefixes=GFX12,GISEL-GFX129 10; (workitem_id_x | workitem_id_y | workitem_id_z) == 011define i1 @workitem_zero() {12; DAGISEL-GFX8-LABEL: workitem_zero:13; DAGISEL-GFX8:       ; %bb.0: ; %entry14; DAGISEL-GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)15; DAGISEL-GFX8-NEXT:    v_and_b32_e32 v0, 0x3fffffff, v3116; DAGISEL-GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v017; DAGISEL-GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc18; DAGISEL-GFX8-NEXT:    s_setpc_b64 s[30:31]19;20; DAGISEL-GFX942-LABEL: workitem_zero:21; DAGISEL-GFX942:       ; %bb.0: ; %entry22; DAGISEL-GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)23; DAGISEL-GFX942-NEXT:    v_and_b32_e32 v0, 0x3fffffff, v3124; DAGISEL-GFX942-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v025; DAGISEL-GFX942-NEXT:    s_nop 126; DAGISEL-GFX942-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc27; DAGISEL-GFX942-NEXT:    s_setpc_b64 s[30:31]28;29; DAGISEL-GFX12-LABEL: workitem_zero:30; DAGISEL-GFX12:       ; %bb.0: ; %entry31; DAGISEL-GFX12-NEXT:    s_wait_loadcnt_dscnt 0x032; DAGISEL-GFX12-NEXT:    s_wait_expcnt 0x033; DAGISEL-GFX12-NEXT:    s_wait_samplecnt 0x034; DAGISEL-GFX12-NEXT:    s_wait_bvhcnt 0x035; DAGISEL-GFX12-NEXT:    s_wait_kmcnt 0x036; DAGISEL-GFX12-NEXT:    v_and_b32_e32 v0, 0x3fffffff, v3137; DAGISEL-GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)38; DAGISEL-GFX12-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v039; DAGISEL-GFX12-NEXT:    s_wait_alu depctr_va_vcc(0)40; DAGISEL-GFX12-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo41; DAGISEL-GFX12-NEXT:    s_setpc_b64 s[30:31]42;43; GISEL-GFX8-LABEL: workitem_zero:44; GISEL-GFX8:       ; %bb.0: ; %entry45; GISEL-GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)46; GISEL-GFX8-NEXT:    v_and_b32_e32 v0, 0x3ff, v3147; GISEL-GFX8-NEXT:    v_bfe_u32 v1, v31, 10, 1048; GISEL-GFX8-NEXT:    v_or_b32_e32 v0, v0, v149; GISEL-GFX8-NEXT:    v_bfe_u32 v1, v31, 20, 1050; GISEL-GFX8-NEXT:    v_or_b32_e32 v0, v0, v151; GISEL-GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v052; GISEL-GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc53; GISEL-GFX8-NEXT:    s_setpc_b64 s[30:31]54;55; GISEL-GFX942-LABEL: workitem_zero:56; GISEL-GFX942:       ; %bb.0: ; %entry57; GISEL-GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)58; GISEL-GFX942-NEXT:    v_and_b32_e32 v0, 0x3ff, v3159; GISEL-GFX942-NEXT:    v_bfe_u32 v1, v31, 10, 1060; GISEL-GFX942-NEXT:    v_bfe_u32 v2, v31, 20, 1061; GISEL-GFX942-NEXT:    v_or3_b32 v0, v0, v1, v262; GISEL-GFX942-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v063; GISEL-GFX942-NEXT:    s_nop 164; GISEL-GFX942-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc65; GISEL-GFX942-NEXT:    s_setpc_b64 s[30:31]66;67; GISEL-GFX12-LABEL: workitem_zero:68; GISEL-GFX12:       ; %bb.0: ; %entry69; GISEL-GFX12-NEXT:    s_wait_loadcnt_dscnt 0x070; GISEL-GFX12-NEXT:    s_wait_expcnt 0x071; GISEL-GFX12-NEXT:    s_wait_samplecnt 0x072; GISEL-GFX12-NEXT:    s_wait_bvhcnt 0x073; GISEL-GFX12-NEXT:    s_wait_kmcnt 0x074; GISEL-GFX12-NEXT:    v_and_b32_e32 v0, 0x3ff, v3175; GISEL-GFX12-NEXT:    v_bfe_u32 v1, v31, 10, 1076; GISEL-GFX12-NEXT:    v_bfe_u32 v2, v31, 20, 1077; GISEL-GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)78; GISEL-GFX12-NEXT:    v_or3_b32 v0, v0, v1, v279; GISEL-GFX12-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v080; GISEL-GFX12-NEXT:    s_wait_alu depctr_va_vcc(0)81; GISEL-GFX12-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo82; GISEL-GFX12-NEXT:    s_setpc_b64 s[30:31]83entry:84  %0 = tail call i32 @llvm.amdgcn.workitem.id.x()85  %1 = tail call i32 @llvm.amdgcn.workitem.id.y()86  %or = or i32 %0, %187  %2 = tail call i32 @llvm.amdgcn.workitem.id.z()88  %or1 = or i32 %or, %289  %cmp = icmp eq i32 %or1, 090  ret i1 %cmp91}92 93; (workitem_id_x | workitem_id_y | workitem_id_z) != 094define i1 @workitem_nonzero() {95; DAGISEL-GFX8-LABEL: workitem_nonzero:96; DAGISEL-GFX8:       ; %bb.0: ; %entry97; DAGISEL-GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)98; DAGISEL-GFX8-NEXT:    v_and_b32_e32 v0, 0x3fffffff, v3199; DAGISEL-GFX8-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v0100; DAGISEL-GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc101; DAGISEL-GFX8-NEXT:    s_setpc_b64 s[30:31]102;103; DAGISEL-GFX942-LABEL: workitem_nonzero:104; DAGISEL-GFX942:       ; %bb.0: ; %entry105; DAGISEL-GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)106; DAGISEL-GFX942-NEXT:    v_and_b32_e32 v0, 0x3fffffff, v31107; DAGISEL-GFX942-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v0108; DAGISEL-GFX942-NEXT:    s_nop 1109; DAGISEL-GFX942-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc110; DAGISEL-GFX942-NEXT:    s_setpc_b64 s[30:31]111;112; DAGISEL-GFX12-LABEL: workitem_nonzero:113; DAGISEL-GFX12:       ; %bb.0: ; %entry114; DAGISEL-GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0115; DAGISEL-GFX12-NEXT:    s_wait_expcnt 0x0116; DAGISEL-GFX12-NEXT:    s_wait_samplecnt 0x0117; DAGISEL-GFX12-NEXT:    s_wait_bvhcnt 0x0118; DAGISEL-GFX12-NEXT:    s_wait_kmcnt 0x0119; DAGISEL-GFX12-NEXT:    v_and_b32_e32 v0, 0x3fffffff, v31120; DAGISEL-GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)121; DAGISEL-GFX12-NEXT:    v_cmp_ne_u32_e32 vcc_lo, 0, v0122; DAGISEL-GFX12-NEXT:    s_wait_alu depctr_va_vcc(0)123; DAGISEL-GFX12-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo124; DAGISEL-GFX12-NEXT:    s_setpc_b64 s[30:31]125;126; GISEL-GFX8-LABEL: workitem_nonzero:127; GISEL-GFX8:       ; %bb.0: ; %entry128; GISEL-GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)129; GISEL-GFX8-NEXT:    v_and_b32_e32 v0, 0x3ff, v31130; GISEL-GFX8-NEXT:    v_bfe_u32 v1, v31, 10, 10131; GISEL-GFX8-NEXT:    v_or_b32_e32 v0, v0, v1132; GISEL-GFX8-NEXT:    v_bfe_u32 v1, v31, 20, 10133; GISEL-GFX8-NEXT:    v_or_b32_e32 v0, v0, v1134; GISEL-GFX8-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v0135; GISEL-GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc136; GISEL-GFX8-NEXT:    s_setpc_b64 s[30:31]137;138; GISEL-GFX942-LABEL: workitem_nonzero:139; GISEL-GFX942:       ; %bb.0: ; %entry140; GISEL-GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)141; GISEL-GFX942-NEXT:    v_and_b32_e32 v0, 0x3ff, v31142; GISEL-GFX942-NEXT:    v_bfe_u32 v1, v31, 10, 10143; GISEL-GFX942-NEXT:    v_bfe_u32 v2, v31, 20, 10144; GISEL-GFX942-NEXT:    v_or3_b32 v0, v0, v1, v2145; GISEL-GFX942-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v0146; GISEL-GFX942-NEXT:    s_nop 1147; GISEL-GFX942-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc148; GISEL-GFX942-NEXT:    s_setpc_b64 s[30:31]149;150; GISEL-GFX12-LABEL: workitem_nonzero:151; GISEL-GFX12:       ; %bb.0: ; %entry152; GISEL-GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0153; GISEL-GFX12-NEXT:    s_wait_expcnt 0x0154; GISEL-GFX12-NEXT:    s_wait_samplecnt 0x0155; GISEL-GFX12-NEXT:    s_wait_bvhcnt 0x0156; GISEL-GFX12-NEXT:    s_wait_kmcnt 0x0157; GISEL-GFX12-NEXT:    v_and_b32_e32 v0, 0x3ff, v31158; GISEL-GFX12-NEXT:    v_bfe_u32 v1, v31, 10, 10159; GISEL-GFX12-NEXT:    v_bfe_u32 v2, v31, 20, 10160; GISEL-GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)161; GISEL-GFX12-NEXT:    v_or3_b32 v0, v0, v1, v2162; GISEL-GFX12-NEXT:    v_cmp_ne_u32_e32 vcc_lo, 0, v0163; GISEL-GFX12-NEXT:    s_wait_alu depctr_va_vcc(0)164; GISEL-GFX12-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo165; GISEL-GFX12-NEXT:    s_setpc_b64 s[30:31]166entry:167  %0 = tail call i32 @llvm.amdgcn.workitem.id.x()168  %1 = tail call i32 @llvm.amdgcn.workitem.id.y()169  %or = or i32 %0, %1170  %2 = tail call i32 @llvm.amdgcn.workitem.id.z()171  %or1 = or i32 %or, %2172  %cmp = icmp ne i32 %or1, 0173  ret i1 %cmp174}175 176; (workgroup_id_x | workgroup_id_y | workgroup_id_z) == 0177define i1 @workgroup_zero() {178; DAGISEL-GFX8-LABEL: workgroup_zero:179; DAGISEL-GFX8:       ; %bb.0: ; %entry180; DAGISEL-GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)181; DAGISEL-GFX8-NEXT:    s_or_b32 s4, s12, s13182; DAGISEL-GFX8-NEXT:    s_or_b32 s4, s4, s14183; DAGISEL-GFX8-NEXT:    s_cmp_eq_u32 s4, 0184; DAGISEL-GFX8-NEXT:    s_cselect_b64 s[4:5], -1, 0185; DAGISEL-GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]186; DAGISEL-GFX8-NEXT:    s_setpc_b64 s[30:31]187;188; DAGISEL-GFX942-LABEL: workgroup_zero:189; DAGISEL-GFX942:       ; %bb.0: ; %entry190; DAGISEL-GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)191; DAGISEL-GFX942-NEXT:    s_or_b32 s0, s12, s13192; DAGISEL-GFX942-NEXT:    s_or_b32 s0, s0, s14193; DAGISEL-GFX942-NEXT:    s_cmp_eq_u32 s0, 0194; DAGISEL-GFX942-NEXT:    s_cselect_b64 s[0:1], -1, 0195; DAGISEL-GFX942-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[0:1]196; DAGISEL-GFX942-NEXT:    s_setpc_b64 s[30:31]197;198; DAGISEL-GFX12-LABEL: workgroup_zero:199; DAGISEL-GFX12:       ; %bb.0: ; %entry200; DAGISEL-GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0201; DAGISEL-GFX12-NEXT:    s_wait_expcnt 0x0202; DAGISEL-GFX12-NEXT:    s_wait_samplecnt 0x0203; DAGISEL-GFX12-NEXT:    s_wait_bvhcnt 0x0204; DAGISEL-GFX12-NEXT:    s_wait_kmcnt 0x0205; DAGISEL-GFX12-NEXT:    s_and_b32 s0, ttmp7, 0xffff206; DAGISEL-GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)207; DAGISEL-GFX12-NEXT:    s_lshr_b32 s1, ttmp7, 16208; DAGISEL-GFX12-NEXT:    s_or_b32 s0, ttmp9, s0209; DAGISEL-GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)210; DAGISEL-GFX12-NEXT:    s_or_b32 s0, s0, s1211; DAGISEL-GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)212; DAGISEL-GFX12-NEXT:    s_cmp_eq_u32 s0, 0213; DAGISEL-GFX12-NEXT:    s_cselect_b32 s0, -1, 0214; DAGISEL-GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)215; DAGISEL-GFX12-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s0216; DAGISEL-GFX12-NEXT:    s_setpc_b64 s[30:31]217;218; GISEL-GFX8-LABEL: workgroup_zero:219; GISEL-GFX8:       ; %bb.0: ; %entry220; GISEL-GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)221; GISEL-GFX8-NEXT:    s_or_b32 s4, s12, s13222; GISEL-GFX8-NEXT:    s_or_b32 s4, s4, s14223; GISEL-GFX8-NEXT:    s_cmp_eq_u32 s4, 0224; GISEL-GFX8-NEXT:    s_cselect_b32 s4, 1, 0225; GISEL-GFX8-NEXT:    v_mov_b32_e32 v0, s4226; GISEL-GFX8-NEXT:    s_setpc_b64 s[30:31]227;228; GISEL-GFX942-LABEL: workgroup_zero:229; GISEL-GFX942:       ; %bb.0: ; %entry230; GISEL-GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)231; GISEL-GFX942-NEXT:    s_or_b32 s0, s12, s13232; GISEL-GFX942-NEXT:    s_or_b32 s0, s0, s14233; GISEL-GFX942-NEXT:    s_cmp_eq_u32 s0, 0234; GISEL-GFX942-NEXT:    s_cselect_b32 s0, 1, 0235; GISEL-GFX942-NEXT:    v_mov_b32_e32 v0, s0236; GISEL-GFX942-NEXT:    s_setpc_b64 s[30:31]237;238; GISEL-GFX12-LABEL: workgroup_zero:239; GISEL-GFX12:       ; %bb.0: ; %entry240; GISEL-GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0241; GISEL-GFX12-NEXT:    s_wait_expcnt 0x0242; GISEL-GFX12-NEXT:    s_wait_samplecnt 0x0243; GISEL-GFX12-NEXT:    s_wait_bvhcnt 0x0244; GISEL-GFX12-NEXT:    s_wait_kmcnt 0x0245; GISEL-GFX12-NEXT:    s_and_b32 s0, ttmp7, 0xffff246; GISEL-GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)247; GISEL-GFX12-NEXT:    s_lshr_b32 s1, ttmp7, 16248; GISEL-GFX12-NEXT:    s_or_b32 s0, ttmp9, s0249; GISEL-GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)250; GISEL-GFX12-NEXT:    s_or_b32 s0, s0, s1251; GISEL-GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)252; GISEL-GFX12-NEXT:    s_cmp_eq_u32 s0, 0253; GISEL-GFX12-NEXT:    s_cselect_b32 s0, 1, 0254; GISEL-GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)255; GISEL-GFX12-NEXT:    v_mov_b32_e32 v0, s0256; GISEL-GFX12-NEXT:    s_setpc_b64 s[30:31]257entry:258  %0 = tail call i32 @llvm.amdgcn.workgroup.id.x()259  %1 = tail call i32 @llvm.amdgcn.workgroup.id.y()260  %or = or i32 %0, %1261  %2 = tail call i32 @llvm.amdgcn.workgroup.id.z()262  %or1 = or i32 %or, %2263  %cmp = icmp eq i32 %or1, 0264  ret i1 %cmp265}266 267; (workgroup_id_x | workgroup_id_y | workgroup_id_z) != 0268define i1 @workgroup_nonzero() {269; DAGISEL-GFX8-LABEL: workgroup_nonzero:270; DAGISEL-GFX8:       ; %bb.0: ; %entry271; DAGISEL-GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)272; DAGISEL-GFX8-NEXT:    s_or_b32 s4, s12, s13273; DAGISEL-GFX8-NEXT:    s_or_b32 s4, s4, s14274; DAGISEL-GFX8-NEXT:    s_cselect_b64 s[4:5], -1, 0275; DAGISEL-GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[4:5]276; DAGISEL-GFX8-NEXT:    s_setpc_b64 s[30:31]277;278; DAGISEL-GFX942-LABEL: workgroup_nonzero:279; DAGISEL-GFX942:       ; %bb.0: ; %entry280; DAGISEL-GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)281; DAGISEL-GFX942-NEXT:    s_or_b32 s0, s12, s13282; DAGISEL-GFX942-NEXT:    s_or_b32 s0, s0, s14283; DAGISEL-GFX942-NEXT:    s_cselect_b64 s[0:1], -1, 0284; DAGISEL-GFX942-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s[0:1]285; DAGISEL-GFX942-NEXT:    s_setpc_b64 s[30:31]286;287; DAGISEL-GFX12-LABEL: workgroup_nonzero:288; DAGISEL-GFX12:       ; %bb.0: ; %entry289; DAGISEL-GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0290; DAGISEL-GFX12-NEXT:    s_wait_expcnt 0x0291; DAGISEL-GFX12-NEXT:    s_wait_samplecnt 0x0292; DAGISEL-GFX12-NEXT:    s_wait_bvhcnt 0x0293; DAGISEL-GFX12-NEXT:    s_wait_kmcnt 0x0294; DAGISEL-GFX12-NEXT:    s_and_b32 s0, ttmp7, 0xffff295; DAGISEL-GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)296; DAGISEL-GFX12-NEXT:    s_lshr_b32 s1, ttmp7, 16297; DAGISEL-GFX12-NEXT:    s_or_b32 s0, ttmp9, s0298; DAGISEL-GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)299; DAGISEL-GFX12-NEXT:    s_or_b32 s0, s0, s1300; DAGISEL-GFX12-NEXT:    s_cselect_b32 s0, -1, 0301; DAGISEL-GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)302; DAGISEL-GFX12-NEXT:    v_cndmask_b32_e64 v0, 0, 1, s0303; DAGISEL-GFX12-NEXT:    s_setpc_b64 s[30:31]304;305; GISEL-GFX8-LABEL: workgroup_nonzero:306; GISEL-GFX8:       ; %bb.0: ; %entry307; GISEL-GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)308; GISEL-GFX8-NEXT:    s_or_b32 s4, s12, s13309; GISEL-GFX8-NEXT:    s_or_b32 s4, s4, s14310; GISEL-GFX8-NEXT:    s_cselect_b32 s4, 1, 0311; GISEL-GFX8-NEXT:    v_mov_b32_e32 v0, s4312; GISEL-GFX8-NEXT:    s_setpc_b64 s[30:31]313;314; GISEL-GFX942-LABEL: workgroup_nonzero:315; GISEL-GFX942:       ; %bb.0: ; %entry316; GISEL-GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)317; GISEL-GFX942-NEXT:    s_or_b32 s0, s12, s13318; GISEL-GFX942-NEXT:    s_or_b32 s0, s0, s14319; GISEL-GFX942-NEXT:    s_cselect_b32 s0, 1, 0320; GISEL-GFX942-NEXT:    v_mov_b32_e32 v0, s0321; GISEL-GFX942-NEXT:    s_setpc_b64 s[30:31]322;323; GISEL-GFX12-LABEL: workgroup_nonzero:324; GISEL-GFX12:       ; %bb.0: ; %entry325; GISEL-GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0326; GISEL-GFX12-NEXT:    s_wait_expcnt 0x0327; GISEL-GFX12-NEXT:    s_wait_samplecnt 0x0328; GISEL-GFX12-NEXT:    s_wait_bvhcnt 0x0329; GISEL-GFX12-NEXT:    s_wait_kmcnt 0x0330; GISEL-GFX12-NEXT:    s_and_b32 s0, ttmp7, 0xffff331; GISEL-GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)332; GISEL-GFX12-NEXT:    s_lshr_b32 s1, ttmp7, 16333; GISEL-GFX12-NEXT:    s_or_b32 s0, ttmp9, s0334; GISEL-GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)335; GISEL-GFX12-NEXT:    s_or_b32 s0, s0, s1336; GISEL-GFX12-NEXT:    s_cselect_b32 s0, 1, 0337; GISEL-GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)338; GISEL-GFX12-NEXT:    v_mov_b32_e32 v0, s0339; GISEL-GFX12-NEXT:    s_setpc_b64 s[30:31]340entry:341  %0 = tail call i32 @llvm.amdgcn.workgroup.id.x()342  %1 = tail call i32 @llvm.amdgcn.workgroup.id.y()343  %or = or i32 %0, %1344  %2 = tail call i32 @llvm.amdgcn.workgroup.id.z()345  %or1 = or i32 %or, %2346  %cmp = icmp ne i32 %or1, 0347  ret i1 %cmp348}349 350; (workitem_id_x | workitem_id_y | workitem_id_z | workgroup_id_x | workgroup_id_y | workgroup_id_z) == 0351define i1 @workitem_workgroup_zero() {352; GFX8-LABEL: workitem_workgroup_zero:353; GFX8:       ; %bb.0: ; %entry354; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)355; GFX8-NEXT:    s_or_b32 s4, s12, s13356; GFX8-NEXT:    s_or_b32 s4, s4, s14357; GFX8-NEXT:    v_and_b32_e32 v0, 0x3ff, v31358; GFX8-NEXT:    v_or_b32_e32 v0, s4, v0359; GFX8-NEXT:    v_bfe_u32 v1, v31, 10, 10360; GFX8-NEXT:    v_or_b32_e32 v0, v0, v1361; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0362; GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc363; GFX8-NEXT:    s_setpc_b64 s[30:31]364;365; GFX942-LABEL: workitem_workgroup_zero:366; GFX942:       ; %bb.0: ; %entry367; GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)368; GFX942-NEXT:    s_or_b32 s0, s12, s13369; GFX942-NEXT:    s_or_b32 s0, s0, s14370; GFX942-NEXT:    v_and_b32_e32 v0, 0x3ff, v31371; GFX942-NEXT:    v_bfe_u32 v1, v31, 10, 10372; GFX942-NEXT:    v_or3_b32 v0, s0, v0, v1373; GFX942-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0374; GFX942-NEXT:    s_nop 1375; GFX942-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc376; GFX942-NEXT:    s_setpc_b64 s[30:31]377;378; GFX12-LABEL: workitem_workgroup_zero:379; GFX12:       ; %bb.0: ; %entry380; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0381; GFX12-NEXT:    s_wait_expcnt 0x0382; GFX12-NEXT:    s_wait_samplecnt 0x0383; GFX12-NEXT:    s_wait_bvhcnt 0x0384; GFX12-NEXT:    s_wait_kmcnt 0x0385; GFX12-NEXT:    s_and_b32 s0, ttmp7, 0xffff386; GFX12-NEXT:    v_and_b32_e32 v0, 0x3ff, v31387; GFX12-NEXT:    v_bfe_u32 v1, v31, 10, 10388; GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)389; GFX12-NEXT:    s_lshr_b32 s1, ttmp7, 16390; GFX12-NEXT:    s_or_b32 s0, ttmp9, s0391; GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)392; GFX12-NEXT:    s_or_b32 s0, s0, s1393; GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)394; GFX12-NEXT:    v_or3_b32 v0, s0, v0, v1395; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)396; GFX12-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0397; GFX12-NEXT:    s_wait_alu depctr_va_vcc(0)398; GFX12-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo399; GFX12-NEXT:    s_setpc_b64 s[30:31]400entry:401  %0 = tail call i32 @llvm.amdgcn.workgroup.id.x()402  %1 = tail call i32 @llvm.amdgcn.workgroup.id.y()403  %or = or i32 %0, %1404  %2 = tail call i32 @llvm.amdgcn.workgroup.id.z()405  %or1 = or i32 %or, %2406  %3 = tail call i32 @llvm.amdgcn.workitem.id.x()407  %or2 = or i32 %or1, %3408  %4 = tail call i32 @llvm.amdgcn.workitem.id.y()409  %or3 = or i32 %or2, %4410  %5 = tail call i32 @llvm.amdgcn.workitem.id.z()411  %or4 = or i32 %or3, %5412  %cmp = icmp eq i32 %or3, 0413  ret i1 %cmp414}415 416; (workitem_id_x | workitem_id_y | workitem_id_z | workgroup_id_x | workgroup_id_y | workgroup_id_z) != 0417define i1 @workitem_workgroup_nonzero() {418; GFX8-LABEL: workitem_workgroup_nonzero:419; GFX8:       ; %bb.0: ; %entry420; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)421; GFX8-NEXT:    s_or_b32 s4, s12, s13422; GFX8-NEXT:    s_or_b32 s4, s4, s14423; GFX8-NEXT:    v_and_b32_e32 v0, 0x3ff, v31424; GFX8-NEXT:    v_or_b32_e32 v0, s4, v0425; GFX8-NEXT:    v_bfe_u32 v1, v31, 10, 10426; GFX8-NEXT:    v_or_b32_e32 v0, v0, v1427; GFX8-NEXT:    v_bfe_u32 v1, v31, 20, 10428; GFX8-NEXT:    v_or_b32_e32 v0, v0, v1429; GFX8-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v0430; GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc431; GFX8-NEXT:    s_setpc_b64 s[30:31]432;433; DAGISEL-GFX942-LABEL: workitem_workgroup_nonzero:434; DAGISEL-GFX942:       ; %bb.0: ; %entry435; DAGISEL-GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)436; DAGISEL-GFX942-NEXT:    s_or_b32 s0, s12, s13437; DAGISEL-GFX942-NEXT:    s_or_b32 s0, s0, s14438; DAGISEL-GFX942-NEXT:    v_and_b32_e32 v0, 0x3ff, v31439; DAGISEL-GFX942-NEXT:    v_or_b32_e32 v0, s0, v0440; DAGISEL-GFX942-NEXT:    v_bfe_u32 v1, v31, 20, 10441; DAGISEL-GFX942-NEXT:    v_bfe_u32 v2, v31, 10, 10442; DAGISEL-GFX942-NEXT:    v_or3_b32 v0, v0, v2, v1443; DAGISEL-GFX942-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v0444; DAGISEL-GFX942-NEXT:    s_nop 1445; DAGISEL-GFX942-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc446; DAGISEL-GFX942-NEXT:    s_setpc_b64 s[30:31]447;448; DAGISEL-GFX12-LABEL: workitem_workgroup_nonzero:449; DAGISEL-GFX12:       ; %bb.0: ; %entry450; DAGISEL-GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0451; DAGISEL-GFX12-NEXT:    s_wait_expcnt 0x0452; DAGISEL-GFX12-NEXT:    s_wait_samplecnt 0x0453; DAGISEL-GFX12-NEXT:    s_wait_bvhcnt 0x0454; DAGISEL-GFX12-NEXT:    s_wait_kmcnt 0x0455; DAGISEL-GFX12-NEXT:    v_and_b32_e32 v0, 0x3ff, v31456; DAGISEL-GFX12-NEXT:    s_and_b32 s0, ttmp7, 0xffff457; DAGISEL-GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)458; DAGISEL-GFX12-NEXT:    s_lshr_b32 s1, ttmp7, 16459; DAGISEL-GFX12-NEXT:    s_or_b32 s0, ttmp9, s0460; DAGISEL-GFX12-NEXT:    v_bfe_u32 v1, v31, 20, 10461; DAGISEL-GFX12-NEXT:    v_bfe_u32 v2, v31, 10, 10462; DAGISEL-GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)463; DAGISEL-GFX12-NEXT:    v_or3_b32 v0, s0, s1, v0464; DAGISEL-GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)465; DAGISEL-GFX12-NEXT:    v_or3_b32 v0, v0, v2, v1466; DAGISEL-GFX12-NEXT:    v_cmp_ne_u32_e32 vcc_lo, 0, v0467; DAGISEL-GFX12-NEXT:    s_wait_alu depctr_va_vcc(0)468; DAGISEL-GFX12-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo469; DAGISEL-GFX12-NEXT:    s_setpc_b64 s[30:31]470;471; GISEL-GFX942-LABEL: workitem_workgroup_nonzero:472; GISEL-GFX942:       ; %bb.0: ; %entry473; GISEL-GFX942-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)474; GISEL-GFX942-NEXT:    s_or_b32 s0, s12, s13475; GISEL-GFX942-NEXT:    s_or_b32 s0, s0, s14476; GISEL-GFX942-NEXT:    v_mov_b32_e32 v0, 0x3ff477; GISEL-GFX942-NEXT:    v_and_or_b32 v0, v31, v0, s0478; GISEL-GFX942-NEXT:    v_bfe_u32 v1, v31, 10, 10479; GISEL-GFX942-NEXT:    v_bfe_u32 v2, v31, 20, 10480; GISEL-GFX942-NEXT:    v_or3_b32 v0, v0, v1, v2481; GISEL-GFX942-NEXT:    v_cmp_ne_u32_e32 vcc, 0, v0482; GISEL-GFX942-NEXT:    s_nop 1483; GISEL-GFX942-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc484; GISEL-GFX942-NEXT:    s_setpc_b64 s[30:31]485;486; GISEL-GFX12-LABEL: workitem_workgroup_nonzero:487; GISEL-GFX12:       ; %bb.0: ; %entry488; GISEL-GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0489; GISEL-GFX12-NEXT:    s_wait_expcnt 0x0490; GISEL-GFX12-NEXT:    s_wait_samplecnt 0x0491; GISEL-GFX12-NEXT:    s_wait_bvhcnt 0x0492; GISEL-GFX12-NEXT:    s_wait_kmcnt 0x0493; GISEL-GFX12-NEXT:    s_and_b32 s0, ttmp7, 0xffff494; GISEL-GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)495; GISEL-GFX12-NEXT:    s_lshr_b32 s1, ttmp7, 16496; GISEL-GFX12-NEXT:    s_or_b32 s0, ttmp9, s0497; GISEL-GFX12-NEXT:    v_bfe_u32 v0, v31, 10, 10498; GISEL-GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)499; GISEL-GFX12-NEXT:    s_or_b32 s0, s0, s1500; GISEL-GFX12-NEXT:    v_bfe_u32 v1, v31, 20, 10501; GISEL-GFX12-NEXT:    s_wait_alu depctr_sa_sdst(0)502; GISEL-GFX12-NEXT:    v_and_or_b32 v2, 0x3ff, v31, s0503; GISEL-GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)504; GISEL-GFX12-NEXT:    v_or3_b32 v0, v2, v0, v1505; GISEL-GFX12-NEXT:    v_cmp_ne_u32_e32 vcc_lo, 0, v0506; GISEL-GFX12-NEXT:    s_wait_alu depctr_va_vcc(0)507; GISEL-GFX12-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo508; GISEL-GFX12-NEXT:    s_setpc_b64 s[30:31]509entry:510  %0 = tail call i32 @llvm.amdgcn.workgroup.id.x()511  %1 = tail call i32 @llvm.amdgcn.workgroup.id.y()512  %or = or i32 %0, %1513  %2 = tail call i32 @llvm.amdgcn.workgroup.id.z()514  %or1 = or i32 %or, %2515  %3 = tail call i32 @llvm.amdgcn.workitem.id.x()516  %or2 = or i32 %or1, %3517  %4 = tail call i32 @llvm.amdgcn.workitem.id.y()518  %or3 = or i32 %or2, %4519  %5 = tail call i32 @llvm.amdgcn.workitem.id.z()520  %or4 = or i32 %or3, %5521  %cmp = icmp ne i32 %or4, 0522  ret i1 %cmp523}524