210 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: undef_passthru7body: |8 bb.0:9 liveins: $x1, $v8, $v910 ; CHECK-LABEL: name: undef_passthru11 ; CHECK: liveins: $x1, $v8, $v912 ; CHECK-NEXT: {{ $}}13 ; CHECK-NEXT: %false:vr = COPY $v814 ; CHECK-NEXT: %true:vr = COPY $v915 ; CHECK-NEXT: %avl:gprnox0 = COPY $x116 ; CHECK-NEXT: %mask:vmv0 = PseudoVMSET_M_B8 %avl, 0 /* e8 */17 ; CHECK-NEXT: $v0 = COPY %mask18 %false:vr = COPY $v819 %true:vr = COPY $v920 %avl:gprnox0 = COPY $x121 %mask:vmv0 = PseudoVMSET_M_B8 %avl, 022 $v0 = COPY %mask23 %x:vrnov0 = PseudoVMERGE_VVM_M1 $noreg, %false, %true, $v0, %avl, 524...25---26name: undef_false27body: |28 bb.0:29 liveins: $x1, $v8, $v930 ; CHECK-LABEL: name: undef_false31 ; CHECK: liveins: $x1, $v8, $v932 ; CHECK-NEXT: {{ $}}33 ; CHECK-NEXT: %pt:vr = COPY $v834 ; CHECK-NEXT: %false:vr = COPY $noreg35 ; CHECK-NEXT: %true:vr = COPY $v936 ; CHECK-NEXT: %avl:gprnox0 = COPY $x137 ; CHECK-NEXT: %mask:vmv0 = PseudoVMSET_M_B8 %avl, 0 /* e8 */38 ; CHECK-NEXT: $v0 = COPY %mask39 ; CHECK-NEXT: %x:vr = PseudoVMV_V_V_M1 %pt, %true, %avl, 5 /* e32 */, 0 /* tu, mu */40 %pt:vrnov0 = COPY $v841 %false:vr = COPY $noreg42 %true:vr = COPY $v943 %avl:gprnox0 = COPY $x144 %mask:vmv0 = PseudoVMSET_M_B8 %avl, 045 $v0 = COPY %mask46 %x:vrnov0 = PseudoVMERGE_VVM_M1 %pt, %false, %true, $v0, %avl, 547...48---49name: equal_passthru_false50body: |51 bb.0:52 liveins: $x1, $v8, $v953 ; CHECK-LABEL: name: equal_passthru_false54 ; CHECK: liveins: $x1, $v8, $v955 ; CHECK-NEXT: {{ $}}56 ; CHECK-NEXT: %false:vr = COPY $v857 ; CHECK-NEXT: %pt:vr = COPY $v858 ; CHECK-NEXT: %true:vr = COPY $v959 ; CHECK-NEXT: %avl:gprnox0 = COPY $x160 ; CHECK-NEXT: %mask:vmv0 = PseudoVMSET_M_B8 %avl, 0 /* e8 */61 ; CHECK-NEXT: %x:vr = PseudoVMV_V_V_M1 %pt, %true, %avl, 5 /* e32 */, 0 /* tu, mu */62 %false:vr = COPY $v863 %pt:vrnov0 = COPY $v864 %true:vr = COPY $v965 %avl:gprnox0 = COPY $x166 %mask:vmv0 = PseudoVMSET_M_B8 %avl, 067 %x:vrnov0 = PseudoVMERGE_VVM_M1 %pt, %false, %true, %mask, %avl, 568...69---70name: same_mask71body: |72 bb.0:73 liveins: $v8, $v9, $v074 ; CHECK-LABEL: name: same_mask75 ; CHECK: liveins: $v8, $v9, $v076 ; CHECK-NEXT: {{ $}}77 ; CHECK-NEXT: %pt:vr = COPY $v878 ; CHECK-NEXT: %false:vrnov0 = COPY $v979 ; CHECK-NEXT: %mask:vmv0 = COPY $v080 ; CHECK-NEXT: %true:vrnov0 = PseudoVADD_VV_M1_MASK %false, $noreg, $noreg, %mask, 4, 5 /* e32 */, 0 /* tu, mu */81 ; CHECK-NEXT: %x:vr = PseudoVMV_V_V_M1 %pt, %true, 4, 5 /* e32 */, 0 /* tu, mu */82 %pt:vrnov0 = COPY $v883 %false:vrnov0 = COPY $v984 %mask:vmv0 = COPY $v085 %true:vrnov0 = PseudoVADD_VV_M1_MASK %false, $noreg, $noreg, %mask, 8, 5 /* e32 */, 0 /* tu, mu */86 %x:vrnov0 = PseudoVMERGE_VVM_M1 %pt, %false, %true, %mask, 4, 5 /* e32 */87...88---89# Shouldn't be converted because false operands are different90name: same_mask_different_false91body: |92 bb.0:93 liveins: $v8, $v9, $v094 ; CHECK-LABEL: name: same_mask_different_false95 ; CHECK: liveins: $v8, $v9, $v096 ; CHECK-NEXT: {{ $}}97 ; CHECK-NEXT: %pt:vrnov0 = COPY $v898 ; CHECK-NEXT: %false:vrnov0 = COPY $v999 ; CHECK-NEXT: %mask:vmv0 = COPY $v0100 ; CHECK-NEXT: %true:vrnov0 = PseudoVADD_VV_M1_MASK %pt, $noreg, $noreg, %mask, 4, 5 /* e32 */, 0 /* tu, mu */101 ; CHECK-NEXT: %x:vrnov0 = PseudoVMERGE_VVM_M1 %pt, %false, %true, %mask, 8, 5 /* e32 */102 %pt:vrnov0 = COPY $v8103 %false:vrnov0 = COPY $v9104 %mask:vmv0 = COPY $v0105 %true:vrnov0 = PseudoVADD_VV_M1_MASK %pt, $noreg, $noreg, %mask, 4, 5 /* e32 */, 0 /* tu, mu */106 %x:vrnov0 = PseudoVMERGE_VVM_M1 %pt, %false, %true, %mask, 8, 5 /* e32 */107...108---109# Shouldn't be converted because EEWs are different110name: same_mask_different_eew111body: |112 bb.0:113 liveins: $v8, $v9, $v0114 ; CHECK-LABEL: name: same_mask_different_eew115 ; CHECK: liveins: $v8, $v9, $v0116 ; CHECK-NEXT: {{ $}}117 ; CHECK-NEXT: %pt:vrnov0 = COPY $v8118 ; CHECK-NEXT: %false:vrnov0 = COPY $v9119 ; CHECK-NEXT: %mask:vmv0 = COPY $v0120 ; CHECK-NEXT: %true:vrnov0 = PseudoVADD_VV_M1_MASK %false, $noreg, $noreg, %mask, 4, 4 /* e16 */, 0 /* tu, mu */121 ; CHECK-NEXT: %x:vrnov0 = PseudoVMERGE_VVM_M1 %pt, %false, %true, %mask, 8, 5 /* e32 */122 %pt:vrnov0 = COPY $v8123 %false:vrnov0 = COPY $v9124 %mask:vmv0 = COPY $v0125 %true:vrnov0 = PseudoVADD_VV_M1_MASK %false, $noreg, $noreg, %mask, 4, 4 /* e16 */, 0 /* tu, mu */126 %x:vrnov0 = PseudoVMERGE_VVM_M1 %pt, %false, %true, %mask, 8, 5 /* e32 */127...128---129name: same_mask_undef_truepassthru130body: |131 bb.0:132 liveins: $v8, $v0133 ; CHECK-LABEL: name: same_mask_undef_truepassthru134 ; CHECK: liveins: $v8, $v0135 ; CHECK-NEXT: {{ $}}136 ; CHECK-NEXT: %false:vrnov0 = COPY $v8137 ; CHECK-NEXT: %mask:vmv0 = COPY $v0138 ; CHECK-NEXT: %true:vrnov0 = PseudoVADD_VV_M1_MASK %false, $noreg, $noreg, %mask, 4, 5 /* e32 */, 1 /* ta, mu */139 %false:vr = COPY $v8140 %mask:vmv0 = COPY $v0141 %true:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, %mask, 4, 5 /* e32 */, 0 /* tu, mu */142 %x:vrnov0 = PseudoVMERGE_VVM_M1 $noreg, %false, %true, %mask, 4, 5 /* e32 */143...144---145# Shouldn't be converted because true is in a different block146name: same_mask_diff_blocks147body: |148 ; CHECK-LABEL: name: same_mask_diff_blocks149 ; CHECK: bb.0:150 ; CHECK-NEXT: successors: %bb.1(0x80000000)151 ; CHECK-NEXT: liveins: $v8, $v0152 ; CHECK-NEXT: {{ $}}153 ; CHECK-NEXT: %false:vr = COPY $v8154 ; CHECK-NEXT: %mask:vmv0 = COPY $v0155 ; CHECK-NEXT: %true:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, %mask, 4, 5 /* e32 */, 0 /* tu, mu */156 ; CHECK-NEXT: {{ $}}157 ; CHECK-NEXT: bb.1:158 ; CHECK-NEXT: [[PseudoVMERGE_VVM_M1_:%[0-9]+]]:vrnov0 = PseudoVMERGE_VVM_M1 $noreg, %false, %true, %mask, 4, 5 /* e32 */159 bb.0:160 liveins: $v8, $v0161 %false:vr = COPY $v8162 %mask:vmv0 = COPY $v0163 %true:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, %mask, 4, 5 /* e32 */, 0 /* tu, mu */164 bb.1:165 %5:vrnov0 = PseudoVMERGE_VVM_M1 $noreg, %false, %true, %mask, 4, 5 /* e32 */166...167---168# Shouldn't be converted because vmerge adds back in elements from false past avl that would be lost if we converted to vmv.v.v169name: preserve_false170body: |171 bb.0:172 liveins: $v8, $v9, $v0, $x8, $x9173 ; CHECK-LABEL: name: preserve_false174 ; CHECK: liveins: $v8, $v9, $v0, $x8, $x9175 ; CHECK-NEXT: {{ $}}176 ; CHECK-NEXT: %pt:vrnov0 = COPY $v8177 ; CHECK-NEXT: %false:vr = COPY $v9178 ; CHECK-NEXT: %mask:vmv0 = COPY $v0179 ; CHECK-NEXT: %avl1:gprnox0 = COPY $x8180 ; CHECK-NEXT: %avl2:gprnox0 = COPY $x9181 ; CHECK-NEXT: %true:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, %mask, %avl1, 5 /* e32 */, 3 /* ta, ma */182 ; CHECK-NEXT: [[PseudoVMERGE_VVM_M1_:%[0-9]+]]:vrnov0 = PseudoVMERGE_VVM_M1 %pt, %false, %true, %mask, %avl2, 5 /* e32 */183 %pt:vrnov0 = COPY $v8184 %false:vr = COPY $v9185 %mask:vmv0 = COPY $v0186 %avl1:gprnox0 = COPY $x8187 %avl2:gprnox0 = COPY $x9188 %true:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, %mask, %avl1, 5 /* e32 */, 3 /* ta, ma */189 %5:vrnov0 = PseudoVMERGE_VVM_M1 %pt, %false, %true, %mask, %avl2, 5 /* e32 */190...191---192# But we can convert this one because vmerge's avl being <= true's means we don't lose any false elements past avl.193name: preserve_false_avl_known_le194body: |195 bb.0:196 liveins: $v8, $v9, $v0197 ; CHECK-LABEL: name: preserve_false_avl_known_le198 ; CHECK: liveins: $v8, $v9, $v0199 ; CHECK-NEXT: {{ $}}200 ; CHECK-NEXT: %pt:vr = COPY $v8201 ; CHECK-NEXT: %false:vrnov0 = COPY $v9202 ; CHECK-NEXT: %mask:vmv0 = COPY $v0203 ; CHECK-NEXT: %true:vrnov0 = PseudoVADD_VV_M1_MASK %false, $noreg, $noreg, %mask, 1, 5 /* e32 */, 3 /* ta, ma */204 ; CHECK-NEXT: [[PseudoVMV_V_V_M1_:%[0-9]+]]:vr = PseudoVMV_V_V_M1 %pt, %true, 1, 5 /* e32 */, 0 /* tu, mu */205 %pt:vrnov0 = COPY $v8206 %false:vr = COPY $v9207 %mask:vmv0 = COPY $v0208 %true:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, %mask, 2, 5 /* e32 */, 3 /* ta, ma */209 %5:vrnov0 = PseudoVMERGE_VVM_M1 %pt, %false, %true, %mask, 1, 5 /* e32 */210