[llvm] b00fdde - [RISCV] Add test cases for failures to form widening FMA instructions. NFC
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 24 12:03:35 PDT 2024
Author: Craig Topper
Date: 2024-07-24T12:03:20-07:00
New Revision: b00fddec2db19a372bb4cec5558163214e6f0043
URL: https://github.com/llvm/llvm-project/commit/b00fddec2db19a372bb4cec5558163214e6f0043
DIFF: https://github.com/llvm/llvm-project/commit/b00fddec2db19a372bb4cec5558163214e6f0043.diff
LOG: [RISCV] Add test cases for failures to form widening FMA instructions. NFC
If the fp_extend is in the scalar domain before the shuffle, we
won't recognize the widening opportunity.
Added:
Modified:
llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfwmacc.ll
Removed:
################################################################################
diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfwmacc.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfwmacc.ll
index bcf5d7b3365c3..1803b52aca674 100644
--- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfwmacc.ll
+++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfwmacc.ll
@@ -2027,3 +2027,75 @@ define <8 x double> @vfwnmsac_fv_v8f64_v8f16(<8 x double> %va, <8 x half> %vb, h
%vg = call <8 x double> @llvm.fma.v8f64(<8 x double> %vd, <8 x double> %vf, <8 x double> %va)
ret <8 x double> %vg
}
+
+define <2 x float> @vfwmacc_vf2_v2f32(<2 x float> %va, <2 x half> %vb, half %c) {
+; CHECK-LABEL: vfwmacc_vf2_v2f32:
+; CHECK: # %bb.0:
+; CHECK-NEXT: fcvt.s.h fa5, fa0
+; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
+; CHECK-NEXT: vfwcvt.f.f.v v10, v9
+; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
+; CHECK-NEXT: vfmacc.vf v8, fa5, v10
+; CHECK-NEXT: ret
+ %cext = fpext half %c to float
+ %head = insertelement <2 x float> poison, float %cext, i32 0
+ %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
+ %vd = fpext <2 x half> %vb to <2 x float>
+ %vf = call <2 x float> @llvm.fma.v2f32(<2 x float> %vd, <2 x float> %splat, <2 x float> %va)
+ ret <2 x float> %vf
+}
+
+define <2 x float> @vfwmsac_vf2_v2f32(<2 x float> %va, <2 x half> %vb, half %c) {
+; CHECK-LABEL: vfwmsac_vf2_v2f32:
+; CHECK: # %bb.0:
+; CHECK-NEXT: fcvt.s.h fa5, fa0
+; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
+; CHECK-NEXT: vfwcvt.f.f.v v10, v9
+; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
+; CHECK-NEXT: vfmsac.vf v8, fa5, v10
+; CHECK-NEXT: ret
+ %cext = fpext half %c to float
+ %head = insertelement <2 x float> poison, float %cext, i32 0
+ %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
+ %vd = fpext <2 x half> %vb to <2 x float>
+ %ve = fneg <2 x float> %va
+ %vf = call <2 x float> @llvm.fma.v2f32(<2 x float> %vd, <2 x float> %splat, <2 x float> %ve)
+ ret <2 x float> %vf
+}
+
+define <2 x float> @vfwnmacc_vf2_v2f32(<2 x float> %va, <2 x half> %vb, half %c) {
+; CHECK-LABEL: vfwnmacc_vf2_v2f32:
+; CHECK: # %bb.0:
+; CHECK-NEXT: fcvt.s.h fa5, fa0
+; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
+; CHECK-NEXT: vfwcvt.f.f.v v10, v9
+; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
+; CHECK-NEXT: vfnmacc.vf v8, fa5, v10
+; CHECK-NEXT: ret
+ %cext = fpext half %c to float
+ %head = insertelement <2 x float> poison, float %cext, i32 0
+ %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
+ %vd = fpext <2 x half> %vb to <2 x float>
+ %vf = fneg <2 x float> %va
+ %vg = fneg <2 x float> %vd
+ %vh = call <2 x float> @llvm.fma.v2f32(<2 x float> %vg, <2 x float> %splat, <2 x float> %vf)
+ ret <2 x float> %vh
+}
+
+define <2 x float> @vfwnmsac_vf2_v2f32(<2 x float> %va, <2 x half> %vb, half %c) {
+; CHECK-LABEL: vfwnmsac_vf2_v2f32:
+; CHECK: # %bb.0:
+; CHECK-NEXT: fcvt.s.h fa5, fa0
+; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
+; CHECK-NEXT: vfwcvt.f.f.v v10, v9
+; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
+; CHECK-NEXT: vfnmsac.vf v8, fa5, v10
+; CHECK-NEXT: ret
+ %cext = fpext half %c to float
+ %head = insertelement <2 x float> poison, float %cext, i32 0
+ %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
+ %vd = fpext <2 x half> %vb to <2 x float>
+ %vf = fneg <2 x float> %vd
+ %vg = call <2 x float> @llvm.fma.v2f32(<2 x float> %vf, <2 x float> %splat, <2 x float> %va)
+ ret <2 x float> %vg
+}
More information about the llvm-commits
mailing list