483 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=riscv64 -mattr=+m -run-pass=regbankselect \3# RUN: -simplify-mir -verify-machineinstrs %s \4# RUN: -o - | FileCheck -check-prefix=RV64I %s5 6---7name: add_i648legalized: true9tracksRegLiveness: true10body: |11 bb.0.entry:12 liveins: $x10, $x1113 14 ; RV64I-LABEL: name: add_i6415 ; RV64I: liveins: $x10, $x1116 ; RV64I-NEXT: {{ $}}17 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x1018 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x1119 ; RV64I-NEXT: [[ADD:%[0-9]+]]:gprb(s64) = G_ADD [[COPY]], [[COPY1]]20 ; RV64I-NEXT: $x10 = COPY [[ADD]](s64)21 ; RV64I-NEXT: PseudoRET implicit $x1022 %0:_(s64) = COPY $x1023 %1:_(s64) = COPY $x1124 %2:_(s64) = G_ADD %0, %125 $x10 = COPY %2(s64)26 PseudoRET implicit $x1027 28...29---30name: sub_i6431legalized: true32tracksRegLiveness: true33body: |34 bb.0.entry:35 liveins: $x10, $x1136 37 ; RV64I-LABEL: name: sub_i6438 ; RV64I: liveins: $x10, $x1139 ; RV64I-NEXT: {{ $}}40 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x1041 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x1142 ; RV64I-NEXT: [[SUB:%[0-9]+]]:gprb(s64) = G_SUB [[COPY]], [[COPY1]]43 ; RV64I-NEXT: $x10 = COPY [[SUB]](s64)44 ; RV64I-NEXT: PseudoRET implicit $x1045 %0:_(s64) = COPY $x1046 %1:_(s64) = COPY $x1147 %2:_(s64) = G_SUB %0, %148 $x10 = COPY %2(s64)49 PseudoRET implicit $x1050 51...52---53name: shl_i6454legalized: true55tracksRegLiveness: true56body: |57 bb.0.entry:58 liveins: $x10, $x1159 60 ; RV64I-LABEL: name: shl_i6461 ; RV64I: liveins: $x10, $x1162 ; RV64I-NEXT: {{ $}}63 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x1064 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x1165 ; RV64I-NEXT: [[SHL:%[0-9]+]]:gprb(s64) = G_SHL [[COPY]], [[COPY1]](s64)66 ; RV64I-NEXT: $x10 = COPY [[SHL]](s64)67 ; RV64I-NEXT: PseudoRET implicit $x1068 %0:_(s64) = COPY $x1069 %1:_(s64) = COPY $x1170 %2:_(s64) = G_SHL %0, %171 $x10 = COPY %2(s64)72 PseudoRET implicit $x1073 74...75---76name: ashr_i6477legalized: true78tracksRegLiveness: true79body: |80 bb.0.entry:81 liveins: $x10, $x1182 83 ; RV64I-LABEL: name: ashr_i6484 ; RV64I: liveins: $x10, $x1185 ; RV64I-NEXT: {{ $}}86 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x1087 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x1188 ; RV64I-NEXT: [[ASHR:%[0-9]+]]:gprb(s64) = G_ASHR [[COPY]], [[COPY1]](s64)89 ; RV64I-NEXT: $x10 = COPY [[ASHR]](s64)90 ; RV64I-NEXT: PseudoRET implicit $x1091 %0:_(s64) = COPY $x1092 %1:_(s64) = COPY $x1193 %2:_(s64) = G_ASHR %0, %194 $x10 = COPY %2(s64)95 PseudoRET implicit $x1096 97...98---99name: lshr_i64100legalized: true101tracksRegLiveness: true102body: |103 bb.0.entry:104 liveins: $x10, $x11105 106 ; RV64I-LABEL: name: lshr_i64107 ; RV64I: liveins: $x10, $x11108 ; RV64I-NEXT: {{ $}}109 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10110 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11111 ; RV64I-NEXT: [[LSHR:%[0-9]+]]:gprb(s64) = G_LSHR [[COPY]], [[COPY1]](s64)112 ; RV64I-NEXT: $x10 = COPY [[LSHR]](s64)113 ; RV64I-NEXT: PseudoRET implicit $x10114 %0:_(s64) = COPY $x10115 %1:_(s64) = COPY $x11116 %2:_(s64) = G_LSHR %0, %1117 $x10 = COPY %2(s64)118 PseudoRET implicit $x10119 120...121---122name: and_i64123legalized: true124tracksRegLiveness: true125body: |126 bb.0.entry:127 liveins: $x10, $x11128 129 ; RV64I-LABEL: name: and_i64130 ; RV64I: liveins: $x10, $x11131 ; RV64I-NEXT: {{ $}}132 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10133 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11134 ; RV64I-NEXT: [[AND:%[0-9]+]]:gprb(s64) = G_AND [[COPY]], [[COPY1]]135 ; RV64I-NEXT: $x10 = COPY [[AND]](s64)136 ; RV64I-NEXT: PseudoRET implicit $x10137 %0:_(s64) = COPY $x10138 %1:_(s64) = COPY $x11139 %2:_(s64) = G_AND %0, %1140 $x10 = COPY %2(s64)141 PseudoRET implicit $x10142 143...144---145name: or_i64146legalized: true147tracksRegLiveness: true148body: |149 bb.0.entry:150 liveins: $x10, $x11151 152 ; RV64I-LABEL: name: or_i64153 ; RV64I: liveins: $x10, $x11154 ; RV64I-NEXT: {{ $}}155 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10156 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11157 ; RV64I-NEXT: [[OR:%[0-9]+]]:gprb(s64) = G_OR [[COPY]], [[COPY1]]158 ; RV64I-NEXT: $x10 = COPY [[OR]](s64)159 ; RV64I-NEXT: PseudoRET implicit $x10160 %0:_(s64) = COPY $x10161 %1:_(s64) = COPY $x11162 %2:_(s64) = G_OR %0, %1163 $x10 = COPY %2(s64)164 PseudoRET implicit $x10165 166...167---168name: xor_i64169legalized: true170tracksRegLiveness: true171body: |172 bb.0.entry:173 liveins: $x10, $x11174 175 ; RV64I-LABEL: name: xor_i64176 ; RV64I: liveins: $x10, $x11177 ; RV64I-NEXT: {{ $}}178 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10179 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11180 ; RV64I-NEXT: [[XOR:%[0-9]+]]:gprb(s64) = G_XOR [[COPY]], [[COPY1]]181 ; RV64I-NEXT: $x10 = COPY [[XOR]](s64)182 ; RV64I-NEXT: PseudoRET implicit $x10183 %0:_(s64) = COPY $x10184 %1:_(s64) = COPY $x11185 %2:_(s64) = G_XOR %0, %1186 $x10 = COPY %2(s64)187 PseudoRET implicit $x10188 189...190---191name: mul_i64192legalized: true193tracksRegLiveness: true194body: |195 bb.0.entry:196 liveins: $x10, $x11197 198 ; RV64I-LABEL: name: mul_i64199 ; RV64I: liveins: $x10, $x11200 ; RV64I-NEXT: {{ $}}201 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10202 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11203 ; RV64I-NEXT: [[MUL:%[0-9]+]]:gprb(s64) = G_MUL [[COPY]], [[COPY1]]204 ; RV64I-NEXT: $x10 = COPY [[MUL]](s64)205 ; RV64I-NEXT: PseudoRET implicit $x10206 %0:_(s64) = COPY $x10207 %1:_(s64) = COPY $x11208 %2:_(s64) = G_MUL %0, %1209 $x10 = COPY %2(s64)210 PseudoRET implicit $x10211 212...213---214name: sdiv_i64215legalized: true216tracksRegLiveness: true217body: |218 bb.0.entry:219 liveins: $x10, $x11220 221 ; RV64I-LABEL: name: sdiv_i64222 ; RV64I: liveins: $x10, $x11223 ; RV64I-NEXT: {{ $}}224 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10225 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11226 ; RV64I-NEXT: [[SDIV:%[0-9]+]]:gprb(s64) = G_SDIV [[COPY]], [[COPY1]]227 ; RV64I-NEXT: $x10 = COPY [[SDIV]](s64)228 ; RV64I-NEXT: PseudoRET implicit $x10229 %0:_(s64) = COPY $x10230 %1:_(s64) = COPY $x11231 %2:_(s64) = G_SDIV %0, %1232 $x10 = COPY %2(s64)233 PseudoRET implicit $x10234 235...236---237name: srem_i64238legalized: true239tracksRegLiveness: true240body: |241 bb.0.entry:242 liveins: $x10, $x11243 244 ; RV64I-LABEL: name: srem_i64245 ; RV64I: liveins: $x10, $x11246 ; RV64I-NEXT: {{ $}}247 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10248 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11249 ; RV64I-NEXT: [[SREM:%[0-9]+]]:gprb(s64) = G_SREM [[COPY]], [[COPY1]]250 ; RV64I-NEXT: $x10 = COPY [[SREM]](s64)251 ; RV64I-NEXT: PseudoRET implicit $x10252 %0:_(s64) = COPY $x10253 %1:_(s64) = COPY $x11254 %2:_(s64) = G_SREM %0, %1255 $x10 = COPY %2(s64)256 PseudoRET implicit $x10257 258...259---260name: smulh_i64261legalized: true262tracksRegLiveness: true263body: |264 bb.0.entry:265 liveins: $x10, $x11266 267 ; RV64I-LABEL: name: smulh_i64268 ; RV64I: liveins: $x10, $x11269 ; RV64I-NEXT: {{ $}}270 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10271 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11272 ; RV64I-NEXT: [[SMULH:%[0-9]+]]:gprb(s64) = G_SMULH [[COPY]], [[COPY1]]273 ; RV64I-NEXT: $x10 = COPY [[SMULH]](s64)274 ; RV64I-NEXT: PseudoRET implicit $x10275 %0:_(s64) = COPY $x10276 %1:_(s64) = COPY $x11277 %2:_(s64) = G_SMULH %0, %1278 $x10 = COPY %2(s64)279 PseudoRET implicit $x10280 281...282---283name: udiv_i64284legalized: true285tracksRegLiveness: true286body: |287 bb.0.entry:288 liveins: $x10, $x11289 290 ; RV64I-LABEL: name: udiv_i64291 ; RV64I: liveins: $x10, $x11292 ; RV64I-NEXT: {{ $}}293 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10294 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11295 ; RV64I-NEXT: [[UDIV:%[0-9]+]]:gprb(s64) = G_UDIV [[COPY]], [[COPY1]]296 ; RV64I-NEXT: $x10 = COPY [[UDIV]](s64)297 ; RV64I-NEXT: PseudoRET implicit $x10298 %0:_(s64) = COPY $x10299 %1:_(s64) = COPY $x11300 %2:_(s64) = G_UDIV %0, %1301 $x10 = COPY %2(s64)302 PseudoRET implicit $x10303 304...305---306name: urem_i64307legalized: true308tracksRegLiveness: true309body: |310 bb.0.entry:311 liveins: $x10, $x11312 313 ; RV64I-LABEL: name: urem_i64314 ; RV64I: liveins: $x10, $x11315 ; RV64I-NEXT: {{ $}}316 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10317 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11318 ; RV64I-NEXT: [[UREM:%[0-9]+]]:gprb(s64) = G_UREM [[COPY]], [[COPY1]]319 ; RV64I-NEXT: $x10 = COPY [[UREM]](s64)320 ; RV64I-NEXT: PseudoRET implicit $x10321 %0:_(s64) = COPY $x10322 %1:_(s64) = COPY $x11323 %2:_(s64) = G_UREM %0, %1324 $x10 = COPY %2(s64)325 PseudoRET implicit $x10326 327...328---329name: umulh_i64330legalized: true331tracksRegLiveness: true332body: |333 bb.0.entry:334 liveins: $x10, $x11335 336 ; RV64I-LABEL: name: umulh_i64337 ; RV64I: liveins: $x10, $x11338 ; RV64I-NEXT: {{ $}}339 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10340 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11341 ; RV64I-NEXT: [[UMULH:%[0-9]+]]:gprb(s64) = G_UMULH [[COPY]], [[COPY1]]342 ; RV64I-NEXT: $x10 = COPY [[UMULH]](s64)343 ; RV64I-NEXT: PseudoRET implicit $x10344 %0:_(s64) = COPY $x10345 %1:_(s64) = COPY $x11346 %2:_(s64) = G_UMULH %0, %1347 $x10 = COPY %2(s64)348 PseudoRET implicit $x10349 350...351---352name: icmp_i64353legalized: true354tracksRegLiveness: true355body: |356 bb.0.entry:357 liveins: $x10, $x11358 359 ; RV64I-LABEL: name: icmp_i64360 ; RV64I: liveins: $x10, $x11361 ; RV64I-NEXT: {{ $}}362 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10363 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11364 ; RV64I-NEXT: [[ICMP:%[0-9]+]]:gprb(s64) = G_ICMP intpred(eq), [[COPY]](s64), [[COPY1]]365 ; RV64I-NEXT: $x10 = COPY [[ICMP]](s64)366 ; RV64I-NEXT: PseudoRET implicit $x10367 %0:_(s64) = COPY $x10368 %1:_(s64) = COPY $x11369 %2:_(s64) = G_ICMP intpred(eq), %0(s64), %1370 $x10 = COPY %2(s64)371 PseudoRET implicit $x10372 373...374---375name: icmp_ptr376legalized: true377tracksRegLiveness: true378body: |379 bb.0.entry:380 liveins: $x10, $x11381 382 ; RV64I-LABEL: name: icmp_ptr383 ; RV64I: liveins: $x10, $x11384 ; RV64I-NEXT: {{ $}}385 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10386 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(p0) = COPY $x11387 ; RV64I-NEXT: [[ICMP:%[0-9]+]]:gprb(s64) = G_ICMP intpred(eq), [[COPY]](p0), [[COPY1]]388 ; RV64I-NEXT: $x10 = COPY [[ICMP]](s64)389 ; RV64I-NEXT: PseudoRET implicit $x10390 %0:_(p0) = COPY $x10391 %1:_(p0) = COPY $x11392 %2:_(s64) = G_ICMP intpred(eq), %0(p0), %1393 $x10 = COPY %2(s64)394 PseudoRET implicit $x10395 396...397---398name: sext_inreg_i64399legalized: true400tracksRegLiveness: true401body: |402 bb.0.entry:403 liveins: $x10404 405 ; RV64I-LABEL: name: sext_inreg_i64406 ; RV64I: liveins: $x10407 ; RV64I-NEXT: {{ $}}408 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10409 ; RV64I-NEXT: [[SEXT_INREG:%[0-9]+]]:gprb(s64) = G_SEXT_INREG [[COPY]], 32410 ; RV64I-NEXT: $x10 = COPY [[SEXT_INREG]](s64)411 ; RV64I-NEXT: PseudoRET implicit $x10412 %0:_(s64) = COPY $x10413 %1:_(s64) = G_SEXT_INREG %0, 32414 $x10 = COPY %1(s64)415 PseudoRET implicit $x10416 417...418---419name: gep420legalized: true421tracksRegLiveness: true422body: |423 bb.0.entry:424 liveins: $x10, $x11425 426 ; RV64I-LABEL: name: gep427 ; RV64I: liveins: $x10, $x11428 ; RV64I-NEXT: {{ $}}429 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10430 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gprb(s64) = COPY $x11431 ; RV64I-NEXT: [[PTR_ADD:%[0-9]+]]:gprb(p0) = G_PTR_ADD [[COPY]], [[COPY1]](s64)432 ; RV64I-NEXT: $x10 = COPY [[PTR_ADD]](p0)433 ; RV64I-NEXT: PseudoRET implicit $x10434 %0:_(p0) = COPY $x10435 %1:_(s64) = COPY $x11436 %2:_(p0) = G_PTR_ADD %0, %1(s64)437 $x10 = COPY %2(p0)438 PseudoRET implicit $x10439 440...441---442name: ptrtoint443legalized: true444tracksRegLiveness: true445body: |446 bb.0.entry:447 liveins: $x10448 449 ; RV64I-LABEL: name: ptrtoint450 ; RV64I: liveins: $x10451 ; RV64I-NEXT: {{ $}}452 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(p0) = COPY $x10453 ; RV64I-NEXT: [[PTRTOINT:%[0-9]+]]:gprb(s64) = G_PTRTOINT [[COPY]](p0)454 ; RV64I-NEXT: $x10 = COPY [[PTRTOINT]](s64)455 ; RV64I-NEXT: PseudoRET implicit $x10456 %0:_(p0) = COPY $x10457 %1:_(s64) = G_PTRTOINT %0(p0)458 $x10 = COPY %1(s64)459 PseudoRET implicit $x10460 461...462---463name: inttoprt464legalized: true465tracksRegLiveness: true466body: |467 bb.0.entry:468 liveins: $x10469 470 ; RV64I-LABEL: name: inttoprt471 ; RV64I: liveins: $x10472 ; RV64I-NEXT: {{ $}}473 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gprb(s64) = COPY $x10474 ; RV64I-NEXT: [[INTTOPTR:%[0-9]+]]:gprb(p0) = G_INTTOPTR [[COPY]](s64)475 ; RV64I-NEXT: $x10 = COPY [[INTTOPTR]](p0)476 ; RV64I-NEXT: PseudoRET implicit $x10477 %0:_(s64) = COPY $x10478 %1:_(p0) = G_INTTOPTR %0(s64)479 $x10 = COPY %1(p0)480 PseudoRET implicit $x10481 482...483