[CodeGen] Make x86 nontemporal store patfrags generic. NFC.
authorAhmed Bougacha <ahmed.bougacha@gmail.com>
Thu, 10 Sep 2015 00:53:15 +0000 (00:53 +0000)
committerAhmed Bougacha <ahmed.bougacha@gmail.com>
Thu, 10 Sep 2015 00:53:15 +0000 (00:53 +0000)
To be used by other targets.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@247225 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Target/TargetSelectionDAG.td
lib/Target/X86/X86InstrFragmentsSIMD.td

index db5041b19d0427789ba6d1f91aee0e35ee493489..7432cde7a2eab09ef71dc4a2fa7cd9e8aa1bd0cb 100644 (file)
@@ -910,6 +910,24 @@ def post_truncstf32 : PatFrag<(ops node:$val, node:$base, node:$offset),
   return cast<StoreSDNode>(N)->getMemoryVT() == MVT::f32;
 }]>;
 
+// nontemporal store fragments.
+def nontemporalstore : PatFrag<(ops node:$val, node:$ptr),
+                               (store node:$val, node:$ptr), [{
+  return cast<StoreSDNode>(N)->isNonTemporal();
+}]>;
+
+def alignednontemporalstore : PatFrag<(ops node:$val, node:$ptr),
+                                      (nontemporalstore node:$val, node:$ptr), [{
+  StoreSDNode *St = cast<StoreSDNode>(N);
+  return St->getAlignment() >= St->getMemoryVT().getStoreSize();
+}]>;
+
+def unalignednontemporalstore : PatFrag<(ops node:$val, node:$ptr),
+                                        (nontemporalstore node:$val, node:$ptr), [{
+  StoreSDNode *St = cast<StoreSDNode>(N);
+  return St->getAlignment() < St->getMemoryVT().getStoreSize();
+}]>;
+
 // setcc convenience fragments.
 def setoeq : PatFrag<(ops node:$lhs, node:$rhs),
                      (setcc node:$lhs, node:$rhs, SETOEQ)>;
index 73653202382ae14eea05b6cba58df12b975675fb..3abdb2ab5facc4a04333929b47de8a72cbae1a26 100644 (file)
@@ -619,25 +619,6 @@ def memop64 : PatFrag<(ops node:$ptr), (load node:$ptr), [{
 
 def memopmmx  : PatFrag<(ops node:$ptr), (x86mmx  (memop64 node:$ptr))>;
 
-// MOVNT Support
-// Like 'store', but requires the non-temporal bit to be set
-def nontemporalstore : PatFrag<(ops node:$val, node:$ptr),
-                               (store node:$val, node:$ptr), [{
-  return cast<StoreSDNode>(N)->isNonTemporal();
-}]>;
-
-def alignednontemporalstore : PatFrag<(ops node:$val, node:$ptr),
-                                      (nontemporalstore node:$val, node:$ptr), [{
-  StoreSDNode *St = cast<StoreSDNode>(N);
-  return St->getAlignment() >= St->getMemoryVT().getStoreSize();
-}]>;
-
-def unalignednontemporalstore : PatFrag<(ops node:$val, node:$ptr),
-                                        (nontemporalstore node:$val, node:$ptr), [{
-  StoreSDNode *St = cast<StoreSDNode>(N);
-  return St->getAlignment() < St->getMemoryVT().getStoreSize();
-}]>;
-
 def mgatherv4i32 : PatFrag<(ops node:$src1, node:$src2, node:$src3),
   (masked_gather node:$src1, node:$src2, node:$src3) , [{
   if (MaskedGatherSDNode *Mgt = dyn_cast<MaskedGatherSDNode>(N))