Intrinsic::aarch64_sve_fmad>(IC, II,
false))
return FMAD;
- if (auto FMLA_U =
+ if (auto FMLA =
instCombineSVEVectorFuseMulAddSub<Intrinsic::aarch64_sve_fmul_u,
- Intrinsic::aarch64_sve_fmla_u>(
- IC, II, true))
- return FMLA_U;
+ Intrinsic::aarch64_sve_fmla>(IC, II,
+ true))
+ return FMLA;
return instCombineSVEVectorBinOp(IC, II);
}
Intrinsic::aarch64_sve_fnmsb>(
IC, II, false))
return FMSB;
- if (auto FMLS_U =
+ if (auto FMLS =
instCombineSVEVectorFuseMulAddSub<Intrinsic::aarch64_sve_fmul_u,
- Intrinsic::aarch64_sve_fmls_u>(
- IC, II, true))
- return FMLS_U;
+ Intrinsic::aarch64_sve_fmls>(IC, II,
+ true))
+ return FMLS;
return instCombineSVEVectorBinOp(IC, II);
}
ret <vscale x 8 x half> %2
}
-; TODO: Test highlights an invalid combine!
; fadd(a, fmul_u(b, c)) -> fmla(a, b, c)
define <vscale x 8 x half> @combine_fmuladd_2(<vscale x 8 x i1> %p, <vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) #0 {
; CHECK-LABEL: @combine_fmuladd_2(
-; CHECK-NEXT: [[TMP1:%.*]] = call fast <vscale x 8 x half> @llvm.aarch64.sve.fmla.u.nxv8f16(<vscale x 8 x i1> [[P:%.*]], <vscale x 8 x half> [[A:%.*]], <vscale x 8 x half> [[B:%.*]], <vscale x 8 x half> [[C:%.*]])
+; CHECK-NEXT: [[TMP1:%.*]] = call fast <vscale x 8 x half> @llvm.aarch64.sve.fmla.nxv8f16(<vscale x 8 x i1> [[P:%.*]], <vscale x 8 x half> [[A:%.*]], <vscale x 8 x half> [[B:%.*]], <vscale x 8 x half> [[C:%.*]])
; CHECK-NEXT: ret <vscale x 8 x half> [[TMP1]]
;
%1 = tail call fast <vscale x 8 x half> @llvm.aarch64.sve.fmul.u.nxv8f16(<vscale x 8 x i1> %p, <vscale x 8 x half> %b, <vscale x 8 x half> %c)
ret <vscale x 8 x half> %2
}
-; TODO: Test highlights an invalid combine!
-; fsub(a, fmul_u(b, c)) -> fmls(a, b, c)
define <vscale x 8 x half> @combine_fmulsub_2(<vscale x 8 x i1> %p, <vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) #0 {
; CHECK-LABEL: @combine_fmulsub_2(
-; CHECK-NEXT: [[TMP1:%.*]] = call fast <vscale x 8 x half> @llvm.aarch64.sve.fmls.u.nxv8f16(<vscale x 8 x i1> [[P:%.*]], <vscale x 8 x half> [[A:%.*]], <vscale x 8 x half> [[B:%.*]], <vscale x 8 x half> [[C:%.*]])
+; CHECK-NEXT: [[TMP1:%.*]] = call fast <vscale x 8 x half> @llvm.aarch64.sve.fmls.nxv8f16(<vscale x 8 x i1> [[P:%.*]], <vscale x 8 x half> [[A:%.*]], <vscale x 8 x half> [[B:%.*]], <vscale x 8 x half> [[C:%.*]])
; CHECK-NEXT: ret <vscale x 8 x half> [[TMP1]]
;
%1 = tail call fast <vscale x 8 x half> @llvm.aarch64.sve.fmul.u.nxv8f16(<vscale x 8 x i1> %p, <vscale x 8 x half> %b, <vscale x 8 x half> %c)