1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=riscv64 -run-pass=instruction-select -simplify-mir -verify-machineinstrs %s -o - \ 3# RUN: | FileCheck -check-prefix=RV64I %s 4 5--- 6name: sll_i32 7legalized: true 8regBankSelected: true 9tracksRegLiveness: true 10body: | 11 bb.0.entry: 12 liveins: $x10, $x11 13 14 ; RV64I-LABEL: name: sll_i32 15 ; RV64I: liveins: $x10, $x11 16 ; RV64I-NEXT: {{ $}} 17 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 18 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 19 ; RV64I-NEXT: [[SLLW:%[0-9]+]]:gpr = SLLW [[COPY]], [[COPY1]] 20 ; RV64I-NEXT: $x10 = COPY [[SLLW]] 21 ; RV64I-NEXT: PseudoRET implicit $x10 22 %0:gprb(s64) = COPY $x10 23 %1:gprb(s64) = COPY $x11 24 %2:gprb(s64) = G_SLLW %0, %1 25 $x10 = COPY %2(s64) 26 PseudoRET implicit $x10 27 28... 29--- 30name: slli_i32 31legalized: true 32regBankSelected: true 33tracksRegLiveness: true 34body: | 35 bb.0.entry: 36 liveins: $x10 37 38 ; RV64I-LABEL: name: slli_i32 39 ; RV64I: liveins: $x10 40 ; RV64I-NEXT: {{ $}} 41 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 42 ; RV64I-NEXT: [[SLLI:%[0-9]+]]:gpr = SLLI [[COPY]], 31 43 ; RV64I-NEXT: $x10 = COPY [[SLLI]] 44 ; RV64I-NEXT: PseudoRET implicit $x10 45 %0:gprb(s64) = COPY $x10 46 %1:gprb(s64) = G_CONSTANT i64 31 47 %2:gprb(s64) = G_SHL %0, %1 48 $x10 = COPY %2(s64) 49 PseudoRET implicit $x10 50 51... 52--- 53name: sra_i32 54legalized: true 55regBankSelected: true 56tracksRegLiveness: true 57body: | 58 bb.0.entry: 59 liveins: $x10, $x11 60 61 ; RV64I-LABEL: name: sra_i32 62 ; RV64I: liveins: $x10, $x11 63 ; RV64I-NEXT: {{ $}} 64 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 65 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 66 ; RV64I-NEXT: [[SRAW:%[0-9]+]]:gpr = SRAW [[COPY]], [[COPY1]] 67 ; RV64I-NEXT: $x10 = COPY [[SRAW]] 68 ; RV64I-NEXT: PseudoRET implicit $x10 69 %0:gprb(s64) = COPY $x10 70 %1:gprb(s64) = COPY $x11 71 %2:gprb(s64) = G_SRAW %0, %1 72 $x10 = COPY %2(s64) 73 PseudoRET implicit $x10 74 75... 76--- 77name: srai_i32 78legalized: true 79regBankSelected: true 80tracksRegLiveness: true 81body: | 82 bb.0.entry: 83 liveins: $x10 84 85 ; RV64I-LABEL: name: srai_i32 86 ; RV64I: liveins: $x10 87 ; RV64I-NEXT: {{ $}} 88 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 89 ; RV64I-NEXT: [[SRAIW:%[0-9]+]]:gpr = SRAIW [[COPY]], 31 90 ; RV64I-NEXT: $x10 = COPY [[SRAIW]] 91 ; RV64I-NEXT: PseudoRET implicit $x10 92 %0:gprb(s64) = COPY $x10 93 %1:gprb(s64) = G_CONSTANT i64 31 94 %2:gprb(s64) = G_SEXT_INREG %0, 32 95 %3:gprb(s64) = G_ASHR %2, %1(s64) 96 $x10 = COPY %3(s64) 97 PseudoRET implicit $x10 98 99... 100--- 101name: srl_i32 102legalized: true 103regBankSelected: true 104tracksRegLiveness: true 105body: | 106 bb.0.entry: 107 liveins: $x10, $x11 108 109 ; RV64I-LABEL: name: srl_i32 110 ; RV64I: liveins: $x10, $x11 111 ; RV64I-NEXT: {{ $}} 112 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 113 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 114 ; RV64I-NEXT: [[SRLW:%[0-9]+]]:gpr = SRLW [[COPY]], [[COPY1]] 115 ; RV64I-NEXT: $x10 = COPY [[SRLW]] 116 ; RV64I-NEXT: PseudoRET implicit $x10 117 %0:gprb(s64) = COPY $x10 118 %1:gprb(s64) = COPY $x11 119 %2:gprb(s64) = G_SRLW %0, %1 120 $x10 = COPY %2(s64) 121 PseudoRET implicit $x10 122 123... 124--- 125name: srli_i32 126legalized: true 127regBankSelected: true 128tracksRegLiveness: true 129body: | 130 bb.0.entry: 131 liveins: $x10 132 133 ; RV64I-LABEL: name: srli_i32 134 ; RV64I: liveins: $x10 135 ; RV64I-NEXT: {{ $}} 136 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 137 ; RV64I-NEXT: [[SRLIW:%[0-9]+]]:gpr = SRLIW [[COPY]], 31 138 ; RV64I-NEXT: $x10 = COPY [[SRLIW]] 139 ; RV64I-NEXT: PseudoRET implicit $x10 140 %0:gprb(s64) = COPY $x10 141 %1:gprb(s64) = G_CONSTANT i64 31 142 %2:gprb(s64) = G_CONSTANT i64 4294967295 143 %3:gprb(s64) = G_AND %0, %2 144 %4:gprb(s64) = G_LSHR %3, %1(s64) 145 $x10 = COPY %4(s64) 146 PseudoRET implicit $x10 147 148... 149--- 150name: add_i64 151legalized: true 152regBankSelected: true 153tracksRegLiveness: true 154body: | 155 bb.0.entry: 156 liveins: $x10, $x11 157 158 ; RV64I-LABEL: name: add_i64 159 ; RV64I: liveins: $x10, $x11 160 ; RV64I-NEXT: {{ $}} 161 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 162 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 163 ; RV64I-NEXT: [[ADD:%[0-9]+]]:gpr = ADD [[COPY]], [[COPY1]] 164 ; RV64I-NEXT: $x10 = COPY [[ADD]] 165 ; RV64I-NEXT: PseudoRET implicit $x10 166 %0:gprb(s64) = COPY $x10 167 %1:gprb(s64) = COPY $x11 168 %2:gprb(s64) = G_ADD %0, %1 169 $x10 = COPY %2(s64) 170 PseudoRET implicit $x10 171 172... 173--- 174name: addi_i64 175legalized: true 176regBankSelected: true 177tracksRegLiveness: true 178body: | 179 bb.0.entry: 180 liveins: $x10 181 182 ; RV64I-LABEL: name: addi_i64 183 ; RV64I: liveins: $x10 184 ; RV64I-NEXT: {{ $}} 185 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 186 ; RV64I-NEXT: [[ADDI:%[0-9]+]]:gpr = ADDI [[COPY]], 1234 187 ; RV64I-NEXT: $x10 = COPY [[ADDI]] 188 ; RV64I-NEXT: PseudoRET implicit $x10 189 %0:gprb(s64) = COPY $x10 190 %1:gprb(s64) = G_CONSTANT i64 1234 191 %2:gprb(s64) = G_ADD %0, %1 192 $x10 = COPY %2(s64) 193 PseudoRET implicit $x10 194 195... 196--- 197name: sub_i64 198legalized: true 199regBankSelected: true 200tracksRegLiveness: true 201body: | 202 bb.0.entry: 203 liveins: $x10, $x11 204 205 ; RV64I-LABEL: name: sub_i64 206 ; RV64I: liveins: $x10, $x11 207 ; RV64I-NEXT: {{ $}} 208 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 209 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 210 ; RV64I-NEXT: [[SUB:%[0-9]+]]:gpr = SUB [[COPY]], [[COPY1]] 211 ; RV64I-NEXT: $x10 = COPY [[SUB]] 212 ; RV64I-NEXT: PseudoRET implicit $x10 213 %0:gprb(s64) = COPY $x10 214 %1:gprb(s64) = COPY $x11 215 %2:gprb(s64) = G_SUB %0, %1 216 $x10 = COPY %2(s64) 217 PseudoRET implicit $x10 218 219... 220--- 221name: subi_i64 222legalized: true 223regBankSelected: true 224tracksRegLiveness: true 225body: | 226 bb.0.entry: 227 liveins: $x10 228 229 ; RV64I-LABEL: name: subi_i64 230 ; RV64I: liveins: $x10 231 ; RV64I-NEXT: {{ $}} 232 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 233 ; RV64I-NEXT: [[ADDI:%[0-9]+]]:gpr = ADDI $x0, -1234 234 ; RV64I-NEXT: [[SUB:%[0-9]+]]:gpr = SUB [[COPY]], [[ADDI]] 235 ; RV64I-NEXT: $x10 = COPY [[SUB]] 236 ; RV64I-NEXT: PseudoRET implicit $x10 237 %0:gprb(s64) = COPY $x10 238 %1:gprb(s64) = G_CONSTANT i64 -1234 239 %2:gprb(s64) = G_SUB %0, %1 240 $x10 = COPY %2(s64) 241 PseudoRET implicit $x10 242 243... 244--- 245name: sll_i64 246legalized: true 247regBankSelected: true 248tracksRegLiveness: true 249body: | 250 bb.0.entry: 251 liveins: $x10, $x11 252 253 ; RV64I-LABEL: name: sll_i64 254 ; RV64I: liveins: $x10, $x11 255 ; RV64I-NEXT: {{ $}} 256 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 257 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 258 ; RV64I-NEXT: [[SLL:%[0-9]+]]:gpr = SLL [[COPY]], [[COPY1]] 259 ; RV64I-NEXT: $x10 = COPY [[SLL]] 260 ; RV64I-NEXT: PseudoRET implicit $x10 261 %0:gprb(s64) = COPY $x10 262 %1:gprb(s64) = COPY $x11 263 %2:gprb(s64) = G_SHL %0, %1 264 $x10 = COPY %2(s64) 265 PseudoRET implicit $x10 266 267... 268--- 269name: slli_i64 270legalized: true 271regBankSelected: true 272tracksRegLiveness: true 273body: | 274 bb.0.entry: 275 liveins: $x10 276 277 ; RV64I-LABEL: name: slli_i64 278 ; RV64I: liveins: $x10 279 ; RV64I-NEXT: {{ $}} 280 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 281 ; RV64I-NEXT: [[SLLI:%[0-9]+]]:gpr = SLLI [[COPY]], 63 282 ; RV64I-NEXT: $x10 = COPY [[SLLI]] 283 ; RV64I-NEXT: PseudoRET implicit $x10 284 %0:gprb(s64) = COPY $x10 285 %1:gprb(s64) = G_CONSTANT i64 63 286 %2:gprb(s64) = G_SHL %0, %1 287 $x10 = COPY %2(s64) 288 PseudoRET implicit $x10 289 290... 291--- 292name: sra_i64 293legalized: true 294regBankSelected: true 295tracksRegLiveness: true 296body: | 297 bb.0.entry: 298 liveins: $x10, $x11 299 300 ; RV64I-LABEL: name: sra_i64 301 ; RV64I: liveins: $x10, $x11 302 ; RV64I-NEXT: {{ $}} 303 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 304 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 305 ; RV64I-NEXT: [[SRA:%[0-9]+]]:gpr = SRA [[COPY]], [[COPY1]] 306 ; RV64I-NEXT: $x10 = COPY [[SRA]] 307 ; RV64I-NEXT: PseudoRET implicit $x10 308 %0:gprb(s64) = COPY $x10 309 %1:gprb(s64) = COPY $x11 310 %2:gprb(s64) = G_ASHR %0, %1 311 $x10 = COPY %2(s64) 312 PseudoRET implicit $x10 313 314... 315--- 316name: srai_i64 317legalized: true 318regBankSelected: true 319tracksRegLiveness: true 320body: | 321 bb.0.entry: 322 liveins: $x10 323 324 ; RV64I-LABEL: name: srai_i64 325 ; RV64I: liveins: $x10 326 ; RV64I-NEXT: {{ $}} 327 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 328 ; RV64I-NEXT: [[SRAI:%[0-9]+]]:gpr = SRAI [[COPY]], 63 329 ; RV64I-NEXT: $x10 = COPY [[SRAI]] 330 ; RV64I-NEXT: PseudoRET implicit $x10 331 %0:gprb(s64) = COPY $x10 332 %1:gprb(s64) = G_CONSTANT i64 63 333 %2:gprb(s64) = G_ASHR %0, %1 334 $x10 = COPY %2(s64) 335 PseudoRET implicit $x10 336 337... 338--- 339name: lshr_i64 340legalized: true 341regBankSelected: true 342tracksRegLiveness: true 343body: | 344 bb.0.entry: 345 liveins: $x10, $x11 346 347 ; RV64I-LABEL: name: lshr_i64 348 ; RV64I: liveins: $x10, $x11 349 ; RV64I-NEXT: {{ $}} 350 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 351 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 352 ; RV64I-NEXT: [[SRL:%[0-9]+]]:gpr = SRL [[COPY]], [[COPY1]] 353 ; RV64I-NEXT: $x10 = COPY [[SRL]] 354 ; RV64I-NEXT: PseudoRET implicit $x10 355 %0:gprb(s64) = COPY $x10 356 %1:gprb(s64) = COPY $x11 357 %2:gprb(s64) = G_LSHR %0, %1 358 $x10 = COPY %2(s64) 359 PseudoRET implicit $x10 360 361... 362--- 363name: srli_i64 364legalized: true 365regBankSelected: true 366tracksRegLiveness: true 367body: | 368 bb.0.entry: 369 liveins: $x10 370 371 ; RV64I-LABEL: name: srli_i64 372 ; RV64I: liveins: $x10 373 ; RV64I-NEXT: {{ $}} 374 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 375 ; RV64I-NEXT: [[SRLI:%[0-9]+]]:gpr = SRLI [[COPY]], 63 376 ; RV64I-NEXT: $x10 = COPY [[SRLI]] 377 ; RV64I-NEXT: PseudoRET implicit $x10 378 %0:gprb(s64) = COPY $x10 379 %1:gprb(s64) = G_CONSTANT i64 63 380 %2:gprb(s64) = G_LSHR %0, %1 381 $x10 = COPY %2(s64) 382 PseudoRET implicit $x10 383 384... 385--- 386name: and_i64 387legalized: true 388regBankSelected: true 389tracksRegLiveness: true 390body: | 391 bb.0.entry: 392 liveins: $x10, $x11 393 394 ; RV64I-LABEL: name: and_i64 395 ; RV64I: liveins: $x10, $x11 396 ; RV64I-NEXT: {{ $}} 397 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 398 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 399 ; RV64I-NEXT: [[AND:%[0-9]+]]:gpr = AND [[COPY]], [[COPY1]] 400 ; RV64I-NEXT: $x10 = COPY [[AND]] 401 ; RV64I-NEXT: PseudoRET implicit $x10 402 %0:gprb(s64) = COPY $x10 403 %1:gprb(s64) = COPY $x11 404 %2:gprb(s64) = G_AND %0, %1 405 $x10 = COPY %2(s64) 406 PseudoRET implicit $x10 407 408... 409--- 410name: andi_i64 411legalized: true 412regBankSelected: true 413tracksRegLiveness: true 414body: | 415 bb.0.entry: 416 liveins: $x10 417 418 ; RV64I-LABEL: name: andi_i64 419 ; RV64I: liveins: $x10 420 ; RV64I-NEXT: {{ $}} 421 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 422 ; RV64I-NEXT: [[ANDI:%[0-9]+]]:gpr = ANDI [[COPY]], 1234 423 ; RV64I-NEXT: $x10 = COPY [[ANDI]] 424 ; RV64I-NEXT: PseudoRET implicit $x10 425 %0:gprb(s64) = COPY $x10 426 %1:gprb(s64) = G_CONSTANT i64 1234 427 %2:gprb(s64) = G_AND %0, %1 428 $x10 = COPY %2(s64) 429 PseudoRET implicit $x10 430 431... 432--- 433name: or_i64 434legalized: true 435regBankSelected: true 436tracksRegLiveness: true 437body: | 438 bb.0.entry: 439 liveins: $x10, $x11 440 441 ; RV64I-LABEL: name: or_i64 442 ; RV64I: liveins: $x10, $x11 443 ; RV64I-NEXT: {{ $}} 444 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 445 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 446 ; RV64I-NEXT: [[OR:%[0-9]+]]:gpr = OR [[COPY]], [[COPY1]] 447 ; RV64I-NEXT: $x10 = COPY [[OR]] 448 ; RV64I-NEXT: PseudoRET implicit $x10 449 %0:gprb(s64) = COPY $x10 450 %1:gprb(s64) = COPY $x11 451 %2:gprb(s64) = G_OR %0, %1 452 $x10 = COPY %2(s64) 453 PseudoRET implicit $x10 454 455... 456--- 457name: ori_i64 458legalized: true 459regBankSelected: true 460tracksRegLiveness: true 461body: | 462 bb.0.entry: 463 liveins: $x10 464 465 ; RV64I-LABEL: name: ori_i64 466 ; RV64I: liveins: $x10 467 ; RV64I-NEXT: {{ $}} 468 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 469 ; RV64I-NEXT: [[ORI:%[0-9]+]]:gpr = ORI [[COPY]], 1234 470 ; RV64I-NEXT: $x10 = COPY [[ORI]] 471 ; RV64I-NEXT: PseudoRET implicit $x10 472 %0:gprb(s64) = COPY $x10 473 %1:gprb(s64) = G_CONSTANT i64 1234 474 %2:gprb(s64) = G_OR %0, %1 475 $x10 = COPY %2(s64) 476 PseudoRET implicit $x10 477 478... 479--- 480name: xor_i64 481legalized: true 482regBankSelected: true 483tracksRegLiveness: true 484body: | 485 bb.0.entry: 486 liveins: $x10, $x11 487 488 ; RV64I-LABEL: name: xor_i64 489 ; RV64I: liveins: $x10, $x11 490 ; RV64I-NEXT: {{ $}} 491 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 492 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 493 ; RV64I-NEXT: [[XOR:%[0-9]+]]:gpr = XOR [[COPY]], [[COPY1]] 494 ; RV64I-NEXT: $x10 = COPY [[XOR]] 495 ; RV64I-NEXT: PseudoRET implicit $x10 496 %0:gprb(s64) = COPY $x10 497 %1:gprb(s64) = COPY $x11 498 %2:gprb(s64) = G_XOR %0, %1 499 $x10 = COPY %2(s64) 500 PseudoRET implicit $x10 501 502... 503--- 504name: xori_i64 505legalized: true 506regBankSelected: true 507tracksRegLiveness: true 508body: | 509 bb.0.entry: 510 liveins: $x10 511 512 ; RV64I-LABEL: name: xori_i64 513 ; RV64I: liveins: $x10 514 ; RV64I-NEXT: {{ $}} 515 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 516 ; RV64I-NEXT: [[XORI:%[0-9]+]]:gpr = XORI [[COPY]], 1234 517 ; RV64I-NEXT: $x10 = COPY [[XORI]] 518 ; RV64I-NEXT: PseudoRET implicit $x10 519 %0:gprb(s64) = COPY $x10 520 %1:gprb(s64) = G_CONSTANT i64 1234 521 %2:gprb(s64) = G_XOR %0, %1 522 $x10 = COPY %2(s64) 523 PseudoRET implicit $x10 524 525... 526--- 527name: add_i128 528legalized: true 529regBankSelected: true 530tracksRegLiveness: true 531body: | 532 bb.0.entry: 533 liveins: $x10, $x11, $x12, $x13 534 535 ; RV64I-LABEL: name: add_i128 536 ; RV64I: liveins: $x10, $x11, $x12, $x13 537 ; RV64I-NEXT: {{ $}} 538 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 539 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 540 ; RV64I-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x12 541 ; RV64I-NEXT: [[COPY3:%[0-9]+]]:gpr = COPY $x13 542 ; RV64I-NEXT: [[ADD:%[0-9]+]]:gpr = ADD [[COPY]], [[COPY2]] 543 ; RV64I-NEXT: [[SLTU:%[0-9]+]]:gpr = SLTU [[ADD]], [[COPY2]] 544 ; RV64I-NEXT: [[ADD1:%[0-9]+]]:gpr = ADD [[COPY1]], [[COPY3]] 545 ; RV64I-NEXT: [[ANDI:%[0-9]+]]:gpr = ANDI [[SLTU]], 1 546 ; RV64I-NEXT: [[ADD2:%[0-9]+]]:gpr = ADD [[ADD1]], [[ANDI]] 547 ; RV64I-NEXT: $x10 = COPY [[ADD]] 548 ; RV64I-NEXT: $x11 = COPY [[ADD2]] 549 ; RV64I-NEXT: PseudoRET implicit $x10, implicit $x11 550 %0:gprb(s64) = COPY $x10 551 %1:gprb(s64) = COPY $x11 552 %2:gprb(s64) = COPY $x12 553 %3:gprb(s64) = COPY $x13 554 %4:gprb(s64) = G_ADD %0, %2 555 %5:gprb(s64) = G_ICMP intpred(ult), %4(s64), %2 556 %6:gprb(s64) = G_ADD %1, %3 557 %7:gprb(s64) = G_CONSTANT i64 1 558 %8:gprb(s64) = G_AND %5, %7 559 %9:gprb(s64) = G_ADD %6, %8 560 $x10 = COPY %4(s64) 561 $x11 = COPY %9(s64) 562 PseudoRET implicit $x10, implicit $x11 563 564... 565--- 566name: sub_i128 567legalized: true 568regBankSelected: true 569tracksRegLiveness: true 570body: | 571 bb.0.entry: 572 liveins: $x10, $x11, $x12, $x13 573 574 ; RV64I-LABEL: name: sub_i128 575 ; RV64I: liveins: $x10, $x11, $x12, $x13 576 ; RV64I-NEXT: {{ $}} 577 ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 578 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 579 ; RV64I-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x12 580 ; RV64I-NEXT: [[COPY3:%[0-9]+]]:gpr = COPY $x13 581 ; RV64I-NEXT: [[SUB:%[0-9]+]]:gpr = SUB [[COPY]], [[COPY2]] 582 ; RV64I-NEXT: [[SLTU:%[0-9]+]]:gpr = SLTU [[COPY]], [[COPY2]] 583 ; RV64I-NEXT: [[SUB1:%[0-9]+]]:gpr = SUB [[COPY1]], [[COPY3]] 584 ; RV64I-NEXT: [[ANDI:%[0-9]+]]:gpr = ANDI [[SLTU]], 1 585 ; RV64I-NEXT: [[SUB2:%[0-9]+]]:gpr = SUB [[SUB1]], [[ANDI]] 586 ; RV64I-NEXT: $x10 = COPY [[SUB]] 587 ; RV64I-NEXT: $x11 = COPY [[SUB2]] 588 ; RV64I-NEXT: PseudoRET implicit $x10, implicit $x11 589 %0:gprb(s64) = COPY $x10 590 %1:gprb(s64) = COPY $x11 591 %2:gprb(s64) = COPY $x12 592 %3:gprb(s64) = COPY $x13 593 %4:gprb(s64) = G_SUB %0, %2 594 %5:gprb(s64) = G_ICMP intpred(ult), %0(s64), %2 595 %6:gprb(s64) = G_SUB %1, %3 596 %7:gprb(s64) = G_CONSTANT i64 1 597 %8:gprb(s64) = G_AND %5, %7 598 %9:gprb(s64) = G_SUB %6, %8 599 $x10 = COPY %4(s64) 600 $x11 = COPY %9(s64) 601 PseudoRET implicit $x10, implicit $x11 602 603... 604