217 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass="amdgpu-regbankselect,amdgpu-regbanklegalize" %s -o - | FileCheck %s3 4---5name: brcond_vcc_cond6legalized: true7body: |8 ; CHECK-LABEL: name: brcond_vcc_cond9 ; CHECK: bb.0.entry:10 ; CHECK-NEXT: successors: %bb.1(0x80000000)11 ; CHECK-NEXT: liveins: $vgpr0, $vgpr112 ; CHECK-NEXT: {{ $}}13 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr014 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr115 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]16 ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.117 ; CHECK-NEXT: {{ $}}18 ; CHECK-NEXT: bb.1:19 bb.0.entry:20 successors: %bb.121 liveins: $vgpr0, $vgpr122 %0:_(s32) = COPY $vgpr023 %1:_(s32) = COPY $vgpr124 %2:_(s1) = G_ICMP intpred(ne), %0, %125 G_BRCOND %2, %bb.126 27 bb.1:28...29 30---31name: brcond_scc_cond32legalized: true33body: |34 ; CHECK-LABEL: name: brcond_scc_cond35 ; CHECK: bb.0.entry:36 ; CHECK-NEXT: successors: %bb.1(0x80000000)37 ; CHECK-NEXT: liveins: $sgpr0, $sgpr138 ; CHECK-NEXT: {{ $}}39 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr040 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr141 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]42 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 143 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s32) = G_AND [[ICMP]], [[C]]44 ; CHECK-NEXT: G_BRCOND [[AND]](s32), %bb.145 ; CHECK-NEXT: {{ $}}46 ; CHECK-NEXT: bb.1:47 bb.0.entry:48 successors: %bb.149 liveins: $sgpr0, $sgpr150 %0:_(s32) = COPY $sgpr051 %1:_(s32) = COPY $sgpr152 %2:_(s1) = G_ICMP intpred(ne), %0, %153 G_BRCOND %2, %bb.154 55 bb.1:56...57 58---59name: brcond_sgpr_cond60legalized: true61body: |62 ; CHECK-LABEL: name: brcond_sgpr_cond63 ; CHECK: bb.0.entry:64 ; CHECK-NEXT: successors: %bb.1(0x80000000)65 ; CHECK-NEXT: liveins: $sgpr066 ; CHECK-NEXT: {{ $}}67 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr068 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 169 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s32) = G_AND [[COPY]], [[C]]70 ; CHECK-NEXT: G_BRCOND [[AND]](s32), %bb.171 ; CHECK-NEXT: {{ $}}72 ; CHECK-NEXT: bb.1:73 bb.0.entry:74 successors: %bb.175 liveins: $sgpr076 %0:_(s32) = COPY $sgpr077 %1:_(s1) = G_TRUNC %078 G_BRCOND %1, %bb.179 80 bb.1:81...82 83---84name: brcond_vgpr_cond85legalized: true86body: |87 ; CHECK-LABEL: name: brcond_vgpr_cond88 ; CHECK: bb.0.entry:89 ; CHECK-NEXT: successors: %bb.1(0x80000000)90 ; CHECK-NEXT: liveins: $vgpr091 ; CHECK-NEXT: {{ $}}92 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr093 ; CHECK-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 194 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[COPY]], [[C]]95 ; CHECK-NEXT: [[C1:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 096 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[AND]](s32), [[C1]]97 ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.198 ; CHECK-NEXT: {{ $}}99 ; CHECK-NEXT: bb.1:100 bb.0.entry:101 successors: %bb.1102 liveins: $vgpr0103 %0:_(s32) = COPY $vgpr0104 %1:_(s1) = G_TRUNC %0105 G_BRCOND %1, %bb.1106 107 bb.1:108...109 110 111# The terminator that needs handling is the only instruction in the112# block.113 114---115name: empty_block_vgpr_brcond116legalized: true117body: |118 ; CHECK-LABEL: name: empty_block_vgpr_brcond119 ; CHECK: bb.0.entry:120 ; CHECK-NEXT: successors: %bb.1(0x80000000)121 ; CHECK-NEXT: liveins: $vgpr0122 ; CHECK-NEXT: {{ $}}123 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0124 ; CHECK-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 1125 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[COPY]], [[C]]126 ; CHECK-NEXT: [[C1:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 0127 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[AND]](s32), [[C1]]128 ; CHECK-NEXT: {{ $}}129 ; CHECK-NEXT: bb.1:130 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)131 ; CHECK-NEXT: {{ $}}132 ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.1133 ; CHECK-NEXT: {{ $}}134 ; CHECK-NEXT: bb.2:135 bb.0.entry:136 successors: %bb.1137 liveins: $vgpr0138 %0:_(s32) = COPY $vgpr0139 %1:_(s1) = G_TRUNC %0140 141 bb.1:142 G_BRCOND %1, %bb.1143 144 bb.2:145...146 147 148# Make sure the first instruction in the block isn't skipped.149---150name: copy_first_inst_brcond151legalized: true152body: |153 ; CHECK-LABEL: name: copy_first_inst_brcond154 ; CHECK: bb.0.entry:155 ; CHECK-NEXT: successors: %bb.1(0x80000000)156 ; CHECK-NEXT: liveins: $vgpr0157 ; CHECK-NEXT: {{ $}}158 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0159 ; CHECK-NEXT: {{ $}}160 ; CHECK-NEXT: bb.1:161 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)162 ; CHECK-NEXT: {{ $}}163 ; CHECK-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 1164 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[COPY]], [[C]]165 ; CHECK-NEXT: [[C1:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 0166 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[AND]](s32), [[C1]]167 ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.1168 ; CHECK-NEXT: {{ $}}169 ; CHECK-NEXT: bb.2:170 bb.0.entry:171 successors: %bb.1172 liveins: $vgpr0173 %0:_(s32) = COPY $vgpr0174 175 bb.1:176 %1:_(s1) = G_TRUNC %0177 G_BRCOND %1, %bb.1178 179 bb.2:180...181 182# Extra instruction separates brcond from the condition def183---184name: copy_middle_inst_brcond185legalized: true186body: |187 ; CHECK-LABEL: name: copy_middle_inst_brcond188 ; CHECK: bb.0.entry:189 ; CHECK-NEXT: successors: %bb.1(0x80000000)190 ; CHECK-NEXT: liveins: $vgpr0191 ; CHECK-NEXT: {{ $}}192 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0193 ; CHECK-NEXT: {{ $}}194 ; CHECK-NEXT: bb.1:195 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)196 ; CHECK-NEXT: {{ $}}197 ; CHECK-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 1198 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[COPY]], [[C]]199 ; CHECK-NEXT: [[C1:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 0200 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[AND]](s32), [[C1]]201 ; CHECK-NEXT: S_NOP 0202 ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.1203 ; CHECK-NEXT: {{ $}}204 ; CHECK-NEXT: bb.2:205 bb.0.entry:206 successors: %bb.1207 liveins: $vgpr0208 %0:_(s32) = COPY $vgpr0209 210 bb.1:211 %1:_(s1) = G_TRUNC %0212 S_NOP 0213 G_BRCOND %1, %bb.1214 215 bb.2:216...217