1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect %s -verify-machineinstrs -o - -regbankselect-fast | FileCheck %s 3# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect %s -verify-machineinstrs -o - -regbankselect-greedy | FileCheck %s 4 5--- 6name: brcond_vcc_cond 7legalized: true 8body: | 9 ; CHECK-LABEL: name: brcond_vcc_cond 10 ; CHECK: bb.0.entry: 11 ; CHECK: successors: %bb.1(0x80000000) 12 ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 13 ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1 14 ; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]] 15 ; CHECK: G_BRCOND [[ICMP]](s1), %bb.1 16 ; CHECK: bb.1: 17 bb.0.entry: 18 successors: %bb.1 19 liveins: $vgpr0, $vgpr1 20 %0:_(s32) = COPY $vgpr0 21 %1:_(s32) = COPY $vgpr1 22 %2:_(s1) = G_ICMP intpred(ne), %0, %1 23 G_BRCOND %2, %bb.1 24 25 bb.1: 26... 27 28--- 29name: brcond_scc_cond 30legalized: true 31body: | 32 ; CHECK-LABEL: name: brcond_scc_cond 33 ; CHECK: bb.0.entry: 34 ; CHECK: successors: %bb.1(0x80000000) 35 ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 36 ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1 37 ; CHECK: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]] 38 ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32) 39 ; CHECK: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1) 40 ; CHECK: G_BRCOND [[ZEXT]](s32), %bb.1 41 ; CHECK: bb.1: 42 bb.0.entry: 43 successors: %bb.1 44 liveins: $sgpr0, $sgpr1 45 %0:_(s32) = COPY $sgpr0 46 %1:_(s32) = COPY $sgpr1 47 %2:_(s1) = G_ICMP intpred(ne), %0, %1 48 G_BRCOND %2, %bb.1 49 50 bb.1: 51... 52 53--- 54name: brcond_sgpr_cond 55legalized: true 56body: | 57 ; CHECK-LABEL: name: brcond_sgpr_cond 58 ; CHECK: bb.0.entry: 59 ; CHECK: successors: %bb.1(0x80000000) 60 ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 61 ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32) 62 ; CHECK: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1) 63 ; CHECK: G_BRCOND [[ZEXT]](s32), %bb.1 64 ; CHECK: bb.1: 65 bb.0.entry: 66 successors: %bb.1 67 liveins: $sgpr0 68 %0:_(s32) = COPY $sgpr0 69 %1:_(s1) = G_TRUNC %0 70 G_BRCOND %1, %bb.1 71 72 bb.1: 73... 74 75--- 76name: brcond_vgpr_cond 77legalized: true 78body: | 79 ; CHECK-LABEL: name: brcond_vgpr_cond 80 ; CHECK: bb.0.entry: 81 ; CHECK: successors: %bb.1(0x80000000) 82 ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 83 ; CHECK: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32) 84 ; CHECK: [[COPY1:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1) 85 ; CHECK: G_BRCOND [[COPY1]](s1), %bb.1 86 ; CHECK: bb.1: 87 bb.0.entry: 88 successors: %bb.1 89 liveins: $vgpr0 90 %0:_(s32) = COPY $vgpr0 91 %1:_(s1) = G_TRUNC %0 92 G_BRCOND %1, %bb.1 93 94 bb.1: 95... 96 97 98# The terminator that needs handling is the only instruction in the 99# block. 100 101--- 102name: empty_block_vgpr_brcond 103legalized: true 104body: | 105 ; CHECK-LABEL: name: empty_block_vgpr_brcond 106 ; CHECK: bb.0.entry: 107 ; CHECK: successors: %bb.1(0x80000000) 108 ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 109 ; CHECK: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32) 110 ; CHECK: bb.1: 111 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 112 ; CHECK: [[COPY1:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1) 113 ; CHECK: G_BRCOND [[COPY1]](s1), %bb.1 114 ; CHECK: bb.2: 115 bb.0.entry: 116 successors: %bb.1 117 liveins: $vgpr0 118 %0:_(s32) = COPY $vgpr0 119 %1:_(s1) = G_TRUNC %0 120 121 bb.1: 122 G_BRCOND %1, %bb.1 123 124 bb.2: 125... 126 127 128# Make sure the first instruction in the block isn't skipped. 129--- 130name: copy_first_inst_brcond 131legalized: true 132body: | 133 ; CHECK-LABEL: name: copy_first_inst_brcond 134 ; CHECK: bb.0.entry: 135 ; CHECK: successors: %bb.1(0x80000000) 136 ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 137 ; CHECK: bb.1: 138 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 139 ; CHECK: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32) 140 ; CHECK: [[COPY1:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1) 141 ; CHECK: G_BRCOND [[COPY1]](s1), %bb.1 142 ; CHECK: bb.2: 143 bb.0.entry: 144 successors: %bb.1 145 liveins: $vgpr0 146 %0:_(s32) = COPY $vgpr0 147 148 bb.1: 149 %1:_(s1) = G_TRUNC %0 150 G_BRCOND %1, %bb.1 151 152 bb.2: 153... 154 155# Extra instruction separates brcond from the condition def 156--- 157name: copy_middle_inst_brcond 158legalized: true 159body: | 160 ; CHECK-LABEL: name: copy_middle_inst_brcond 161 ; CHECK: bb.0.entry: 162 ; CHECK: successors: %bb.1(0x80000000) 163 ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 164 ; CHECK: bb.1: 165 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000) 166 ; CHECK: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32) 167 ; CHECK: S_NOP 0 168 ; CHECK: [[COPY1:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1) 169 ; CHECK: G_BRCOND [[COPY1]](s1), %bb.1 170 ; CHECK: bb.2: 171 bb.0.entry: 172 successors: %bb.1 173 liveins: $vgpr0 174 %0:_(s32) = COPY $vgpr0 175 176 bb.1: 177 %1:_(s1) = G_TRUNC %0 178 S_NOP 0 179 G_BRCOND %1, %bb.1 180 181 bb.2: 182... 183