| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 3 |
| # RUN: llc -mtriple=riscv64 -mattr='+zba' -run-pass=instruction-select -simplify-mir -verify-machineinstrs %s -o - \ |
| # RUN: | FileCheck %s |
| |
| --- |
| name: sh1add |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; CHECK-LABEL: name: sh1add |
| ; CHECK: liveins: $x10, $x11 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; CHECK-NEXT: [[SH1ADD:%[0-9]+]]:gpr = SH1ADD [[COPY]], [[COPY1]] |
| ; CHECK-NEXT: $x10 = COPY [[SH1ADD]] |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| %2:gprb(s64) = G_CONSTANT i64 1 |
| %3:gprb(s64) = G_SHL %0, %2 |
| %4:gprb(s64) = G_ADD %3, %1 |
| $x10 = COPY %4(s64) |
| ... |
| --- |
| name: sh2add |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; CHECK-LABEL: name: sh2add |
| ; CHECK: liveins: $x10, $x11 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; CHECK-NEXT: [[SH2ADD:%[0-9]+]]:gpr = SH2ADD [[COPY]], [[COPY1]] |
| ; CHECK-NEXT: $x10 = COPY [[SH2ADD]] |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| %2:gprb(s64) = G_CONSTANT i64 2 |
| %3:gprb(s64) = G_SHL %0, %2 |
| %4:gprb(s64) = G_ADD %3, %1 |
| $x10 = COPY %4(s64) |
| ... |
| --- |
| name: sh3add |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; CHECK-LABEL: name: sh3add |
| ; CHECK: liveins: $x10, $x11 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; CHECK-NEXT: [[SH3ADD:%[0-9]+]]:gpr = SH3ADD [[COPY]], [[COPY1]] |
| ; CHECK-NEXT: $x10 = COPY [[SH3ADD]] |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| %2:gprb(s64) = G_CONSTANT i64 3 |
| %3:gprb(s64) = G_SHL %0, %2 |
| %4:gprb(s64) = G_ADD %3, %1 |
| $x10 = COPY %4(s64) |
| ... |
| --- |
| name: no_sh1add |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; CHECK-LABEL: name: no_sh1add |
| ; CHECK: liveins: $x10, $x11 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; CHECK-NEXT: [[SLLI:%[0-9]+]]:gpr = SLLI [[COPY]], 1 |
| ; CHECK-NEXT: [[ADDI:%[0-9]+]]:gpr = ADDI [[SLLI]], 37 |
| ; CHECK-NEXT: $x10 = COPY [[ADDI]] |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = G_CONSTANT i64 37 |
| %2:gprb(s64) = G_CONSTANT i64 1 |
| %3:gprb(s64) = G_SHL %0, %2 |
| %4:gprb(s64) = G_ADD %3, %1 |
| $x10 = COPY %4(s64) |
| ... |
| --- |
| name: shXadd_complex_and_shl |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; CHECK-LABEL: name: shXadd_complex_and_shl |
| ; CHECK: liveins: $x10, $x11 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; CHECK-NEXT: [[SRLIW:%[0-9]+]]:gpr = SRLIW [[COPY]], 1 |
| ; CHECK-NEXT: [[SH3ADD:%[0-9]+]]:gpr = SH3ADD [[SRLIW]], [[COPY1]] |
| ; CHECK-NEXT: $x10 = COPY [[SH3ADD]] |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| |
| %2:gprb(s64) = G_CONSTANT i64 4294967294 |
| %3:gprb(s64) = G_AND %0, %2 |
| %4:gprb(s64) = G_CONSTANT i64 2 |
| %5:gprb(s64) = G_SHL %3, %4 |
| |
| %6:gprb(s64) = G_ADD %5, %1 |
| $x10 = COPY %6(s64) |
| ... |
| --- |
| name: shXadd_complex_and_lshr |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; CHECK-LABEL: name: shXadd_complex_and_lshr |
| ; CHECK: liveins: $x10, $x11 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; CHECK-NEXT: [[SRLIW:%[0-9]+]]:gpr = SRLIW [[COPY]], 2 |
| ; CHECK-NEXT: [[SH1ADD:%[0-9]+]]:gpr = SH1ADD [[SRLIW]], [[COPY1]] |
| ; CHECK-NEXT: $x10 = COPY [[SH1ADD]] |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| |
| %2:gprb(s64) = G_CONSTANT i64 4294967292 |
| %3:gprb(s64) = G_AND %0, %2 |
| %4:gprb(s64) = G_CONSTANT i64 1 |
| %5:gprb(s64) = G_LSHR %3, %4 |
| |
| %6:gprb(s64) = G_ADD %5, %1 |
| $x10 = COPY %6(s64) |
| ... |
| --- |
| name: shXadd_uw_complex_shl_and |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; CHECK-LABEL: name: shXadd_uw_complex_shl_and |
| ; CHECK: liveins: $x10, $x11 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; CHECK-NEXT: [[SLLI:%[0-9]+]]:gpr = SLLI [[COPY]], 1 |
| ; CHECK-NEXT: [[SH2ADD_UW:%[0-9]+]]:gpr = SH2ADD_UW [[SLLI]], [[COPY1]] |
| ; CHECK-NEXT: $x10 = COPY [[SH2ADD_UW]] |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| |
| %2:gprb(s64) = G_CONSTANT i64 3 |
| %3:gprb(s64) = G_SHL %0, %2 |
| %4:gprb(s64) = G_CONSTANT i64 17179869183 |
| %5:gprb(s64) = G_AND %3, %4 |
| |
| %6:gprb(s64) = G_ADD %5, %1 |
| $x10 = COPY %6(s64) |
| ... |
| --- |
| name: slli_uw |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10 |
| |
| ; CHECK-LABEL: name: slli_uw |
| ; CHECK: liveins: $x10 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; CHECK-NEXT: [[SLLI_UW:%[0-9]+]]:gpr = SLLI_UW [[COPY]], 7 |
| ; CHECK-NEXT: $x10 = COPY [[SLLI_UW]] |
| %0:gprb(s64) = COPY $x10 |
| |
| %1:gprb(s64) = G_CONSTANT i64 4294967295 |
| %2:gprb(s64) = G_AND %0, %1 |
| %3:gprb(s64) = G_CONSTANT i64 7 |
| %4:gprb(s64) = G_SHL %2, %3 |
| |
| $x10 = COPY %4(s64) |
| ... |
| --- |
| name: slli_uw_s32 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10 |
| |
| ; CHECK-LABEL: name: slli_uw_s32 |
| ; CHECK: liveins: $x10 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; CHECK-NEXT: [[SLLI_UW:%[0-9]+]]:gpr = SLLI_UW [[COPY]], 7 |
| ; CHECK-NEXT: $x10 = COPY [[SLLI_UW]] |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s32) = G_TRUNC %0(s64) |
| |
| %2:gprb(s64) = G_ZEXT %1(s32) |
| %3:gprb(s64) = G_CONSTANT i64 7 |
| %4:gprb(s64) = G_SHL %2, %3 |
| |
| $x10 = COPY %4(s64) |
| ... |
| --- |
| name: slli_uw_complex |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10 |
| |
| ; CHECK-LABEL: name: slli_uw_complex |
| ; CHECK: liveins: $x10 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; CHECK-NEXT: [[SRLI:%[0-9]+]]:gpr = SRLI [[COPY]], 2 |
| ; CHECK-NEXT: [[SLLI_UW:%[0-9]+]]:gpr = SLLI_UW [[SRLI]], 2 |
| ; CHECK-NEXT: $x10 = COPY [[SLLI_UW]] |
| %0:gprb(s64) = COPY $x10 |
| |
| %1:gprb(s64) = G_CONSTANT i64 17179869180 |
| %2:gprb(s64) = G_AND %0, %1 |
| |
| $x10 = COPY %2(s64) |
| ... |
| --- |
| name: sh1add_s32 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; CHECK-LABEL: name: sh1add_s32 |
| ; CHECK: liveins: $x10, $x11 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; CHECK-NEXT: [[SH1ADD:%[0-9]+]]:gpr = SH1ADD [[COPY]], [[COPY1]] |
| ; CHECK-NEXT: $x10 = COPY [[SH1ADD]] |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| %2:gprb(s32) = G_TRUNC %0 |
| %3:gprb(s32) = G_TRUNC %1 |
| %4:gprb(s64) = G_CONSTANT i64 1 |
| %5:gprb(s32) = G_SHL %2, %4 |
| %6:gprb(s32) = G_ADD %5, %3 |
| %7:gprb(s64) = G_ANYEXT %6 |
| $x10 = COPY %7(s64) |
| ... |
| --- |
| name: sh2add_s32 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; CHECK-LABEL: name: sh2add_s32 |
| ; CHECK: liveins: $x10, $x11 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; CHECK-NEXT: [[SH2ADD:%[0-9]+]]:gpr = SH2ADD [[COPY]], [[COPY1]] |
| ; CHECK-NEXT: $x10 = COPY [[SH2ADD]] |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| %2:gprb(s32) = G_TRUNC %0 |
| %3:gprb(s32) = G_TRUNC %1 |
| %4:gprb(s64) = G_CONSTANT i64 2 |
| %5:gprb(s32) = G_SHL %2, %4 |
| %6:gprb(s32) = G_ADD %5, %3 |
| %7:gprb(s64) = G_ANYEXT %6 |
| $x10 = COPY %7(s64) |
| ... |
| --- |
| name: sh3add_s32 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; CHECK-LABEL: name: sh3add_s32 |
| ; CHECK: liveins: $x10, $x11 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; CHECK-NEXT: [[SH3ADD:%[0-9]+]]:gpr = SH3ADD [[COPY]], [[COPY1]] |
| ; CHECK-NEXT: $x10 = COPY [[SH3ADD]] |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| %2:gprb(s32) = G_TRUNC %0 |
| %3:gprb(s32) = G_TRUNC %1 |
| %4:gprb(s64) = G_CONSTANT i64 3 |
| %5:gprb(s32) = G_SHL %2, %4 |
| %6:gprb(s32) = G_ADD %5, %3 |
| %7:gprb(s64) = G_ANYEXT %6 |
| $x10 = COPY %7(s64) |
| ... |
| --- |
| name: adduw |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| body: | |
| bb.0.entry: |
| liveins: $x10, $x11 |
| |
| ; CHECK-LABEL: name: adduw |
| ; CHECK: liveins: $x10, $x11 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10 |
| ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11 |
| ; CHECK-NEXT: [[ADD_UW:%[0-9]+]]:gpr = ADD_UW [[COPY]], [[COPY1]] |
| ; CHECK-NEXT: $x10 = COPY [[ADD_UW]] |
| %0:gprb(s64) = COPY $x10 |
| %1:gprb(s64) = COPY $x11 |
| %2:gprb(s32) = G_TRUNC %0 |
| %3:gprb(s64) = G_ZEXT %2 |
| %4:gprb(s64) = G_ADD %3, %1 |
| $x10 = COPY %4(s64) |
| ... |