1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5 2# RUN: llc %s -o - -mtriple=riscv64 -mattr=+v,+zvfbfmin -run-pass=riscv-vl-optimizer -verify-machineinstrs | FileCheck %s 3 4--- 5name: vnsrl_wv_user 6body: | 7 bb.0: 8 liveins: $x1 9 ; CHECK-LABEL: name: vnsrl_wv_user 10 ; CHECK: liveins: $x1 11 ; CHECK-NEXT: {{ $}} 12 ; CHECK-NEXT: %vl:gprnox0 = COPY $x1 13 ; CHECK-NEXT: %x:vr = PseudoVADD_VV_MF4 $noreg, $noreg, $noreg, -1, 4 /* e16 */, 0 /* tu, mu */ 14 ; CHECK-NEXT: %y:vr = PseudoVNSRL_WV_MF4 $noreg, %x, $noreg, %vl, 4 /* e16 */, 0 /* tu, mu */ 15 %vl:gprnox0 = COPY $x1 16 %x:vr = PseudoVADD_VV_MF4 $noreg, $noreg, $noreg, -1, 4 /* e16 */, 0 /* tu, mu */ 17 %y:vr = PseudoVNSRL_WV_MF4 $noreg, %x, $noreg, %vl, 4 /* e16 */, 0 /* tu, mu */ 18... 19--- 20name: vredsum_vv_user 21body: | 22 bb.0: 23 liveins: $x1 24 ; CHECK-LABEL: name: vredsum_vv_user 25 ; CHECK: liveins: $x1 26 ; CHECK-NEXT: {{ $}} 27 ; CHECK-NEXT: %vl:gprnox0 = COPY $x1 28 ; CHECK-NEXT: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 5 /* e32 */, 0 /* tu, mu */ 29 ; CHECK-NEXT: %y:vr = PseudoVREDSUM_VS_M1_E64 $noreg, %x, $noreg, -1, 6 /* e64 */, 0 /* tu, mu */ 30 ; CHECK-NEXT: %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl, 5 /* e32 */, 0 /* tu, mu */ 31 %vl:gprnox0 = COPY $x1 32 %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 5 /* e32 */, 0 /* tu, mu */ 33 %y:vr = PseudoVREDSUM_VS_M1_E64 $noreg, %x, $noreg, -1, 6 /* e64 */, 0 /* tu, mu */ 34 %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl, 5 /* e32 */, 0 /* tu, mu */ 35... 36--- 37name: use_largest_common_vl_imm_imm 38body: | 39 bb.0: 40 ; CHECK-LABEL: name: use_largest_common_vl_imm_imm 41 ; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, 2, 3 /* e8 */, 0 /* tu, mu */ 42 ; CHECK-NEXT: %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */ 43 ; CHECK-NEXT: %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 2, 3 /* e8 */, 0 /* tu, mu */ 44 %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 45 %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0 46 %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 2, 3 /* e8 */, 0 47... 48--- 49name: use_largest_common_vl_same_reg 50body: | 51 bb.0: 52 liveins: $x1 53 ; CHECK-LABEL: name: use_largest_common_vl_same_reg 54 ; CHECK: liveins: $x1 55 ; CHECK-NEXT: {{ $}} 56 ; CHECK-NEXT: %vl:gprnox0 = COPY $x1 57 ; CHECK-NEXT: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, %vl, 3 /* e8 */, 0 /* tu, mu */ 58 ; CHECK-NEXT: %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl, 3 /* e8 */, 0 /* tu, mu */ 59 ; CHECK-NEXT: %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl, 3 /* e8 */, 0 /* tu, mu */ 60 %vl:gprnox0 = COPY $x1 61 %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 62 %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl, 3 /* e8 */, 0 63 %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl, 3 /* e8 */, 0 64... 65--- 66name: use_largest_common_vl_diff_regs 67body: | 68 bb.0: 69 liveins: $x1, $x2 70 ; CHECK-LABEL: name: use_largest_common_vl_diff_regs 71 ; CHECK: liveins: $x1, $x2 72 ; CHECK-NEXT: {{ $}} 73 ; CHECK-NEXT: %vl0:gprnox0 = COPY $x1 74 ; CHECK-NEXT: %vl1:gprnox0 = COPY $x2 75 ; CHECK-NEXT: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */ 76 ; CHECK-NEXT: %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl0, 3 /* e8 */, 0 /* tu, mu */ 77 ; CHECK-NEXT: %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl1, 3 /* e8 */, 0 /* tu, mu */ 78 %vl0:gprnox0 = COPY $x1 79 %vl1:gprnox0 = COPY $x2 80 %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 81 %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl0, 3 /* e8 */, 0 82 %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl1, 3 /* e8 */, 0 83... 84--- 85name: use_largest_common_vl_imm_reg 86body: | 87 bb.0: 88 liveins: $x1 89 ; CHECK-LABEL: name: use_largest_common_vl_imm_reg 90 ; CHECK: liveins: $x1 91 ; CHECK-NEXT: {{ $}} 92 ; CHECK-NEXT: %vl:gprnox0 = COPY $x1 93 ; CHECK-NEXT: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */ 94 ; CHECK-NEXT: %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl, 3 /* e8 */, 0 /* tu, mu */ 95 ; CHECK-NEXT: %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */ 96 %vl:gprnox0 = COPY $x1 97 %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 98 %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, %vl, 3 /* e8 */, 0 99 %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0 100... 101--- 102name: use_largest_common_vl_imm_vlmax 103body: | 104 bb.0: 105 ; CHECK-LABEL: name: use_largest_common_vl_imm_vlmax 106 ; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */ 107 ; CHECK-NEXT: %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */ 108 ; CHECK-NEXT: %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */ 109 %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 110 %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0 111 %z:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, -1, 3 /* e8 */, 0 112... 113--- 114name: vfcvt_x_f_v_nofpexcept 115body: | 116 bb.0: 117 ; CHECK-LABEL: name: vfcvt_x_f_v_nofpexcept 118 ; CHECK: %x:vr = nofpexcept PseudoVFCVT_X_F_V_M1 $noreg, $noreg, 0, 1, 3 /* e8 */, 0 /* tu, mu */ 119 ; CHECK-NEXT: %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */ 120 %x:vr = nofpexcept PseudoVFCVT_X_F_V_M1 $noreg, $noreg, 0, -1, 3 /* e32 */, 0 121 %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0 122... 123--- 124name: vfcvt_x_f_v_fpexcept 125body: | 126 bb.0: 127 ; CHECK-LABEL: name: vfcvt_x_f_v_fpexcept 128 ; CHECK: %x:vr = PseudoVFCVT_X_F_V_M1 $noreg, $noreg, 0, -1, 3 /* e8 */, 0 /* tu, mu */ 129 ; CHECK-NEXT: %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */ 130 %x:vr = PseudoVFCVT_X_F_V_M1 $noreg, $noreg, 0, -1, 3 /* e32 */, 0 131 %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0 132... 133--- 134name: vfncvtbf16_f_f_w_nofpexcept 135body: | 136 bb.0: 137 ; CHECK-LABEL: name: vfncvtbf16_f_f_w_nofpexcept 138 ; CHECK: early-clobber %x:vr = nofpexcept PseudoVFNCVTBF16_F_F_W_M1_E16 $noreg, $noreg, 7, 1, 4 /* e16 */, 0 /* tu, mu */, implicit $frm 139 ; CHECK-NEXT: %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 4 /* e16 */, 0 /* tu, mu */ 140 %x:vr = nofpexcept PseudoVFNCVTBF16_F_F_W_M1_E16 $noreg, $noreg, 7, -1, 4 /* e16 */, 0 /* tu, mu */, implicit $frm 141 %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 4 /* e16 */, 0 142... 143--- 144name: vwadd_tied_vs1 145body: | 146 bb.0: 147 ; CHECK-LABEL: name: vwadd_tied_vs1 148 ; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */ 149 ; CHECK-NEXT: early-clobber %y:vrm2 = PseudoVWADD_WV_M1_TIED $noreg, %x, 1, 3 /* e8 */, 0 /* tu, mu */ 150 %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */ 151 %y:vrm2 = PseudoVWADD_WV_M1_TIED $noreg, %x, 1, 3 /* e8 */, 0 /* tu, mu */ 152... 153--- 154name: crossbb 155body: | 156 ; CHECK-LABEL: name: crossbb 157 ; CHECK: bb.0: 158 ; CHECK-NEXT: successors: %bb.3(0x80000000) 159 ; CHECK-NEXT: {{ $}} 160 ; CHECK-NEXT: PseudoBR %bb.3 161 ; CHECK-NEXT: {{ $}} 162 ; CHECK-NEXT: bb.1: 163 ; CHECK-NEXT: %a1:vr = PseudoVADD_VV_M1 $noreg, %c, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */ 164 ; CHECK-NEXT: %a2:vr = PseudoVADD_VV_M1 $noreg, %a1, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */ 165 ; CHECK-NEXT: PseudoRET 166 ; CHECK-NEXT: {{ $}} 167 ; CHECK-NEXT: bb.2: 168 ; CHECK-NEXT: %b1:vr = PseudoVADD_VV_M1 $noreg, %c, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */ 169 ; CHECK-NEXT: %b2:vr = PseudoVADD_VV_M1 $noreg, %b1, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */ 170 ; CHECK-NEXT: PseudoRET 171 ; CHECK-NEXT: {{ $}} 172 ; CHECK-NEXT: bb.3: 173 ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) 174 ; CHECK-NEXT: liveins: $x1 175 ; CHECK-NEXT: {{ $}} 176 ; CHECK-NEXT: %c:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */ 177 ; CHECK-NEXT: BEQ $x1, $x0, %bb.1 178 ; CHECK-NEXT: PseudoBR %bb.2 179 bb.0: 180 PseudoBR %bb.3 181 bb.1: 182 %a1:vr = PseudoVADD_VV_M1 $noreg, %c, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */ 183 %a2:vr = PseudoVADD_VV_M1 $noreg, %a1, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */ 184 PseudoRET 185 bb.2: 186 %b1:vr = PseudoVADD_VV_M1 $noreg, %c, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */ 187 %b2:vr = PseudoVADD_VV_M1 $noreg, %b1, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */ 188 PseudoRET 189 bb.3: 190 liveins: $x1 191 %c:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */ 192 BEQ $x1, $x0, %bb.1 193 PseudoBR %bb.2 194... 195--- 196name: unreachable 197body: | 198 ; CHECK-LABEL: name: unreachable 199 ; CHECK: bb.0: 200 ; CHECK-NEXT: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */ 201 ; CHECK-NEXT: PseudoRET 202 ; CHECK-NEXT: {{ $}} 203 ; CHECK-NEXT: bb.1: 204 ; CHECK-NEXT: %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */ 205 ; CHECK-NEXT: PseudoRET 206 bb.0: 207 %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */ 208 PseudoRET 209 bb.1: 210 %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */ 211 PseudoRET 212