Recommit "[SLP][TTI] Refactoring of `getShuffleCost` `Args` to work like `getArithmeticInstrCost`"
This reverts commit 6a9bbd9f20
.
Code review: https://reviews.llvm.org/D124202
This commit is contained in:
parent
72adc461cc
commit
fa8a9fea47
|
@ -1055,7 +1055,7 @@ public:
|
|||
InstructionCost getShuffleCost(ShuffleKind Kind, VectorType *Tp,
|
||||
ArrayRef<int> Mask = None, int Index = 0,
|
||||
VectorType *SubTp = nullptr,
|
||||
ArrayRef<Value *> Args = None) const;
|
||||
ArrayRef<const Value *> Args = None) const;
|
||||
|
||||
/// Represents a hint about the context in which a cast is used.
|
||||
///
|
||||
|
@ -1672,7 +1672,7 @@ public:
|
|||
virtual InstructionCost getShuffleCost(ShuffleKind Kind, VectorType *Tp,
|
||||
ArrayRef<int> Mask, int Index,
|
||||
VectorType *SubTp,
|
||||
ArrayRef<Value *> Args) = 0;
|
||||
ArrayRef<const Value *> Args) = 0;
|
||||
virtual InstructionCost getCastInstrCost(unsigned Opcode, Type *Dst,
|
||||
Type *Src, CastContextHint CCH,
|
||||
TTI::TargetCostKind CostKind,
|
||||
|
@ -2199,7 +2199,7 @@ public:
|
|||
InstructionCost getShuffleCost(ShuffleKind Kind, VectorType *Tp,
|
||||
ArrayRef<int> Mask, int Index,
|
||||
VectorType *SubTp,
|
||||
ArrayRef<Value *> Args) override {
|
||||
ArrayRef<const Value *> Args) override {
|
||||
return Impl.getShuffleCost(Kind, Tp, Mask, Index, SubTp, Args);
|
||||
}
|
||||
InstructionCost getCastInstrCost(unsigned Opcode, Type *Dst, Type *Src,
|
||||
|
|
|
@ -493,7 +493,7 @@ public:
|
|||
InstructionCost getShuffleCost(TTI::ShuffleKind Kind, VectorType *Ty,
|
||||
ArrayRef<int> Mask, int Index,
|
||||
VectorType *SubTp,
|
||||
ArrayRef<Value *> Args = None) const {
|
||||
ArrayRef<const Value *> Args = None) const {
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -1147,13 +1147,14 @@ public:
|
|||
if (Shuffle->isExtractSubvectorMask(SubIndex))
|
||||
return TargetTTI->getShuffleCost(TTI::SK_ExtractSubvector, VecSrcTy,
|
||||
Shuffle->getShuffleMask(), SubIndex,
|
||||
VecTy);
|
||||
VecTy, Operands);
|
||||
|
||||
if (Shuffle->isInsertSubvectorMask(NumSubElts, SubIndex))
|
||||
return TargetTTI->getShuffleCost(
|
||||
TTI::SK_InsertSubvector, VecTy, Shuffle->getShuffleMask(),
|
||||
SubIndex,
|
||||
FixedVectorType::get(VecTy->getScalarType(), NumSubElts));
|
||||
FixedVectorType::get(VecTy->getScalarType(), NumSubElts),
|
||||
Operands);
|
||||
|
||||
int ReplicationFactor, VF;
|
||||
if (Shuffle->isReplicationMask(ReplicationFactor, VF)) {
|
||||
|
@ -1176,31 +1177,37 @@ public:
|
|||
|
||||
if (Shuffle->isReverse())
|
||||
return TargetTTI->getShuffleCost(TTI::SK_Reverse, VecTy,
|
||||
Shuffle->getShuffleMask(), 0, nullptr);
|
||||
Shuffle->getShuffleMask(), 0, nullptr,
|
||||
Operands);
|
||||
|
||||
if (Shuffle->isSelect())
|
||||
return TargetTTI->getShuffleCost(TTI::SK_Select, VecTy,
|
||||
Shuffle->getShuffleMask(), 0, nullptr);
|
||||
Shuffle->getShuffleMask(), 0, nullptr,
|
||||
Operands);
|
||||
|
||||
if (Shuffle->isTranspose())
|
||||
return TargetTTI->getShuffleCost(TTI::SK_Transpose, VecTy,
|
||||
Shuffle->getShuffleMask(), 0, nullptr);
|
||||
Shuffle->getShuffleMask(), 0, nullptr,
|
||||
Operands);
|
||||
|
||||
if (Shuffle->isZeroEltSplat())
|
||||
return TargetTTI->getShuffleCost(TTI::SK_Broadcast, VecTy,
|
||||
Shuffle->getShuffleMask(), 0, nullptr);
|
||||
Shuffle->getShuffleMask(), 0, nullptr,
|
||||
Operands);
|
||||
|
||||
if (Shuffle->isSingleSource())
|
||||
return TargetTTI->getShuffleCost(TTI::SK_PermuteSingleSrc, VecTy,
|
||||
Shuffle->getShuffleMask(), 0, nullptr);
|
||||
Shuffle->getShuffleMask(), 0, nullptr,
|
||||
Operands);
|
||||
|
||||
if (Shuffle->isInsertSubvectorMask(NumSubElts, SubIndex))
|
||||
return TargetTTI->getShuffleCost(
|
||||
TTI::SK_InsertSubvector, VecTy, Shuffle->getShuffleMask(), SubIndex,
|
||||
FixedVectorType::get(VecTy->getScalarType(), NumSubElts));
|
||||
FixedVectorType::get(VecTy->getScalarType(), NumSubElts), Operands);
|
||||
|
||||
return TargetTTI->getShuffleCost(TTI::SK_PermuteTwoSrc, VecTy,
|
||||
Shuffle->getShuffleMask(), 0, nullptr);
|
||||
Shuffle->getShuffleMask(), 0, nullptr,
|
||||
Operands);
|
||||
}
|
||||
case Instruction::ExtractElement: {
|
||||
auto *EEI = dyn_cast<ExtractElementInst>(U);
|
||||
|
|
|
@ -872,7 +872,7 @@ public:
|
|||
InstructionCost getShuffleCost(TTI::ShuffleKind Kind, VectorType *Tp,
|
||||
ArrayRef<int> Mask, int Index,
|
||||
VectorType *SubTp,
|
||||
ArrayRef<Value *> Args = None) {
|
||||
ArrayRef<const Value *> Args = None) {
|
||||
|
||||
switch (improveShuffleKindFromMask(Kind, Mask)) {
|
||||
case TTI::SK_Broadcast:
|
||||
|
|
|
@ -747,7 +747,7 @@ InstructionCost TargetTransformInfo::getArithmeticInstrCost(
|
|||
|
||||
InstructionCost TargetTransformInfo::getShuffleCost(
|
||||
ShuffleKind Kind, VectorType *Ty, ArrayRef<int> Mask, int Index,
|
||||
VectorType *SubTp, ArrayRef<Value *> Args) const {
|
||||
VectorType *SubTp, ArrayRef<const Value *> Args) const {
|
||||
InstructionCost Cost =
|
||||
TTIImpl->getShuffleCost(Kind, Ty, Mask, Index, SubTp, Args);
|
||||
assert(Cost >= 0 && "TTI should not produce negative costs!");
|
||||
|
|
|
@ -2594,7 +2594,7 @@ InstructionCost AArch64TTIImpl::getShuffleCost(TTI::ShuffleKind Kind,
|
|||
VectorType *Tp,
|
||||
ArrayRef<int> Mask, int Index,
|
||||
VectorType *SubTp,
|
||||
ArrayRef<Value *> Args) {
|
||||
ArrayRef<const Value *> Args) {
|
||||
Kind = improveShuffleKindFromMask(Kind, Mask);
|
||||
std::pair<InstructionCost, MVT> LT = TLI->getTypeLegalizationCost(DL, Tp);
|
||||
if (Kind == TTI::SK_Broadcast || Kind == TTI::SK_Transpose ||
|
||||
|
@ -2603,9 +2603,7 @@ InstructionCost AArch64TTIImpl::getShuffleCost(TTI::ShuffleKind Kind,
|
|||
|
||||
// Check for broadcast loads.
|
||||
if (Kind == TTI::SK_Broadcast) {
|
||||
bool IsLoad = !Args.empty() && llvm::all_of(Args, [](const Value *V) {
|
||||
return isa<LoadInst>(V);
|
||||
});
|
||||
bool IsLoad = !Args.empty() && isa<LoadInst>(Args[0]);
|
||||
if (IsLoad && LT.second.isVector() &&
|
||||
isLegalBroadcastLoad(Tp->getElementType(),
|
||||
LT.second.getVectorElementCount()))
|
||||
|
|
|
@ -348,7 +348,7 @@ public:
|
|||
InstructionCost getShuffleCost(TTI::ShuffleKind Kind, VectorType *Tp,
|
||||
ArrayRef<int> Mask, int Index,
|
||||
VectorType *SubTp,
|
||||
ArrayRef<Value *> Args = None);
|
||||
ArrayRef<const Value *> Args = None);
|
||||
/// @}
|
||||
};
|
||||
|
||||
|
|
|
@ -1040,7 +1040,7 @@ Value *GCNTTIImpl::rewriteIntrinsicWithAddressSpace(IntrinsicInst *II,
|
|||
InstructionCost GCNTTIImpl::getShuffleCost(TTI::ShuffleKind Kind,
|
||||
VectorType *VT, ArrayRef<int> Mask,
|
||||
int Index, VectorType *SubTp,
|
||||
ArrayRef<Value *> Args) {
|
||||
ArrayRef<const Value *> Args) {
|
||||
Kind = improveShuffleKindFromMask(Kind, Mask);
|
||||
if (ST->hasVOP3PInsts()) {
|
||||
if (cast<FixedVectorType>(VT)->getNumElements() == 2 &&
|
||||
|
|
|
@ -198,7 +198,7 @@ public:
|
|||
InstructionCost getShuffleCost(TTI::ShuffleKind Kind, VectorType *Tp,
|
||||
ArrayRef<int> Mask, int Index,
|
||||
VectorType *SubTp,
|
||||
ArrayRef<Value *> Args = None);
|
||||
ArrayRef<const Value *> Args = None);
|
||||
|
||||
bool areInlineCompatible(const Function *Caller,
|
||||
const Function *Callee) const;
|
||||
|
|
|
@ -1203,7 +1203,7 @@ InstructionCost ARMTTIImpl::getMemcpyCost(const Instruction *I) {
|
|||
InstructionCost ARMTTIImpl::getShuffleCost(TTI::ShuffleKind Kind,
|
||||
VectorType *Tp, ArrayRef<int> Mask,
|
||||
int Index, VectorType *SubTp,
|
||||
ArrayRef<Value *> Args) {
|
||||
ArrayRef<const Value *> Args) {
|
||||
Kind = improveShuffleKindFromMask(Kind, Mask);
|
||||
if (ST->hasNEON()) {
|
||||
if (Kind == TTI::SK_Broadcast) {
|
||||
|
|
|
@ -214,7 +214,7 @@ public:
|
|||
InstructionCost getShuffleCost(TTI::ShuffleKind Kind, VectorType *Tp,
|
||||
ArrayRef<int> Mask, int Index,
|
||||
VectorType *SubTp,
|
||||
ArrayRef<Value *> Args = None);
|
||||
ArrayRef<const Value *> Args = None);
|
||||
|
||||
bool preferInLoopReduction(unsigned Opcode, Type *Ty,
|
||||
TTI::ReductionFlags Flags) const;
|
||||
|
|
|
@ -224,7 +224,7 @@ HexagonTTIImpl::getMaskedMemoryOpCost(unsigned Opcode, Type *Src,
|
|||
InstructionCost HexagonTTIImpl::getShuffleCost(TTI::ShuffleKind Kind, Type *Tp,
|
||||
ArrayRef<int> Mask, int Index,
|
||||
Type *SubTp,
|
||||
ArrayRef<Value *> Args) {
|
||||
ArrayRef<const Value *> Args) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -126,7 +126,7 @@ public:
|
|||
TTI::TargetCostKind CostKind);
|
||||
InstructionCost getShuffleCost(TTI::ShuffleKind Kind, Type *Tp,
|
||||
ArrayRef<int> Mask, int Index, Type *SubTp,
|
||||
ArrayRef<Value *> Args = None);
|
||||
ArrayRef<const Value *> Args = None);
|
||||
InstructionCost getGatherScatterOpCost(unsigned Opcode, Type *DataTy,
|
||||
const Value *Ptr, bool VariableMask,
|
||||
Align Alignment,
|
||||
|
|
|
@ -1016,7 +1016,7 @@ InstructionCost PPCTTIImpl::getArithmeticInstrCost(
|
|||
InstructionCost PPCTTIImpl::getShuffleCost(TTI::ShuffleKind Kind, Type *Tp,
|
||||
ArrayRef<int> Mask, int Index,
|
||||
Type *SubTp,
|
||||
ArrayRef<Value *> Args) {
|
||||
ArrayRef<const Value *> Args) {
|
||||
|
||||
InstructionCost CostFactor =
|
||||
vectorCostAdjustmentFactor(Instruction::ShuffleVector, Tp, nullptr);
|
||||
|
|
|
@ -112,7 +112,7 @@ public:
|
|||
const Instruction *CxtI = nullptr);
|
||||
InstructionCost getShuffleCost(TTI::ShuffleKind Kind, Type *Tp,
|
||||
ArrayRef<int> Mask, int Index, Type *SubTp,
|
||||
ArrayRef<Value *> Args = None);
|
||||
ArrayRef<const Value *> Args = None);
|
||||
InstructionCost getCastInstrCost(unsigned Opcode, Type *Dst, Type *Src,
|
||||
TTI::CastContextHint CCH,
|
||||
TTI::TargetCostKind CostKind,
|
||||
|
|
|
@ -176,7 +176,7 @@ InstructionCost RISCVTTIImpl::getSpliceCost(VectorType *Tp, int Index) {
|
|||
InstructionCost RISCVTTIImpl::getShuffleCost(TTI::ShuffleKind Kind,
|
||||
VectorType *Tp, ArrayRef<int> Mask,
|
||||
int Index, VectorType *SubTp,
|
||||
ArrayRef<Value *> Args) {
|
||||
ArrayRef<const Value *> Args) {
|
||||
if (Kind == TTI::SK_Splice && isa<ScalableVectorType>(Tp))
|
||||
return getSpliceCost(Tp, Index);
|
||||
return BaseT::getShuffleCost(Kind, Tp, Mask, Index, SubTp);
|
||||
|
|
|
@ -81,7 +81,7 @@ public:
|
|||
InstructionCost getShuffleCost(TTI::ShuffleKind Kind, VectorType *Tp,
|
||||
ArrayRef<int> Mask, int Index,
|
||||
VectorType *SubTp,
|
||||
ArrayRef<Value *> Args = None);
|
||||
ArrayRef<const Value *> Args = None);
|
||||
|
||||
InstructionCost getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
|
||||
TTI::TargetCostKind CostKind);
|
||||
|
|
|
@ -596,7 +596,7 @@ InstructionCost SystemZTTIImpl::getShuffleCost(TTI::ShuffleKind Kind,
|
|||
VectorType *Tp,
|
||||
ArrayRef<int> Mask, int Index,
|
||||
VectorType *SubTp,
|
||||
ArrayRef<Value *> Args) {
|
||||
ArrayRef<const Value *> Args) {
|
||||
Kind = improveShuffleKindFromMask(Kind, Mask);
|
||||
if (ST->hasVector()) {
|
||||
unsigned NumVectors = getNumVectorRegs(Tp);
|
||||
|
|
|
@ -94,7 +94,7 @@ public:
|
|||
InstructionCost getShuffleCost(TTI::ShuffleKind Kind, VectorType *Tp,
|
||||
ArrayRef<int> Mask, int Index,
|
||||
VectorType *SubTp,
|
||||
ArrayRef<Value *> Args = None);
|
||||
ArrayRef<const Value *> Args = None);
|
||||
unsigned getVectorTruncCost(Type *SrcTy, Type *DstTy);
|
||||
unsigned getVectorBitmaskConversionCost(Type *SrcTy, Type *DstTy);
|
||||
unsigned getBoolVecToIntConversionCost(unsigned Opcode, Type *Dst,
|
||||
|
|
|
@ -1086,7 +1086,7 @@ InstructionCost X86TTIImpl::getShuffleCost(TTI::ShuffleKind Kind,
|
|||
VectorType *BaseTp,
|
||||
ArrayRef<int> Mask, int Index,
|
||||
VectorType *SubTp,
|
||||
ArrayRef<Value *> Args) {
|
||||
ArrayRef<const Value *> Args) {
|
||||
// 64-bit packed float vectors (v2f32) are widened to type v4f32.
|
||||
// 64-bit packed integer vectors (v2i32) are widened to type v4i32.
|
||||
std::pair<InstructionCost, MVT> LT = TLI->getTypeLegalizationCost(DL, BaseTp);
|
||||
|
@ -1551,9 +1551,8 @@ InstructionCost X86TTIImpl::getShuffleCost(TTI::ShuffleKind Kind,
|
|||
};
|
||||
|
||||
if (ST->hasSSE2()) {
|
||||
bool IsLoad = !Args.empty() && llvm::all_of(Args, [](const Value *V) {
|
||||
return isa<LoadInst>(V);
|
||||
});
|
||||
bool IsLoad =
|
||||
llvm::any_of(Args, [](const auto &V) { return isa<LoadInst>(V); });
|
||||
if (ST->hasSSE3() && IsLoad)
|
||||
if (const auto *Entry =
|
||||
CostTableLookup(SSE3BroadcastLoadTbl, Kind, LT.second)) {
|
||||
|
|
|
@ -137,7 +137,7 @@ public:
|
|||
InstructionCost getShuffleCost(TTI::ShuffleKind Kind, VectorType *Tp,
|
||||
ArrayRef<int> Mask, int Index,
|
||||
VectorType *SubTp,
|
||||
ArrayRef<Value *> Args = None);
|
||||
ArrayRef<const Value *> Args = None);
|
||||
InstructionCost getCastInstrCost(unsigned Opcode, Type *Dst, Type *Src,
|
||||
TTI::CastContextHint CCH,
|
||||
TTI::TargetCostKind CostKind,
|
||||
|
|
|
@ -5328,7 +5328,7 @@ InstructionCost BoUpSLP::getEntryCost(const TreeEntry *E,
|
|||
"No reused scalars expected for broadcast.");
|
||||
return TTI->getShuffleCost(TargetTransformInfo::SK_Broadcast, VecTy,
|
||||
/*Mask=*/None, /*Index=*/0,
|
||||
/*SubTp=*/nullptr, /*Args=*/VL);
|
||||
/*SubTp=*/nullptr, /*Args=*/VL[0]);
|
||||
}
|
||||
InstructionCost ReuseShuffleCost = 0;
|
||||
if (NeedToShuffleReuses)
|
||||
|
|
|
@ -13,45 +13,45 @@ define void @shuffle() {
|
|||
; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %lv4i8 = load <4 x i8>, ptr undef, align 4
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sv4i8 = shufflevector <4 x i8> %lv4i8, <4 x i8> undef, <4 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %lv8i8 = load <8 x i8>, ptr undef, align 8
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sv8i8 = shufflevector <8 x i8> %lv8i8, <8 x i8> undef, <8 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %sv8i8 = shufflevector <8 x i8> %lv8i8, <8 x i8> undef, <8 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %lv16i8 = load <16 x i8>, ptr undef, align 16
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sv16i8 = shufflevector <16 x i8> %lv16i8, <16 x i8> undef, <16 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %sv16i8 = shufflevector <16 x i8> %lv16i8, <16 x i8> undef, <16 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %lv2i16 = load <2 x i16>, ptr undef, align 4
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sv2i16 = shufflevector <2 x i16> %lv2i16, <2 x i16> undef, <2 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %lv4i16 = load <4 x i16>, ptr undef, align 8
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sv4i16 = shufflevector <4 x i16> %lv4i16, <4 x i16> undef, <4 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %sv4i16 = shufflevector <4 x i16> %lv4i16, <4 x i16> undef, <4 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %lv8i16 = load <8 x i16>, ptr undef, align 16
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sv8i16 = shufflevector <8 x i16> %lv8i16, <8 x i16> undef, <8 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %sv8i16 = shufflevector <8 x i16> %lv8i16, <8 x i16> undef, <8 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %lv16i16 = load <16 x i16>, ptr undef, align 32
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %sv16i16 = shufflevector <16 x i16> %lv16i16, <16 x i16> undef, <16 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %sv16i16 = shufflevector <16 x i16> %lv16i16, <16 x i16> undef, <16 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %lv2i32 = load <2 x i32>, ptr undef, align 8
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sv2i32 = shufflevector <2 x i32> %lv2i32, <2 x i32> undef, <2 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %sv2i32 = shufflevector <2 x i32> %lv2i32, <2 x i32> undef, <2 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %lv4i32 = load <4 x i32>, ptr undef, align 16
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sv4i32 = shufflevector <4 x i32> %lv4i32, <4 x i32> undef, <4 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %sv4i32 = shufflevector <4 x i32> %lv4i32, <4 x i32> undef, <4 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %lv8i32 = load <8 x i32>, ptr undef, align 32
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %sv8i32 = shufflevector <8 x i32> %lv8i32, <8 x i32> undef, <8 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %sv8i32 = shufflevector <8 x i32> %lv8i32, <8 x i32> undef, <8 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %lv2i64 = load <2 x i64>, ptr undef, align 16
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sv2i64 = shufflevector <2 x i64> %lv2i64, <2 x i64> undef, <2 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %sv2i64 = shufflevector <2 x i64> %lv2i64, <2 x i64> undef, <2 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %lv4i64 = load <4 x i64>, ptr undef, align 32
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %sv4i64 = shufflevector <4 x i64> %lv4i64, <4 x i64> undef, <4 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %sv4i64 = shufflevector <4 x i64> %lv4i64, <4 x i64> undef, <4 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %lv2f16 = load <2 x half>, ptr undef, align 4
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %sv2f16 = shufflevector <2 x half> %lv2f16, <2 x half> undef, <2 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %sv2f16 = shufflevector <2 x half> %lv2f16, <2 x half> undef, <2 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %lv4f16 = load <4 x half>, ptr undef, align 8
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 9 for instruction: %sv4f16 = shufflevector <4 x half> %lv4f16, <4 x half> undef, <4 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %sv4f16 = shufflevector <4 x half> %lv4f16, <4 x half> undef, <4 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %lv8f16 = load <8 x half>, ptr undef, align 16
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 21 for instruction: %sv8f16 = shufflevector <8 x half> %lv8f16, <8 x half> undef, <8 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %sv8f16 = shufflevector <8 x half> %lv8f16, <8 x half> undef, <8 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %lv16f16 = load <16 x half>, ptr undef, align 32
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 42 for instruction: %sv16f16 = shufflevector <16 x half> %lv16f16, <16 x half> undef, <16 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %sv16f16 = shufflevector <16 x half> %lv16f16, <16 x half> undef, <16 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %lv2f32 = load <2 x float>, ptr undef, align 8
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sv2f32 = shufflevector <2 x float> %lv2f32, <2 x float> undef, <2 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %sv2f32 = shufflevector <2 x float> %lv2f32, <2 x float> undef, <2 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %lv4f32 = load <4 x float>, ptr undef, align 16
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sv4f32 = shufflevector <4 x float> %lv4f32, <4 x float> undef, <4 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %sv4f32 = shufflevector <4 x float> %lv4f32, <4 x float> undef, <4 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %lv8f32 = load <8 x float>, ptr undef, align 32
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %sv8f32 = shufflevector <8 x float> %lv8f32, <8 x float> undef, <8 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %sv8f32 = shufflevector <8 x float> %lv8f32, <8 x float> undef, <8 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %lv2f64 = load <2 x double>, ptr undef, align 16
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %sv2f64 = shufflevector <2 x double> %lv2f64, <2 x double> undef, <2 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %sv2f64 = shufflevector <2 x double> %lv2f64, <2 x double> undef, <2 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %lv4f64 = load <4 x double>, ptr undef, align 32
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %sv4f64 = shufflevector <4 x double> %lv4f64, <4 x double> undef, <4 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %sv4f64 = shufflevector <4 x double> %lv4f64, <4 x double> undef, <4 x i32> zeroinitializer
|
||||
; CHECK-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
|
||||
;
|
||||
%lv2i8 = load <2 x i8>, ptr undef
|
||||
|
|
|
@ -26,7 +26,7 @@ define void @splat_load_2xdouble(<2 x double> *%ptr) {
|
|||
;
|
||||
; SSE3-LABEL: 'splat_load_2xdouble'
|
||||
; SSE3-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %load = load <2 x double>, <2 x double>* %ptr, align 16
|
||||
; SSE3-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %splat_load = shufflevector <2 x double> %load, <2 x double> poison, <2 x i32> zeroinitializer
|
||||
; SSE3-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %splat_load = shufflevector <2 x double> %load, <2 x double> poison, <2 x i32> zeroinitializer
|
||||
; SSE3-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
|
||||
;
|
||||
%load = load <2 x double>, <2 x double> *%ptr
|
||||
|
|
Loading…
Reference in New Issue