664 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: and_s32_ss6legalized: true7 8body: |9 bb.0:10 liveins: $sgpr0, $sgpr111 ; CHECK-LABEL: name: and_s32_ss12 ; CHECK: liveins: $sgpr0, $sgpr113 ; CHECK-NEXT: {{ $}}14 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr015 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr116 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s32) = G_AND [[COPY]], [[COPY1]]17 %0:_(s32) = COPY $sgpr018 %1:_(s32) = COPY $sgpr119 %2:_(s32) = G_AND %0, %120...21 22---23name: and_s32_sv24legalized: true25 26body: |27 bb.0:28 liveins: $sgpr0, $vgpr029 ; CHECK-LABEL: name: and_s32_sv30 ; CHECK: liveins: $sgpr0, $vgpr031 ; CHECK-NEXT: {{ $}}32 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr033 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr034 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)35 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[COPY2]], [[COPY1]]36 %0:_(s32) = COPY $sgpr037 %1:_(s32) = COPY $vgpr038 %2:_(s32) = G_AND %0, %139...40 41---42name: and_s32_vs43legalized: true44 45body: |46 bb.0:47 liveins: $sgpr0, $vgpr048 ; CHECK-LABEL: name: and_s32_vs49 ; CHECK: liveins: $sgpr0, $vgpr050 ; CHECK-NEXT: {{ $}}51 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr052 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr053 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)54 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[COPY]], [[COPY2]]55 %0:_(s32) = COPY $vgpr056 %1:_(s32) = COPY $sgpr057 %2:_(s32) = G_AND %0, %158...59 60---61name: and_s32_vv62legalized: true63 64body: |65 bb.0:66 liveins: $vgpr0, $vgpr167 ; CHECK-LABEL: name: and_s32_vv68 ; CHECK: liveins: $vgpr0, $vgpr169 ; CHECK-NEXT: {{ $}}70 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr071 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr172 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[COPY]], [[COPY1]]73 %0:_(s32) = COPY $vgpr074 %1:_(s32) = COPY $vgpr175 %2:_(s32) = G_AND %0, %176...77 78---79name: and_s64_ss80legalized: true81 82body: |83 bb.0:84 liveins: $sgpr0_sgpr1, $sgpr2_sgpr385 ; CHECK-LABEL: name: and_s64_ss86 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2_sgpr387 ; CHECK-NEXT: {{ $}}88 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr189 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr390 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s64) = G_AND [[COPY]], [[COPY1]]91 %0:_(s64) = COPY $sgpr0_sgpr192 %1:_(s64) = COPY $sgpr2_sgpr393 %2:_(s64) = G_AND %0, %194...95 96---97name: and_s64_sv98legalized: true99 100body: |101 bb.0:102 liveins: $sgpr0_sgpr1, $vgpr0_vgpr1103 ; CHECK-LABEL: name: and_s64_sv104 ; CHECK: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1105 ; CHECK-NEXT: {{ $}}106 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1107 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1108 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)109 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](s64)110 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)111 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]112 ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]113 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)114 %0:_(s64) = COPY $sgpr0_sgpr1115 %1:_(s64) = COPY $vgpr0_vgpr1116 %2:_(s64) = G_AND %0, %1117...118 119---120name: and_s64_vs121legalized: true122 123body: |124 bb.0:125 liveins: $sgpr0_sgpr1, $vgpr0_vgpr1126 ; CHECK-LABEL: name: and_s64_vs127 ; CHECK: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1128 ; CHECK-NEXT: {{ $}}129 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1130 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1131 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY1]](s64)132 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)133 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](s64)134 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]135 ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]136 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)137 %0:_(s64) = COPY $vgpr0_vgpr1138 %1:_(s64) = COPY $sgpr0_sgpr1139 %2:_(s64) = G_AND %0, %1140...141 142---143name: and_s64_vv144legalized: true145 146body: |147 bb.0:148 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3149 ; CHECK-LABEL: name: and_s64_vv150 ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3151 ; CHECK-NEXT: {{ $}}152 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1153 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3154 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)155 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)156 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]157 ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]158 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)159 %0:_(s64) = COPY $vgpr0_vgpr1160 %1:_(s64) = COPY $vgpr2_vgpr3161 %2:_(s64) = G_AND %0, %1162...163 164---165name: and_s64_vv_user166legalized: true167 168body: |169 bb.0:170 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3171 ; CHECK-LABEL: name: and_s64_vv_user172 ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3173 ; CHECK-NEXT: {{ $}}174 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1175 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3176 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)177 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)178 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]179 ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]180 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)181 ; CHECK-NEXT: S_NOP 0, implicit [[MV]](s64)182 %0:_(s64) = COPY $vgpr0_vgpr1183 %1:_(s64) = COPY $vgpr2_vgpr3184 %2:_(s64) = G_AND %0, %1185 S_NOP 0, implicit %2186...187---188name: and_s64_ss_ss_merge189legalized: true190 191body: |192 bb.0:193 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3194 ; CHECK-LABEL: name: and_s64_ss_ss_merge195 ; CHECK: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3196 ; CHECK-NEXT: {{ $}}197 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0198 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1199 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2200 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sgpr(s32) = COPY $sgpr3201 ; CHECK-NEXT: [[MV:%[0-9]+]]:sgpr(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)202 ; CHECK-NEXT: [[MV1:%[0-9]+]]:sgpr(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)203 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s64) = G_AND [[MV]], [[MV1]]204 ; CHECK-NEXT: S_NOP 0, implicit [[AND]](s64)205 %0:_(s32) = COPY $sgpr0206 %1:_(s32) = COPY $sgpr1207 %2:_(s32) = COPY $sgpr2208 %3:_(s32) = COPY $sgpr3209 %4:_(s64) = G_MERGE_VALUES %0, %1210 %5:_(s64) = G_MERGE_VALUES %2, %3211 %6:_(s64) = G_AND %4, %5212 S_NOP 0, implicit %6213...214 215---216name: and_s64_vv_vv_merge217legalized: true218 219body: |220 bb.0:221 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3222 ; CHECK-LABEL: name: and_s64_vv_vv_merge223 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3224 ; CHECK-NEXT: {{ $}}225 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0226 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1227 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr2228 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr3229 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)230 ; CHECK-NEXT: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)231 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)232 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV1]](s64)233 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]234 ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]235 ; CHECK-NEXT: [[MV2:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)236 ; CHECK-NEXT: S_NOP 0, implicit [[MV2]](s64)237 %0:_(s32) = COPY $vgpr0238 %1:_(s32) = COPY $vgpr1239 %2:_(s32) = COPY $vgpr2240 %3:_(s32) = COPY $vgpr3241 %4:_(s64) = G_MERGE_VALUES %0, %1242 %5:_(s64) = G_MERGE_VALUES %2, %3243 %6:_(s64) = G_AND %4, %5244 S_NOP 0, implicit %6245...246 247---248name: and_s64_s_sv_merge249legalized: true250 251body: |252 bb.0:253 liveins: $sgpr0_sgpr1, $sgpr2, $vgpr0254 ; CHECK-LABEL: name: and_s64_s_sv_merge255 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2, $vgpr0256 ; CHECK-NEXT: {{ $}}257 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1258 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr2259 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0260 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)261 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY3]](s32), [[COPY2]](s32)262 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)263 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY4]](s64)264 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)265 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]266 ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]267 ; CHECK-NEXT: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)268 ; CHECK-NEXT: S_NOP 0, implicit [[MV1]](s64)269 %0:_(s64) = COPY $sgpr0_sgpr1270 %1:_(s32) = COPY $sgpr2271 %2:_(s32) = COPY $vgpr0272 %3:_(s64) = G_MERGE_VALUES %1, %2273 %4:_(s64) = G_AND %0, %3274 S_NOP 0, implicit %4275...276 277---278name: and_s64_s_vs_merge279legalized: true280 281body: |282 bb.0:283 liveins: $sgpr0_sgpr1, $sgpr2, $vgpr0284 ; CHECK-LABEL: name: and_s64_s_vs_merge285 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2, $vgpr0286 ; CHECK-NEXT: {{ $}}287 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1288 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr2289 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0290 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)291 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)292 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)293 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY4]](s64)294 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)295 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]296 ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]297 ; CHECK-NEXT: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)298 ; CHECK-NEXT: S_NOP 0, implicit [[MV1]](s64)299 %0:_(s64) = COPY $sgpr0_sgpr1300 %1:_(s32) = COPY $sgpr2301 %2:_(s32) = COPY $vgpr0302 %3:_(s64) = G_MERGE_VALUES %2, %1303 %4:_(s64) = G_AND %0, %3304 S_NOP 0, implicit %4305...306 307---308name: and_s64_sv_sv_merge309legalized: true310 311body: |312 bb.0:313 liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1314 ; CHECK-LABEL: name: and_s64_sv_sv_merge315 ; CHECK: liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1316 ; CHECK-NEXT: {{ $}}317 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0318 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1319 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0320 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1321 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)322 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY2]](s32)323 ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)324 ; CHECK-NEXT: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY5]](s32), [[COPY3]](s32)325 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)326 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV1]](s64)327 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]328 ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]329 ; CHECK-NEXT: [[MV2:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)330 ; CHECK-NEXT: S_NOP 0, implicit [[MV2]](s64)331 %0:_(s32) = COPY $sgpr0332 %1:_(s32) = COPY $sgpr1333 %2:_(s32) = COPY $vgpr0334 %3:_(s32) = COPY $vgpr1335 %4:_(s64) = G_MERGE_VALUES %0, %2336 %5:_(s64) = G_MERGE_VALUES %1, %3337 %6:_(s64) = G_AND %4, %5338 S_NOP 0, implicit %6339...340 341---342name: and_s64_sv_vs_merge343legalized: true344 345body: |346 bb.0:347 liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1348 ; CHECK-LABEL: name: and_s64_sv_vs_merge349 ; CHECK: liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1350 ; CHECK-NEXT: {{ $}}351 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0352 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1353 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0354 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1355 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)356 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY2]](s32)357 ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)358 ; CHECK-NEXT: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY3]](s32), [[COPY5]](s32)359 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)360 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV1]](s64)361 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]362 ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]363 ; CHECK-NEXT: [[MV2:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)364 ; CHECK-NEXT: S_NOP 0, implicit [[MV2]](s64)365 %0:_(s32) = COPY $sgpr0366 %1:_(s32) = COPY $sgpr1367 %2:_(s32) = COPY $vgpr0368 %3:_(s32) = COPY $vgpr1369 %4:_(s64) = G_MERGE_VALUES %0, %2370 %5:_(s64) = G_MERGE_VALUES %3, %1371 %6:_(s64) = G_AND %4, %5372 S_NOP 0, implicit %6373...374 375---376name: and_chain_s64_sv377legalized: true378 379body: |380 bb.0:381 liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $vgpr0_vgpr1382 ; CHECK-LABEL: name: and_chain_s64_sv383 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $vgpr0_vgpr1384 ; CHECK-NEXT: {{ $}}385 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1386 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3387 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1388 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)389 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](s64)390 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](s64)391 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]392 ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]393 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)394 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr(s64) = COPY [[COPY1]](s64)395 ; CHECK-NEXT: [[UV4:%[0-9]+]]:vgpr(s32), [[UV5:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY4]](s64)396 ; CHECK-NEXT: [[UV6:%[0-9]+]]:vgpr(s32), [[UV7:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)397 ; CHECK-NEXT: [[AND2:%[0-9]+]]:vgpr(s32) = G_AND [[UV4]], [[UV6]]398 ; CHECK-NEXT: [[AND3:%[0-9]+]]:vgpr(s32) = G_AND [[UV5]], [[UV7]]399 ; CHECK-NEXT: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND2]](s32), [[AND3]](s32)400 ; CHECK-NEXT: S_NOP 0, implicit [[MV1]](s64)401 %0:_(s64) = COPY $sgpr0_sgpr1402 %1:_(s64) = COPY $sgpr2_sgpr3403 %2:_(s64) = COPY $vgpr0_vgpr1404 %3:_(s64) = G_AND %0, %2405 %4:_(s64) = G_AND %1, %3406 S_NOP 0, implicit %4407...408 409---410name: and_v2i32_ss411legalized: true412 413body: |414 bb.0:415 liveins: $sgpr0_sgpr1, $sgpr2_sgpr3416 ; CHECK-LABEL: name: and_v2i32_ss417 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3418 ; CHECK-NEXT: {{ $}}419 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1420 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr2_sgpr3421 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(<2 x s32>) = G_AND [[COPY]], [[COPY1]]422 ; CHECK-NEXT: S_NOP 0, implicit [[AND]](<2 x s32>)423 %0:_(<2 x s32>) = COPY $sgpr0_sgpr1424 %1:_(<2 x s32>) = COPY $sgpr2_sgpr3425 %2:_(<2 x s32>) = G_AND %0, %1426 S_NOP 0, implicit %2427...428 429---430name: and_v2i32_sv431legalized: true432 433body: |434 bb.0:435 liveins: $sgpr0_sgpr1, $vgpr0_vgpr1436 ; CHECK-LABEL: name: and_v2i32_sv437 ; CHECK: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1438 ; CHECK-NEXT: {{ $}}439 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1440 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1441 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(<2 x s32>) = COPY [[COPY]](<2 x s32>)442 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](<2 x s32>)443 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)444 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]445 ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]446 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32)447 ; CHECK-NEXT: S_NOP 0, implicit [[BUILD_VECTOR]](<2 x s32>)448 %0:_(<2 x s32>) = COPY $sgpr0_sgpr1449 %1:_(<2 x s32>) = COPY $vgpr0_vgpr1450 %2:_(<2 x s32>) = G_AND %0, %1451 S_NOP 0, implicit %2452...453 454---455name: and_v2i32_vs456legalized: true457 458body: |459 bb.0:460 liveins: $sgpr0_sgpr1, $vgpr0_vgpr1461 462 ; CHECK-LABEL: name: and_v2i32_vs463 ; CHECK: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1464 ; CHECK-NEXT: {{ $}}465 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1466 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1467 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(<2 x s32>) = COPY [[COPY1]](<2 x s32>)468 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)469 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](<2 x s32>)470 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]471 ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]472 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32)473 ; CHECK-NEXT: S_NOP 0, implicit [[BUILD_VECTOR]](<2 x s32>)474 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1475 %1:_(<2 x s32>) = COPY $sgpr0_sgpr1476 %2:_(<2 x s32>) = G_AND %0, %1477 S_NOP 0, implicit %2478...479 480---481name: and_v2i32_vv482legalized: true483 484body: |485 bb.0:486 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3487 ; CHECK-LABEL: name: and_v2i32_vv488 ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3489 ; CHECK-NEXT: {{ $}}490 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1491 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr2_vgpr3492 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)493 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)494 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]495 ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]496 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32)497 ; CHECK-NEXT: S_NOP 0, implicit [[BUILD_VECTOR]](<2 x s32>)498 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1499 %1:_(<2 x s32>) = COPY $vgpr2_vgpr3500 %2:_(<2 x s32>) = G_AND %0, %1501 S_NOP 0, implicit %2502...503 504---505name: and_v4s16_ss506legalized: true507 508body: |509 bb.0:510 liveins: $sgpr0_sgpr1, $sgpr2_sgpr3511 ; CHECK-LABEL: name: and_v4s16_ss512 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3513 ; CHECK-NEXT: {{ $}}514 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1515 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3516 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(<4 x s16>) = G_AND [[COPY]], [[COPY1]]517 %0:_(<4 x s16>) = COPY $sgpr0_sgpr1518 %1:_(<4 x s16>) = COPY $sgpr2_sgpr3519 %2:_(<4 x s16>) = G_AND %0, %1520...521 522---523name: and_v4s16_sv524legalized: true525 526body: |527 bb.0:528 liveins: $sgpr0_sgpr1, $vgpr0_vgpr1529 ; CHECK-LABEL: name: and_v4s16_sv530 ; CHECK: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1531 ; CHECK-NEXT: {{ $}}532 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1533 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1534 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(<4 x s16>) = COPY [[COPY]](<4 x s16>)535 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY2]](<4 x s16>)536 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>)537 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[UV]], [[UV2]]538 ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[UV1]], [[UV3]]539 ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[AND]](<2 x s16>), [[AND1]](<2 x s16>)540 %0:_(<4 x s16>) = COPY $sgpr0_sgpr1541 %1:_(<4 x s16>) = COPY $vgpr0_vgpr1542 %2:_(<4 x s16>) = G_AND %0, %1543...544 545---546name: and_v4s16_vs547legalized: true548 549body: |550 bb.0:551 liveins: $sgpr0_sgpr1, $vgpr0_vgpr1552 ; CHECK-LABEL: name: and_v4s16_vs553 ; CHECK: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1554 ; CHECK-NEXT: {{ $}}555 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1556 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1557 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(<4 x s16>) = COPY [[COPY1]](<4 x s16>)558 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)559 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY2]](<4 x s16>)560 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[UV]], [[UV2]]561 ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[UV1]], [[UV3]]562 ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[AND]](<2 x s16>), [[AND1]](<2 x s16>)563 %0:_(<4 x s16>) = COPY $vgpr0_vgpr1564 %1:_(<4 x s16>) = COPY $sgpr0_sgpr1565 %2:_(<4 x s16>) = G_AND %0, %1566...567 568---569name: and_v4s16_vv570legalized: true571 572body: |573 bb.0:574 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3575 ; CHECK-LABEL: name: and_v4s16_vv576 ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3577 ; CHECK-NEXT: {{ $}}578 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1579 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3580 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)581 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>)582 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[UV]], [[UV2]]583 ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[UV1]], [[UV3]]584 ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[AND]](<2 x s16>), [[AND1]](<2 x s16>)585 %0:_(<4 x s16>) = COPY $vgpr0_vgpr1586 %1:_(<4 x s16>) = COPY $vgpr2_vgpr3587 %2:_(<4 x s16>) = G_AND %0, %1588...589 590---591name: and_v2s16_ss592legalized: true593 594body: |595 bb.0:596 liveins: $sgpr0, $sgpr1597 ; CHECK-LABEL: name: and_v2s16_ss598 ; CHECK: liveins: $sgpr0, $sgpr1599 ; CHECK-NEXT: {{ $}}600 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0601 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr1602 ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(<2 x s16>) = G_AND [[COPY]], [[COPY1]]603 %0:_(<2 x s16>) = COPY $sgpr0604 %1:_(<2 x s16>) = COPY $sgpr1605 %2:_(<2 x s16>) = G_AND %0, %1606...607 608---609name: and_v2s16_sv610legalized: true611 612body: |613 bb.0:614 liveins: $sgpr0, $vgpr0615 ; CHECK-LABEL: name: and_v2s16_sv616 ; CHECK: liveins: $sgpr0, $vgpr0617 ; CHECK-NEXT: {{ $}}618 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0619 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0620 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(<2 x s16>) = COPY [[COPY]](<2 x s16>)621 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[COPY2]], [[COPY1]]622 %0:_(<2 x s16>) = COPY $sgpr0623 %1:_(<2 x s16>) = COPY $vgpr0624 %2:_(<2 x s16>) = G_AND %0, %1625...626 627---628name: and_v2s16_vs629legalized: true630 631body: |632 bb.0:633 liveins: $sgpr0, $vgpr0634 ; CHECK-LABEL: name: and_v2s16_vs635 ; CHECK: liveins: $sgpr0, $vgpr0636 ; CHECK-NEXT: {{ $}}637 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0638 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0639 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(<2 x s16>) = COPY [[COPY1]](<2 x s16>)640 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[COPY]], [[COPY2]]641 %0:_(<2 x s16>) = COPY $vgpr0642 %1:_(<2 x s16>) = COPY $sgpr0643 %2:_(<2 x s16>) = G_AND %0, %1644...645 646---647name: and_v2s16_vv648legalized: true649 650body: |651 bb.0:652 liveins: $vgpr0, $vgpr1653 ; CHECK-LABEL: name: and_v2s16_vv654 ; CHECK: liveins: $vgpr0, $vgpr1655 ; CHECK-NEXT: {{ $}}656 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0657 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr1658 ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[COPY]], [[COPY1]]659 %0:_(<2 x s16>) = COPY $vgpr0660 %1:_(<2 x s16>) = COPY $vgpr1661 %2:_(<2 x s16>) = G_AND %0, %1662...663 664