| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py |
| # RUN: llc -mtriple=riscv64 -run-pass=instruction-select -simplify-mir -verify-machineinstrs %s -o - \ |
| # RUN: | FileCheck -check-prefix=RV64I %s |
| |
| --- |
| name: sll_i32 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; RV64I-LABEL: name: sll_i32 |
| ; RV64I: liveins: $x10, $x11 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; RV64I-NEXT: [[SLLW:%[0-9]+]]:gpr = SLLW [[COPY]], [[COPY1]] |
| ; RV64I-NEXT: $x10 = COPY [[SLLW]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| %2:gprb(s64) = G_SLLW %0, %1 |
| $x10 = COPY %2(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: slli_i32 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10 |
| |
| ; RV64I-LABEL: name: slli_i32 |
| ; RV64I: liveins: $x10 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[SLLI:%[0-9]+]]:gpr = SLLI [[COPY]], 31 |
| ; RV64I-NEXT: $x10 = COPY [[SLLI]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = G_CONSTANT i64 31 |
| %2:gprb(s64) = G_SHL %0, %1 |
| $x10 = COPY %2(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: sra_i32 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; RV64I-LABEL: name: sra_i32 |
| ; RV64I: liveins: $x10, $x11 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; RV64I-NEXT: [[SRAW:%[0-9]+]]:gpr = SRAW [[COPY]], [[COPY1]] |
| ; RV64I-NEXT: $x10 = COPY [[SRAW]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| %2:gprb(s64) = G_SRAW %0, %1 |
| $x10 = COPY %2(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: srai_i32 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10 |
| |
| ; RV64I-LABEL: name: srai_i32 |
| ; RV64I: liveins: $x10 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[SRAIW:%[0-9]+]]:gpr = SRAIW [[COPY]], 31 |
| ; RV64I-NEXT: $x10 = COPY [[SRAIW]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = G_CONSTANT i64 31 |
| %2:gprb(s64) = G_SEXT_INREG %0, 32 |
| %3:gprb(s64) = G_ASHR %2, %1(s64) |
| $x10 = COPY %3(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: srl_i32 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; RV64I-LABEL: name: srl_i32 |
| ; RV64I: liveins: $x10, $x11 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; RV64I-NEXT: [[SRLW:%[0-9]+]]:gpr = SRLW [[COPY]], [[COPY1]] |
| ; RV64I-NEXT: $x10 = COPY [[SRLW]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| %2:gprb(s64) = G_SRLW %0, %1 |
| $x10 = COPY %2(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: srli_i32 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10 |
| |
| ; RV64I-LABEL: name: srli_i32 |
| ; RV64I: liveins: $x10 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[SRLIW:%[0-9]+]]:gpr = SRLIW [[COPY]], 31 |
| ; RV64I-NEXT: $x10 = COPY [[SRLIW]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = G_CONSTANT i64 31 |
| %2:gprb(s64) = G_CONSTANT i64 4294967295 |
| %3:gprb(s64) = G_AND %0, %2 |
| %4:gprb(s64) = G_LSHR %3, %1(s64) |
| $x10 = COPY %4(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: add_i64 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; RV64I-LABEL: name: add_i64 |
| ; RV64I: liveins: $x10, $x11 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; RV64I-NEXT: [[ADD:%[0-9]+]]:gpr = ADD [[COPY]], [[COPY1]] |
| ; RV64I-NEXT: $x10 = COPY [[ADD]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| %2:gprb(s64) = G_ADD %0, %1 |
| $x10 = COPY %2(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: addi_i64 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10 |
| |
| ; RV64I-LABEL: name: addi_i64 |
| ; RV64I: liveins: $x10 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[ADDI:%[0-9]+]]:gpr = ADDI [[COPY]], 1234 |
| ; RV64I-NEXT: $x10 = COPY [[ADDI]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = G_CONSTANT i64 1234 |
| %2:gprb(s64) = G_ADD %0, %1 |
| $x10 = COPY %2(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: sub_i64 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; RV64I-LABEL: name: sub_i64 |
| ; RV64I: liveins: $x10, $x11 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; RV64I-NEXT: [[SUB:%[0-9]+]]:gpr = SUB [[COPY]], [[COPY1]] |
| ; RV64I-NEXT: $x10 = COPY [[SUB]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| %2:gprb(s64) = G_SUB %0, %1 |
| $x10 = COPY %2(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: subi_i64 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10 |
| |
| ; RV64I-LABEL: name: subi_i64 |
| ; RV64I: liveins: $x10 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[ADDI:%[0-9]+]]:gpr = ADDI $x0, -1234 |
| ; RV64I-NEXT: [[SUB:%[0-9]+]]:gpr = SUB [[COPY]], [[ADDI]] |
| ; RV64I-NEXT: $x10 = COPY [[SUB]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = G_CONSTANT i64 -1234 |
| %2:gprb(s64) = G_SUB %0, %1 |
| $x10 = COPY %2(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: sll_i64 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; RV64I-LABEL: name: sll_i64 |
| ; RV64I: liveins: $x10, $x11 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; RV64I-NEXT: [[SLL:%[0-9]+]]:gpr = SLL [[COPY]], [[COPY1]] |
| ; RV64I-NEXT: $x10 = COPY [[SLL]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| %2:gprb(s64) = G_SHL %0, %1 |
| $x10 = COPY %2(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: slli_i64 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10 |
| |
| ; RV64I-LABEL: name: slli_i64 |
| ; RV64I: liveins: $x10 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[SLLI:%[0-9]+]]:gpr = SLLI [[COPY]], 63 |
| ; RV64I-NEXT: $x10 = COPY [[SLLI]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = G_CONSTANT i64 63 |
| %2:gprb(s64) = G_SHL %0, %1 |
| $x10 = COPY %2(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: sra_i64 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; RV64I-LABEL: name: sra_i64 |
| ; RV64I: liveins: $x10, $x11 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; RV64I-NEXT: [[SRA:%[0-9]+]]:gpr = SRA [[COPY]], [[COPY1]] |
| ; RV64I-NEXT: $x10 = COPY [[SRA]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| %2:gprb(s64) = G_ASHR %0, %1 |
| $x10 = COPY %2(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: srai_i64 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10 |
| |
| ; RV64I-LABEL: name: srai_i64 |
| ; RV64I: liveins: $x10 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[SRAI:%[0-9]+]]:gpr = SRAI [[COPY]], 63 |
| ; RV64I-NEXT: $x10 = COPY [[SRAI]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = G_CONSTANT i64 63 |
| %2:gprb(s64) = G_ASHR %0, %1 |
| $x10 = COPY %2(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: lshr_i64 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; RV64I-LABEL: name: lshr_i64 |
| ; RV64I: liveins: $x10, $x11 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; RV64I-NEXT: [[SRL:%[0-9]+]]:gpr = SRL [[COPY]], [[COPY1]] |
| ; RV64I-NEXT: $x10 = COPY [[SRL]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| %2:gprb(s64) = G_LSHR %0, %1 |
| $x10 = COPY %2(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: srli_i64 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10 |
| |
| ; RV64I-LABEL: name: srli_i64 |
| ; RV64I: liveins: $x10 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[SRLI:%[0-9]+]]:gpr = SRLI [[COPY]], 63 |
| ; RV64I-NEXT: $x10 = COPY [[SRLI]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = G_CONSTANT i64 63 |
| %2:gprb(s64) = G_LSHR %0, %1 |
| $x10 = COPY %2(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: and_i64 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; RV64I-LABEL: name: and_i64 |
| ; RV64I: liveins: $x10, $x11 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; RV64I-NEXT: [[AND:%[0-9]+]]:gpr = AND [[COPY]], [[COPY1]] |
| ; RV64I-NEXT: $x10 = COPY [[AND]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| %2:gprb(s64) = G_AND %0, %1 |
| $x10 = COPY %2(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: andi_i64 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10 |
| |
| ; RV64I-LABEL: name: andi_i64 |
| ; RV64I: liveins: $x10 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[ANDI:%[0-9]+]]:gpr = ANDI [[COPY]], 1234 |
| ; RV64I-NEXT: $x10 = COPY [[ANDI]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = G_CONSTANT i64 1234 |
| %2:gprb(s64) = G_AND %0, %1 |
| $x10 = COPY %2(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: or_i64 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; RV64I-LABEL: name: or_i64 |
| ; RV64I: liveins: $x10, $x11 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; RV64I-NEXT: [[OR:%[0-9]+]]:gpr = OR [[COPY]], [[COPY1]] |
| ; RV64I-NEXT: $x10 = COPY [[OR]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| %2:gprb(s64) = G_OR %0, %1 |
| $x10 = COPY %2(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: ori_i64 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10 |
| |
| ; RV64I-LABEL: name: ori_i64 |
| ; RV64I: liveins: $x10 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[ORI:%[0-9]+]]:gpr = ORI [[COPY]], 1234 |
| ; RV64I-NEXT: $x10 = COPY [[ORI]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = G_CONSTANT i64 1234 |
| %2:gprb(s64) = G_OR %0, %1 |
| $x10 = COPY %2(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: xor_i64 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; RV64I-LABEL: name: xor_i64 |
| ; RV64I: liveins: $x10, $x11 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; RV64I-NEXT: [[XOR:%[0-9]+]]:gpr = XOR [[COPY]], [[COPY1]] |
| ; RV64I-NEXT: $x10 = COPY [[XOR]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| %2:gprb(s64) = G_XOR %0, %1 |
| $x10 = COPY %2(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: xori_i64 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10 |
| |
| ; RV64I-LABEL: name: xori_i64 |
| ; RV64I: liveins: $x10 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[XORI:%[0-9]+]]:gpr = XORI [[COPY]], 1234 |
| ; RV64I-NEXT: $x10 = COPY [[XORI]] |
| ; RV64I-NEXT: PseudoRET implicit $x10 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = G_CONSTANT i64 1234 |
| %2:gprb(s64) = G_XOR %0, %1 |
| $x10 = COPY %2(s64) |
| PseudoRET implicit $x10 |
| |
| ... |
| --- |
| name: add_i128 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11, $x12, $x13 |
| |
| ; RV64I-LABEL: name: add_i128 |
| ; RV64I: liveins: $x10, $x11, $x12, $x13 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; RV64I-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x12 |
| ; RV64I-NEXT: [[COPY3:%[0-9]+]]:gpr = COPY $x13 |
| ; RV64I-NEXT: [[ADD:%[0-9]+]]:gpr = ADD [[COPY]], [[COPY2]] |
| ; RV64I-NEXT: [[SLTU:%[0-9]+]]:gpr = SLTU [[ADD]], [[COPY2]] |
| ; RV64I-NEXT: [[ADD1:%[0-9]+]]:gpr = ADD [[COPY1]], [[COPY3]] |
| ; RV64I-NEXT: [[ANDI:%[0-9]+]]:gpr = ANDI [[SLTU]], 1 |
| ; RV64I-NEXT: [[ADD2:%[0-9]+]]:gpr = ADD [[ADD1]], [[ANDI]] |
| ; RV64I-NEXT: $x10 = COPY [[ADD]] |
| ; RV64I-NEXT: $x11 = COPY [[ADD2]] |
| ; RV64I-NEXT: PseudoRET implicit $x10, implicit $x11 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| %2:gprb(s64) = COPY $x12 |
| %3:gprb(s64) = COPY $x13 |
| %4:gprb(s64) = G_ADD %0, %2 |
| %5:gprb(s64) = G_ICMP intpred(ult), %4(s64), %2 |
| %6:gprb(s64) = G_ADD %1, %3 |
| %7:gprb(s64) = G_CONSTANT i64 1 |
| %8:gprb(s64) = G_AND %5, %7 |
| %9:gprb(s64) = G_ADD %6, %8 |
| $x10 = COPY %4(s64) |
| $x11 = COPY %9(s64) |
| PseudoRET implicit $x10, implicit $x11 |
| |
| ... |
| --- |
| name: sub_i128 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11, $x12, $x13 |
| |
| ; RV64I-LABEL: name: sub_i128 |
| ; RV64I: liveins: $x10, $x11, $x12, $x13 |
| ; RV64I-NEXT: {{ $}} |
| ; RV64I-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; RV64I-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; RV64I-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x12 |
| ; RV64I-NEXT: [[COPY3:%[0-9]+]]:gpr = COPY $x13 |
| ; RV64I-NEXT: [[SUB:%[0-9]+]]:gpr = SUB [[COPY]], [[COPY2]] |
| ; RV64I-NEXT: [[SLTU:%[0-9]+]]:gpr = SLTU [[COPY]], [[COPY2]] |
| ; RV64I-NEXT: [[SUB1:%[0-9]+]]:gpr = SUB [[COPY1]], [[COPY3]] |
| ; RV64I-NEXT: [[ANDI:%[0-9]+]]:gpr = ANDI [[SLTU]], 1 |
| ; RV64I-NEXT: [[SUB2:%[0-9]+]]:gpr = SUB [[SUB1]], [[ANDI]] |
| ; RV64I-NEXT: $x10 = COPY [[SUB]] |
| ; RV64I-NEXT: $x11 = COPY [[SUB2]] |
| ; RV64I-NEXT: PseudoRET implicit $x10, implicit $x11 |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| %2:gprb(s64) = COPY $x12 |
| %3:gprb(s64) = COPY $x13 |
| %4:gprb(s64) = G_SUB %0, %2 |
| %5:gprb(s64) = G_ICMP intpred(ult), %0(s64), %2 |
| %6:gprb(s64) = G_SUB %1, %3 |
| %7:gprb(s64) = G_CONSTANT i64 1 |
| %8:gprb(s64) = G_AND %5, %7 |
| %9:gprb(s64) = G_SUB %6, %8 |
| $x10 = COPY %4(s64) |
| $x11 = COPY %9(s64) |
| PseudoRET implicit $x10, implicit $x11 |
| |
| ... |