Add VFMADDSUB and VFMSUBADD FMA instructions to folding tables. Also add 213 forms...
authorCraig Topper <craig.topper@gmail.com>
Mon, 4 Jun 2012 07:08:21 +0000 (07:08 +0000)
committerCraig Topper <craig.topper@gmail.com>
Mon, 4 Jun 2012 07:08:21 +0000 (07:08 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157914 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86InstrInfo.cpp

index ad7521cf5ff429e90eab911c663b9db98cead233..e8b886cb544cab421b0d73edf4a207b74bab7dea 100644 (file)
@@ -1131,6 +1131,8 @@ X86InstrInfo::X86InstrInfo(X86TargetMachine &tm)
     { X86::VFMADDSDr231r,     X86::VFMADDSDr231m,      0 },
     { X86::VFMADDSSr132r,     X86::VFMADDSSr132m,      0 },
     { X86::VFMADDSDr132r,     X86::VFMADDSDr132m,      0 },
+    { X86::VFMADDSSr213r,     X86::VFMADDSSr213m,      0 },
+    { X86::VFMADDSDr213r,     X86::VFMADDSDr213m,      0 },
 
     { X86::VFMADDPSr231r,     X86::VFMADDPSr231m,      TB_ALIGN_16 },
     { X86::VFMADDPDr231r,     X86::VFMADDPDr231m,      TB_ALIGN_16 },
@@ -1149,6 +1151,8 @@ X86InstrInfo::X86InstrInfo(X86TargetMachine &tm)
     { X86::VFNMADDSDr231r,    X86::VFNMADDSDr231m,     0 },
     { X86::VFNMADDSSr132r,    X86::VFNMADDSSr132m,     0 },
     { X86::VFNMADDSDr132r,    X86::VFNMADDSDr132m,     0 },
+    { X86::VFNMADDSSr213r,    X86::VFNMADDSSr213m,     0 },
+    { X86::VFNMADDSDr213r,    X86::VFNMADDSDr213m,     0 },
 
     { X86::VFNMADDPSr231r,    X86::VFNMADDPSr231m,     TB_ALIGN_16 },
     { X86::VFNMADDPDr231r,    X86::VFNMADDPDr231m,     TB_ALIGN_16 },
@@ -1167,6 +1171,8 @@ X86InstrInfo::X86InstrInfo(X86TargetMachine &tm)
     { X86::VFMSUBSDr231r,     X86::VFMSUBSDr231m,      0 },
     { X86::VFMSUBSSr132r,     X86::VFMSUBSSr132m,      0 },
     { X86::VFMSUBSDr132r,     X86::VFMSUBSDr132m,      0 },
+    { X86::VFMSUBSSr213r,     X86::VFMSUBSSr213m,      0 },
+    { X86::VFMSUBSDr213r,     X86::VFMSUBSDr213m,      0 },
 
     { X86::VFMSUBPSr231r,     X86::VFMSUBPSr231m,      TB_ALIGN_16 },
     { X86::VFMSUBPDr231r,     X86::VFMSUBPDr231m,      TB_ALIGN_16 },
@@ -1185,6 +1191,8 @@ X86InstrInfo::X86InstrInfo(X86TargetMachine &tm)
     { X86::VFNMSUBSDr231r,    X86::VFNMSUBSDr231m,     0 },
     { X86::VFNMSUBSSr132r,    X86::VFNMSUBSSr132m,     0 },
     { X86::VFNMSUBSDr132r,    X86::VFNMSUBSDr132m,     0 },
+    { X86::VFNMSUBSSr213r,    X86::VFNMSUBSSr213m,     0 },
+    { X86::VFNMSUBSDr213r,    X86::VFNMSUBSDr213m,     0 },
 
     { X86::VFNMSUBPSr231r,    X86::VFNMSUBPSr231m,     TB_ALIGN_16 },
     { X86::VFNMSUBPDr231r,    X86::VFNMSUBPDr231m,     TB_ALIGN_16 },
@@ -1198,6 +1206,32 @@ X86InstrInfo::X86InstrInfo(X86TargetMachine &tm)
     { X86::VFNMSUBPDr132rY,   X86::VFNMSUBPDr132mY,    TB_ALIGN_32 },
     { X86::VFNMSUBPSr213rY,   X86::VFNMSUBPSr213mY,    TB_ALIGN_32 },
     { X86::VFNMSUBPDr213rY,   X86::VFNMSUBPDr213mY,    TB_ALIGN_32 },
+
+    { X86::VFMADDSUBPSr231r,  X86::VFMADDSUBPSr231m,   TB_ALIGN_16 },
+    { X86::VFMADDSUBPDr231r,  X86::VFMADDSUBPDr231m,   TB_ALIGN_16 },
+    { X86::VFMADDSUBPSr132r,  X86::VFMADDSUBPSr132m,   TB_ALIGN_16 },
+    { X86::VFMADDSUBPDr132r,  X86::VFMADDSUBPDr132m,   TB_ALIGN_16 },
+    { X86::VFMADDSUBPSr213r,  X86::VFMADDSUBPSr213m,   TB_ALIGN_16 },
+    { X86::VFMADDSUBPDr213r,  X86::VFMADDSUBPDr213m,   TB_ALIGN_16 },
+    { X86::VFMADDSUBPSr231rY, X86::VFMADDSUBPSr231mY,  TB_ALIGN_32 },
+    { X86::VFMADDSUBPDr231rY, X86::VFMADDSUBPDr231mY,  TB_ALIGN_32 },
+    { X86::VFMADDSUBPSr132rY, X86::VFMADDSUBPSr132mY,  TB_ALIGN_32 },
+    { X86::VFMADDSUBPDr132rY, X86::VFMADDSUBPDr132mY,  TB_ALIGN_32 },
+    { X86::VFMADDSUBPSr213rY, X86::VFMADDSUBPSr213mY,  TB_ALIGN_32 },
+    { X86::VFMADDSUBPDr213rY, X86::VFMADDSUBPDr213mY,  TB_ALIGN_32 },
+
+    { X86::VFMSUBADDPSr231r,  X86::VFMSUBADDPSr231m,   TB_ALIGN_16 },
+    { X86::VFMSUBADDPDr231r,  X86::VFMSUBADDPDr231m,   TB_ALIGN_16 },
+    { X86::VFMSUBADDPSr132r,  X86::VFMSUBADDPSr132m,   TB_ALIGN_16 },
+    { X86::VFMSUBADDPDr132r,  X86::VFMSUBADDPDr132m,   TB_ALIGN_16 },
+    { X86::VFMSUBADDPSr213r,  X86::VFMSUBADDPSr213m,   TB_ALIGN_16 },
+    { X86::VFMSUBADDPDr213r,  X86::VFMSUBADDPDr213m,   TB_ALIGN_16 },
+    { X86::VFMSUBADDPSr231rY, X86::VFMSUBADDPSr231mY,  TB_ALIGN_32 },
+    { X86::VFMSUBADDPDr231rY, X86::VFMSUBADDPDr231mY,  TB_ALIGN_32 },
+    { X86::VFMSUBADDPSr132rY, X86::VFMSUBADDPSr132mY,  TB_ALIGN_32 },
+    { X86::VFMSUBADDPDr132rY, X86::VFMSUBADDPDr132mY,  TB_ALIGN_32 },
+    { X86::VFMSUBADDPSr213rY, X86::VFMSUBADDPSr213mY,  TB_ALIGN_32 },
+    { X86::VFMSUBADDPDr213rY, X86::VFMSUBADDPDr213mY,  TB_ALIGN_32 },
   };
 
   for (unsigned i = 0, e = array_lengthof(OpTbl3); i != e; ++i) {