@@ -2027,3 +2027,75 @@ define <8 x double> @vfwnmsac_fv_v8f64_v8f16(<8 x double> %va, <8 x half> %vb, h
2027
2027
%vg = call <8 x double > @llvm.fma.v8f64 (<8 x double > %vd , <8 x double > %vf , <8 x double > %va )
2028
2028
ret <8 x double > %vg
2029
2029
}
2030
+
2031
+ define <2 x float > @vfwmacc_vf2_v2f32 (<2 x float > %va , <2 x half > %vb , half %c ) {
2032
+ ; CHECK-LABEL: vfwmacc_vf2_v2f32:
2033
+ ; CHECK: # %bb.0:
2034
+ ; CHECK-NEXT: fcvt.s.h fa5, fa0
2035
+ ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
2036
+ ; CHECK-NEXT: vfwcvt.f.f.v v10, v9
2037
+ ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
2038
+ ; CHECK-NEXT: vfmacc.vf v8, fa5, v10
2039
+ ; CHECK-NEXT: ret
2040
+ %cext = fpext half %c to float
2041
+ %head = insertelement <2 x float > poison, float %cext , i32 0
2042
+ %splat = shufflevector <2 x float > %head , <2 x float > poison, <2 x i32 > zeroinitializer
2043
+ %vd = fpext <2 x half > %vb to <2 x float >
2044
+ %vf = call <2 x float > @llvm.fma.v2f32 (<2 x float > %vd , <2 x float > %splat , <2 x float > %va )
2045
+ ret <2 x float > %vf
2046
+ }
2047
+
2048
+ define <2 x float > @vfwmsac_vf2_v2f32 (<2 x float > %va , <2 x half > %vb , half %c ) {
2049
+ ; CHECK-LABEL: vfwmsac_vf2_v2f32:
2050
+ ; CHECK: # %bb.0:
2051
+ ; CHECK-NEXT: fcvt.s.h fa5, fa0
2052
+ ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
2053
+ ; CHECK-NEXT: vfwcvt.f.f.v v10, v9
2054
+ ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
2055
+ ; CHECK-NEXT: vfmsac.vf v8, fa5, v10
2056
+ ; CHECK-NEXT: ret
2057
+ %cext = fpext half %c to float
2058
+ %head = insertelement <2 x float > poison, float %cext , i32 0
2059
+ %splat = shufflevector <2 x float > %head , <2 x float > poison, <2 x i32 > zeroinitializer
2060
+ %vd = fpext <2 x half > %vb to <2 x float >
2061
+ %ve = fneg <2 x float > %va
2062
+ %vf = call <2 x float > @llvm.fma.v2f32 (<2 x float > %vd , <2 x float > %splat , <2 x float > %ve )
2063
+ ret <2 x float > %vf
2064
+ }
2065
+
2066
+ define <2 x float > @vfwnmacc_vf2_v2f32 (<2 x float > %va , <2 x half > %vb , half %c ) {
2067
+ ; CHECK-LABEL: vfwnmacc_vf2_v2f32:
2068
+ ; CHECK: # %bb.0:
2069
+ ; CHECK-NEXT: fcvt.s.h fa5, fa0
2070
+ ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
2071
+ ; CHECK-NEXT: vfwcvt.f.f.v v10, v9
2072
+ ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
2073
+ ; CHECK-NEXT: vfnmacc.vf v8, fa5, v10
2074
+ ; CHECK-NEXT: ret
2075
+ %cext = fpext half %c to float
2076
+ %head = insertelement <2 x float > poison, float %cext , i32 0
2077
+ %splat = shufflevector <2 x float > %head , <2 x float > poison, <2 x i32 > zeroinitializer
2078
+ %vd = fpext <2 x half > %vb to <2 x float >
2079
+ %vf = fneg <2 x float > %va
2080
+ %vg = fneg <2 x float > %vd
2081
+ %vh = call <2 x float > @llvm.fma.v2f32 (<2 x float > %vg , <2 x float > %splat , <2 x float > %vf )
2082
+ ret <2 x float > %vh
2083
+ }
2084
+
2085
+ define <2 x float > @vfwnmsac_vf2_v2f32 (<2 x float > %va , <2 x half > %vb , half %c ) {
2086
+ ; CHECK-LABEL: vfwnmsac_vf2_v2f32:
2087
+ ; CHECK: # %bb.0:
2088
+ ; CHECK-NEXT: fcvt.s.h fa5, fa0
2089
+ ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
2090
+ ; CHECK-NEXT: vfwcvt.f.f.v v10, v9
2091
+ ; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
2092
+ ; CHECK-NEXT: vfnmsac.vf v8, fa5, v10
2093
+ ; CHECK-NEXT: ret
2094
+ %cext = fpext half %c to float
2095
+ %head = insertelement <2 x float > poison, float %cext , i32 0
2096
+ %splat = shufflevector <2 x float > %head , <2 x float > poison, <2 x i32 > zeroinitializer
2097
+ %vd = fpext <2 x half > %vb to <2 x float >
2098
+ %vf = fneg <2 x float > %vd
2099
+ %vg = call <2 x float > @llvm.fma.v2f32 (<2 x float > %vf , <2 x float > %splat , <2 x float > %va )
2100
+ ret <2 x float > %vg
2101
+ }
0 commit comments