126 lines · plain
1# RUN: llc -mtriple aarch64 -run-pass=early-tailduplication -verify-machineinstrs %s -o - 2>&1 | FileCheck %s2---3name: pluto4tracksRegLiveness: true5body: |6 ; This test checks that the COPY3 and COPY4 copies are correctly placed in the bb.5 block,7 ; instead of crashing.8 9 ; CHECK-LABEL: name: pluto10 ; CHECK: bb.0:11 ; CHECK: successors: %bb.1(0x40000000), %bb.2(0x40000000)12 ; CHECK: liveins: $x013 ; CHECK: [[DEF:%[0-9]+]]:gpr32 = IMPLICIT_DEF14 ; CHECK: [[DEF1:%[0-9]+]]:gpr32common = IMPLICIT_DEF15 ; CHECK: [[DEF2:%[0-9]+]]:gpr64 = IMPLICIT_DEF16 ; CHECK: [[DEF3:%[0-9]+]]:gpr64common = IMPLICIT_DEF17 ; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 118 ; CHECK: [[FMOVD0_:%[0-9]+]]:fpr64 = FMOVD019 ; CHECK: TBNZW [[DEF]], 0, %bb.120 ; CHECK: B %bb.221 ; CHECK: bb.1:22 ; CHECK: successors: %bb.9(0x80000000)23 ; CHECK: [[LDRXui:%[0-9]+]]:gpr64 = LDRXui [[DEF3]], 0 :: (load (s64) from `ptr undef`)24 ; CHECK: B %bb.925 ; CHECK: bb.2:26 ; CHECK: successors: %bb.3(0x40000000), %bb.4(0x40000000)27 ; CHECK: $wzr = SUBSWri [[DEF1]], 19, 0, implicit-def $nzcv28 ; CHECK: [[CSINCWr:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 1, implicit $nzcv29 ; CHECK: TBNZW [[CSINCWr]], 0, %bb.330 ; CHECK: B %bb.431 ; CHECK: bb.3:32 ; CHECK: successors: %bb.9(0x80000000)33 ; CHECK: [[SCVTFUXDri:%[0-9]+]]:fpr64 = SCVTFUXDri [[DEF2]], implicit $fpcr34 ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY [[SCVTFUXDri]]35 ; CHECK: [[COPY1:%[0-9]+]]:fpr64 = COPY [[SCVTFUXDri]]36 ; CHECK: B %bb.937 ; CHECK: bb.4:38 ; CHECK: successors: %bb.5(0x40000000), %bb.8(0x40000000)39 ; CHECK: TBNZW [[DEF]], 0, %bb.540 ; CHECK: B %bb.841 ; CHECK: bb.5:42 ; CHECK: successors: %bb.9(0x80000000)43 ; CHECK: [[COPY2:%[0-9]+]]:fpr64 = COPY [[DEF2]]44 ; CHECK: [[COPY3:%[0-9]+]]:gpr64 = COPY [[COPY2]]45 ; CHECK: [[COPY4:%[0-9]+]]:fpr64 = COPY [[DEF2]]46 ; CHECK: B %bb.947 ; CHECK: bb.8:48 ; CHECK: successors: %bb.9(0x80000000)49 ; CHECK: bb.9:50 ; CHECK: [[PHI:%[0-9]+]]:gpr64 = PHI [[LDRXui]], %bb.1, [[FMOVD0_]], %bb.8, [[COPY]], %bb.3, [[COPY3]], %bb.551 ; CHECK: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp52 ; CHECK: $d0 = COPY [[PHI]]53 ; CHECK: BL @pluto, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $d0, implicit-def $d054 ; CHECK: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp55 ; CHECK: $w0 = COPY [[MOVi32imm]]56 ; CHECK: RET_ReallyLR implicit $w057 58 bb.1:59 successors: %bb.2(0x40000000), %bb.3(0x40000000)60 liveins: $x061 62 %1:gpr32 = IMPLICIT_DEF63 %2:gpr32common = IMPLICIT_DEF64 %5:gpr64 = IMPLICIT_DEF65 %9:gpr64common = IMPLICIT_DEF66 %13:gpr32 = MOVi32imm 167 %14:fpr64 = FMOVD068 TBNZW %1, 0, %bb.269 B %bb.370 71 bb.2:72 successors: %bb.8(0x80000000)73 74 %8:gpr64 = LDRXui %9, 0 :: (load (s64) from `ptr undef`)75 B %bb.876 77 bb.3:78 successors: %bb.4(0x40000000), %bb.5(0x40000000)79 80 $wzr = SUBSWri %2, 19, 0, implicit-def $nzcv81 %15:gpr32 = CSINCWr $wzr, $wzr, 1, implicit $nzcv82 TBNZW %15, 0, %bb.483 B %bb.584 85 bb.4:86 successors: %bb.7(0x80000000)87 88 %6:fpr64 = SCVTFUXDri %5, implicit $fpcr89 B %bb.790 91 bb.5:92 successors: %bb.6(0x40000000), %bb.9(0x40000000)93 94 TBNZW %1, 0, %bb.695 B %bb.996 97 bb.6:98 successors: %bb.7(0x80000000)99 100 101 bb.7:102 successors: %bb.8(0x80000000)103 104 %7:fpr64 = PHI %6, %bb.4, %5, %bb.6105 106 bb.8:107 successors: %bb.10(0x80000000)108 109 %10:gpr64 = PHI %8, %bb.2, %7, %bb.7110 B %bb.10111 112 bb.9:113 successors: %bb.10(0x80000000)114 115 116 bb.10:117 %11:gpr64 = PHI %10, %bb.8, %14, %bb.9118 ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp119 $d0 = COPY %11120 BL @pluto, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $d0, implicit-def $d0121 ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp122 $w0 = COPY %13123 RET_ReallyLR implicit $w0124 125...126