LLVM 17.0.0git
|
#include "Target/AArch64/AArch64TargetTransformInfo.h"
Definition at line 42 of file AArch64TargetTransformInfo.h.
|
inlineexplicit |
Definition at line 72 of file AArch64TargetTransformInfo.h.
Definition at line 124 of file AArch64TargetTransformInfo.cpp.
References Callee, llvm::TargetLoweringBase::getTargetMachine(), llvm::SMEAttrs::hasNewZAInterface(), llvm::SMEAttrs::requiresLazySave(), llvm::SMEAttrs::requiresSMChange(), and TM.
|
inline |
Definition at line 100 of file AArch64TargetTransformInfo.h.
AArch64TTIImpl::TTI::MemCmpExpansionOptions AArch64TTIImpl::enableMemCmpExpansion | ( | bool | OptSize, |
bool | IsZeroCmp | ||
) | const |
Definition at line 2486 of file AArch64TargetTransformInfo.cpp.
References llvm::TargetLoweringBase::getMaxExpandSizeMemcmp(), and Options.
|
inline |
Definition at line 329 of file AArch64TargetTransformInfo.h.
|
inline |
Definition at line 364 of file AArch64TargetTransformInfo.h.
|
inline |
Definition at line 394 of file AArch64TargetTransformInfo.h.
InstructionCost AArch64TTIImpl::getAddressComputationCost | ( | Type * | Ty, |
ScalarEvolution * | SE, | ||
const SCEV * | Ptr | ||
) |
Definition at line 2399 of file AArch64TargetTransformInfo.cpp.
References llvm::TargetTransformInfoImplBase::isConstantStridedAccessLessThan(), llvm::Type::isVectorTy(), and Ptr.
InstructionCost AArch64TTIImpl::getArithmeticInstrCost | ( | unsigned | Opcode, |
Type * | Ty, | ||
TTI::TargetCostKind | CostKind, | ||
TTI::OperandValueInfo | Op1Info = {TTI::OK_AnyValue, TTI::OP_None} , |
||
TTI::OperandValueInfo | Op2Info = {TTI::OK_AnyValue, TTI::OP_None} , |
||
ArrayRef< const Value * > | Args = ArrayRef<const Value *>() , |
||
const Instruction * | CxtI = nullptr |
||
) |
Definition at line 2241 of file AArch64TargetTransformInfo.cpp.
References llvm::ISD::ADD, llvm::ISD::AND, Cost, CostKind, llvm::CostTableLookup(), llvm::BasicTTIImplBase< AArch64TTIImpl >::DL, llvm::ISD::FADD, llvm::ISD::FDIV, llvm::ISD::FMUL, llvm::ISD::FNEG, llvm::ISD::FSUB, getArithmeticInstrCost(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getArithmeticInstrCost(), llvm::TargetTransformInfo::OperandValueInfo::getNoProps(), llvm::Type::getScalarType(), llvm::EVT::getSimpleVT(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getTypeLegalizationCost(), llvm::TargetLoweringBase::getValueType(), llvm::MVT::i16, llvm::MVT::i8, llvm::TargetLoweringBase::InstructionOpcodeToISD(), llvm::TargetTransformInfo::OperandValueInfo::isConstant(), llvm::Type::isFP128Ty(), llvm::TargetLoweringBase::isOperationLegalOrCustom(), llvm::TargetTransformInfo::OperandValueInfo::isPowerOf2(), llvm::TargetTransformInfo::OperandValueInfo::isUniform(), llvm::Type::isVectorTy(), llvm::ISD::MUL, llvm::ISD::MULHU, llvm::ISD::OR, llvm::ISD::SDIV, llvm::ISD::SHL, llvm::ISD::SRA, llvm::ISD::SRL, llvm::TargetTransformInfo::TCK_RecipThroughput, llvm::ISD::UDIV, llvm::MVT::v2i16, llvm::MVT::v2i32, llvm::MVT::v2i64, llvm::MVT::v2i8, llvm::MVT::v4i16, llvm::MVT::v4i8, llvm::MVT::v8i8, and llvm::ISD::XOR.
Referenced by getArithmeticInstrCost(), getArithmeticReductionCost(), getArithmeticReductionCostSVE(), and getIntrinsicInstrCost().
InstructionCost AArch64TTIImpl::getArithmeticReductionCost | ( | unsigned | Opcode, |
VectorType * | Ty, | ||
std::optional< FastMathFlags > | FMF, | ||
TTI::TargetCostKind | CostKind | ||
) |
Definition at line 2975 of file AArch64TargetTransformInfo.cpp.
References llvm::ISD::ADD, llvm::ISD::AND, assert(), Cost, CostKind, llvm::CostTableLookup(), llvm::FixedVectorType::get(), getArithmeticInstrCost(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getArithmeticReductionCost(), getArithmeticReductionCostSVE(), llvm::VectorType::getElementType(), llvm::InstructionCost::getInvalid(), getMaxNumElements(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getTypeLegalizationCost(), llvm::MVT::getVectorNumElements(), llvm::TargetLoweringBase::InstructionOpcodeToISD(), llvm::isPowerOf2_32(), llvm::ISD::OR, llvm::TargetTransformInfo::requiresOrderedReduction(), llvm::MVT::v16i8, llvm::MVT::v2i32, llvm::MVT::v2i64, llvm::MVT::v4i16, llvm::MVT::v4i32, llvm::MVT::v8i16, llvm::MVT::v8i8, and llvm::ISD::XOR.
InstructionCost AArch64TTIImpl::getArithmeticReductionCostSVE | ( | unsigned | Opcode, |
VectorType * | ValTy, | ||
TTI::TargetCostKind | CostKind | ||
) |
Definition at line 2949 of file AArch64TargetTransformInfo.cpp.
References llvm::ISD::ADD, llvm::ISD::AND, assert(), CostKind, llvm::ISD::FADD, getArithmeticInstrCost(), llvm::Type::getContext(), llvm::InstructionCost::getInvalid(), llvm::EVT::getTypeForEVT(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getTypeLegalizationCost(), llvm::TargetLoweringBase::InstructionOpcodeToISD(), llvm::ISD::OR, and llvm::ISD::XOR.
Referenced by getArithmeticReductionCost().
InstructionCost AArch64TTIImpl::getCastInstrCost | ( | unsigned | Opcode, |
Type * | Dst, | ||
Type * | Src, | ||
TTI::CastContextHint | CCH, | ||
TTI::TargetCostKind | CostKind, | ||
const Instruction * | I = nullptr |
||
) |
Definition at line 1781 of file AArch64TargetTransformInfo.cpp.
References assert(), llvm::ISD::BITCAST, llvm::ConvertCostTableLookup(), Cost, CostKind, llvm::BasicTTIImplBase< AArch64TTIImpl >::DL, llvm::ISD::FP_EXTEND, llvm::ISD::FP_ROUND, llvm::ISD::FP_TO_SINT, llvm::ISD::FP_TO_UINT, llvm::BasicTTIImplBase< AArch64TTIImpl >::getCastInstrCost(), llvm::EVT::getSimpleVT(), llvm::TargetLoweringBase::getValueType(), I, llvm::TargetLoweringBase::InstructionOpcodeToISD(), llvm::EVT::isSimple(), llvm::MVT::nxv16i1, llvm::MVT::nxv16i8, llvm::MVT::nxv2f16, llvm::MVT::nxv2f32, llvm::MVT::nxv2f64, llvm::MVT::nxv2i1, llvm::MVT::nxv2i16, llvm::MVT::nxv2i32, llvm::MVT::nxv2i64, llvm::MVT::nxv2i8, llvm::MVT::nxv4f16, llvm::MVT::nxv4f32, llvm::MVT::nxv4f64, llvm::MVT::nxv4i1, llvm::MVT::nxv4i16, llvm::MVT::nxv4i32, llvm::MVT::nxv4i64, llvm::MVT::nxv4i8, llvm::MVT::nxv8f16, llvm::MVT::nxv8f32, llvm::MVT::nxv8f64, llvm::MVT::nxv8i1, llvm::MVT::nxv8i16, llvm::MVT::nxv8i32, llvm::MVT::nxv8i64, llvm::MVT::nxv8i8, Operands, llvm::ISD::SIGN_EXTEND, llvm::ISD::SINT_TO_FP, llvm::TargetTransformInfo::TCK_RecipThroughput, llvm::ISD::TRUNCATE, llvm::ISD::UINT_TO_FP, llvm::MVT::v16f16, llvm::MVT::v16f32, llvm::MVT::v16i16, llvm::MVT::v16i32, llvm::MVT::v16i64, llvm::MVT::v16i8, llvm::MVT::v2f32, llvm::MVT::v2f64, llvm::MVT::v2i16, llvm::MVT::v2i32, llvm::MVT::v2i64, llvm::MVT::v2i8, llvm::MVT::v4f16, llvm::MVT::v4f32, llvm::MVT::v4f64, llvm::MVT::v4i16, llvm::MVT::v4i32, llvm::MVT::v4i64, llvm::MVT::v4i8, llvm::MVT::v8f16, llvm::MVT::v8f32, llvm::MVT::v8i16, llvm::MVT::v8i32, llvm::MVT::v8i64, llvm::MVT::v8i8, and llvm::ISD::ZERO_EXTEND.
Referenced by getExtractWithExtendCost(), and getSpliceCost().
InstructionCost AArch64TTIImpl::getCFInstrCost | ( | unsigned | Opcode, |
TTI::TargetCostKind | CostKind, | ||
const Instruction * | I = nullptr |
||
) |
Definition at line 2177 of file AArch64TargetTransformInfo.cpp.
References assert(), CostKind, and llvm::TargetTransformInfo::TCK_RecipThroughput.
InstructionCost AArch64TTIImpl::getCmpSelInstrCost | ( | unsigned | Opcode, |
Type * | ValTy, | ||
Type * | CondTy, | ||
CmpInst::Predicate | VecPred, | ||
TTI::TargetCostKind | CostKind, | ||
const Instruction * | I = nullptr |
||
) |
Definition at line 2418 of file AArch64TargetTransformInfo.cpp.
References llvm::any_of(), llvm::CmpInst::BAD_ICMP_PREDICATE, llvm::ConvertCostTableLookup(), CostKind, llvm::BasicTTIImplBase< AArch64TTIImpl >::DL, llvm::CmpInst::FCMP_OEQ, llvm::CmpInst::FCMP_OGE, llvm::CmpInst::FCMP_OGT, llvm::CmpInst::FCMP_OLE, llvm::CmpInst::FCMP_OLT, llvm::CmpInst::FCMP_UNE, llvm::BasicTTIImplBase< AArch64TTIImpl >::getCmpSelInstrCost(), llvm::EVT::getSimpleVT(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getTypeLegalizationCost(), llvm::TargetLoweringBase::getValueType(), I, llvm::TargetLoweringBase::InstructionOpcodeToISD(), llvm::CmpInst::isIntPredicate(), llvm::EVT::isSimple(), llvm::PatternMatch::m_Cmp(), llvm::PatternMatch::m_Select(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), llvm::ISD::SELECT, llvm::TargetTransformInfo::TCK_RecipThroughput, llvm::MVT::v16i1, llvm::MVT::v16i16, llvm::MVT::v16i32, llvm::MVT::v16i64, llvm::MVT::v16i8, llvm::MVT::v2f32, llvm::MVT::v2f64, llvm::MVT::v2i32, llvm::MVT::v2i64, llvm::MVT::v4f16, llvm::MVT::v4f32, llvm::MVT::v4i1, llvm::MVT::v4i16, llvm::MVT::v4i32, llvm::MVT::v4i64, llvm::MVT::v8f16, llvm::MVT::v8i1, llvm::MVT::v8i16, llvm::MVT::v8i32, llvm::MVT::v8i64, and llvm::MVT::v8i8.
Referenced by getSpliceCost().
InstructionCost AArch64TTIImpl::getCostOfKeepingLiveOverCall | ( | ArrayRef< Type * > | Tys | ) |
Definition at line 2654 of file AArch64TargetTransformInfo.cpp.
References Cost, CostKind, getMemoryOpCost(), I, and llvm::TargetTransformInfo::TCK_RecipThroughput.
InstructionCost AArch64TTIImpl::getExtractWithExtendCost | ( | unsigned | Opcode, |
Type * | Dst, | ||
VectorType * | VecTy, | ||
unsigned | Index | ||
) |
Definition at line 2116 of file AArch64TargetTransformInfo.cpp.
References assert(), Cost, CostKind, llvm::BasicTTIImplBase< AArch64TTIImpl >::DL, getCastInstrCost(), llvm::VectorType::getElementType(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getTypeLegalizationCost(), llvm::TargetLoweringBase::getValueType(), getVectorInstrCost(), llvm::TargetLoweringBase::isTypeLegal(), llvm_unreachable, llvm::TargetTransformInfo::None, and llvm::TargetTransformInfo::TCK_RecipThroughput.
InstructionCost AArch64TTIImpl::getGatherScatterOpCost | ( | unsigned | Opcode, |
Type * | DataTy, | ||
const Value * | Ptr, | ||
bool | VariableMask, | ||
Align | Alignment, | ||
TTI::TargetCostKind | CostKind, | ||
const Instruction * | I = nullptr |
||
) |
Definition at line 2532 of file AArch64TargetTransformInfo.cpp.
References CostKind, llvm::BasicTTIImplBase< AArch64TTIImpl >::getGatherScatterOpCost(), llvm::InstructionCost::getInvalid(), getMaxNumElements(), getMemoryOpCost(), llvm::ElementCount::getScalable(), getSVEGatherScatterOverhead(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getTypeLegalizationCost(), I, Ptr, and useNeonVector().
|
inline |
Definition at line 342 of file AArch64TargetTransformInfo.h.
InstructionCost AArch64TTIImpl::getInterleavedMemoryOpCost | ( | unsigned | Opcode, |
Type * | VecTy, | ||
unsigned | Factor, | ||
ArrayRef< unsigned > | Indices, | ||
Align | Alignment, | ||
unsigned | AddressSpace, | ||
TTI::TargetCostKind | CostKind, | ||
bool | UseMaskForCond = false , |
||
bool | UseMaskForGaps = false |
||
) |
Definition at line 2626 of file AArch64TargetTransformInfo.cpp.
References assert(), CostKind, llvm::BasicTTIImplBase< AArch64TTIImpl >::DL, llvm::FixedVectorType::get(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getInterleavedMemoryOpCost(), llvm::AArch64TargetLowering::getNumInterleavedAccesses(), llvm::Type::getScalarType(), and llvm::AArch64TargetLowering::isLegalInterleavedAccessType().
InstructionCost AArch64TTIImpl::getIntImmCost | ( | const APInt & | Imm, |
Type * | Ty, | ||
TTI::TargetCostKind | CostKind | ||
) |
Calculate the cost of materializing the given constant.
Definition at line 170 of file AArch64TargetTransformInfo.cpp.
References llvm::APInt::ashr(), assert(), Cost, getIntImmCost(), llvm::Type::getPrimitiveSizeInBits(), llvm::APInt::getSExtValue(), llvm::Type::isIntegerTy(), and llvm::APInt::sextOrTrunc().
InstructionCost AArch64TTIImpl::getIntImmCost | ( | int64_t | Val | ) |
Calculate the cost of materializing a 64-bit value.
This helper method might only calculate a fraction of a larger immediate. Therefore it is valid to return a cost of ZERO.
Definition at line 155 of file AArch64TargetTransformInfo.cpp.
References llvm::AArch64_IMM::expandMOVImm(), Insn, and llvm::AArch64_AM::isLogicalImmediate().
Referenced by getIntImmCost(), getIntImmCostInst(), and getIntImmCostIntrin().
InstructionCost AArch64TTIImpl::getIntImmCostInst | ( | unsigned | Opcode, |
unsigned | Idx, | ||
const APInt & | Imm, | ||
Type * | Ty, | ||
TTI::TargetCostKind | CostKind, | ||
Instruction * | Inst = nullptr |
||
) |
Definition at line 195 of file AArch64TargetTransformInfo.cpp.
References assert(), Cost, CostKind, getIntImmCost(), llvm::Type::getPrimitiveSizeInBits(), Idx, llvm::Type::isIntegerTy(), llvm::TargetTransformInfo::TCC_Basic, and llvm::TargetTransformInfo::TCC_Free.
InstructionCost AArch64TTIImpl::getIntImmCostIntrin | ( | Intrinsic::ID | IID, |
unsigned | Idx, | ||
const APInt & | Imm, | ||
Type * | Ty, | ||
TTI::TargetCostKind | CostKind | ||
) |
Definition at line 264 of file AArch64TargetTransformInfo.cpp.
References assert(), Cost, CostKind, getIntImmCost(), llvm::Type::getPrimitiveSizeInBits(), Idx, llvm::Type::isIntegerTy(), llvm::TargetTransformInfo::TCC_Basic, and llvm::TargetTransformInfo::TCC_Free.
InstructionCost AArch64TTIImpl::getIntrinsicInstrCost | ( | const IntrinsicCostAttributes & | ICA, |
TTI::TargetCostKind | CostKind | ||
) |
Definition at line 325 of file AArch64TargetTransformInfo.cpp.
References llvm::any_of(), Cost, CostKind, llvm::CostTableLookup(), llvm::ISD::CTPOP, llvm::BasicTTIImplBase< AArch64TTIImpl >::DL, llvm::MVT::f16, llvm::MVT::f32, llvm::MVT::f64, llvm::VectorType::get(), llvm::IntrinsicCostAttributes::getArgTypes(), getArithmeticInstrCost(), llvm::IntrinsicCostAttributes::getID(), llvm::Type::getIntNTy(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getIntrinsicInstrCost(), getIntrinsicInstrCost(), llvm::IntrinsicCostAttributes::getReturnType(), llvm::EVT::getScalarSizeInBits(), llvm::MVT::getScalarSizeInBits(), llvm::EVT::getSimpleVT(), llvm::EVT::getTypeForEVT(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getTypeLegalizationCost(), llvm::TargetLoweringBase::getValueType(), llvm::MVT::i16, llvm::MVT::i32, llvm::MVT::i64, llvm::MVT::i8, llvm::EVT::isSimple(), llvm::MVT::isVector(), RetTy, llvm::MVT::v16i8, llvm::MVT::v1i64, llvm::MVT::v2f32, llvm::MVT::v2f64, llvm::MVT::v2i32, llvm::MVT::v2i64, llvm::MVT::v4f16, llvm::MVT::v4f32, llvm::MVT::v4i16, llvm::MVT::v4i32, llvm::MVT::v8f16, llvm::MVT::v8i16, and llvm::MVT::v8i8.
Referenced by getIntrinsicInstrCost(), and getMinMaxReductionCost().
InstructionCost AArch64TTIImpl::getMaskedMemoryOpCost | ( | unsigned | Opcode, |
Type * | Src, | ||
Align | Alignment, | ||
unsigned | AddressSpace, | ||
TTI::TargetCostKind | CostKind | ||
) |
Definition at line 2508 of file AArch64TargetTransformInfo.cpp.
References CostKind, llvm::InstructionCost::getInvalid(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getMaskedMemoryOpCost(), llvm::ElementCount::getScalable(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getTypeLegalizationCost(), and useNeonVector().
Definition at line 2668 of file AArch64TargetTransformInfo.cpp.
References llvm::AArch64Subtarget::getMaxInterleaveFactor().
|
inline |
Try to return an estimate cost factor that can be used as a multiplier when scalarizing an operation for a vector with ElementCount VF
.
For scalable vectors this currently takes the most pessimistic view based upon the maximum possible value for vscale.
Definition at line 140 of file AArch64TargetTransformInfo.h.
References llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getFixedValue(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getKnownMinValue(), and llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::isScalable().
Referenced by getArithmeticReductionCost(), and getGatherScatterOpCost().
InstructionCost AArch64TTIImpl::getMemoryOpCost | ( | unsigned | Opcode, |
Type * | Src, | ||
MaybeAlign | Alignment, | ||
unsigned | AddressSpace, | ||
TTI::TargetCostKind | CostKind, | ||
TTI::OperandValueInfo | OpInfo = {TTI::OK_AnyValue, TTI::OP_None} , |
||
const Instruction * | I = nullptr |
||
) |
Definition at line 2566 of file AArch64TargetTransformInfo.cpp.
References CostKind, llvm::BasicTTIImplBase< AArch64TTIImpl >::DL, llvm::InstructionCost::getInvalid(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getMemoryOpCost(), llvm::ElementCount::getScalable(), llvm::Type::getScalarSizeInBits(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getTypeLegalizationCost(), llvm::TargetLoweringBase::getValueType(), llvm::Type::isPtrOrPtrVectorTy(), llvm::MVT::Other, llvm::TargetTransformInfo::TCK_CodeSize, llvm::TargetTransformInfo::TCK_RecipThroughput, llvm::TargetTransformInfo::TCK_SizeAndLatency, useNeonVector(), and llvm::MVT::v4i8.
Referenced by getCostOfKeepingLiveOverCall(), and getGatherScatterOpCost().
InstructionCost AArch64TTIImpl::getMinMaxReductionCost | ( | VectorType * | Ty, |
VectorType * | CondTy, | ||
bool | IsUnsigned, | ||
TTI::TargetCostKind | CostKind | ||
) |
Definition at line 2924 of file AArch64TargetTransformInfo.cpp.
References assert(), CostKind, llvm::MVT::f16, llvm::Type::getContext(), getIntrinsicInstrCost(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getMinMaxReductionCost(), llvm::EVT::getTypeForEVT(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getTypeLegalizationCost(), and llvm::Type::isFPOrFPVectorTy().
|
inline |
Definition at line 346 of file AArch64TargetTransformInfo.h.
|
inline |
Definition at line 126 of file AArch64TargetTransformInfo.h.
Definition at line 102 of file AArch64TargetTransformInfo.h.
References llvm::Vector.
Value * AArch64TTIImpl::getOrCreateResultFromMemIntrinsic | ( | IntrinsicInst * | Inst, |
Type * | ExpectedType | ||
) |
Definition at line 2785 of file AArch64TargetTransformInfo.cpp.
References llvm::CallBase::arg_size(), Builder, llvm::PoisonValue::get(), llvm::CallBase::getArgOperand(), llvm::IntrinsicInst::getIntrinsicID(), and llvm::Value::getType().
void AArch64TTIImpl::getPeelingPreferences | ( | Loop * | L, |
ScalarEvolution & | SE, | ||
TTI::PeelingPreferences & | PP | ||
) |
Definition at line 2780 of file AArch64TargetTransformInfo.cpp.
References llvm::BasicTTIImplBase< AArch64TTIImpl >::getPeelingPreferences().
TargetTransformInfo::PopcntSupportKind AArch64TTIImpl::getPopcntSupport | ( | unsigned | TyWidth | ) |
Definition at line 316 of file AArch64TargetTransformInfo.cpp.
References assert(), llvm::isPowerOf2_32(), llvm::TargetTransformInfo::PSK_FastHardware, and llvm::TargetTransformInfo::PSK_Software.
|
inline |
Definition at line 350 of file AArch64TargetTransformInfo.h.
References llvm::DataAndControlFlow, and llvm::DataWithoutLaneMask.
TypeSize AArch64TTIImpl::getRegisterBitWidth | ( | TargetTransformInfo::RegisterKind | K | ) | const |
Definition at line 1683 of file AArch64TargetTransformInfo.cpp.
References EnableFixedwidthAutovecInStreamingMode, EnableScalableAutovecInStreamingMode, llvm::TypeSize::getFixed(), llvm::AArch64Subtarget::getMinSVEVectorSizeInBits(), llvm::TypeSize::getScalable(), llvm::AArch64Subtarget::isStreamingSVEModeDisabled(), llvm_unreachable, llvm::TargetTransformInfo::RGK_FixedWidthVector, llvm::TargetTransformInfo::RGK_ScalableVector, and llvm::TargetTransformInfo::RGK_Scalar.
InstructionCost AArch64TTIImpl::getScalingFactorCost | ( | Type * | Ty, |
GlobalValue * | BaseGV, | ||
int64_t | BaseOffset, | ||
bool | HasBaseReg, | ||
int64_t | Scale, | ||
unsigned | AddrSpace | ||
) | const |
Return the cost of the scaling factor used in the addressing mode represented by AM for this target, for a load/store of the specified type.
If the AM is supported, the return value must be >= 0. If the AM is not supported, it returns a negative value.
Definition at line 3385 of file AArch64TargetTransformInfo.cpp.
References llvm::TargetLoweringBase::AddrMode::BaseGV, llvm::TargetLoweringBase::AddrMode::BaseOffs, llvm::BasicTTIImplBase< AArch64TTIImpl >::DL, llvm::TargetLoweringBase::AddrMode::HasBaseReg, llvm::BasicTTIImplBase< AArch64TTIImpl >::isLegalAddressingMode(), and llvm::TargetLoweringBase::AddrMode::Scale.
InstructionCost AArch64TTIImpl::getShuffleCost | ( | TTI::ShuffleKind | Kind, |
VectorType * | Tp, | ||
ArrayRef< int > | Mask, | ||
TTI::TargetCostKind | CostKind, | ||
int | Index, | ||
VectorType * | SubTp, | ||
ArrayRef< const Value * > | Args = std::nullopt |
||
) |
Definition at line 3131 of file AArch64TargetTransformInfo.cpp.
References llvm::all_of(), llvm::any_of(), assert(), Cost, CostKind, llvm::CostTableLookup(), E, llvm::enumerate(), llvm::VectorType::get(), llvm::VectorType::getElementCount(), llvm::VectorType::getElementType(), llvm::ElementCount::getFixed(), getPerfectShuffleCost(), llvm::Type::getScalarSizeInBits(), llvm::Type::getScalarType(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getShuffleCost(), getShuffleCost(), getSpliceCost(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getTypeLegalizationCost(), llvm::BasicTTIImplBase< AArch64TTIImpl >::improveShuffleKindFromMask(), isLegalBroadcastLoad(), N, llvm::MVT::nxv16i1, llvm::MVT::nxv16i8, llvm::MVT::nxv2bf16, llvm::MVT::nxv2f16, llvm::MVT::nxv2f32, llvm::MVT::nxv2f64, llvm::MVT::nxv2i1, llvm::MVT::nxv2i64, llvm::MVT::nxv4bf16, llvm::MVT::nxv4f16, llvm::MVT::nxv4f32, llvm::MVT::nxv4i1, llvm::MVT::nxv4i32, llvm::MVT::nxv8bf16, llvm::MVT::nxv8f16, llvm::MVT::nxv8i1, llvm::MVT::nxv8i16, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::TargetTransformInfo::SK_Broadcast, llvm::TargetTransformInfo::SK_InsertSubvector, llvm::TargetTransformInfo::SK_PermuteSingleSrc, llvm::TargetTransformInfo::SK_PermuteTwoSrc, llvm::TargetTransformInfo::SK_Reverse, llvm::TargetTransformInfo::SK_Select, llvm::TargetTransformInfo::SK_Splice, llvm::TargetTransformInfo::SK_Transpose, llvm::UndefMaskElem, llvm::MVT::v16i8, llvm::MVT::v2f32, llvm::MVT::v2f64, llvm::MVT::v2i32, llvm::MVT::v2i64, llvm::MVT::v4bf16, llvm::MVT::v4f16, llvm::MVT::v4f32, llvm::MVT::v4i16, llvm::MVT::v4i32, llvm::MVT::v8bf16, llvm::MVT::v8f16, llvm::MVT::v8i16, and llvm::MVT::v8i8.
Referenced by getShuffleCost().
InstructionCost AArch64TTIImpl::getSpliceCost | ( | VectorType * | Tp, |
int | Index | ||
) |
Definition at line 3075 of file AArch64TargetTransformInfo.cpp.
References assert(), llvm::CmpInst::BAD_ICMP_PREDICATE, CostKind, llvm::CostTableLookup(), getCastInstrCost(), getCmpSelInstrCost(), llvm::Type::getContext(), llvm::VectorType::getElementCount(), llvm::InstructionCost::getInvalid(), llvm::AArch64TargetLowering::getPromotedVTForPredicate(), llvm::ElementCount::getScalable(), llvm::EVT::getSimpleVT(), llvm::EVT::getTypeForEVT(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getTypeLegalizationCost(), llvm::MVT::i1, llvm::TargetTransformInfo::None, llvm::MVT::nxv16i8, llvm::MVT::nxv2bf16, llvm::MVT::nxv2f16, llvm::MVT::nxv2f32, llvm::MVT::nxv2f64, llvm::MVT::nxv2i64, llvm::MVT::nxv4bf16, llvm::MVT::nxv4f16, llvm::MVT::nxv4f32, llvm::MVT::nxv4i32, llvm::MVT::nxv8bf16, llvm::MVT::nxv8f16, llvm::MVT::nxv8i16, llvm::TargetTransformInfo::SK_Splice, and llvm::TargetTransformInfo::TCK_RecipThroughput.
Referenced by getShuffleCost().
bool AArch64TTIImpl::getTgtMemIntrinsic | ( | IntrinsicInst * | Inst, |
MemIntrinsicInfo & | Info | ||
) |
Definition at line 2821 of file AArch64TargetTransformInfo.cpp.
References llvm::CallBase::arg_size(), llvm::CallBase::getArgOperand(), llvm::IntrinsicInst::getIntrinsicID(), and Info.
void AArch64TTIImpl::getUnrollingPreferences | ( | Loop * | L, |
ScalarEvolution & | SE, | ||
TTI::UnrollingPreferences & | UP, | ||
OptimizationRemarkEmitter * | ORE | ||
) |
Definition at line 2724 of file AArch64TargetTransformInfo.cpp.
References llvm::TargetTransformInfo::UnrollingPreferences::DefaultUnrollRuntimeCount, EnableFalkorHWPFUnrollFix, F, llvm::AArch64Subtarget::Falkor, llvm::LoopBase< BlockT, LoopT >::getBlocks(), getCalledFunction(), getFalkorUnrollingPreferences(), llvm::LoopBase< BlockT, LoopT >::getLoopDepth(), llvm::AArch64Subtarget::getProcFamily(), llvm::BasicTTIImplBase< AArch64TTIImpl >::getUnrollingPreferences(), I, llvm::TargetTransformInfoImplBase::isLoweredToCall(), llvm::AArch64Subtarget::Others, llvm::TargetTransformInfo::UnrollingPreferences::Partial, llvm::TargetTransformInfo::UnrollingPreferences::PartialOptSizeThreshold, llvm::TargetTransformInfo::UnrollingPreferences::PartialThreshold, llvm::TargetTransformInfo::UnrollingPreferences::Runtime, llvm::TargetTransformInfo::UnrollingPreferences::UnrollAndJam, llvm::TargetTransformInfo::UnrollingPreferences::UnrollAndJamInnerLoopThreshold, llvm::TargetTransformInfo::UnrollingPreferences::UnrollRemainder, and llvm::TargetTransformInfo::UnrollingPreferences::UpperBound.
InstructionCost AArch64TTIImpl::getVectorInstrCost | ( | const Instruction & | I, |
Type * | Val, | ||
TTI::TargetCostKind | CostKind, | ||
unsigned | Index | ||
) |
Definition at line 2234 of file AArch64TargetTransformInfo.cpp.
InstructionCost AArch64TTIImpl::getVectorInstrCost | ( | unsigned | Opcode, |
Type * | Val, | ||
TTI::TargetCostKind | CostKind, | ||
unsigned | Index, | ||
Value * | Op0, | ||
Value * | Op1 | ||
) |
Definition at line 2227 of file AArch64TargetTransformInfo.cpp.
Referenced by getExtractWithExtendCost().
|
inline |
Definition at line 130 of file AArch64TargetTransformInfo.h.
std::optional< Instruction * > AArch64TTIImpl::instCombineIntrinsic | ( | InstCombiner & | IC, |
IntrinsicInst & | II | ||
) | const |
Definition at line 1578 of file AArch64TargetTransformInfo.cpp.
References llvm::BasicTTIImplBase< AArch64TTIImpl >::DL, llvm::IntrinsicInst::getIntrinsicID(), instCombineConvertFromSVBool(), instCombineLD1GatherIndex(), instCombineMaxMinNM(), instCombineRDFFR(), instCombineST1ScatterIndex(), instCombineSVECmpNE(), instCombineSVECntElts(), instCombineSVECondLast(), instCombineSVEDup(), instCombineSVEDupqLane(), instCombineSVEDupX(), instCombineSVELast(), instCombineSVELD1(), instCombineSVEPTest(), instCombineSVESDIV(), instCombineSVESel(), instCombineSVESrshl(), instCombineSVEST1(), instCombineSVETBL(), instCombineSVEUnpack(), instCombineSVEVectorAdd(), instCombineSVEVectorMul(), instCombineSVEVectorSub(), and instCombineSVEZip().
Definition at line 228 of file AArch64TargetTransformInfo.h.
References llvm::Type::isBFloatTy(), llvm::Type::isDoubleTy(), llvm::Type::isFloatTy(), llvm::Type::isHalfTy(), llvm::Type::isIntegerTy(), and llvm::Type::isPointerTy().
Referenced by isLegalMaskedGatherScatter(), isLegalMaskedLoadStore(), and isLegalToVectorizeReduction().
|
inline |
Definition at line 284 of file AArch64TargetTransformInfo.h.
References llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getFixedValue(), llvm::Type::getScalarSizeInBits(), and llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::isScalable().
Referenced by getShuffleCost().
Definition at line 277 of file AArch64TargetTransformInfo.h.
References isLegalMaskedGatherScatter().
Definition at line 264 of file AArch64TargetTransformInfo.h.
References llvm::Type::getScalarType(), and isElementTypeLegalForScalableVector().
Referenced by isLegalMaskedGather(), and isLegalMaskedScatter().
Definition at line 256 of file AArch64TargetTransformInfo.h.
References isLegalMaskedLoadStore().
Definition at line 245 of file AArch64TargetTransformInfo.h.
References llvm::Type::getScalarType(), and isElementTypeLegalForScalableVector().
Referenced by isLegalMaskedLoad(), and isLegalMaskedStore().
Definition at line 280 of file AArch64TargetTransformInfo.h.
References isLegalMaskedGatherScatter().
Definition at line 260 of file AArch64TargetTransformInfo.h.
References isLegalMaskedLoadStore().
Definition at line 322 of file AArch64TargetTransformInfo.h.
References llvm::TargetTransformInfoImplBase::isLegalNTLoad(), and isLegalNTStoreLoad().
Definition at line 318 of file AArch64TargetTransformInfo.h.
References isLegalNTStoreLoad().
Definition at line 301 of file AArch64TargetTransformInfo.h.
References llvm::TargetTransformInfoImplBase::isLegalNTStore(), and llvm::isPowerOf2_64().
Referenced by isLegalNTLoad(), and isLegalNTStore().
bool AArch64TTIImpl::isLegalToVectorizeReduction | ( | const RecurrenceDescriptor & | RdxDesc, |
ElementCount | VF | ||
) | const |
Definition at line 2893 of file AArch64TargetTransformInfo.cpp.
References llvm::Add, llvm::And, llvm::FAdd, llvm::FMax, llvm::FMin, llvm::FMulAdd, llvm::RecurrenceDescriptor::getRecurrenceKind(), llvm::RecurrenceDescriptor::getRecurrenceType(), llvm::Type::isBFloatTy(), isElementTypeLegalForScalableVector(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::isScalable(), llvm::Or, llvm::SelectFCmp, llvm::SelectICmp, llvm::SMax, llvm::SMin, llvm::UMax, llvm::UMin, and llvm::Xor.
|
inline |
Definition at line 369 of file AArch64TargetTransformInfo.h.
bool AArch64TTIImpl::preferPredicateOverEpilogue | ( | Loop * | L, |
LoopInfo * | LI, | ||
ScalarEvolution & | SE, | ||
AssumptionCache & | AC, | ||
TargetLibraryInfo * | TLI, | ||
DominatorTree * | DT, | ||
LoopVectorizationLegality * | LVL, | ||
InterleavedAccessInfo * | IAI | ||
) |
Definition at line 3360 of file AArch64TargetTransformInfo.cpp.
References llvm::LoopVectorizationLegality::getFixedOrderRecurrences(), llvm::LoopVectorizationLegality::getReductionVars(), llvm::InterleavedAccessInfo::hasGroups(), llvm::MapVector< KeyT, ValueT, MapType, VectorType >::size(), llvm::SmallPtrSetImplBase::size(), and TailFoldingKindLoc.
bool AArch64TTIImpl::prefersVectorizedAddressing | ( | ) | const |
Definition at line 2503 of file AArch64TargetTransformInfo.cpp.
bool AArch64TTIImpl::shouldConsiderAddressTypePromotion | ( | const Instruction & | I, |
bool & | AllowPromotionWithoutCommonHeader | ||
) |
See if I
should be considered for address type promotion.
We check if I
is a sext with right type and used in memory accesses. If it used in a "complex" getelementptr, we allow it to be promoted without finding other sext instructions that sign extended the same initial value. A getelementptr is considered as "complex" if it has more than 2 operands.
Definition at line 2866 of file AArch64TargetTransformInfo.cpp.
References llvm::Type::getInt64Ty(), and I.
|
inline |
Definition at line 340 of file AArch64TargetTransformInfo.h.
bool AArch64TTIImpl::shouldMaximizeVectorBandwidth | ( | TargetTransformInfo::RegisterKind | K | ) | const |
Definition at line 146 of file AArch64TargetTransformInfo.cpp.
References assert(), llvm::TargetTransformInfo::RGK_FixedWidthVector, and llvm::TargetTransformInfo::RGK_Scalar.
std::optional< Value * > AArch64TTIImpl::simplifyDemandedVectorEltsIntrinsic | ( | InstCombiner & | IC, |
IntrinsicInst & | II, | ||
APInt | DemandedElts, | ||
APInt & | UndefElts, | ||
APInt & | UndefElts2, | ||
APInt & | UndefElts3, | ||
std::function< void(Instruction *, unsigned, APInt, APInt &)> | SimplifyAndSetOp | ||
) | const |
Definition at line 1656 of file AArch64TargetTransformInfo.cpp.
References llvm::IntrinsicInst::getIntrinsicID().
|
inline |
Definition at line 362 of file AArch64TargetTransformInfo.h.
Definition at line 2562 of file AArch64TargetTransformInfo.cpp.
References llvm::AArch64Subtarget::useSVEForFixedLengthVectors().
Referenced by getGatherScatterOpCost(), getMaskedMemoryOpCost(), and getMemoryOpCost().