481 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple aarch64 -O0 -run-pass=aarch64-prelegalizer-combiner -global-isel -verify-machineinstrs %s -o - | FileCheck %s3---4name: test_anyext5body: |6 bb.0:7 liveins: $x08 ; CHECK-LABEL: name: test_anyext9 ; CHECK: liveins: $x010 ; CHECK-NEXT: {{ $}}11 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x012 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s8))13 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)14 %0:_(p0) = COPY $x015 %1:_(s8) = G_LOAD %0 :: (load (s8))16 %2:_(s32) = G_ANYEXT %117 $w0 = COPY %218...19 20---21name: test_anyext_with_copy22body: |23 bb.0:24 liveins: $x025 ; CHECK-LABEL: name: test_anyext_with_copy26 ; CHECK: liveins: $x027 ; CHECK-NEXT: {{ $}}28 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x029 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s8))30 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)31 %0:_(p0) = COPY $x032 %1:_(s8) = G_LOAD %0 :: (load (s8))33 %2:_(s8) = COPY %134 %3:_(s32) = G_ANYEXT %135 $w0 = COPY %336...37 38---39name: test_signext40body: |41 bb.0:42 liveins: $x043 ; CHECK-LABEL: name: test_signext44 ; CHECK: liveins: $x045 ; CHECK-NEXT: {{ $}}46 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x047 ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))48 ; CHECK-NEXT: $w0 = COPY [[SEXTLOAD]](s32)49 %0:_(p0) = COPY $x050 %1:_(s8) = G_LOAD %0 :: (load (s8))51 %2:_(s32) = G_SEXT %152 $w0 = COPY %253...54 55---56name: test_zeroext57body: |58 bb.0:59 liveins: $x060 ; CHECK-LABEL: name: test_zeroext61 ; CHECK: liveins: $x062 ; CHECK-NEXT: {{ $}}63 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x064 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))65 ; CHECK-NEXT: $w0 = COPY [[ZEXTLOAD]](s32)66 %0:_(p0) = COPY $x067 %1:_(s8) = G_LOAD %0 :: (load (s8))68 %2:_(s32) = G_ZEXT %169 $w0 = COPY %270...71 72---73name: test_2anyext74body: |75 bb.0:76 liveins: $x077 ; CHECK-LABEL: name: test_2anyext78 ; CHECK: liveins: $x079 ; CHECK-NEXT: {{ $}}80 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x081 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s8))82 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)83 ; CHECK-NEXT: $w1 = COPY [[LOAD]](s32)84 %0:_(p0) = COPY $x085 %1:_(s8) = G_LOAD %0 :: (load (s8))86 %2:_(s32) = G_ANYEXT %187 %3:_(s32) = G_ANYEXT %188 $w0 = COPY %289 $w1 = COPY %390...91 92---93name: test_1anyext_1signext94body: |95 bb.0:96 liveins: $x097 ; CHECK-LABEL: name: test_1anyext_1signext98 ; CHECK: liveins: $x099 ; CHECK-NEXT: {{ $}}100 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0101 ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))102 ; CHECK-NEXT: $w0 = COPY [[SEXTLOAD]](s32)103 ; CHECK-NEXT: $w1 = COPY [[SEXTLOAD]](s32)104 %0:_(p0) = COPY $x0105 %1:_(s8) = G_LOAD %0 :: (load (s8))106 %2:_(s32) = G_ANYEXT %1107 %3:_(s32) = G_SEXT %1108 $w0 = COPY %2109 $w1 = COPY %3110...111 112---113name: test_1xor_1signext114body: |115 bb.0:116 liveins: $x0117 ; CHECK-LABEL: name: test_1xor_1signext118 ; CHECK: liveins: $x0119 ; CHECK-NEXT: {{ $}}120 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0121 ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))122 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s32)123 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 -1124 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s8) = G_XOR [[TRUNC]], [[C]]125 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[XOR]](s8)126 ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)127 ; CHECK-NEXT: $w1 = COPY [[SEXTLOAD]](s32)128 %0:_(p0) = COPY $x0129 %1:_(s8) = G_LOAD %0 :: (load (s8))130 %2:_(s8) = G_CONSTANT i8 -1131 %3:_(s8) = G_XOR %1, %2132 %5:_(s32) = G_ANYEXT %3133 %6:_(s32) = G_SEXT %1134 $w0 = COPY %5135 $w1 = COPY %6136...137 138---139name: test_1anyext_1zeroext140body: |141 bb.0:142 liveins: $x0143 ; CHECK-LABEL: name: test_1anyext_1zeroext144 ; CHECK: liveins: $x0145 ; CHECK-NEXT: {{ $}}146 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0147 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))148 ; CHECK-NEXT: $w0 = COPY [[ZEXTLOAD]](s32)149 ; CHECK-NEXT: $w1 = COPY [[ZEXTLOAD]](s32)150 %0:_(p0) = COPY $x0151 %1:_(s8) = G_LOAD %0 :: (load (s8))152 %2:_(s32) = G_ANYEXT %1153 %3:_(s32) = G_ZEXT %1154 $w0 = COPY %2155 $w1 = COPY %3156...157 158---159name: test_1signext_1zeroext160body: |161 bb.0:162 liveins: $x0163 ; CHECK-LABEL: name: test_1signext_1zeroext164 ; CHECK: liveins: $x0165 ; CHECK-NEXT: {{ $}}166 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0167 ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))168 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s32)169 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC]](s8)170 ; CHECK-NEXT: $w0 = COPY [[ZEXT]](s32)171 ; CHECK-NEXT: $w1 = COPY [[SEXTLOAD]](s32)172 %0:_(p0) = COPY $x0173 %1:_(s8) = G_LOAD %0 :: (load (s8))174 %2:_(s32) = G_ZEXT %1175 %3:_(s32) = G_SEXT %1176 $w0 = COPY %2177 $w1 = COPY %3178...179 180---181name: test_1anyext64_1signext32182body: |183 bb.0:184 liveins: $x0185 ; CHECK-LABEL: name: test_1anyext64_1signext32186 ; CHECK: liveins: $x0187 ; CHECK-NEXT: {{ $}}188 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0189 ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))190 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[SEXTLOAD]](s32)191 ; CHECK-NEXT: $x0 = COPY [[ANYEXT]](s64)192 ; CHECK-NEXT: $w1 = COPY [[SEXTLOAD]](s32)193 %0:_(p0) = COPY $x0194 %1:_(s8) = G_LOAD %0 :: (load (s8))195 %2:_(s64) = G_ANYEXT %1196 %3:_(s32) = G_SEXT %1197 $x0 = COPY %2198 $w1 = COPY %3199...200 201---202name: test_1anyext32_1signext64203body: |204 bb.0:205 liveins: $x0206 ; CHECK-LABEL: name: test_1anyext32_1signext64207 ; CHECK: liveins: $x0208 ; CHECK-NEXT: {{ $}}209 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0210 ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s64) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))211 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s64)212 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s8)213 ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)214 ; CHECK-NEXT: $x1 = COPY [[SEXTLOAD]](s64)215 %0:_(p0) = COPY $x0216 %1:_(s8) = G_LOAD %0 :: (load (s8))217 %2:_(s32) = G_ANYEXT %1218 %3:_(s64) = G_SEXT %1219 $w0 = COPY %2220 $x1 = COPY %3221...222 223---224name: test_2anyext32_1signext64225body: |226 bb.0:227 liveins: $x0228 ; CHECK-LABEL: name: test_2anyext32_1signext64229 ; CHECK: liveins: $x0230 ; CHECK-NEXT: {{ $}}231 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0232 ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s64) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))233 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s64)234 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s8)235 ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s8)236 ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)237 ; CHECK-NEXT: $x1 = COPY [[SEXTLOAD]](s64)238 ; CHECK-NEXT: $w2 = COPY [[ANYEXT1]](s32)239 %0:_(p0) = COPY $x0240 %1:_(s8) = G_LOAD %0 :: (load (s8))241 %2:_(s32) = G_ANYEXT %1242 %3:_(s64) = G_SEXT %1243 %4:_(s32) = G_ANYEXT %1244 $w0 = COPY %2245 $x1 = COPY %3246 $w2 = COPY %4247...248 249---250name: test_multiblock_anyext251body: |252 ; CHECK-LABEL: name: test_multiblock_anyext253 ; CHECK: bb.0:254 ; CHECK-NEXT: successors: %bb.1(0x80000000)255 ; CHECK-NEXT: liveins: $x0256 ; CHECK-NEXT: {{ $}}257 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0258 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s8))259 ; CHECK-NEXT: G_BR %bb.1260 ; CHECK-NEXT: {{ $}}261 ; CHECK-NEXT: bb.1:262 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)263 bb.0:264 liveins: $x0265 %0:_(p0) = COPY $x0266 %1:_(s8) = G_LOAD %0 :: (load (s8))267 G_BR %bb.1268 bb.1:269 %2:_(s32) = G_ANYEXT %1270 $w0 = COPY %2271...272 273---274name: test_multiblock_signext275body: |276 ; CHECK-LABEL: name: test_multiblock_signext277 ; CHECK: bb.0:278 ; CHECK-NEXT: successors: %bb.1(0x80000000)279 ; CHECK-NEXT: liveins: $x0280 ; CHECK-NEXT: {{ $}}281 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0282 ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))283 ; CHECK-NEXT: G_BR %bb.1284 ; CHECK-NEXT: {{ $}}285 ; CHECK-NEXT: bb.1:286 ; CHECK-NEXT: $w0 = COPY [[SEXTLOAD]](s32)287 bb.0:288 liveins: $x0289 %0:_(p0) = COPY $x0290 %1:_(s8) = G_LOAD %0 :: (load (s8))291 G_BR %bb.1292 bb.1:293 %2:_(s32) = G_SEXT %1294 $w0 = COPY %2295...296 297---298name: test_multiblock_zeroext299body: |300 ; CHECK-LABEL: name: test_multiblock_zeroext301 ; CHECK: bb.0:302 ; CHECK-NEXT: successors: %bb.1(0x80000000)303 ; CHECK-NEXT: liveins: $x0304 ; CHECK-NEXT: {{ $}}305 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0306 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))307 ; CHECK-NEXT: G_BR %bb.1308 ; CHECK-NEXT: {{ $}}309 ; CHECK-NEXT: bb.1:310 ; CHECK-NEXT: $w0 = COPY [[ZEXTLOAD]](s32)311 bb.0:312 liveins: $x0313 %0:_(p0) = COPY $x0314 %1:_(s8) = G_LOAD %0 :: (load (s8))315 G_BR %bb.1316 bb.1:317 %2:_(s32) = G_ZEXT %1318 $w0 = COPY %2319...320 321---322name: test_multiblock_2anyext323body: |324 ; CHECK-LABEL: name: test_multiblock_2anyext325 ; CHECK: bb.0:326 ; CHECK-NEXT: successors: %bb.1(0x80000000)327 ; CHECK-NEXT: liveins: $x0328 ; CHECK-NEXT: {{ $}}329 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0330 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s8))331 ; CHECK-NEXT: G_BR %bb.1332 ; CHECK-NEXT: {{ $}}333 ; CHECK-NEXT: bb.1:334 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)335 ; CHECK-NEXT: $w1 = COPY [[LOAD]](s32)336 bb.0:337 liveins: $x0338 %0:_(p0) = COPY $x0339 %1:_(s8) = G_LOAD %0 :: (load (s8))340 %2:_(s32) = G_ANYEXT %1341 G_BR %bb.1342 bb.1:343 %3:_(s32) = G_ANYEXT %1344 $w0 = COPY %2345 $w1 = COPY %3346...347 348---349name: test_multiblock_1anyext64_1signext32350body: |351 ; CHECK-LABEL: name: test_multiblock_1anyext64_1signext32352 ; CHECK: bb.0:353 ; CHECK-NEXT: successors: %bb.1(0x80000000)354 ; CHECK-NEXT: liveins: $x0355 ; CHECK-NEXT: {{ $}}356 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0357 ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))358 ; CHECK-NEXT: G_BR %bb.1359 ; CHECK-NEXT: {{ $}}360 ; CHECK-NEXT: bb.1:361 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[SEXTLOAD]](s32)362 ; CHECK-NEXT: $x0 = COPY [[ANYEXT]](s64)363 ; CHECK-NEXT: $w1 = COPY [[SEXTLOAD]](s32)364 bb.0:365 liveins: $x0366 %0:_(p0) = COPY $x0367 %1:_(s8) = G_LOAD %0 :: (load (s8))368 G_BR %bb.1369 bb.1:370 %2:_(s64) = G_ANYEXT %1371 %3:_(s32) = G_SEXT %1372 $x0 = COPY %2373 $w1 = COPY %3374...375 376---377name: test_multiblock_1anyext32_1signext64378body: |379 ; CHECK-LABEL: name: test_multiblock_1anyext32_1signext64380 ; CHECK: bb.0:381 ; CHECK-NEXT: successors: %bb.1(0x80000000)382 ; CHECK-NEXT: liveins: $x0383 ; CHECK-NEXT: {{ $}}384 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0385 ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s64) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))386 ; CHECK-NEXT: G_BR %bb.1387 ; CHECK-NEXT: {{ $}}388 ; CHECK-NEXT: bb.1:389 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s64)390 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s8)391 ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)392 ; CHECK-NEXT: $x1 = COPY [[SEXTLOAD]](s64)393 bb.0:394 liveins: $x0395 %0:_(p0) = COPY $x0396 %1:_(s8) = G_LOAD %0 :: (load (s8))397 G_BR %bb.1398 bb.1:399 %2:_(s32) = G_ANYEXT %1400 %3:_(s64) = G_SEXT %1401 $w0 = COPY %2402 $x1 = COPY %3403...404 405---406name: test_multiblock_2anyext32_1signext64407body: |408 ; CHECK-LABEL: name: test_multiblock_2anyext32_1signext64409 ; CHECK: bb.0:410 ; CHECK-NEXT: successors: %bb.1(0x80000000)411 ; CHECK-NEXT: liveins: $x0412 ; CHECK-NEXT: {{ $}}413 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0414 ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s64) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))415 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s64)416 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s8)417 ; CHECK-NEXT: G_BR %bb.1418 ; CHECK-NEXT: {{ $}}419 ; CHECK-NEXT: bb.1:420 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s64)421 ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC1]](s8)422 ; CHECK-NEXT: $w0 = COPY [[ANYEXT1]](s32)423 ; CHECK-NEXT: $x1 = COPY [[SEXTLOAD]](s64)424 ; CHECK-NEXT: $w2 = COPY [[ANYEXT]](s32)425 bb.0:426 liveins: $x0427 %0:_(p0) = COPY $x0428 %1:_(s8) = G_LOAD %0 :: (load (s8))429 %4:_(s32) = G_ANYEXT %1430 G_BR %bb.1431 bb.1:432 %2:_(s32) = G_ANYEXT %1433 %3:_(s64) = G_SEXT %1434 $w0 = COPY %2435 $x1 = COPY %3436 $w2 = COPY %4437...438---439name: test_atomic440alignment: 4441tracksRegLiveness: true442liveins:443 - { reg: '$x0' }444body: |445 bb.1:446 liveins: $x0447 448 ; CHECK-LABEL: name: test_atomic449 ; CHECK: liveins: $x0450 ; CHECK-NEXT: {{ $}}451 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0452 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s16) = G_LOAD [[COPY]](p0) :: (load unordered (s16))453 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[LOAD]](s16)454 ; CHECK-NEXT: $w0 = COPY [[ZEXT]](s32)455 ; CHECK-NEXT: RET_ReallyLR implicit $w0456 %0:_(p0) = COPY $x0457 %1:_(s16) = G_LOAD %0(p0) :: (load unordered (s16))458 %2:_(s32) = G_ZEXT %1(s16)459 $w0 = COPY %2(s32)460 RET_ReallyLR implicit $w0461...462---463name: test_dont_zextload_to_sextload464body: |465 bb.0:466 liveins: $x0467 ; CHECK-LABEL: name: test_dont_zextload_to_sextload468 ; CHECK: liveins: $x0469 ; CHECK-NEXT: {{ $}}470 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0471 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))472 ; CHECK-NEXT: $x0 = COPY [[ZEXTLOAD]](s64)473 ; CHECK-NEXT: $x1 = COPY [[ZEXTLOAD]](s64)474 %0:_(p0) = COPY $x0475 %1:_(s32) = G_ZEXTLOAD %0 :: (load (s8))476 %2:_(s64) = G_ZEXT %1477 %3:_(s64) = G_SEXT %1478 $x0 = COPY %2479 $x1 = COPY %3480...481