361 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 -verify-machineinstrs -o - | FileCheck %s3 4---5name: sext_s32_to_s64_s6legalized: true7 8body: |9 bb.0:10 liveins: $sgpr011 ; CHECK-LABEL: name: sext_s32_to_s64_s12 ; CHECK: liveins: $sgpr013 ; CHECK-NEXT: {{ $}}14 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr015 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 3116 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:sgpr(s32) = G_ASHR [[COPY]], [[C]](s32)17 ; CHECK-NEXT: [[MV:%[0-9]+]]:sgpr(s64) = G_MERGE_VALUES [[COPY]](s32), [[ASHR]](s32)18 %0:_(s32) = COPY $sgpr019 %1:_(s64) = G_SEXT %020...21 22---23name: sext_s16_to_s64_s24legalized: true25 26body: |27 bb.0:28 liveins: $sgpr029 ; CHECK-LABEL: name: sext_s16_to_s64_s30 ; CHECK: liveins: $sgpr031 ; CHECK-NEXT: {{ $}}32 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr033 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)34 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:sgpr(s32) = G_SEXT [[TRUNC]](s16)35 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 3136 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:sgpr(s32) = G_ASHR [[SEXT]], [[C]](s32)37 ; CHECK-NEXT: [[MV:%[0-9]+]]:sgpr(s64) = G_MERGE_VALUES [[SEXT]](s32), [[ASHR]](s32)38 %0:_(s32) = COPY $sgpr039 %1:_(s16) = G_TRUNC %040 %2:_(s64) = G_SEXT %141...42 43---44name: sext_s32_to_s64_v45legalized: true46 47body: |48 bb.0:49 liveins: $vgpr0_vgpr150 ; CHECK-LABEL: name: sext_s32_to_s64_v51 ; CHECK: liveins: $vgpr0_vgpr152 ; CHECK-NEXT: {{ $}}53 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr054 ; CHECK-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 3155 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:vgpr(s32) = G_ASHR [[COPY]], [[C]](s32)56 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY]](s32), [[ASHR]](s32)57 %0:_(s32) = COPY $vgpr058 %1:_(s64) = G_SEXT %059...60 61---62name: sext_s1_to_s16_scc63legalized: true64 65body: |66 bb.0:67 liveins: $sgpr0, $sgpr168 ; CHECK-LABEL: name: sext_s1_to_s16_scc69 ; CHECK: liveins: $sgpr0, $sgpr170 ; CHECK-NEXT: {{ $}}71 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr072 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr173 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]74 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 175 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s32) = G_AND [[ICMP]], [[C]]76 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 -177 ; CHECK-NEXT: [[C2:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 078 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:sgpr(s32) = G_SELECT [[AND]](s32), [[C1]], [[C2]]79 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[SELECT]](s32)80 ; CHECK-NEXT: [[C3:%[0-9]+]]:sgpr(s16) = G_CONSTANT i16 25581 ; CHECK-NEXT: [[AND1:%[0-9]+]]:sgpr(s16) = G_AND [[TRUNC]], [[C3]]82 %0:_(s32) = COPY $sgpr083 %1:_(s32) = COPY $sgpr184 %2:_(s1) = G_ICMP intpred(eq), %0, %185 %3:_(s16) = G_SEXT %286 %4:_(s16) = G_CONSTANT i16 25587 %5:_(s16) = G_AND %3, %488...89 90---91name: sext_s1_to_s32_scc92legalized: true93 94body: |95 bb.0:96 liveins: $sgpr0, $sgpr197 ; CHECK-LABEL: name: sext_s1_to_s32_scc98 ; CHECK: liveins: $sgpr0, $sgpr199 ; CHECK-NEXT: {{ $}}100 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0101 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1102 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]103 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 1104 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s32) = G_AND [[ICMP]], [[C]]105 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 -1106 ; CHECK-NEXT: [[C2:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0107 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:sgpr(s32) = G_SELECT [[AND]](s32), [[C1]], [[C2]]108 %0:_(s32) = COPY $sgpr0109 %1:_(s32) = COPY $sgpr1110 %2:_(s1) = G_ICMP intpred(eq), %0, %1111 %3:_(s32) = G_SEXT %2112...113 114---115name: sext_s1_to_s64_scc116legalized: true117 118body: |119 bb.0:120 liveins: $sgpr0, $sgpr1121 ; CHECK-LABEL: name: sext_s1_to_s64_scc122 ; CHECK: liveins: $sgpr0, $sgpr1123 ; CHECK-NEXT: {{ $}}124 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0125 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1126 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]127 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 1128 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s32) = G_AND [[ICMP]], [[C]]129 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s64) = G_CONSTANT i64 -1130 ; CHECK-NEXT: [[C2:%[0-9]+]]:sgpr(s64) = G_CONSTANT i64 0131 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:sgpr(s64) = G_SELECT [[AND]](s32), [[C1]], [[C2]]132 %0:_(s32) = COPY $sgpr0133 %1:_(s32) = COPY $sgpr1134 %2:_(s1) = G_ICMP intpred(eq), %0, %1135 %3:_(s64) = G_SEXT %2136...137 138---139name: sext_s1_to_s16_vcc140legalized: true141 142body: |143 bb.0:144 liveins: $vgpr0, $vgpr1145 ; CHECK-LABEL: name: sext_s1_to_s16_vcc146 ; CHECK: liveins: $vgpr0, $vgpr1147 ; CHECK-NEXT: {{ $}}148 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0149 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1150 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]151 ; CHECK-NEXT: [[C:%[0-9]+]]:vgpr(s16) = G_CONSTANT i16 -1152 ; CHECK-NEXT: [[C1:%[0-9]+]]:vgpr(s16) = G_CONSTANT i16 0153 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:vgpr(s16) = G_SELECT [[ICMP]](s1), [[C]], [[C1]]154 %0:_(s32) = COPY $vgpr0155 %1:_(s32) = COPY $vgpr1156 %2:_(s1) = G_ICMP intpred(eq), %0, %1157 %3:_(s16) = G_SEXT %2158...159 160---161name: sext_s1_to_s32_vcc162legalized: true163 164body: |165 bb.0:166 liveins: $vgpr0, $vgpr1167 ; CHECK-LABEL: name: sext_s1_to_s32_vcc168 ; CHECK: liveins: $vgpr0, $vgpr1169 ; CHECK-NEXT: {{ $}}170 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0171 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1172 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]173 ; CHECK-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 -1174 ; CHECK-NEXT: [[C1:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 0175 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[C]], [[C1]]176 %0:_(s32) = COPY $vgpr0177 %1:_(s32) = COPY $vgpr1178 %2:_(s1) = G_ICMP intpred(eq), %0, %1179 %3:_(s32) = G_SEXT %2180...181 182---183name: sext_s1_to_s64_vcc184legalized: true185 186body: |187 bb.0:188 liveins: $vgpr0, $vgpr1189 ; CHECK-LABEL: name: sext_s1_to_s64_vcc190 ; CHECK: liveins: $vgpr0, $vgpr1191 ; CHECK-NEXT: {{ $}}192 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0193 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1194 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]195 ; CHECK-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 -1196 ; CHECK-NEXT: [[C1:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 0197 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[C]], [[C1]]198 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT]](s32)199 %0:_(s32) = COPY $vgpr0200 %1:_(s32) = COPY $vgpr1201 %2:_(s1) = G_ICMP intpred(eq), %0, %1202 %3:_(s64) = G_SEXT %2203...204 205---206name: sext_s1_to_s16_sgpr207legalized: true208 209body: |210 bb.0:211 liveins: $sgpr0212 ; CHECK-LABEL: name: sext_s1_to_s16_sgpr213 ; CHECK: liveins: $sgpr0214 ; CHECK-NEXT: {{ $}}215 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0216 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 1217 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s32) = G_AND [[COPY]], [[C]]218 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 -1219 ; CHECK-NEXT: [[C2:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0220 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:sgpr(s32) = G_SELECT [[AND]](s32), [[C1]], [[C2]]221 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[SELECT]](s32)222 ; CHECK-NEXT: [[C3:%[0-9]+]]:sgpr(s16) = G_CONSTANT i16 255223 ; CHECK-NEXT: [[AND1:%[0-9]+]]:sgpr(s16) = G_AND [[TRUNC]], [[C3]]224 %0:_(s32) = COPY $sgpr0225 %1:_(s1) = G_TRUNC %0226 %2:_(s16) = G_SEXT %1227 %3:_(s16) = G_CONSTANT i16 255228 %4:_(s16) = G_AND %2, %3229...230 231---232name: sext_s1_to_s32_sgpr233legalized: true234 235body: |236 bb.0:237 liveins: $sgpr0238 ; CHECK-LABEL: name: sext_s1_to_s32_sgpr239 ; CHECK: liveins: $sgpr0240 ; CHECK-NEXT: {{ $}}241 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0242 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 1243 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s32) = G_AND [[COPY]], [[C]]244 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 -1245 ; CHECK-NEXT: [[C2:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0246 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:sgpr(s32) = G_SELECT [[AND]](s32), [[C1]], [[C2]]247 %0:_(s32) = COPY $sgpr0248 %1:_(s1) = G_TRUNC %0249 %2:_(s32) = G_SEXT %1250...251 252---253name: sext_s1_to_s64_sgpr254legalized: true255 256body: |257 bb.0:258 liveins: $sgpr0259 ; CHECK-LABEL: name: sext_s1_to_s64_sgpr260 ; CHECK: liveins: $sgpr0261 ; CHECK-NEXT: {{ $}}262 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0263 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 1264 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s32) = G_AND [[COPY]], [[C]]265 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s64) = G_CONSTANT i64 -1266 ; CHECK-NEXT: [[C2:%[0-9]+]]:sgpr(s64) = G_CONSTANT i64 0267 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:sgpr(s64) = G_SELECT [[AND]](s32), [[C1]], [[C2]]268 %0:_(s32) = COPY $sgpr0269 %1:_(s1) = G_TRUNC %0270 %2:_(s64) = G_SEXT %1271...272 273---274name: sext_s1_to_s16_vgpr275legalized: true276 277body: |278 bb.0:279 liveins: $vgpr0280 ; CHECK-LABEL: name: sext_s1_to_s16_vgpr281 ; CHECK: liveins: $vgpr0282 ; CHECK-NEXT: {{ $}}283 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0284 ; CHECK-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 1285 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[COPY]], [[C]]286 ; CHECK-NEXT: [[C1:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 0287 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[AND]](s32), [[C1]]288 ; CHECK-NEXT: [[C2:%[0-9]+]]:vgpr(s16) = G_CONSTANT i16 -1289 ; CHECK-NEXT: [[C3:%[0-9]+]]:vgpr(s16) = G_CONSTANT i16 0290 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:vgpr(s16) = G_SELECT [[ICMP]](s1), [[C2]], [[C3]]291 %0:_(s32) = COPY $vgpr0292 %1:_(s1) = G_TRUNC %0293 %2:_(s16) = G_SEXT %1294...295 296---297name: sext_s1_to_s32_vgpr298legalized: true299 300body: |301 bb.0:302 liveins: $vgpr0303 ; CHECK-LABEL: name: sext_s1_to_s32_vgpr304 ; CHECK: liveins: $vgpr0305 ; CHECK-NEXT: {{ $}}306 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0307 ; CHECK-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 1308 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[COPY]], [[C]]309 ; CHECK-NEXT: [[C1:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 0310 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[AND]](s32), [[C1]]311 ; CHECK-NEXT: [[C2:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 -1312 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[C2]], [[C1]]313 %0:_(s32) = COPY $vgpr0314 %1:_(s1) = G_TRUNC %0315 %2:_(s32) = G_SEXT %1316...317 318---319name: sext_s1_to_s64_vgpr320legalized: true321 322body: |323 bb.0:324 liveins: $vgpr0325 ; CHECK-LABEL: name: sext_s1_to_s64_vgpr326 ; CHECK: liveins: $vgpr0327 ; CHECK-NEXT: {{ $}}328 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0329 ; CHECK-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 1330 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[COPY]], [[C]]331 ; CHECK-NEXT: [[C1:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 0332 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[AND]](s32), [[C1]]333 ; CHECK-NEXT: [[C2:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 -1334 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[C2]], [[C1]]335 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT]](s32)336 %0:_(s32) = COPY $vgpr0337 %1:_(s1) = G_TRUNC %0338 %2:_(s64) = G_SEXT %1339...340 341---342name: sext_s16_to_s64_vgpr343legalized: true344 345body: |346 bb.0:347 liveins: $vgpr0348 ; CHECK-LABEL: name: sext_s16_to_s64_vgpr349 ; CHECK: liveins: $vgpr0350 ; CHECK-NEXT: {{ $}}351 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0352 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)353 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:vgpr(s32) = G_SEXT [[TRUNC]](s16)354 ; CHECK-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 31355 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:vgpr(s32) = G_ASHR [[SEXT]], [[C]](s32)356 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SEXT]](s32), [[ASHR]](s32)357 %0:_(s32) = COPY $vgpr0358 %1:_(s16) = G_TRUNC %0359 %2:_(s64) = G_SEXT %1360...361