1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 3 2# RUN: llc %s -o - -mtriple=riscv64 -mattr=+v -run-pass=riscv-vector-peephole \ 3# RUN: -verify-machineinstrs | FileCheck %s 4 5--- 6name: undef_passthru 7body: | 8 bb.0: 9 liveins: $x1, $v8, $v9 10 ; CHECK-LABEL: name: undef_passthru 11 ; CHECK: liveins: $x1, $v8, $v9 12 ; CHECK-NEXT: {{ $}} 13 ; CHECK-NEXT: %false:vr = COPY $v8 14 ; CHECK-NEXT: %true:vr = COPY $v9 15 ; CHECK-NEXT: %avl:gprnox0 = COPY $x1 16 ; CHECK-NEXT: %mask:vmv0 = PseudoVMSET_M_B8 %avl, 0 /* e8 */ 17 ; CHECK-NEXT: $v0 = COPY %mask 18 %false:vr = COPY $v8 19 %true:vr = COPY $v9 20 %avl:gprnox0 = COPY $x1 21 %mask:vmv0 = PseudoVMSET_M_B8 %avl, 0 22 $v0 = COPY %mask 23 %x:vrnov0 = PseudoVMERGE_VVM_M1 $noreg, %false, %true, $v0, %avl, 5 24... 25--- 26name: undef_false 27body: | 28 bb.0: 29 liveins: $x1, $v8, $v9 30 ; CHECK-LABEL: name: undef_false 31 ; CHECK: liveins: $x1, $v8, $v9 32 ; CHECK-NEXT: {{ $}} 33 ; CHECK-NEXT: %pt:vr = COPY $v8 34 ; CHECK-NEXT: %false:vr = COPY $noreg 35 ; CHECK-NEXT: %true:vr = COPY $v9 36 ; CHECK-NEXT: %avl:gprnox0 = COPY $x1 37 ; CHECK-NEXT: %mask:vmv0 = PseudoVMSET_M_B8 %avl, 0 /* e8 */ 38 ; CHECK-NEXT: $v0 = COPY %mask 39 ; CHECK-NEXT: %x:vr = PseudoVMV_V_V_M1 %pt, %true, %avl, 5 /* e32 */, 0 /* tu, mu */ 40 %pt:vrnov0 = COPY $v8 41 %false:vr = COPY $noreg 42 %true:vr = COPY $v9 43 %avl:gprnox0 = COPY $x1 44 %mask:vmv0 = PseudoVMSET_M_B8 %avl, 0 45 $v0 = COPY %mask 46 %x:vrnov0 = PseudoVMERGE_VVM_M1 %pt, %false, %true, $v0, %avl, 5 47... 48--- 49name: equal_passthru_false 50body: | 51 bb.0: 52 liveins: $x1, $v8, $v9 53 ; CHECK-LABEL: name: equal_passthru_false 54 ; CHECK: liveins: $x1, $v8, $v9 55 ; CHECK-NEXT: {{ $}} 56 ; CHECK-NEXT: %false:vr = COPY $v8 57 ; CHECK-NEXT: %pt:vr = COPY $v8 58 ; CHECK-NEXT: %true:vr = COPY $v9 59 ; CHECK-NEXT: %avl:gprnox0 = COPY $x1 60 ; CHECK-NEXT: %mask:vmv0 = PseudoVMSET_M_B8 %avl, 0 /* e8 */ 61 ; CHECK-NEXT: $v0 = COPY %mask 62 ; CHECK-NEXT: %x:vr = PseudoVMV_V_V_M1 %pt, %true, %avl, 5 /* e32 */, 0 /* tu, mu */ 63 %false:vr = COPY $v8 64 %pt:vrnov0 = COPY $v8 65 %true:vr = COPY $v9 66 %avl:gprnox0 = COPY $x1 67 %mask:vmv0 = PseudoVMSET_M_B8 %avl, 0 68 $v0 = COPY %mask 69 %x:vrnov0 = PseudoVMERGE_VVM_M1 %pt, %false, %true, $v0, %avl, 5 70... 71--- 72name: same_mask 73body: | 74 bb.0: 75 liveins: $v8, $v9, $v0 76 ; CHECK-LABEL: name: same_mask 77 ; CHECK: liveins: $v8, $v9, $v0 78 ; CHECK-NEXT: {{ $}} 79 ; CHECK-NEXT: %pt:vr = COPY $v8 80 ; CHECK-NEXT: %false:vrnov0 = COPY $v9 81 ; CHECK-NEXT: %mask:vr = COPY $v0 82 ; CHECK-NEXT: $v0 = COPY %mask 83 ; CHECK-NEXT: %true:vrnov0 = PseudoVADD_VV_M1_MASK %false, $noreg, $noreg, $v0, 4, 5 /* e32 */, 0 /* tu, mu */ 84 ; CHECK-NEXT: $v0 = COPY %mask 85 ; CHECK-NEXT: %x:vr = PseudoVMV_V_V_M1 %pt, %true, 8, 5 /* e32 */, 0 /* tu, mu */ 86 %pt:vrnov0 = COPY $v8 87 %false:vrnov0 = COPY $v9 88 %mask:vr = COPY $v0 89 $v0 = COPY %mask 90 %true:vrnov0 = PseudoVADD_VV_M1_MASK %false, $noreg, $noreg, $v0, 4, 5 /* e32 */, 0 /* tu, mu */ 91 $v0 = COPY %mask 92 %x:vrnov0 = PseudoVMERGE_VVM_M1 %pt, %false, %true, $v0, 8, 5 /* e32 */ 93... 94--- 95# Shouldn't be converted because false operands are different 96name: same_mask_different_false 97body: | 98 bb.0: 99 liveins: $v8, $v9, $v0 100 ; CHECK-LABEL: name: same_mask_different_false 101 ; CHECK: liveins: $v8, $v9, $v0 102 ; CHECK-NEXT: {{ $}} 103 ; CHECK-NEXT: %pt:vrnov0 = COPY $v8 104 ; CHECK-NEXT: %false:vrnov0 = COPY $v9 105 ; CHECK-NEXT: %mask:vr = COPY $v0 106 ; CHECK-NEXT: $v0 = COPY %mask 107 ; CHECK-NEXT: %true:vrnov0 = PseudoVADD_VV_M1_MASK %pt, $noreg, $noreg, $v0, 4, 5 /* e32 */, 0 /* tu, mu */ 108 ; CHECK-NEXT: $v0 = COPY %mask 109 ; CHECK-NEXT: %x:vrnov0 = PseudoVMERGE_VVM_M1 %pt, %false, %true, $v0, 8, 5 /* e32 */ 110 %pt:vrnov0 = COPY $v8 111 %false:vrnov0 = COPY $v9 112 %mask:vr = COPY $v0 113 $v0 = COPY %mask 114 %true:vrnov0 = PseudoVADD_VV_M1_MASK %pt, $noreg, $noreg, $v0, 4, 5 /* e32 */, 0 /* tu, mu */ 115 $v0 = COPY %mask 116 %x:vrnov0 = PseudoVMERGE_VVM_M1 %pt, %false, %true, $v0, 8, 5 /* e32 */ 117... 118--- 119# Shouldn't be converted because EEWs are different 120name: same_mask_different_eew 121body: | 122 bb.0: 123 liveins: $v8, $v9, $v0 124 ; CHECK-LABEL: name: same_mask_different_eew 125 ; CHECK: liveins: $v8, $v9, $v0 126 ; CHECK-NEXT: {{ $}} 127 ; CHECK-NEXT: %pt:vrnov0 = COPY $v8 128 ; CHECK-NEXT: %false:vrnov0 = COPY $v9 129 ; CHECK-NEXT: %mask:vr = COPY $v0 130 ; CHECK-NEXT: $v0 = COPY %mask 131 ; CHECK-NEXT: %true:vrnov0 = PseudoVADD_VV_M1_MASK %false, $noreg, $noreg, $v0, 4, 4 /* e16 */, 0 /* tu, mu */ 132 ; CHECK-NEXT: $v0 = COPY %mask 133 ; CHECK-NEXT: %x:vrnov0 = PseudoVMERGE_VVM_M1 %pt, %false, %true, $v0, 8, 5 /* e32 */ 134 %pt:vrnov0 = COPY $v8 135 %false:vrnov0 = COPY $v9 136 %mask:vr = COPY $v0 137 $v0 = COPY %mask 138 %true:vrnov0 = PseudoVADD_VV_M1_MASK %false, $noreg, $noreg, $v0, 4, 4 /* e16 */, 0 /* tu, mu */ 139 $v0 = COPY %mask 140 %x:vrnov0 = PseudoVMERGE_VVM_M1 %pt, %false, %true, $v0, 8, 5 /* e32 */ 141... 142--- 143name: same_mask_undef_truepassthru 144body: | 145 bb.0: 146 liveins: $v8, $v0 147 ; CHECK-LABEL: name: same_mask_undef_truepassthru 148 ; CHECK: liveins: $v8, $v0 149 ; CHECK-NEXT: {{ $}} 150 ; CHECK-NEXT: %false:vrnov0 = COPY $v8 151 ; CHECK-NEXT: %mask:vr = COPY $v0 152 ; CHECK-NEXT: $v0 = COPY %mask 153 ; CHECK-NEXT: %true:vrnov0 = PseudoVADD_VV_M1_MASK %false, $noreg, $noreg, $v0, 4, 5 /* e32 */, 1 /* ta, mu */ 154 ; CHECK-NEXT: $v0 = COPY %mask 155 %false:vr = COPY $v8 156 %mask:vr = COPY $v0 157 $v0 = COPY %mask 158 %true:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, $v0, 4, 5 /* e32 */, 0 /* tu, mu */ 159 $v0 = COPY %mask 160 %x:vrnov0 = PseudoVMERGE_VVM_M1 $noreg, %false, %true, $v0, 4, 5 /* e32 */ 161... 162--- 163# Shouldn't be converted because true is in a different block 164name: same_mask_diff_blocks 165body: | 166 ; CHECK-LABEL: name: same_mask_diff_blocks 167 ; CHECK: bb.0: 168 ; CHECK-NEXT: successors: %bb.1(0x80000000) 169 ; CHECK-NEXT: liveins: $v8, $v0 170 ; CHECK-NEXT: {{ $}} 171 ; CHECK-NEXT: %false:vr = COPY $v8 172 ; CHECK-NEXT: %mask:vr = COPY $v0 173 ; CHECK-NEXT: $v0 = COPY %mask 174 ; CHECK-NEXT: %true:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, $v0, 4, 5 /* e32 */, 0 /* tu, mu */ 175 ; CHECK-NEXT: {{ $}} 176 ; CHECK-NEXT: bb.1: 177 ; CHECK-NEXT: $v0 = COPY %mask 178 ; CHECK-NEXT: [[PseudoVMERGE_VVM_M1_:%[0-9]+]]:vrnov0 = PseudoVMERGE_VVM_M1 $noreg, %false, %true, $v0, 4, 5 /* e32 */ 179 bb.0: 180 liveins: $v8, $v0 181 %false:vr = COPY $v8 182 %mask:vr = COPY $v0 183 $v0 = COPY %mask 184 %true:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, $v0, 4, 5 /* e32 */, 0 /* tu, mu */ 185 bb.1: 186 $v0 = COPY %mask 187 %5:vrnov0 = PseudoVMERGE_VVM_M1 $noreg, %false, %true, $v0, 4, 5 /* e32 */ 188