Match common pattern for FNMAC. Add NEON SP support.
authorDavid Goodwin <david_goodwin@apple.com>
Tue, 4 Aug 2009 18:44:29 +0000 (18:44 +0000)
committerDavid Goodwin <david_goodwin@apple.com>
Tue, 4 Aug 2009 18:44:29 +0000 (18:44 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78085 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMInstrNEON.td
lib/Target/ARM/ARMInstrVFP.td
test/CodeGen/ARM/fnmacs.ll

index ec4702f5d69c98c5e4c2a2a79ac2b5c015ac0a5c..147490c78434633ed6a97c52f8698a2109c1ea3b 100644 (file)
@@ -953,6 +953,7 @@ defm VQDMLSL  : N3VLInt3_HS<0, 1, 0b1011, 0, "vqdmlsl.s", int_arm_neon_vqdmlsl>;
 
 // Vector Multiply-Accumulate/Subtract used for single-precision FP
 def : N3VDMulOps<fmul, fadd, VMLAfd>;
+def : N3VDMulOps<fmul, fsub, VMLSfd>;
 
 // Vector Subtract Operations.
 
index 2ecf5f3a420441e9c194578867ee05cb0392c1b5..923606d9772ffbff5e0820265ada7793d328cb3a 100644 (file)
@@ -346,6 +346,11 @@ def FNMACS : ASbIn<0b11100000, (outs SPR:$dst), (ins SPR:$dstin, SPR:$a, SPR:$b)
   let Inst{6} = 1;
 }
 
+def : Pat<(fsub DPR:$dstin, (fmul DPR:$a, DPR:$b)),
+          (FNMACD DPR:$dstin, DPR:$a, DPR:$b)>, Requires<[DontUseNEONForFP]>;
+def : Pat<(fsub SPR:$dstin, (fmul SPR:$a, SPR:$b)),
+          (FNMACS SPR:$dstin, SPR:$a, SPR:$b)>, Requires<[DontUseNEONForFP]>;
+
 def FNMSCD : ADbI<0b11100001, (outs DPR:$dst), (ins DPR:$dstin, DPR:$a, DPR:$b),
                  "fnmscd", " $dst, $a, $b",
              [(set DPR:$dst, (fsub (fneg (fmul DPR:$a, DPR:$b)), DPR:$dstin))]>,
index 537c4110ba49f7943bf8e61035775b4912810a82..4b0b2ed20a56dcb99f1d936cc284a40760143aa1 100644 (file)
@@ -1,4 +1,3 @@
-; XFAIL: *
 ; RUN: llvm-as < %s | llc -march=arm -mattr=+vfp2 | grep -E {fnmacs\\W*s\[0-9\]+,\\W*s\[0-9\]+,\\W*s\[0-9\]+} | count 1
 ; RUN: llvm-as < %s | llc -march=arm -mattr=+neon,+neonfp | grep -E {vmls.f32\\W*d\[0-9\]+,\\W*d\[0-9\]+,\\W*d\[0-9\]+} | count 1
 ; RUN: llvm-as < %s | llc -march=arm -mattr=+neon,-neonfp | grep -E {fnmacs\\W*s\[0-9\]+,\\W*s\[0-9\]+,\\W*s\[0-9\]+} | count 1