diff --git a/llvm/lib/Target/ARM/ARMInstrVFP.td b/llvm/lib/Target/ARM/ARMInstrVFP.td --- a/llvm/lib/Target/ARM/ARMInstrVFP.td +++ b/llvm/lib/Target/ARM/ARMInstrVFP.td @@ -2042,16 +2042,6 @@ RegConstraint<"$Sdin = $Sd">, Requires<[HasFullFP16,UseFPVMLx]>; -def : Pat<(fadd_mlx DPR:$dstin, (fmul_su DPR:$a, (f64 DPR:$b))), - (VMLAD DPR:$dstin, DPR:$a, DPR:$b)>, - Requires<[HasVFP2,HasDPVFP,UseFPVMLx]>; -def : Pat<(fadd_mlx SPR:$dstin, (fmul_su SPR:$a, SPR:$b)), - (VMLAS SPR:$dstin, SPR:$a, SPR:$b)>, - Requires<[HasVFP2,DontUseNEONForFP, UseFPVMLx]>; -def : Pat<(fadd_mlx HPR:$dstin, (fmul_su (f16 HPR:$a), HPR:$b)), - (VMLAH HPR:$dstin, (f16 HPR:$a), HPR:$b)>, - Requires<[HasFullFP16,DontUseNEONForFP, UseFPVMLx]>; - def VMLSD : ADbI<0b11100, 0b00, 1, 0, (outs DPR:$Dd), (ins DPR:$Ddin, DPR:$Dn, DPR:$Dm), @@ -2091,7 +2081,7 @@ Requires<[HasVFP2,DontUseNEONForFP,UseFPVMLx]>; def : Pat<(fsub_mlx HPR:$dstin, (fmul_su (f16 HPR:$a), HPR:$b)), (VMLSH HPR:$dstin, (f16 HPR:$a), HPR:$b)>, - Requires<[HasFullFP16,DontUseNEONForFP,UseFPVMLx]>; + Requires<[HasFullFP16,UseFPVMLx]>; def VNMLAD : ADbI<0b11100, 0b01, 1, 0, (outs DPR:$Dd), (ins DPR:$Ddin, DPR:$Dn, DPR:$Dm), @@ -2123,18 +2113,7 @@ RegConstraint<"$Sdin = $Sd">, Requires<[HasFullFP16,UseFPVMLx]>; -// (-(a * b) - dst) -> -(dst + (a * b)) -def : Pat<(fsub_mlx (fneg (fmul_su DPR:$a, (f64 DPR:$b))), DPR:$dstin), - (VNMLAD DPR:$dstin, DPR:$a, DPR:$b)>, - Requires<[HasVFP2,HasDPVFP,UseFPVMLx]>; -def : Pat<(fsub_mlx (fneg (fmul_su SPR:$a, SPR:$b)), SPR:$dstin), - (VNMLAS SPR:$dstin, SPR:$a, SPR:$b)>, - Requires<[HasVFP2,DontUseNEONForFP,UseFPVMLx]>; -def : Pat<(fsub_mlx (fneg (fmul_su (f16 HPR:$a), HPR:$b)), HPR:$dstin), - (VNMLAH HPR:$dstin, (f16 HPR:$a), HPR:$b)>, - Requires<[HasFullFP16,DontUseNEONForFP,UseFPVMLx]>; - -// (-dst - (a * b)) -> -(dst + (a * b)) +// (-dst - (a * b)) -> (-(a * b) - dst) def : Pat<(fsub_mlx (fneg DPR:$dstin), (fmul_su DPR:$a, (f64 DPR:$b))), (VNMLAD DPR:$dstin, DPR:$a, DPR:$b)>, Requires<[HasVFP2,HasDPVFP,UseFPVMLx]>; @@ -2143,7 +2122,7 @@ Requires<[HasVFP2,DontUseNEONForFP,UseFPVMLx]>; def : Pat<(fsub_mlx (fneg HPR:$dstin), (fmul_su (f16 HPR:$a), HPR:$b)), (VNMLAH HPR:$dstin, (f16 HPR:$a), HPR:$b)>, - Requires<[HasFullFP16,DontUseNEONForFP,UseFPVMLx]>; + Requires<[HasFullFP16,UseFPVMLx]>; def VNMLSD : ADbI<0b11100, 0b01, 0, 0, (outs DPR:$Dd), (ins DPR:$Ddin, DPR:$Dn, DPR:$Dm), @@ -2173,16 +2152,6 @@ RegConstraint<"$Sdin = $Sd">, Requires<[HasFullFP16,UseFPVMLx]>; -def : Pat<(fsub_mlx (fmul_su DPR:$a, (f64 DPR:$b)), DPR:$dstin), - (VNMLSD DPR:$dstin, DPR:$a, DPR:$b)>, - Requires<[HasVFP2,HasDPVFP,UseFPVMLx]>; -def : Pat<(fsub_mlx (fmul_su SPR:$a, SPR:$b), SPR:$dstin), - (VNMLSS SPR:$dstin, SPR:$a, SPR:$b)>, - Requires<[HasVFP2,DontUseNEONForFP,UseFPVMLx]>; -def : Pat<(fsub_mlx (fmul_su (f16 HPR:$a), HPR:$b), HPR:$dstin), - (VNMLSH HPR:$dstin, (f16 HPR:$a), HPR:$b)>, - Requires<[HasFullFP16,DontUseNEONForFP,UseFPVMLx]>; - //===----------------------------------------------------------------------===// // Fused FP Multiply-Accumulate Operations. // @@ -2216,16 +2185,6 @@ Requires<[HasFullFP16,UseFusedMAC]>, Sched<[WriteFPMAC32, ReadFPMAC, ReadFPMUL, ReadFPMUL]>; -def : Pat<(fadd_mlx DPR:$dstin, (fmul_su DPR:$a, (f64 DPR:$b))), - (VFMAD DPR:$dstin, DPR:$a, DPR:$b)>, - Requires<[HasVFP4,HasDPVFP,UseFusedMAC]>; -def : Pat<(fadd_mlx SPR:$dstin, (fmul_su SPR:$a, SPR:$b)), - (VFMAS SPR:$dstin, SPR:$a, SPR:$b)>, - Requires<[HasVFP4,DontUseNEONForFP,UseFusedMAC]>; -def : Pat<(fadd_mlx HPR:$dstin, (fmul_su (f16 HPR:$a), HPR:$b)), - (VFMAH HPR:$dstin, (f16 HPR:$a), HPR:$b)>, - Requires<[HasFullFP16,DontUseNEONForFP,UseFusedMAC]>; - // Match @llvm.fma.* intrinsics // (fma x, y, z) -> (vfms z, x, y) def : Pat<(f64 (fma DPR:$Dn, DPR:$Dm, DPR:$Ddin)), @@ -2276,7 +2235,7 @@ Requires<[HasVFP4,DontUseNEONForFP,UseFusedMAC]>; def : Pat<(fsub_mlx HPR:$dstin, (fmul_su (f16 HPR:$a), HPR:$b)), (VFMSH HPR:$dstin, (f16 HPR:$a), HPR:$b)>, - Requires<[HasFullFP16,DontUseNEONForFP,UseFusedMAC]>; + Requires<[HasFullFP16,UseFusedMAC]>; // Match @llvm.fma.* intrinsics // (fma (fneg x), y, z) -> (vfms z, x, y)