171 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 32# RUN: llc %s -o - -mtriple=riscv64 -mattr=+v -run-pass=riscv-vector-peephole \3# RUN: -verify-machineinstrs | FileCheck %s4 5---6name: move_src7body: |8 bb.0:9 liveins: $v810 ; CHECK-LABEL: name: move_src11 ; CHECK: liveins: $v812 ; CHECK-NEXT: {{ $}}13 ; CHECK-NEXT: %passthru:vr = COPY $v814 ; CHECK-NEXT: %x:vr = PseudoVADD_VV_M1 %passthru, $noreg, $noreg, 4, 5 /* e32 */, 0 /* tu, mu */15 ; CHECK-NEXT: %y:gpr = ADDI $x0, 116 %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, 4, 5 /* e32 */, 0 /* tu, mu */17 %passthru:vr = COPY $v818 %y:gpr = ADDI $x0, 119 %z:vr = PseudoVMV_V_V_M1 %passthru, %x, 4, 5 /* e32 */, 0 /* tu, mu */20...21---22name: tail_agnostic23body: |24 bb.0:25 liveins: $v826 ; CHECK-LABEL: name: tail_agnostic27 ; CHECK: liveins: $v828 ; CHECK-NEXT: {{ $}}29 ; CHECK-NEXT: %passthru:vr = COPY $v830 ; CHECK-NEXT: %x:vr = PseudoVADD_VV_M1 %passthru, $noreg, $noreg, 4, 5 /* e32 */, 1 /* ta, mu */31 %passthru:vr = COPY $v832 %x:vr = PseudoVADD_VV_M1 %passthru, $noreg, $noreg, 4, 5 /* e32 */, 0 /* tu, mu */33 %y:vr = PseudoVMV_V_V_M1 %passthru, %x, 4, 5 /* e32 */, 1 /* ta, mu */34...35---36name: tail_agnostic_larger_vl37body: |38 bb.0:39 liveins: $v840 ; CHECK-LABEL: name: tail_agnostic_larger_vl41 ; CHECK: liveins: $v842 ; CHECK-NEXT: {{ $}}43 ; CHECK-NEXT: %passthru:vr = COPY $v844 ; CHECK-NEXT: %x:vr = PseudoVADD_VV_M1 %passthru, $noreg, $noreg, 4, 5 /* e32 */, 0 /* tu, mu */45 %passthru:vr = COPY $v846 %x:vr = PseudoVADD_VV_M1 %passthru, $noreg, $noreg, 4, 5 /* e32 */, 0 /* tu, mu */47 %y:vr = PseudoVMV_V_V_M1 %passthru, %x, 5, 5 /* e32 */, 1 /* ta, mu */48...49---50name: undef_passthru_src_undef_passthru51body: |52 bb.0:53 liveins: $v854 ; CHECK-LABEL: name: undef_passthru_src_undef_passthru55 ; CHECK: liveins: $v856 ; CHECK-NEXT: {{ $}}57 ; CHECK-NEXT: %passthru:vr = COPY $v858 ; CHECK-NEXT: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, 4, 5 /* e32 */, 1 /* ta, mu */59 %passthru:vr = COPY $v860 %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, 4, 5 /* e32 */, 0 /* tu, mu */61 %y:vr = PseudoVMV_V_V_M1 $noreg, %x, 4, 5 /* e32 */, 0 /* tu, mu */62...63---64name: undef_passthru65body: |66 bb.0:67 liveins: $v868 ; CHECK-LABEL: name: undef_passthru69 ; CHECK: liveins: $v870 ; CHECK-NEXT: {{ $}}71 ; CHECK-NEXT: %passthru:vr = COPY $v872 ; CHECK-NEXT: %x:vr = PseudoVADD_VV_M1 %passthru, $noreg, $noreg, 4, 5 /* e32 */, 1 /* ta, mu */73 %passthru:vr = COPY $v874 %x:vr = PseudoVADD_VV_M1 %passthru, $noreg, $noreg, 4, 5 /* e32 */, 0 /* tu, mu */75 %y:vr = PseudoVMV_V_V_M1 $noreg, %x, 4, 5 /* e32 */, 1 /* ta, mu */76...77---78# Shouldn't be folded because the EEWs don't match79name: different_eew80body: |81 bb.0:82 liveins: $v883 ; CHECK-LABEL: name: different_eew84 ; CHECK: liveins: $v885 ; CHECK-NEXT: {{ $}}86 ; CHECK-NEXT: %passthru:vr = COPY $v887 ; CHECK-NEXT: %x:vr = PseudoVADD_VV_MF4 %passthru, $noreg, $noreg, 4, 4 /* e16 */, 0 /* tu, mu */88 ; CHECK-NEXT: %y:vr = PseudoVMV_V_V_MF8 %passthru, %x, 4, 3 /* e8 */, 0 /* tu, mu */89 %passthru:vr = COPY $v890 %x:vr = PseudoVADD_VV_MF4 %passthru, $noreg, $noreg, 4, 4 /* e16 */, 0 /* tu, mu */91 %y:vr = PseudoVMV_V_V_MF8 %passthru, %x, 4, 3 /* e8 */, 0 /* tu, mu */92...93---94name: kill_flag95tracksRegLiveness: true96body: |97 bb.0:98 ; CHECK-LABEL: name: kill_flag99 ; CHECK: [[PseudoVADD_VV_M1_:%[0-9]+]]:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 4 /* e16 */, 0 /* tu, mu */100 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vr = COPY [[PseudoVADD_VV_M1_]]101 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vr = COPY [[PseudoVADD_VV_M1_]]102 %0:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 4 /* e16 */, 0 /* tu, mu */103 %1:vr = PseudoVMV_V_V_M1 $noreg, %0, -1, 4 /* e16 */, 0 /* tu, mu */104 %2:vr = COPY killed %1105 %3:vr = COPY %0106...107---108name: diff_regclass109body: |110 bb.0.entry:111 liveins: $v8112 ; CHECK-LABEL: name: diff_regclass113 ; CHECK: liveins: $v8114 ; CHECK-NEXT: {{ $}}115 ; CHECK-NEXT: [[PseudoVMV_V_I_MF2_:%[0-9]+]]:vrnov0 = PseudoVMV_V_I_MF2 $noreg, 0, 0, 5 /* e32 */, 1 /* ta, mu */116 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vmv0 = COPY $v8117 ; CHECK-NEXT: [[PseudoVADD_VV_M1_MASK:%[0-9]+]]:vrnov0 = PseudoVADD_VV_M1_MASK [[PseudoVMV_V_I_MF2_]], $noreg, $noreg, [[COPY]], 0, 5 /* e32 */, 0 /* tu, mu */118 %0:vr = PseudoVMV_V_I_MF2 $noreg, 0, -1, 5 /* e32 */, 0 /* tu, mu */119 %1:vrnov0 = PseudoVMV_V_V_MF2 $noreg, %0, 0, 5 /* e32 */, 0 /* tu, mu */120 %2:vmv0 = COPY $v8121 %3:vrnov0 = PseudoVADD_VV_M1_MASK %1, $noreg, $noreg, %2, 0, 5 /* e32 */, 0 /* tu, mu */122...123---124name: diff_regclass_passthru125body: |126 bb.0.entry:127 liveins: $v8128 ; CHECK-LABEL: name: diff_regclass_passthru129 ; CHECK: liveins: $v8130 ; CHECK-NEXT: {{ $}}131 ; CHECK-NEXT: [[PseudoVMV_V_I_MF2_:%[0-9]+]]:vrnov0 = PseudoVMV_V_I_MF2 $noreg, 0, 0, 5 /* e32 */, 1 /* ta, mu */132 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vmv0 = COPY $v8133 ; CHECK-NEXT: [[PseudoVLSE32_V_MF2_MASK:%[0-9]+]]:vrnov0 = PseudoVLSE32_V_MF2_MASK [[PseudoVMV_V_I_MF2_]], $noreg, $noreg, [[COPY]], 0, 5 /* e32 */, 0 /* tu, mu */ :: (load unknown-size, align 4)134 %2:vr = PseudoVMV_V_I_MF2 $noreg, 0, -1, 5 /* e32 */, 0 /* tu, mu */135 %3:vrnov0 = PseudoVMV_V_V_MF2 $noreg, %2, 0, 5 /* e32 */, 0 /* tu, mu */136 %7:vmv0 = COPY $v8137 %6:vrnov0 = PseudoVLSE32_V_MF2_MASK %3, $noreg, $noreg, %7, 0, 5 /* e32 */, 0 /* tu, mu */ :: (load unknown-size, align 4)138...139---140name: move_vleff141body: |142 bb.0:143 liveins: $v8144 ; CHECK-LABEL: name: move_vleff145 ; CHECK: liveins: $v8146 ; CHECK-NEXT: {{ $}}147 ; CHECK-NEXT: %passthru:vr = COPY $v8148 ; CHECK-NEXT: %x:vr, %vl:gpr = PseudoVLE32FF_V_M1 %passthru, $noreg, 4, 5 /* e32 */, 0 /* tu, mu */ :: (load unknown-size, align 1)149 ; CHECK-NEXT: %y:gpr = ADDI $x0, 1150 %x:vr, %vl:gpr = PseudoVLE32FF_V_M1 $noreg, $noreg, 4, 5 /* e32 */, 0 /* tu, mu */ :: (load unknown-size)151 %passthru:vr = COPY $v8152 %y:gpr = ADDI $x0, 1153 %z:vr = PseudoVMV_V_V_M1 %passthru, %x, 4, 5 /* e32 */, 0 /* tu, mu */154...155---156name: vmerge_vvm157body: |158 bb.0:159 liveins: $v8, $v0160 ; CHECK-LABEL: name: vmerge_vvm161 ; CHECK: liveins: $v8, $v0162 ; CHECK-NEXT: {{ $}}163 ; CHECK-NEXT: %passthru:vrnov0 = COPY $v8164 ; CHECK-NEXT: %mask:vmv0 = COPY $v0165 ; CHECK-NEXT: %x:vrnov0 = PseudoVMERGE_VVM_M1 %passthru, %passthru, $noreg, %mask, 4, 5 /* e32 */166 %passthru:vr = COPY $v8167 %mask:vmv0 = COPY $v0168 %x:vrnov0 = PseudoVMERGE_VVM_M1 $noreg, %passthru, $noreg, %mask, 4, 5 /* e32 */169 %z:vr = PseudoVMV_V_V_M1 %passthru, %x, 4, 5 /* e32 */, 0 /* tu, mu */170...171