244 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 22# RUN: llc -mtriple=i386-unknown-linux-gnu -verify-coalescing -run-pass=register-coalescer -o - %s | FileCheck %s3 4# Make sure no verifier error is produced from coalescing the identity5# copy in bb.3 with live out implicit_defs. The value is live out of6# the block, and the incoming value is a phi def.7 8---9name: pr38795_verifier_error_reduced_110tracksRegLiveness: true11body: |12 ; CHECK-LABEL: name: pr38795_verifier_error_reduced_113 ; CHECK: bb.0:14 ; CHECK-NEXT: successors: %bb.1(0x80000000)15 ; CHECK-NEXT: liveins: $eax16 ; CHECK-NEXT: {{ $}}17 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $eax18 ; CHECK-NEXT: {{ $}}19 ; CHECK-NEXT: bb.1:20 ; CHECK-NEXT: successors: %bb.3(0x40000000), %bb.2(0x40000000)21 ; CHECK-NEXT: {{ $}}22 ; CHECK-NEXT: [[DEF:%[0-9]+]]:gr32 = IMPLICIT_DEF23 ; CHECK-NEXT: JCC_1 %bb.3, 4, implicit undef $eflags24 ; CHECK-NEXT: {{ $}}25 ; CHECK-NEXT: bb.2:26 ; CHECK-NEXT: successors: %bb.3(0x80000000)27 ; CHECK-NEXT: {{ $}}28 ; CHECK-NEXT: [[MOV32r0_:%[0-9]+]]:gr32 = MOV32r0 implicit-def dead $eflags29 ; CHECK-NEXT: {{ $}}30 ; CHECK-NEXT: bb.3:31 ; CHECK-NEXT: successors: %bb.5(0x40000000), %bb.4(0x40000000)32 ; CHECK-NEXT: {{ $}}33 ; CHECK-NEXT: JCC_1 %bb.5, 4, implicit undef $eflags34 ; CHECK-NEXT: {{ $}}35 ; CHECK-NEXT: bb.4:36 ; CHECK-NEXT: successors: %bb.5(0x80000000)37 ; CHECK-NEXT: {{ $}}38 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY [[MOV32r0_]]39 ; CHECK-NEXT: {{ $}}40 ; CHECK-NEXT: bb.5:41 ; CHECK-NEXT: successors: %bb.1(0x80000000)42 ; CHECK-NEXT: {{ $}}43 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY [[COPY]]44 ; CHECK-NEXT: JMP_1 %bb.145 bb.0:46 liveins: $eax47 %0:gr32 = COPY $eax48 49 bb.1:50 %1:gr32 = IMPLICIT_DEF51 JCC_1 %bb.3, 4, implicit undef $eflags52 53 bb.2:54 %0:gr32 = MOV32r0 implicit-def dead $eflags55 56 bb.3:57 %0:gr32 = COPY %058 JCC_1 %bb.5, 4, implicit undef $eflags59 60 bb.4:61 %1:gr32 = COPY %062 63 bb.5:64 %0:gr32 = COPY killed %165 JMP_1 %bb.166 67...68 69# Check for "Instruction ending live segment doesn't read the70# register" verifier error after coalescing71# This still failed with a similar error after a preliminary fix was72# attempted for pr38795_verifier_error_reduced_173 74---75name: pr38795_verifier_error_reduced_276tracksRegLiveness: true77body: |78 ; CHECK-LABEL: name: pr38795_verifier_error_reduced_279 ; CHECK: bb.0:80 ; CHECK-NEXT: successors: %bb.1(0x80000000)81 ; CHECK-NEXT: {{ $}}82 ; CHECK-NEXT: [[DEF:%[0-9]+]]:gr32 = IMPLICIT_DEF83 ; CHECK-NEXT: {{ $}}84 ; CHECK-NEXT: bb.1:85 ; CHECK-NEXT: successors: %bb.3(0x40000000), %bb.2(0x40000000)86 ; CHECK-NEXT: {{ $}}87 ; CHECK-NEXT: [[DEF1:%[0-9]+]]:gr32 = IMPLICIT_DEF88 ; CHECK-NEXT: JCC_1 %bb.3, 4, implicit killed undef $eflags89 ; CHECK-NEXT: {{ $}}90 ; CHECK-NEXT: bb.2:91 ; CHECK-NEXT: successors: %bb.9(0x80000000)92 ; CHECK-NEXT: {{ $}}93 ; CHECK-NEXT: JMP_1 %bb.994 ; CHECK-NEXT: {{ $}}95 ; CHECK-NEXT: bb.3:96 ; CHECK-NEXT: successors: %bb.5(0x40000000), %bb.4(0x40000000)97 ; CHECK-NEXT: {{ $}}98 ; CHECK-NEXT: JCC_1 %bb.5, 5, implicit killed undef $eflags99 ; CHECK-NEXT: {{ $}}100 ; CHECK-NEXT: bb.4:101 ; CHECK-NEXT: successors: %bb.6(0x80000000)102 ; CHECK-NEXT: {{ $}}103 ; CHECK-NEXT: [[MOV32r0_:%[0-9]+]]:gr32 = MOV32r0 implicit-def dead $eflags104 ; CHECK-NEXT: JMP_1 %bb.6105 ; CHECK-NEXT: {{ $}}106 ; CHECK-NEXT: bb.5:107 ; CHECK-NEXT: successors: %bb.9(0x80000000)108 ; CHECK-NEXT: {{ $}}109 ; CHECK-NEXT: [[DEF1:%[0-9]+]]:gr32 = IMPLICIT_DEF110 ; CHECK-NEXT: JMP_1 %bb.9111 ; CHECK-NEXT: {{ $}}112 ; CHECK-NEXT: bb.6:113 ; CHECK-NEXT: successors: %bb.8(0x40000000), %bb.7(0x40000000)114 ; CHECK-NEXT: {{ $}}115 ; CHECK-NEXT: JCC_1 %bb.8, 4, implicit killed undef $eflags116 ; CHECK-NEXT: {{ $}}117 ; CHECK-NEXT: bb.7:118 ; CHECK-NEXT: successors: %bb.8(0x80000000)119 ; CHECK-NEXT: {{ $}}120 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY [[DEF1]]121 ; CHECK-NEXT: {{ $}}122 ; CHECK-NEXT: bb.8:123 ; CHECK-NEXT: successors: %bb.1(0x80000000)124 ; CHECK-NEXT: {{ $}}125 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY [[COPY]]126 ; CHECK-NEXT: JMP_1 %bb.1127 ; CHECK-NEXT: {{ $}}128 ; CHECK-NEXT: bb.9:129 ; CHECK-NEXT: successors: %bb.6(0x80000000)130 ; CHECK-NEXT: {{ $}}131 ; CHECK-NEXT: JMP_1 %bb.6132 bb.0:133 %0:gr32 = IMPLICIT_DEF134 135 bb.1:136 %1:gr32 = IMPLICIT_DEF137 JCC_1 %bb.3, 4, implicit killed undef $eflags138 139 bb.2:140 %2:gr32 = COPY killed %0141 JMP_1 %bb.9142 143 bb.3:144 JCC_1 %bb.5, 5, implicit killed undef $eflags145 146 bb.4:147 %3:gr32 = MOV32r0 implicit-def dead $eflags148 JMP_1 %bb.6149 150 bb.5:151 %2:gr32 = IMPLICIT_DEF152 JMP_1 %bb.9153 154 bb.6:155 JCC_1 %bb.8, 4, implicit killed undef $eflags156 157 bb.7:158 %1:gr32 = COPY killed %3159 160 bb.8:161 %4:gr32 = COPY killed %1162 %0:gr32 = COPY killed %4163 JMP_1 %bb.1164 165 bb.9:166 %3:gr32 = COPY killed %2167 JMP_1 %bb.6168 169...170 171# Still failed after patch for first 2 failures172 173---174name: pr38795_verifier_error_reduced_3175tracksRegLiveness: true176body: |177 ; CHECK-LABEL: name: pr38795_verifier_error_reduced_3178 ; CHECK: bb.0:179 ; CHECK-NEXT: successors: %bb.5(0x40000000), %bb.1(0x40000000)180 ; CHECK-NEXT: {{ $}}181 ; CHECK-NEXT: [[DEF:%[0-9]+]]:gr32 = IMPLICIT_DEF182 ; CHECK-NEXT: [[DEF1:%[0-9]+]]:gr32 = IMPLICIT_DEF183 ; CHECK-NEXT: JCC_1 %bb.5, 4, implicit killed undef $eflags184 ; CHECK-NEXT: {{ $}}185 ; CHECK-NEXT: bb.1:186 ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.5(0x40000000)187 ; CHECK-NEXT: {{ $}}188 ; CHECK-NEXT: [[DEF2:%[0-9]+]]:gr32 = IMPLICIT_DEF189 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY [[DEF]]190 ; CHECK-NEXT: [[MOV32r0_:%[0-9]+]]:gr32 = MOV32r0 implicit-def dead $eflags191 ; CHECK-NEXT: JCC_1 %bb.4, 5, implicit killed undef $eflags192 ; CHECK-NEXT: JMP_1 %bb.5193 ; CHECK-NEXT: {{ $}}194 ; CHECK-NEXT: bb.2:195 ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.3(0x40000000)196 ; CHECK-NEXT: {{ $}}197 ; CHECK-NEXT: TEST32rr undef [[COPY]], [[COPY]], implicit-def $eflags198 ; CHECK-NEXT: [[DEF1:%[0-9]+]]:gr32 = IMPLICIT_DEF199 ; CHECK-NEXT: JCC_1 %bb.4, 4, implicit killed undef $eflags200 ; CHECK-NEXT: {{ $}}201 ; CHECK-NEXT: bb.3:202 ; CHECK-NEXT: successors: %bb.4(0x80000000)203 ; CHECK-NEXT: {{ $}}204 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY [[MOV32r0_]]205 ; CHECK-NEXT: {{ $}}206 ; CHECK-NEXT: bb.4:207 ; CHECK-NEXT: successors: %bb.1(0x80000000)208 ; CHECK-NEXT: {{ $}}209 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr32 = COPY [[COPY1]]210 ; CHECK-NEXT: JMP_1 %bb.1211 ; CHECK-NEXT: {{ $}}212 ; CHECK-NEXT: bb.5:213 ; CHECK-NEXT: successors: %bb.2(0x80000000)214 ; CHECK-NEXT: {{ $}}215 ; CHECK-NEXT: JMP_1 %bb.2216 bb.0:217 %0:gr32 = IMPLICIT_DEF218 %1:gr32 = IMPLICIT_DEF219 JCC_1 %bb.5, 4, implicit killed undef $eflags220 221 bb.1:222 %2:gr32 = IMPLICIT_DEF223 %1:gr32 = COPY killed %0224 %0:gr32 = MOV32r0 implicit-def dead $eflags225 JCC_1 %bb.4, 5, implicit killed undef $eflags226 JMP_1 %bb.5227 228 bb.2:229 TEST32rr undef %1, %1, implicit-def $eflags230 %2:gr32 = IMPLICIT_DEF231 JCC_1 %bb.4, 4, implicit killed undef $eflags232 233 bb.3:234 %2:gr32 = COPY killed %0235 236 bb.4:237 %0:gr32 = COPY killed %2238 JMP_1 %bb.1239 240 bb.5:241 JMP_1 %bb.2242 243...244