262 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s3; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s4 5define <2 x i16> @vwmaccus_vx_v2i16(ptr %x, i8 %y, <2 x i16> %z) {6; CHECK-LABEL: vwmaccus_vx_v2i16:7; CHECK: # %bb.0:8; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma9; CHECK-NEXT: vle8.v v9, (a0)10; CHECK-NEXT: vwmaccus.vx v8, a1, v911; CHECK-NEXT: ret12 %a = load <2 x i8>, ptr %x13 %b = insertelement <2 x i8> poison, i8 %y, i32 014 %c = shufflevector <2 x i8> %b, <2 x i8> poison, <2 x i32> zeroinitializer15 %d = sext <2 x i8> %a to <2 x i16>16 %e = zext <2 x i8> %c to <2 x i16>17 %f = mul <2 x i16> %d, %e18 %g = add <2 x i16> %f, %z19 ret <2 x i16> %g20}21 22define <4 x i16> @vwmaccus_vx_v4i16(ptr %x, i8 %y, <4 x i16> %z) {23; CHECK-LABEL: vwmaccus_vx_v4i16:24; CHECK: # %bb.0:25; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma26; CHECK-NEXT: vle8.v v9, (a0)27; CHECK-NEXT: vwmaccus.vx v8, a1, v928; CHECK-NEXT: ret29 %a = load <4 x i8>, ptr %x30 %b = insertelement <4 x i8> poison, i8 %y, i32 031 %c = shufflevector <4 x i8> %b, <4 x i8> poison, <4 x i32> zeroinitializer32 %d = sext <4 x i8> %a to <4 x i16>33 %e = zext <4 x i8> %c to <4 x i16>34 %f = mul <4 x i16> %d, %e35 %g = add <4 x i16> %f, %z36 ret <4 x i16> %g37}38 39define <2 x i32> @vwmaccus_vx_v2i32(ptr %x, i16 %y, <2 x i32> %z) {40; CHECK-LABEL: vwmaccus_vx_v2i32:41; CHECK: # %bb.0:42; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma43; CHECK-NEXT: vle16.v v9, (a0)44; CHECK-NEXT: vwmaccus.vx v8, a1, v945; CHECK-NEXT: ret46 %a = load <2 x i16>, ptr %x47 %b = insertelement <2 x i16> poison, i16 %y, i32 048 %c = shufflevector <2 x i16> %b, <2 x i16> poison, <2 x i32> zeroinitializer49 %d = sext <2 x i16> %a to <2 x i32>50 %e = zext <2 x i16> %c to <2 x i32>51 %f = mul <2 x i32> %d, %e52 %g = add <2 x i32> %f, %z53 ret <2 x i32> %g54}55 56define <8 x i16> @vwmaccus_vx_v8i16(ptr %x, i8 %y, <8 x i16> %z) {57; CHECK-LABEL: vwmaccus_vx_v8i16:58; CHECK: # %bb.0:59; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma60; CHECK-NEXT: vle8.v v9, (a0)61; CHECK-NEXT: vwmaccus.vx v8, a1, v962; CHECK-NEXT: ret63 %a = load <8 x i8>, ptr %x64 %b = insertelement <8 x i8> poison, i8 %y, i32 065 %c = shufflevector <8 x i8> %b, <8 x i8> poison, <8 x i32> zeroinitializer66 %d = sext <8 x i8> %a to <8 x i16>67 %e = zext <8 x i8> %c to <8 x i16>68 %f = mul <8 x i16> %d, %e69 %g = add <8 x i16> %f, %z70 ret <8 x i16> %g71}72 73define <4 x i32> @vwmaccus_vx_v4i32(ptr %x, i16 %y, <4 x i32> %z) {74; CHECK-LABEL: vwmaccus_vx_v4i32:75; CHECK: # %bb.0:76; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma77; CHECK-NEXT: vle16.v v9, (a0)78; CHECK-NEXT: vwmaccus.vx v8, a1, v979; CHECK-NEXT: ret80 %a = load <4 x i16>, ptr %x81 %b = insertelement <4 x i16> poison, i16 %y, i32 082 %c = shufflevector <4 x i16> %b, <4 x i16> poison, <4 x i32> zeroinitializer83 %d = sext <4 x i16> %a to <4 x i32>84 %e = zext <4 x i16> %c to <4 x i32>85 %f = mul <4 x i32> %d, %e86 %g = add <4 x i32> %f, %z87 ret <4 x i32> %g88}89 90define <2 x i64> @vwmaccus_vx_v2i64(ptr %x, i32 %y, <2 x i64> %z) {91; CHECK-LABEL: vwmaccus_vx_v2i64:92; CHECK: # %bb.0:93; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma94; CHECK-NEXT: vle32.v v9, (a0)95; CHECK-NEXT: vwmaccus.vx v8, a1, v996; CHECK-NEXT: ret97 %a = load <2 x i32>, ptr %x98 %b = insertelement <2 x i32> poison, i32 %y, i64 099 %c = shufflevector <2 x i32> %b, <2 x i32> poison, <2 x i32> zeroinitializer100 %d = sext <2 x i32> %a to <2 x i64>101 %e = zext <2 x i32> %c to <2 x i64>102 %f = mul <2 x i64> %d, %e103 %g = add <2 x i64> %f, %z104 ret <2 x i64> %g105}106 107define <16 x i16> @vwmaccus_vx_v16i16(ptr %x, i8 %y, <16 x i16> %z) {108; CHECK-LABEL: vwmaccus_vx_v16i16:109; CHECK: # %bb.0:110; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma111; CHECK-NEXT: vle8.v v10, (a0)112; CHECK-NEXT: vwmaccus.vx v8, a1, v10113; CHECK-NEXT: ret114 %a = load <16 x i8>, ptr %x115 %b = insertelement <16 x i8> poison, i8 %y, i32 0116 %c = shufflevector <16 x i8> %b, <16 x i8> poison, <16 x i32> zeroinitializer117 %d = sext <16 x i8> %a to <16 x i16>118 %e = zext <16 x i8> %c to <16 x i16>119 %f = mul <16 x i16> %d, %e120 %g = add <16 x i16> %f, %z121 ret <16 x i16> %g122}123 124define <8 x i32> @vwmaccus_vx_v8i32(ptr %x, i16 %y, <8 x i32> %z) {125; CHECK-LABEL: vwmaccus_vx_v8i32:126; CHECK: # %bb.0:127; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma128; CHECK-NEXT: vle16.v v10, (a0)129; CHECK-NEXT: vwmaccus.vx v8, a1, v10130; CHECK-NEXT: ret131 %a = load <8 x i16>, ptr %x132 %b = insertelement <8 x i16> poison, i16 %y, i32 0133 %c = shufflevector <8 x i16> %b, <8 x i16> poison, <8 x i32> zeroinitializer134 %d = sext <8 x i16> %a to <8 x i32>135 %e = zext <8 x i16> %c to <8 x i32>136 %f = mul <8 x i32> %d, %e137 %g = add <8 x i32> %f, %z138 ret <8 x i32> %g139}140 141define <4 x i64> @vwmaccus_vx_v4i64(ptr %x, i32 %y, <4 x i64> %z) {142; CHECK-LABEL: vwmaccus_vx_v4i64:143; CHECK: # %bb.0:144; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma145; CHECK-NEXT: vle32.v v10, (a0)146; CHECK-NEXT: vwmaccus.vx v8, a1, v10147; CHECK-NEXT: ret148 %a = load <4 x i32>, ptr %x149 %b = insertelement <4 x i32> poison, i32 %y, i64 0150 %c = shufflevector <4 x i32> %b, <4 x i32> poison, <4 x i32> zeroinitializer151 %d = sext <4 x i32> %a to <4 x i64>152 %e = zext <4 x i32> %c to <4 x i64>153 %f = mul <4 x i64> %d, %e154 %g = add <4 x i64> %f, %z155 ret <4 x i64> %g156}157 158define <32 x i16> @vwmaccus_vx_v32i16(ptr %x, i8 %y, <32 x i16> %z) {159; CHECK-LABEL: vwmaccus_vx_v32i16:160; CHECK: # %bb.0:161; CHECK-NEXT: li a2, 32162; CHECK-NEXT: vsetvli zero, a2, e8, m2, ta, ma163; CHECK-NEXT: vle8.v v12, (a0)164; CHECK-NEXT: vwmaccus.vx v8, a1, v12165; CHECK-NEXT: ret166 %a = load <32 x i8>, ptr %x167 %b = insertelement <32 x i8> poison, i8 %y, i32 0168 %c = shufflevector <32 x i8> %b, <32 x i8> poison, <32 x i32> zeroinitializer169 %d = sext <32 x i8> %a to <32 x i16>170 %e = zext <32 x i8> %c to <32 x i16>171 %f = mul <32 x i16> %d, %e172 %g = add <32 x i16> %f, %z173 ret <32 x i16> %g174}175 176define <16 x i32> @vwmaccus_vx_v16i32(ptr %x, i16 %y, <16 x i32> %z) {177; CHECK-LABEL: vwmaccus_vx_v16i32:178; CHECK: # %bb.0:179; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma180; CHECK-NEXT: vle16.v v12, (a0)181; CHECK-NEXT: vwmaccus.vx v8, a1, v12182; CHECK-NEXT: ret183 %a = load <16 x i16>, ptr %x184 %b = insertelement <16 x i16> poison, i16 %y, i32 0185 %c = shufflevector <16 x i16> %b, <16 x i16> poison, <16 x i32> zeroinitializer186 %d = sext <16 x i16> %a to <16 x i32>187 %e = zext <16 x i16> %c to <16 x i32>188 %f = mul <16 x i32> %d, %e189 %g = add <16 x i32> %f, %z190 ret <16 x i32> %g191}192 193define <8 x i64> @vwmaccus_vx_v8i64(ptr %x, i32 %y, <8 x i64> %z) {194; CHECK-LABEL: vwmaccus_vx_v8i64:195; CHECK: # %bb.0:196; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma197; CHECK-NEXT: vle32.v v12, (a0)198; CHECK-NEXT: vwmaccus.vx v8, a1, v12199; CHECK-NEXT: ret200 %a = load <8 x i32>, ptr %x201 %b = insertelement <8 x i32> poison, i32 %y, i64 0202 %c = shufflevector <8 x i32> %b, <8 x i32> poison, <8 x i32> zeroinitializer203 %d = sext <8 x i32> %a to <8 x i64>204 %e = zext <8 x i32> %c to <8 x i64>205 %f = mul <8 x i64> %d, %e206 %g = add <8 x i64> %f, %z207 ret <8 x i64> %g208}209 210define <64 x i16> @vwmaccus_vx_v64i16(ptr %x, i8 %y, <64 x i16> %z) {211; CHECK-LABEL: vwmaccus_vx_v64i16:212; CHECK: # %bb.0:213; CHECK-NEXT: li a2, 64214; CHECK-NEXT: vsetvli zero, a2, e8, m4, ta, ma215; CHECK-NEXT: vle8.v v16, (a0)216; CHECK-NEXT: vwmaccus.vx v8, a1, v16217; CHECK-NEXT: ret218 %a = load <64 x i8>, ptr %x219 %b = insertelement <64 x i8> poison, i8 %y, i32 0220 %c = shufflevector <64 x i8> %b, <64 x i8> poison, <64 x i32> zeroinitializer221 %d = sext <64 x i8> %a to <64 x i16>222 %e = zext <64 x i8> %c to <64 x i16>223 %f = mul <64 x i16> %d, %e224 %g = add <64 x i16> %f, %z225 ret <64 x i16> %g226}227 228define <32 x i32> @vwmaccus_vx_v32i32(ptr %x, i16 %y, <32 x i32> %z) {229; CHECK-LABEL: vwmaccus_vx_v32i32:230; CHECK: # %bb.0:231; CHECK-NEXT: li a2, 32232; CHECK-NEXT: vsetvli zero, a2, e16, m4, ta, ma233; CHECK-NEXT: vle16.v v16, (a0)234; CHECK-NEXT: vwmaccus.vx v8, a1, v16235; CHECK-NEXT: ret236 %a = load <32 x i16>, ptr %x237 %b = insertelement <32 x i16> poison, i16 %y, i32 0238 %c = shufflevector <32 x i16> %b, <32 x i16> poison, <32 x i32> zeroinitializer239 %d = sext <32 x i16> %a to <32 x i32>240 %e = zext <32 x i16> %c to <32 x i32>241 %f = mul <32 x i32> %d, %e242 %g = add <32 x i32> %f, %z243 ret <32 x i32> %g244}245 246define <16 x i64> @vwmaccus_vx_v16i64(ptr %x, i32 %y, <16 x i64> %z) {247; CHECK-LABEL: vwmaccus_vx_v16i64:248; CHECK: # %bb.0:249; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma250; CHECK-NEXT: vle32.v v16, (a0)251; CHECK-NEXT: vwmaccus.vx v8, a1, v16252; CHECK-NEXT: ret253 %a = load <16 x i32>, ptr %x254 %b = insertelement <16 x i32> poison, i32 %y, i64 0255 %c = shufflevector <16 x i32> %b, <16 x i32> poison, <16 x i32> zeroinitializer256 %d = sext <16 x i32> %a to <16 x i64>257 %e = zext <16 x i32> %c to <16 x i64>258 %f = mul <16 x i64> %d, %e259 %g = add <16 x i64> %f, %z260 ret <16 x i64> %g261}262