Add a subtype parameter to VTTI::getShuffleCost
In order to cost subvector insertion and extraction, we need to know
the type of the subvector being extracted.
No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171453 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/llvm/Target/TargetTransformImpl.h b/include/llvm/Target/TargetTransformImpl.h
index 3b6ed1a..bbdb4f1 100644
--- a/include/llvm/Target/TargetTransformImpl.h
+++ b/include/llvm/Target/TargetTransformImpl.h
@@ -72,7 +72,7 @@
virtual unsigned getArithmeticInstrCost(unsigned Opcode, Type *Ty) const;
virtual unsigned getShuffleCost(ShuffleKind Kind, Type *Tp,
- int Index) const;
+ int Index, Type *SubTp) const;
virtual unsigned getCastInstrCost(unsigned Opcode, Type *Dst,
Type *Src) const;
diff --git a/include/llvm/TargetTransformInfo.h b/include/llvm/TargetTransformInfo.h
index 6336afc..1dc2b07 100644
--- a/include/llvm/TargetTransformInfo.h
+++ b/include/llvm/TargetTransformInfo.h
@@ -170,10 +170,10 @@
}
/// Returns the cost of a shuffle instruction of kind Kind and of type Tp.
- /// The index parameter is used by some of the shuffle kinds to add
- /// additional information.
+ /// The index and subtype parameters are used by some of the shuffle kinds
+ /// to add additional information.
virtual unsigned getShuffleCost(ShuffleKind Kind, Type *Tp,
- int Index = 0) const {
+ int Index = 0, Type *SubTp = 0) const {
return 1;
}
diff --git a/lib/Target/TargetTransformImpl.cpp b/lib/Target/TargetTransformImpl.cpp
index d7c221e..f8c5889 100644
--- a/lib/Target/TargetTransformImpl.cpp
+++ b/lib/Target/TargetTransformImpl.cpp
@@ -209,8 +209,7 @@
}
unsigned VectorTargetTransformImpl::getShuffleCost(ShuffleKind Kind,
- Type *Tp,
- int Index) const {
+ Type *Tp, int Index, Type *SubTp) const {
return 1;
}
diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp
index 4afc0d8..eca63f8 100644
--- a/lib/Target/X86/X86ISelLowering.cpp
+++ b/lib/Target/X86/X86ISelLowering.cpp
@@ -18303,10 +18303,11 @@
unsigned X86VectorTargetTransformInfo::getShuffleCost(ShuffleKind Kind, Type *Tp,
- int Index) const {
+ int Index,
+ Type *SubTp) const {
// We only estimate the cost of reverse shuffles.
if (Kind != Reverse)
- return VectorTargetTransformImpl::getShuffleCost(Kind, Tp, Index);
+ return VectorTargetTransformImpl::getShuffleCost(Kind, Tp, Index, SubTp);
std::pair<unsigned, MVT> LT = getTypeLegalizationCost(Tp);
unsigned Cost = 1;
diff --git a/lib/Target/X86/X86ISelLowering.h b/lib/Target/X86/X86ISelLowering.h
index 1b4b5eb..2e2fc2a 100644
--- a/lib/Target/X86/X86ISelLowering.h
+++ b/lib/Target/X86/X86ISelLowering.h
@@ -974,7 +974,8 @@
virtual unsigned getCastInstrCost(unsigned Opcode, Type *Dst,
Type *Src) const;
- unsigned getShuffleCost(ShuffleKind Kind, Type *Tp, int Index) const;
+ unsigned getShuffleCost(ShuffleKind Kind,
+ Type *Tp, int Index, Type *SubTp) const;
};
}