diff --git a/include/llvm/Target/TargetTransformImpl.h b/include/llvm/Target/TargetTransformImpl.h index 3b6ed1abd3d..bbdb4f1dc24 100644 --- a/include/llvm/Target/TargetTransformImpl.h +++ b/include/llvm/Target/TargetTransformImpl.h @@ -72,7 +72,7 @@ public: 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 6336afcffe8..1dc2b07ddfd 100644 --- a/include/llvm/TargetTransformInfo.h +++ b/include/llvm/TargetTransformInfo.h @@ -170,10 +170,10 @@ public: } /// 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 d7c221ee1fd..f8c588934fe 100644 --- a/lib/Target/TargetTransformImpl.cpp +++ b/lib/Target/TargetTransformImpl.cpp @@ -209,8 +209,7 @@ unsigned VectorTargetTransformImpl::getArithmeticInstrCost(unsigned Opcode, } 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 4afc0d81979..eca63f80ae0 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -18303,10 +18303,11 @@ unsigned X86VectorTargetTransformInfo::getCastInstrCost(unsigned Opcode, 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 LT = getTypeLegalizationCost(Tp); unsigned Cost = 1; diff --git a/lib/Target/X86/X86ISelLowering.h b/lib/Target/X86/X86ISelLowering.h index 1b4b5eb65da..2e2fc2a234f 100644 --- a/lib/Target/X86/X86ISelLowering.h +++ b/lib/Target/X86/X86ISelLowering.h @@ -974,7 +974,8 @@ namespace llvm { 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; }; }