351 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: zext_s32_to_s64_s6legalized: true7 8body: |9 bb.0:10 liveins: $sgpr011 ; CHECK-LABEL: name: zext_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 016 ; CHECK-NEXT: [[MV:%[0-9]+]]:sgpr(s64) = G_MERGE_VALUES [[COPY]](s32), [[C]](s32)17 %0:_(s32) = COPY $sgpr018 %1:_(s64) = G_ZEXT %019...20 21---22name: zext_s16_to_s64_s23legalized: true24 25body: |26 bb.0:27 liveins: $sgpr028 ; CHECK-LABEL: name: zext_s16_to_s64_s29 ; CHECK: liveins: $sgpr030 ; CHECK-NEXT: {{ $}}31 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr032 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)33 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s16)34 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 035 ; CHECK-NEXT: [[MV:%[0-9]+]]:sgpr(s64) = G_MERGE_VALUES [[ZEXT]](s32), [[C]](s32)36 %0:_(s32) = COPY $sgpr037 %1:_(s16) = G_TRUNC %038 %2:_(s64) = G_ZEXT %139...40 41---42name: zext_s32_to_s64_v43legalized: true44 45body: |46 bb.0:47 liveins: $vgpr0_vgpr148 ; CHECK-LABEL: name: zext_s32_to_s64_v49 ; CHECK: liveins: $vgpr0_vgpr150 ; CHECK-NEXT: {{ $}}51 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr052 ; CHECK-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 053 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY]](s32), [[C]](s32)54 %0:_(s32) = COPY $vgpr055 %1:_(s64) = G_ZEXT %056...57 58---59name: zext_s1_to_s16_scc60legalized: true61 62body: |63 bb.0:64 liveins: $sgpr0, $sgpr165 ; CHECK-LABEL: name: zext_s1_to_s16_scc66 ; CHECK: liveins: $sgpr0, $sgpr167 ; CHECK-NEXT: {{ $}}68 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr069 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr170 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]71 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 172 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s32) = G_AND [[ICMP]], [[C]]73 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 074 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:sgpr(s32) = G_SELECT [[AND]](s32), [[C]], [[C1]]75 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[SELECT]](s32)76 ; CHECK-NEXT: [[C2:%[0-9]+]]:sgpr(s16) = G_CONSTANT i16 25577 ; CHECK-NEXT: [[AND1:%[0-9]+]]:sgpr(s16) = G_AND [[TRUNC]], [[C2]]78 %0:_(s32) = COPY $sgpr079 %1:_(s32) = COPY $sgpr180 %2:_(s1) = G_ICMP intpred(eq), %0, %181 %3:_(s16) = G_ZEXT %282 %4:_(s16) = G_CONSTANT i16 25583 %5:_(s16) = G_AND %3, %484...85 86---87name: zext_s1_to_s32_scc88legalized: true89 90body: |91 bb.0:92 liveins: $sgpr0, $sgpr193 ; CHECK-LABEL: name: zext_s1_to_s32_scc94 ; CHECK: liveins: $sgpr0, $sgpr195 ; CHECK-NEXT: {{ $}}96 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr097 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr198 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]99 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 1100 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s32) = G_AND [[ICMP]], [[C]]101 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0102 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:sgpr(s32) = G_SELECT [[AND]](s32), [[C]], [[C1]]103 %0:_(s32) = COPY $sgpr0104 %1:_(s32) = COPY $sgpr1105 %2:_(s1) = G_ICMP intpred(eq), %0, %1106 %3:_(s32) = G_ZEXT %2107...108 109---110name: zext_s1_to_s64_scc111legalized: true112 113body: |114 bb.0:115 liveins: $sgpr0, $sgpr1116 ; CHECK-LABEL: name: zext_s1_to_s64_scc117 ; CHECK: liveins: $sgpr0, $sgpr1118 ; CHECK-NEXT: {{ $}}119 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0120 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1121 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]122 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 1123 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s32) = G_AND [[ICMP]], [[C]]124 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s64) = G_CONSTANT i64 1125 ; CHECK-NEXT: [[C2:%[0-9]+]]:sgpr(s64) = G_CONSTANT i64 0126 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:sgpr(s64) = G_SELECT [[AND]](s32), [[C1]], [[C2]]127 %0:_(s32) = COPY $sgpr0128 %1:_(s32) = COPY $sgpr1129 %2:_(s1) = G_ICMP intpred(eq), %0, %1130 %3:_(s64) = G_ZEXT %2131...132 133---134name: zext_s1_to_s16_vcc135legalized: true136 137body: |138 bb.0:139 liveins: $vgpr0, $vgpr1140 ; CHECK-LABEL: name: zext_s1_to_s16_vcc141 ; CHECK: liveins: $vgpr0, $vgpr1142 ; CHECK-NEXT: {{ $}}143 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0144 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1145 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]146 ; CHECK-NEXT: [[C:%[0-9]+]]:vgpr(s16) = G_CONSTANT i16 1147 ; CHECK-NEXT: [[C1:%[0-9]+]]:vgpr(s16) = G_CONSTANT i16 0148 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:vgpr(s16) = G_SELECT [[ICMP]](s1), [[C]], [[C1]]149 %0:_(s32) = COPY $vgpr0150 %1:_(s32) = COPY $vgpr1151 %2:_(s1) = G_ICMP intpred(eq), %0, %1152 %3:_(s16) = G_ZEXT %2153...154 155---156name: zext_s1_to_s32_vcc157legalized: true158 159body: |160 bb.0:161 liveins: $vgpr0, $vgpr1162 ; CHECK-LABEL: name: zext_s1_to_s32_vcc163 ; CHECK: liveins: $vgpr0, $vgpr1164 ; CHECK-NEXT: {{ $}}165 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0166 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1167 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]168 ; CHECK-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 1169 ; CHECK-NEXT: [[C1:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 0170 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[C]], [[C1]]171 %0:_(s32) = COPY $vgpr0172 %1:_(s32) = COPY $vgpr1173 %2:_(s1) = G_ICMP intpred(eq), %0, %1174 %3:_(s32) = G_ZEXT %2175...176 177---178name: zext_s1_to_s64_vcc179legalized: true180 181body: |182 bb.0:183 liveins: $vgpr0, $vgpr1184 ; CHECK-LABEL: name: zext_s1_to_s64_vcc185 ; CHECK: liveins: $vgpr0, $vgpr1186 ; CHECK-NEXT: {{ $}}187 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0188 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1189 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]190 ; CHECK-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 1191 ; CHECK-NEXT: [[C1:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 0192 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[C]], [[C1]]193 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SELECT]](s32), [[C1]](s32)194 %0:_(s32) = COPY $vgpr0195 %1:_(s32) = COPY $vgpr1196 %2:_(s1) = G_ICMP intpred(eq), %0, %1197 %3:_(s64) = G_ZEXT %2198...199 200---201name: zext_s1_to_s16_sgpr202legalized: true203 204body: |205 bb.0:206 liveins: $sgpr0207 ; CHECK-LABEL: name: zext_s1_to_s16_sgpr208 ; CHECK: liveins: $sgpr0209 ; CHECK-NEXT: {{ $}}210 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0211 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 1212 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s32) = G_AND [[COPY]], [[C]]213 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0214 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:sgpr(s32) = G_SELECT [[AND]](s32), [[C]], [[C1]]215 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[SELECT]](s32)216 ; CHECK-NEXT: [[C2:%[0-9]+]]:sgpr(s16) = G_CONSTANT i16 255217 ; CHECK-NEXT: [[AND1:%[0-9]+]]:sgpr(s16) = G_AND [[TRUNC]], [[C2]]218 %0:_(s32) = COPY $sgpr0219 %1:_(s1) = G_TRUNC %0220 %2:_(s16) = G_ZEXT %1221 %3:_(s16) = G_CONSTANT i16 255222 %4:_(s16) = G_AND %2, %3223...224 225---226name: zext_s1_to_s32_sgpr227legalized: true228 229body: |230 bb.0:231 liveins: $sgpr0232 ; CHECK-LABEL: name: zext_s1_to_s32_sgpr233 ; CHECK: liveins: $sgpr0234 ; CHECK-NEXT: {{ $}}235 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0236 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 1237 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s32) = G_AND [[COPY]], [[C]]238 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0239 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:sgpr(s32) = G_SELECT [[AND]](s32), [[C]], [[C1]]240 %0:_(s32) = COPY $sgpr0241 %1:_(s1) = G_TRUNC %0242 %2:_(s32) = G_ZEXT %1243...244 245---246name: zext_s1_to_s64_sgpr247legalized: true248 249body: |250 bb.0:251 liveins: $sgpr0252 ; CHECK-LABEL: name: zext_s1_to_s64_sgpr253 ; CHECK: liveins: $sgpr0254 ; CHECK-NEXT: {{ $}}255 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0256 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 1257 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s32) = G_AND [[COPY]], [[C]]258 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s64) = G_CONSTANT i64 1259 ; CHECK-NEXT: [[C2:%[0-9]+]]:sgpr(s64) = G_CONSTANT i64 0260 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:sgpr(s64) = G_SELECT [[AND]](s32), [[C1]], [[C2]]261 %0:_(s32) = COPY $sgpr0262 %1:_(s1) = G_TRUNC %0263 %2:_(s64) = G_ZEXT %1264...265 266---267name: zext_s1_to_s16_vgpr268legalized: true269 270body: |271 bb.0:272 liveins: $vgpr0273 ; CHECK-LABEL: name: zext_s1_to_s16_vgpr274 ; CHECK: liveins: $vgpr0275 ; CHECK-NEXT: {{ $}}276 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0277 ; CHECK-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 1278 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[COPY]], [[C]]279 ; CHECK-NEXT: [[C1:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 0280 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[AND]](s32), [[C1]]281 ; CHECK-NEXT: [[C2:%[0-9]+]]:vgpr(s16) = G_CONSTANT i16 1282 ; CHECK-NEXT: [[C3:%[0-9]+]]:vgpr(s16) = G_CONSTANT i16 0283 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:vgpr(s16) = G_SELECT [[ICMP]](s1), [[C2]], [[C3]]284 %0:_(s32) = COPY $vgpr0285 %1:_(s1) = G_TRUNC %0286 %2:_(s16) = G_ZEXT %1287...288 289---290name: zext_s1_to_s32_vgpr291legalized: true292 293body: |294 bb.0:295 liveins: $vgpr0296 ; CHECK-LABEL: name: zext_s1_to_s32_vgpr297 ; CHECK: liveins: $vgpr0298 ; CHECK-NEXT: {{ $}}299 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0300 ; CHECK-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 1301 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[COPY]], [[C]]302 ; CHECK-NEXT: [[C1:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 0303 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[AND]](s32), [[C1]]304 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[C]], [[C1]]305 %0:_(s32) = COPY $vgpr0306 %1:_(s1) = G_TRUNC %0307 %2:_(s32) = G_ZEXT %1308...309 310---311name: zext_s1_to_s64_vgpr312legalized: true313 314body: |315 bb.0:316 liveins: $vgpr0317 ; CHECK-LABEL: name: zext_s1_to_s64_vgpr318 ; CHECK: liveins: $vgpr0319 ; CHECK-NEXT: {{ $}}320 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0321 ; CHECK-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 1322 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[COPY]], [[C]]323 ; CHECK-NEXT: [[C1:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 0324 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[AND]](s32), [[C1]]325 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[C]], [[C1]]326 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SELECT]](s32), [[C1]](s32)327 %0:_(s32) = COPY $vgpr0328 %1:_(s1) = G_TRUNC %0329 %2:_(s64) = G_ZEXT %1330...331 332---333name: zext_s16_to_s64_vgpr334legalized: true335 336body: |337 bb.0:338 liveins: $vgpr0339 ; CHECK-LABEL: name: zext_s16_to_s64_vgpr340 ; CHECK: liveins: $vgpr0341 ; CHECK-NEXT: {{ $}}342 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0343 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32)344 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:vgpr(s32) = G_ZEXT [[TRUNC]](s16)345 ; CHECK-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 0346 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[ZEXT]](s32), [[C]](s32)347 %0:_(s32) = COPY $vgpr0348 %1:_(s16) = G_TRUNC %0349 %2:_(s64) = G_ZEXT %1350...351