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
This commit is contained in:
Hal Finkel 2013-01-03 02:34:09 +00:00
parent e5ab1bee8c
commit 82860f63e1
5 changed files with 10 additions and 9 deletions

View File

@ -72,7 +72,7 @@ public:
virtual unsigned getArithmeticInstrCost(unsigned Opcode, Type *Ty) const; virtual unsigned getArithmeticInstrCost(unsigned Opcode, Type *Ty) const;
virtual unsigned getShuffleCost(ShuffleKind Kind, Type *Tp, virtual unsigned getShuffleCost(ShuffleKind Kind, Type *Tp,
int Index) const; int Index, Type *SubTp) const;
virtual unsigned getCastInstrCost(unsigned Opcode, Type *Dst, virtual unsigned getCastInstrCost(unsigned Opcode, Type *Dst,
Type *Src) const; Type *Src) const;

View File

@ -170,10 +170,10 @@ public:
} }
/// Returns the cost of a shuffle instruction of kind Kind and of type Tp. /// 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 /// The index and subtype parameters are used by some of the shuffle kinds
/// additional information. /// to add additional information.
virtual unsigned getShuffleCost(ShuffleKind Kind, Type *Tp, virtual unsigned getShuffleCost(ShuffleKind Kind, Type *Tp,
int Index = 0) const { int Index = 0, Type *SubTp = 0) const {
return 1; return 1;
} }

View File

@ -209,8 +209,7 @@ unsigned VectorTargetTransformImpl::getArithmeticInstrCost(unsigned Opcode,
} }
unsigned VectorTargetTransformImpl::getShuffleCost(ShuffleKind Kind, unsigned VectorTargetTransformImpl::getShuffleCost(ShuffleKind Kind,
Type *Tp, Type *Tp, int Index, Type *SubTp) const {
int Index) const {
return 1; return 1;
} }

View File

@ -18303,10 +18303,11 @@ unsigned X86VectorTargetTransformInfo::getCastInstrCost(unsigned Opcode,
unsigned X86VectorTargetTransformInfo::getShuffleCost(ShuffleKind Kind, Type *Tp, unsigned X86VectorTargetTransformInfo::getShuffleCost(ShuffleKind Kind, Type *Tp,
int Index) const { int Index,
Type *SubTp) const {
// We only estimate the cost of reverse shuffles. // We only estimate the cost of reverse shuffles.
if (Kind != Reverse) if (Kind != Reverse)
return VectorTargetTransformImpl::getShuffleCost(Kind, Tp, Index); return VectorTargetTransformImpl::getShuffleCost(Kind, Tp, Index, SubTp);
std::pair<unsigned, MVT> LT = getTypeLegalizationCost(Tp); std::pair<unsigned, MVT> LT = getTypeLegalizationCost(Tp);
unsigned Cost = 1; unsigned Cost = 1;

View File

@ -974,7 +974,8 @@ namespace llvm {
virtual unsigned getCastInstrCost(unsigned Opcode, Type *Dst, virtual unsigned getCastInstrCost(unsigned Opcode, Type *Dst,
Type *Src) const; Type *Src) const;
unsigned getShuffleCost(ShuffleKind Kind, Type *Tp, int Index) const; unsigned getShuffleCost(ShuffleKind Kind,
Type *Tp, int Index, Type *SubTp) const;
}; };
} }