CostModel: initial checkin for code that estimates the cost of special shuffles.
authorNadav Rotem <nrotem@apple.com>
Fri, 28 Dec 2012 08:19:03 +0000 (08:19 +0000)
committerNadav Rotem <nrotem@apple.com>
Fri, 28 Dec 2012 08:19:03 +0000 (08:19 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171180 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelLowering.cpp
lib/Target/X86/X86ISelLowering.h

index e5122abd4bad021f553a8783e4e932f0187e489e..5d495a68eda0fb5ccd6b19c24774aaf50fa201ed 100644 (file)
@@ -18237,3 +18237,19 @@ unsigned X86VectorTargetTransformInfo::getCastInstrCost(unsigned Opcode,
   return VectorTargetTransformImpl::getCastInstrCost(Opcode, Dst, Src);
 }
 
+
+unsigned X86VectorTargetTransformInfo::getShuffleCost(ShuffleKind Kind, Type *Tp,
+                                                      int Index) const {
+  // We only estimate the cost of reverse shuffles.
+  if (Kind != Reverse)
+    return VectorTargetTransformImpl::getShuffleCost(Kind, Tp, Index);
+
+  std::pair<unsigned, MVT> LT = getTypeLegalizationCost(Tp);
+  unsigned Cost = 1;
+  if (LT.second.getSizeInBits() > 128)
+    Cost = 3; // Extract + insert + copy.
+
+  // Multiple by the number of parts.
+  return Cost * LT.first;
+}
+
index 1a696a8f53641ffa2b1f47869441451765755404..1b4b5eb65da2a1c83add48412e2114dc6f06a5f7 100644 (file)
@@ -973,6 +973,8 @@ namespace llvm {
 
     virtual unsigned getCastInstrCost(unsigned Opcode, Type *Dst,
                                       Type *Src) const;
+
+    unsigned getShuffleCost(ShuffleKind Kind, Type *Tp, int Index) const;
   };
 }