1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -global-isel -O0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefix=WAVE64 %s 3; RUN: llc -global-isel -O0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1031 < %s | FileCheck -check-prefix=WAVE32 %s 4 5; This was mishandling the constant true and false values used as a 6; scalar branch condition. 7 8define void @br_false() { 9; WAVE64-LABEL: br_false: 10; WAVE64: ; %bb.0: ; %.exit 11; WAVE64-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 12; WAVE64-NEXT: .LBB0_1: ; %bb0 13; WAVE64-NEXT: ; =>This Inner Loop Header: Depth=1 14; WAVE64-NEXT: s_mov_b32 s4, 1 15; WAVE64-NEXT: s_cmp_lg_u32 s4, 0 16; WAVE64-NEXT: s_cbranch_scc1 .LBB0_1 17; WAVE64-NEXT: ; %bb.2: ; %.exit5 18; WAVE64-NEXT: s_setpc_b64 s[30:31] 19; 20; WAVE32-LABEL: br_false: 21; WAVE32: ; %bb.0: ; %.exit 22; WAVE32-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 23; WAVE32-NEXT: .LBB0_1: ; %bb0 24; WAVE32-NEXT: ; =>This Inner Loop Header: Depth=1 25; WAVE32-NEXT: s_mov_b32 s4, 1 26; WAVE32-NEXT: s_cmp_lg_u32 s4, 0 27; WAVE32-NEXT: s_cbranch_scc1 .LBB0_1 28; WAVE32-NEXT: ; %bb.2: ; %.exit5 29; WAVE32-NEXT: s_setpc_b64 s[30:31] 30.exit: 31 br label %bb0 32 33bb0: 34 br i1 false, label %.exit5, label %bb0 35 36.exit5: 37 ret void 38} 39 40define void @br_true() { 41; WAVE64-LABEL: br_true: 42; WAVE64: ; %bb.0: ; %.exit 43; WAVE64-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 44; WAVE64-NEXT: .LBB1_1: ; %bb0 45; WAVE64-NEXT: ; =>This Inner Loop Header: Depth=1 46; WAVE64-NEXT: s_mov_b32 s4, 0 47; WAVE64-NEXT: s_cmp_lg_u32 s4, 0 48; WAVE64-NEXT: s_cbranch_scc1 .LBB1_1 49; WAVE64-NEXT: ; %bb.2: ; %.exit5 50; WAVE64-NEXT: s_setpc_b64 s[30:31] 51; 52; WAVE32-LABEL: br_true: 53; WAVE32: ; %bb.0: ; %.exit 54; WAVE32-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 55; WAVE32-NEXT: .LBB1_1: ; %bb0 56; WAVE32-NEXT: ; =>This Inner Loop Header: Depth=1 57; WAVE32-NEXT: s_mov_b32 s4, 0 58; WAVE32-NEXT: s_cmp_lg_u32 s4, 0 59; WAVE32-NEXT: s_cbranch_scc1 .LBB1_1 60; WAVE32-NEXT: ; %bb.2: ; %.exit5 61; WAVE32-NEXT: s_setpc_b64 s[30:31] 62.exit: 63 br label %bb0 64 65bb0: 66 br i1 true, label %.exit5, label %bb0 67 68.exit5: 69 ret void 70} 71 72define void @br_undef() { 73; WAVE64-LABEL: br_undef: 74; WAVE64: ; %bb.0: ; %.exit 75; WAVE64-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 76; WAVE64-NEXT: .LBB2_1: ; %bb0 77; WAVE64-NEXT: ; =>This Inner Loop Header: Depth=1 78; WAVE64-NEXT: ; implicit-def: $sgpr4 79; WAVE64-NEXT: s_and_b32 s4, s4, 1 80; WAVE64-NEXT: s_cmp_lg_u32 s4, 0 81; WAVE64-NEXT: s_cbranch_scc1 .LBB2_1 82; WAVE64-NEXT: ; %bb.2: ; %.exit5 83; WAVE64-NEXT: s_setpc_b64 s[30:31] 84; 85; WAVE32-LABEL: br_undef: 86; WAVE32: ; %bb.0: ; %.exit 87; WAVE32-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 88; WAVE32-NEXT: .LBB2_1: ; %bb0 89; WAVE32-NEXT: ; =>This Inner Loop Header: Depth=1 90; WAVE32-NEXT: ; implicit-def: $sgpr4 91; WAVE32-NEXT: s_and_b32 s4, s4, 1 92; WAVE32-NEXT: s_cmp_lg_u32 s4, 0 93; WAVE32-NEXT: s_cbranch_scc1 .LBB2_1 94; WAVE32-NEXT: ; %bb.2: ; %.exit5 95; WAVE32-NEXT: s_setpc_b64 s[30:31] 96.exit: 97 br label %bb0 98 99bb0: 100 br i1 undef, label %.exit5, label %bb0 101 102.exit5: 103 ret void 104} 105 106define void @br_poison() { 107; WAVE64-LABEL: br_poison: 108; WAVE64: ; %bb.0: ; %.exit 109; WAVE64-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 110; WAVE64-NEXT: .LBB3_1: ; %bb0 111; WAVE64-NEXT: ; =>This Inner Loop Header: Depth=1 112; WAVE64-NEXT: ; implicit-def: $sgpr4 113; WAVE64-NEXT: s_and_b32 s4, s4, 1 114; WAVE64-NEXT: s_cmp_lg_u32 s4, 0 115; WAVE64-NEXT: s_cbranch_scc1 .LBB3_1 116; WAVE64-NEXT: ; %bb.2: ; %.exit5 117; WAVE64-NEXT: s_setpc_b64 s[30:31] 118; 119; WAVE32-LABEL: br_poison: 120; WAVE32: ; %bb.0: ; %.exit 121; WAVE32-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 122; WAVE32-NEXT: .LBB3_1: ; %bb0 123; WAVE32-NEXT: ; =>This Inner Loop Header: Depth=1 124; WAVE32-NEXT: ; implicit-def: $sgpr4 125; WAVE32-NEXT: s_and_b32 s4, s4, 1 126; WAVE32-NEXT: s_cmp_lg_u32 s4, 0 127; WAVE32-NEXT: s_cbranch_scc1 .LBB3_1 128; WAVE32-NEXT: ; %bb.2: ; %.exit5 129; WAVE32-NEXT: s_setpc_b64 s[30:31] 130.exit: 131 br label %bb0 132 133bb0: 134 br i1 poison, label %.exit5, label %bb0 135 136.exit5: 137 ret void 138} 139