LLVM: lib/Target/AArch64/AArch64TargetTransformInfo.cpp File Reference (original) (raw)

Go to the source code of this file.

Macros
#define DEBUG_TYPE "aarch64tti"
Functions
static bool isSMEABIRoutineCall (const CallInst &CI, const AArch64TargetLowering &TLI)
static bool hasPossibleIncompatibleOps (const Function *F, const AArch64TargetLowering &TLI)
Returns true if the function has explicit operations that can only be lowered using incompatible instructions for the selected mode.
static bool isUnpackedVectorVT (EVT VecVT)
static InstructionCost getHistogramCost (const AArch64Subtarget *ST, const IntrinsicCostAttributes &ICA)
static std::optional< Instruction * > processPhiNode (InstCombiner &IC, IntrinsicInst &II)
The function will remove redundant reinterprets casting in the presence of the control flow.
static SVEIntrinsicInfo constructSVEIntrinsicInfo (IntrinsicInst &II)
static bool isAllActivePredicate (Value *Pred)
static Value * stripInactiveLanes (Value *V, const Value *Pg)
static std::optional< Instruction * > simplifySVEIntrinsicBinOp (InstCombiner &IC, IntrinsicInst &II, const SVEIntrinsicInfo &IInfo)
static std::optional< Instruction * > simplifySVEIntrinsic (InstCombiner &IC, IntrinsicInst &II, const SVEIntrinsicInfo &IInfo)
static std::optional< Instruction * > tryCombineFromSVBoolBinOp (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineConvertFromSVBool (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVESel (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVEDup (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVEDupX (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVECmpNE (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVELast (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVECondLast (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineRDFFR (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVECntElts (InstCombiner &IC, IntrinsicInst &II, unsigned NumElts)
static std::optional< Instruction * > instCombineSMECntsd (InstCombiner &IC, IntrinsicInst &II, const AArch64Subtarget *ST)
static std::optional< Instruction * > instCombineSVEPTest (InstCombiner &IC, IntrinsicInst &II)
template<Intrinsic::ID MulOpc, Intrinsic::ID FuseOpc>
static std::optional< Instruction * > instCombineSVEVectorFuseMulAddSub (InstCombiner &IC, IntrinsicInst &II, bool MergeIntoAddendOp)
static std::optional< Instruction * > instCombineSVELD1 (InstCombiner &IC, IntrinsicInst &II, const DataLayout &DL)
static std::optional< Instruction * > instCombineSVEST1 (InstCombiner &IC, IntrinsicInst &II, const DataLayout &DL)
static Instruction::BinaryOps intrinsicIDToBinOpCode (unsigned Intrinsic)
static std::optional< Instruction * > instCombineSVEVectorBinOp (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVEVectorAdd (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVEVectorFAdd (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVEVectorFAddU (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVEVectorFSub (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVEVectorFSubU (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVEVectorSub (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVEUnpack (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVETBL (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVEUzp1 (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVEZip (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineLD1GatherIndex (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineST1ScatterIndex (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVESDIV (InstCombiner &IC, IntrinsicInst &II)
bool SimplifyValuePattern (SmallVector< Value * > &Vec, bool AllowPoison)
static std::optional< Instruction * > instCombineSVEDupqLane (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineMaxMinNM (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVESrshl (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVEInsr (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineDMB (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineWhilelo (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombinePTrue (InstCombiner &IC, IntrinsicInst &II)
static std::optional< Instruction * > instCombineSVEUxt (InstCombiner &IC, IntrinsicInst &II, unsigned NumBits)
static std::optional< Instruction * > instCombineInStreamingMode (InstCombiner &IC, IntrinsicInst &II)
static unsigned getSVEGatherScatterOverhead (unsigned Opcode, const AArch64Subtarget *ST)
static void getFalkorUnrollingPreferences (Loop *L, ScalarEvolution &SE, TargetTransformInfo::UnrollingPreferences &UP)
static bool isLoopSizeWithinBudget (Loop *L, const AArch64TTIImpl &TTI, InstructionCost Budget, unsigned *FinalSize)
static bool shouldUnrollMultiExitLoop (Loop *L, ScalarEvolution &SE, const AArch64TTIImpl &TTI)
static void getAppleRuntimeUnrollPreferences (Loop *L, ScalarEvolution &SE, TargetTransformInfo::UnrollingPreferences &UP, const AArch64TTIImpl &TTI)
For Apple CPUs, we want to runtime-unroll loops to make better use if the OOO engine's wide instruction window and various predictors.
static bool containsDecreasingPointers (Loop *TheLoop, PredicatedScalarEvolution *PSE, const DominatorTree &DT)
static bool isSplatShuffle (Value *V)
static bool areExtractShuffleVectors (Value *Op1, Value *Op2, bool AllowSplat=false)
Check if both Op1 and Op2 are shufflevector extracts of either the lower or upper half of the vector elements.
static bool areExtractExts (Value *Ext1, Value *Ext2)
Check if Ext1 and Ext2 are extends of the same type, doubling the bitwidth of the vector elements.
static bool isOperandOfVmullHighP64 (Value *Op)
Check if Op could be used with vmull_high_p64 intrinsic.
static bool areOperandsOfVmullHighP64 (Value *Op1, Value *Op2)
Check if Op1 and Op2 could be used with vmull_high_p64 intrinsic.
static bool shouldSinkVectorOfPtrs (Value *Ptrs, SmallVectorImpl< Use * > &Ops)
static bool shouldSinkVScale (Value *Op, SmallVectorImpl< Use * > &Ops)
We want to sink following cases: (add|sub
Variables
static cl::opt< bool > EnableFalkorHWPFUnrollFix ("enable-falkor-hwpf-unroll-fix", cl::init(true), cl::Hidden)
static cl::opt< bool > SVEPreferFixedOverScalableIfEqualCost ("sve-prefer-fixed-over-scalable-if-equal", cl::Hidden)
static cl::opt< unsigned > SVEGatherOverhead ("sve-gather-overhead", cl::init(10), cl::Hidden)
static cl::opt< unsigned > SVEScatterOverhead ("sve-scatter-overhead", cl::init(10), cl::Hidden)
static cl::opt< unsigned > SVETailFoldInsnThreshold ("sve-tail-folding-insn-threshold", cl::init(15), cl::Hidden)
static cl::opt< unsigned > NeonNonConstStrideOverhead ("neon-nonconst-stride-overhead", cl::init(10), cl::Hidden)
static cl::opt< unsigned > CallPenaltyChangeSM ("call-penalty-sm-change", cl::init(5), cl::Hidden, cl::desc("Penalty of calling a function that requires a change to PSTATE.SM"))
static cl::opt< unsigned > InlineCallPenaltyChangeSM ("inline-call-penalty-sm-change", cl::init(10), cl::Hidden, cl::desc("Penalty of inlining a call that requires a change to PSTATE.SM"))
static cl::opt< bool > EnableOrLikeSelectOpt ("enable-aarch64-or-like-select", cl::init(true), cl::Hidden)
static cl::opt< bool > EnableLSRCostOpt ("enable-aarch64-lsr-cost-opt", cl::init(true), cl::Hidden)
static cl::opt< unsigned > BaseHistCntCost ("aarch64-base-histcnt-cost", cl::init(8), cl::Hidden, cl::desc("The cost of a histcnt instruction"))
static cl::opt< unsigned > DMBLookaheadThreshold ("dmb-lookahead-threshold", cl::init(10), cl::Hidden, cl::desc("The number of instructions to search for a redundant dmb"))
static cl::opt< int > Aarch64ForceUnrollThreshold ("aarch64-force-unroll-threshold", cl::init(0), cl::Hidden, cl::desc("Threshold for forced unrolling of small loops in AArch64"))
TailFoldingOption TailFoldingOptionLoc
static cl::opt< TailFoldingOption, true, cl::parser< std::string > > SVETailFolding ("sve-tail-folding", cl::desc("Control the use of vectorisation using tail-folding for SVE where the" " option is specified in the form (Initial)[+(Flag1|Flag2
static cl::opt< bool > EnableFixedwidthAutovecInStreamingMode ("enable-fixedwidth-autovec-in-streaming-mode", cl::init(false), cl::Hidden)
static cl::opt< bool > EnableScalableAutovecInStreamingMode ("enable-scalable-autovec-in-streaming-mode", cl::init(false), cl::Hidden)

DEBUG_TYPE

#define DEBUG_TYPE "aarch64tti"

areExtractExts()

areExtractShuffleVectors()

bool areExtractShuffleVectors ( Value * Op1, Value * Op2, bool AllowSplat = false ) static

Check if both Op1 and Op2 are shufflevector extracts of either the lower or upper half of the vector elements.

Definition at line 6417 of file AArch64TargetTransformInfo.cpp.

References llvm::cast(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getFixedValue(), llvm::Type::getPrimitiveSizeInBits(), llvm::Value::getType(), llvm::ShuffleVectorInst::isExtractSubvectorMask(), llvm::Type::isScalableTy(), isSplatShuffle(), llvm::M1(), llvm::PatternMatch::m_Shuffle(), llvm::PatternMatch::m_Undef(), llvm::PatternMatch::m_Value(), and llvm::PatternMatch::match().

Referenced by llvm::AArch64TTIImpl::isProfitableToSinkOperands().

areOperandsOfVmullHighP64()

constructSVEIntrinsicInfo()

containsDecreasingPointers()

getAppleRuntimeUnrollPreferences()

For Apple CPUs, we want to runtime-unroll loops to make better use if the OOO engine's wide instruction window and various predictors.

Definition at line 5144 of file AArch64TargetTransformInfo.cpp.

References llvm::TargetTransformInfo::UnrollingPreferences::AddAdditionalAccumulators, llvm::any_of(), llvm::cast(), llvm::SmallPtrSetImpl< PtrType >::contains(), llvm::TargetTransformInfo::UnrollingPreferences::DefaultUnrollRuntimeCount, llvm::Depth, llvm::dyn_cast(), llvm::findStringMetadataForLoop(), llvm::ScalarEvolution::getBackedgeTakenCount(), llvm::getLoadStorePointerOperand(), llvm::ScalarEvolution::getSCEV(), llvm::ScalarEvolution::getSmallConstantMaxTripCount(), llvm::ScalarEvolution::getSmallConstantTripMultiple(), llvm::ScalarEvolution::getSymbolicMaxBackedgeTakenCount(), I, llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::is_contained(), llvm::isa(), llvm::ScalarEvolution::isLoopInvariant(), isLoopSizeWithinBudget(), llvm::PatternMatch::m_Br(), llvm::PatternMatch::m_ICmp(), llvm::PatternMatch::m_Instruction(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), llvm::TargetTransformInfo::UnrollingPreferences::MaxCount, llvm::none_of(), llvm::TargetTransformInfo::UnrollingPreferences::Partial, llvm::predecessors(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::TargetTransformInfo::UnrollingPreferences::Runtime, llvm::TargetTransformInfo::UnrollingPreferences::SCEVExpansionBudget, Size, and llvm::SmallVectorTemplateCommon< T, typename >::size().

Referenced by llvm::AArch64TTIImpl::getUnrollingPreferences().

getFalkorUnrollingPreferences()

getHistogramCost()

getSVEGatherScatterOverhead()

hasPossibleIncompatibleOps()

instCombineConvertFromSVBool()

instCombineDMB()

instCombineInStreamingMode()

instCombineLD1GatherIndex()

Definition at line 2562 of file AArch64TargetTransformInfo.cpp.

References llvm::InstCombiner::Builder, llvm::cast(), llvm::IRBuilderBase::CreateGEP(), llvm::IRBuilderBase::CreateMaskedLoad(), llvm::ConstantAggregateZero::get(), II, llvm::PatternMatch::m_Intrinsic(), llvm::PatternMatch::m_SpecificInt(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), llvm::InstCombiner::replaceInstUsesWith(), and llvm::Value::takeName().

Referenced by llvm::AArch64TTIImpl::instCombineIntrinsic().

instCombineMaxMinNM()

instCombinePTrue()

instCombineRDFFR()

instCombineSMECntsd()

instCombineST1ScatterIndex()

Definition at line 2590 of file AArch64TargetTransformInfo.cpp.

References llvm::InstCombiner::Builder, llvm::cast(), llvm::IRBuilderBase::CreateGEP(), llvm::IRBuilderBase::CreateMaskedStore(), llvm::InstCombiner::eraseInstFromFunction(), llvm::Value::getType(), II, llvm::PatternMatch::m_Intrinsic(), llvm::PatternMatch::m_SpecificInt(), llvm::PatternMatch::m_Value(), and llvm::PatternMatch::match().

Referenced by llvm::AArch64TTIImpl::instCombineIntrinsic().

instCombineSVECmpNE()

Definition at line 1936 of file AArch64TargetTransformInfo.cpp.

References llvm::InstCombiner::Builder, llvm::cast(), llvm::IRBuilderBase::CreateIntrinsic(), llvm::dyn_cast(), llvm::dyn_cast_or_null(), llvm::ScalableVectorType::get(), llvm::Type::getInt1Ty(), llvm::Type::getInt32Ty(), llvm::Constant::getNullValue(), llvm::getSplatValue(), I, II, llvm::isa(), isAllActivePredicate(), llvm::InstCombiner::replaceInstUsesWith(), llvm::AArch64::SVEBitsPerBlock, and llvm::Value::takeName().

Referenced by llvm::AArch64TTIImpl::instCombineIntrinsic().

instCombineSVECntElts()

instCombineSVECondLast()

Definition at line 2103 of file AArch64TargetTransformInfo.cpp.

References llvm::InstCombiner::Builder, llvm::cast(), llvm::IRBuilderBase::CreateBitCast(), llvm::IRBuilderBase::CreateIntrinsic(), Fallback, llvm::VectorType::get(), getBitWidth(), llvm::IRBuilderBase::getDoubleTy(), llvm::IRBuilderBase::getFloatTy(), llvm::IRBuilderBase::getHalfTy(), llvm::Value::getType(), II, and llvm::InstCombiner::replaceInstUsesWith().

Referenced by llvm::AArch64TTIImpl::instCombineIntrinsic().

instCombineSVEDup()

Definition at line 1904 of file AArch64TargetTransformInfo.cpp.

References llvm::InstCombiner::Builder, llvm::cast(), llvm::IRBuilderBase::CreateInsertElement(), llvm::IRBuilderBase::CreateVectorSplat(), II, isAllActivePredicate(), llvm::PatternMatch::m_Intrinsic(), llvm::PatternMatch::m_SpecificInt(), llvm::PatternMatch::match(), llvm::InstCombiner::replaceInstUsesWith(), and llvm::Splat.

Referenced by llvm::AArch64TTIImpl::instCombineIntrinsic().

instCombineSVEDupqLane()

Definition at line 2683 of file AArch64TargetTransformInfo.cpp.

References llvm::InstCombiner::Builder, llvm::cast(), llvm::IRBuilderBase::CreateBitOrPointerCast(), llvm::IRBuilderBase::CreateInsertElement(), llvm::IRBuilderBase::CreateInsertVector(), llvm::IRBuilderBase::CreateShuffleVector(), Default, llvm::dyn_cast(), llvm::ConstantAggregateZero::get(), llvm::PoisonValue::get(), llvm::ScalableVectorType::get(), llvm::IRBuilderBase::getInt32Ty(), llvm::IRBuilderBase::getInt64(), llvm::IRBuilderBase::getIntNTy(), llvm::Value::getType(), I, II, llvm::isa(), llvm::PatternMatch::m_Intrinsic(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), llvm::InstCombiner::replaceInstUsesWith(), SimplifyValuePattern(), and llvm::SmallVectorTemplateCommon< T, typename >::size().

Referenced by llvm::AArch64TTIImpl::instCombineIntrinsic().

instCombineSVEDupX()

instCombineSVEInsr()

instCombineSVELast()

Definition at line 2029 of file AArch64TargetTransformInfo.cpp.

References llvm::InstCombiner::Builder, llvm::CallingConv::C, llvm::cast(), llvm::ExtractElementInst::Create(), llvm::IRBuilderBase::CreateIntrinsic(), llvm::BinaryOperator::CreateWithCopiedFlags(), llvm::dyn_cast(), llvm::Type::getInt64Ty(), llvm::getNumElementsFromSVEPredPattern(), llvm::getSplatValue(), llvm::Value::getType(), II, llvm::isSplatValue(), LHS, llvm::PatternMatch::m_BinOp(), llvm::MIPatternMatch::m_OneUse(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), llvm::InstCombiner::replaceInstUsesWith(), and RHS.

Referenced by llvm::AArch64TTIImpl::instCombineIntrinsic().

instCombineSVELD1()

instCombineSVEPTest()

Definition at line 2193 of file AArch64TargetTransformInfo.cpp.

References AbstractManglingParser< Derived, Alloc >::Ops, llvm::InstCombiner::Builder, llvm::IRBuilderBase::CreateIntrinsic(), llvm::dyn_cast(), llvm::CallBase::getArgOperand(), llvm::IntrinsicInst::getIntrinsicID(), llvm::Value::getType(), II, llvm::InstCombiner::replaceInstUsesWith(), and llvm::Value::takeName().

Referenced by llvm::AArch64TTIImpl::instCombineIntrinsic().

instCombineSVESDIV()

Definition at line 2616 of file AArch64TargetTransformInfo.cpp.

References llvm::InstCombiner::Builder, llvm::IRBuilderBase::CreateIntrinsic(), llvm::dyn_cast_or_null(), llvm::IRBuilderBase::getInt32Ty(), llvm::APInt::getSExtValue(), llvm::getSplatValue(), llvm::ConstantInt::getValue(), II, llvm::Int32Ty, llvm::APInt::isNegatedPowerOf2(), llvm::APInt::isPowerOf2(), llvm::APInt::logBase2(), llvm::APInt::negate(), and llvm::InstCombiner::replaceInstUsesWith().

Referenced by llvm::AArch64TTIImpl::instCombineIntrinsic().

instCombineSVESel()

instCombineSVESrshl()

instCombineSVEST1()

instCombineSVETBL()

instCombineSVEUnpack()

instCombineSVEUxt()

instCombineSVEUzp1()

Definition at line 2516 of file AArch64TargetTransformInfo.cpp.

References A(), B(), llvm::InstCombiner::Builder, llvm::cast(), llvm::IRBuilderBase::CreateInsertVector(), llvm::PoisonValue::get(), llvm::ScalableVectorType::getDoubleElementsVectorType(), II, llvm::PatternMatch::m_Intrinsic(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), llvm::InstCombiner::replaceInstUsesWith(), and llvm::Value::takeName().

Referenced by llvm::AArch64TTIImpl::instCombineIntrinsic().

instCombineSVEVectorAdd()

instCombineSVEVectorBinOp()

instCombineSVEVectorFAdd()

instCombineSVEVectorFAddU()

instCombineSVEVectorFSub()

instCombineSVEVectorFSubU()

instCombineSVEVectorFuseMulAddSub()

Definition at line 2263 of file AArch64TargetTransformInfo.cpp.

References llvm::FastMathFlags::allowContract(), llvm::InstCombiner::Builder, llvm::cast(), llvm::IRBuilderBase::CreateIntrinsic(), II, llvm::PatternMatch::m_Intrinsic(), llvm::PatternMatch::m_Specific(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), Mul, P, and llvm::InstCombiner::replaceInstUsesWith().

Referenced by llvm::AArch64TTIImpl::instCombineIntrinsic(), instCombineSVEVectorAdd(), instCombineSVEVectorFAdd(), instCombineSVEVectorFAddU(), instCombineSVEVectorFSub(), instCombineSVEVectorFSubU(), and instCombineSVEVectorSub().

instCombineSVEVectorSub()

instCombineSVEZip()

instCombineWhilelo()

intrinsicIDToBinOpCode()

isAllActivePredicate()

bool isAllActivePredicate ( Value * Pred) static

isLoopSizeWithinBudget()

isOperandOfVmullHighP64()

bool isOperandOfVmullHighP64 ( Value * Op) static

isSMEABIRoutineCall()

isSplatShuffle()

isUnpackedVectorVT()

bool isUnpackedVectorVT ( EVT VecVT) static

processPhiNode()

The function will remove redundant reinterprets casting in the presence of the control flow.

Definition at line 1071 of file AArch64TargetTransformInfo.cpp.

References llvm::PHINode::addIncoming(), assert(), llvm::InstCombiner::Builder, llvm::cast(), llvm::IRBuilderBase::CreatePHI(), llvm::dyn_cast(), I, II, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::InstCombiner::replaceInstUsesWith(), and llvm::IRBuilderBase::SetInsertPoint().

Referenced by instCombineConvertFromSVBool().

shouldSinkVectorOfPtrs()

shouldSinkVScale()

We want to sink following cases: (add|sub|gep) A, ((mul|shl) vscale, imm); (add|sub|gep) A, vscale; (add|sub|gep) A, ((mul|shl) zext(vscale), imm);.

Definition at line 6536 of file AArch64TargetTransformInfo.cpp.

References AbstractManglingParser< Derived, Alloc >::Ops, llvm::cast(), llvm::PatternMatch::m_ConstantInt(), llvm::PatternMatch::m_Mul(), llvm::PatternMatch::m_Shl(), llvm::PatternMatch::m_VScale(), llvm::PatternMatch::m_ZExt(), and llvm::PatternMatch::match().

Referenced by llvm::AArch64TTIImpl::isProfitableToSinkOperands().

shouldUnrollMultiExitLoop()

simplifySVEIntrinsic()

Definition at line 1736 of file AArch64TargetTransformInfo.cpp.

References llvm::InstCombiner::eraseInstFromFunction(), llvm::UndefValue::get(), SVEIntrinsicInfo::getGoverningPredicateOperandIdx(), SVEIntrinsicInfo::getMatchingIROpode(), SVEIntrinsicInfo::getMatchingUndefIntrinsic(), llvm::Constant::getNullValue(), SVEIntrinsicInfo::getOperandIdxInactiveLanesTakenFrom(), SVEIntrinsicInfo::getOperandIdxWithNoActiveLanes(), llvm::Intrinsic::getOrInsertDeclaration(), SVEIntrinsicInfo::hasGoverningPredicate(), SVEIntrinsicInfo::hasMatchingIROpode(), SVEIntrinsicInfo::hasMatchingUndefIntrinsic(), SVEIntrinsicInfo::hasOperandWithNoActiveLanes(), II, SVEIntrinsicInfo::inactiveLanesAreUnused(), SVEIntrinsicInfo::inactiveLanesTakenFromOperand(), llvm::isa(), isAllActivePredicate(), llvm::Instruction::isBinaryOp(), llvm::MIPatternMatch::m_ZeroInt(), llvm::PatternMatch::match(), OpIdx, llvm::InstCombiner::replaceInstUsesWith(), llvm::InstCombiner::replaceOperand(), SVEIntrinsicInfo::resultIsZeroInitialized(), and simplifySVEIntrinsicBinOp().

Referenced by llvm::AArch64TTIImpl::instCombineIntrinsic().

simplifySVEIntrinsicBinOp()

Definition at line 1684 of file AArch64TargetTransformInfo.cpp.

References assert(), llvm::InstCombiner::Builder, llvm::IRBuilderBase::CreateSelect(), DL, llvm::dyn_cast(), SVEIntrinsicInfo::getMatchingIROpode(), SVEIntrinsicInfo::getOperandIdxInactiveLanesTakenFrom(), II, SVEIntrinsicInfo::inactiveLanesAreNotDefined(), llvm::isa(), llvm::Instruction::isBinaryOp(), llvm::Instruction::isCommutative(), Opc, llvm::InstCombiner::replaceInstUsesWith(), llvm::InstCombiner::replaceOperand(), llvm::simplifyBinOp(), and stripInactiveLanes().

Referenced by simplifySVEIntrinsic().

SimplifyValuePattern()

Definition at line 2654 of file AArch64TargetTransformInfo.cpp.

References llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::SmallVectorTemplateCommon< T, typename >::end(), llvm::isPowerOf2_64(), LHS, llvm::SmallVectorImpl< T >::resize(), RHS, SimplifyValuePattern(), and llvm::SmallVectorTemplateCommon< T, typename >::size().

Referenced by instCombineSVEDupqLane(), and SimplifyValuePattern().

stripInactiveLanes()

tryCombineFromSVBoolBinOp()

Aarch64ForceUnrollThreshold

cl::opt< int > Aarch64ForceUnrollThreshold("aarch64-force-unroll-threshold", cl::init(0), cl::Hidden, cl::desc("Threshold for forced unrolling of small loops in AArch64")) ( "aarch64-force-unroll-threshold" , cl::init(0) , cl::Hidden , cl::desc("Threshold for forced unrolling of small loops in AArch64") ) static

BaseHistCntCost

cl::opt< unsigned > BaseHistCntCost("aarch64-base-histcnt-cost", cl::init(8), cl::Hidden, cl::desc("The cost of a histcnt instruction")) ( "aarch64-base-histcnt-cost" , cl::init(8) , cl::Hidden , cl::desc("The cost of a histcnt instruction") ) static

CallPenaltyChangeSM

cl::opt< unsigned > CallPenaltyChangeSM("call-penalty-sm-change", cl::init(5), cl::Hidden, cl::desc( "Penalty of calling a function that requires a change to PSTATE.SM")) ( "call-penalty-sm-change" , cl::init(5) , cl::Hidden , cl::desc( "Penalty of calling a function that requires a change to PSTATE.SM") ) static

DMBLookaheadThreshold

EnableFalkorHWPFUnrollFix

cl::opt< bool > EnableFalkorHWPFUnrollFix("enable-falkor-hwpf-unroll-fix", cl::init(true), cl::Hidden) ( "enable-falkor-hwpf-unroll-fix" , cl::init(true) , cl::Hidden ) static

EnableFixedwidthAutovecInStreamingMode

cl::opt< bool > EnableFixedwidthAutovecInStreamingMode("enable-fixedwidth-autovec-in-streaming-mode", cl::init(false), cl::Hidden) ( "enable-fixedwidth-autovec-in-streaming-mode" , cl::init(false) , cl::Hidden ) static

EnableLSRCostOpt

cl::opt< bool > EnableLSRCostOpt("enable-aarch64-lsr-cost-opt", cl::init(true), cl::Hidden) ( "enable-aarch64-lsr-cost-opt" , cl::init(true) , cl::Hidden ) static

EnableOrLikeSelectOpt

cl::opt< bool > EnableOrLikeSelectOpt("enable-aarch64-or-like-select", cl::init(true), cl::Hidden) ( "enable-aarch64-or-like-select" , cl::init(true) , cl::Hidden ) static

EnableScalableAutovecInStreamingMode

cl::opt< bool > EnableScalableAutovecInStreamingMode("enable-scalable-autovec-in-streaming-mode", cl::init(false), cl::Hidden) ( "enable-scalable-autovec-in-streaming-mode" , cl::init(false) , cl::Hidden ) static

InlineCallPenaltyChangeSM

cl::opt< unsigned > InlineCallPenaltyChangeSM("inline-call-penalty-sm-change", cl::init(10), cl::Hidden, cl::desc("Penalty of inlining a call that requires a change to PSTATE.SM")) ( "inline-call-penalty-sm-change" , cl::init(10) , cl::Hidden , cl::desc("Penalty of inlining a call that requires a change to PSTATE.SM") ) static

NeonNonConstStrideOverhead

cl::opt< unsigned > NeonNonConstStrideOverhead("neon-nonconst-stride-overhead", cl::init(10), cl::Hidden) ( "neon-nonconst-stride-overhead" , cl::init(10) , cl::Hidden ) static

SVEGatherOverhead

cl::opt< unsigned > SVEGatherOverhead("sve-gather-overhead", cl::init(10), cl::Hidden) ( "sve-gather-overhead" , cl::init(10) , cl::Hidden ) static

SVEPreferFixedOverScalableIfEqualCost

cl::opt< bool > SVEPreferFixedOverScalableIfEqualCost("sve-prefer-fixed-over-scalable-if-equal", cl::Hidden) ( "sve-prefer-fixed-over-scalable-if-equal" , cl::Hidden ) static

SVEScatterOverhead

cl::opt< unsigned > SVEScatterOverhead("sve-scatter-overhead", cl::init(10), cl::Hidden) ( "sve-scatter-overhead" , cl::init(10) , cl::Hidden ) static

SVETailFolding

| cl::opt< TailFoldingOption, true, cl::parser< std::string > > SVETailFolding("sve-tail-folding", cl::desc( "Control the use of vectorisation using tail-folding for SVE where the" " option is specified in the form (Initial)[+(Flag1|Flag2|...)]:" "\ndisabled (Initial) No loop types will vectorize using " "tail-folding" "\ndefault (Initial) Uses the default tail-folding settings for " "the target CPU" "\nall (Initial) All legal loop types will vectorize using " "tail-folding" "\nsimple (Initial) Use tail-folding for simple loops (not " "reductions or recurrences)" "\nreductions Use tail-folding for loops containing reductions" "\nnoreductions Inverse of above" "\nrecurrences Use tail-folding for loops containing fixed order " "recurrences" "\nnorecurrences Inverse of above" "\nreverse Use tail-folding for loops requiring reversed " "predicates" "\nnoreverse Inverse of above"), cl::location(TailFoldingOptionLoc)) ( "sve-tail-folding" , cl::desc( "Control the use of vectorisation using tail-folding for SVE where the" " option is specified in the form (Initial)[+(Flag1|Flag2|...)]:" "\ndisabled (Initial) No loop types will vectorize using " "tail-folding" "\ndefault (Initial) Uses the default tail-folding settings for " "the target CPU" "\nall (Initial) All legal loop types will vectorize using " "tail-folding" "\nsimple (Initial) Use tail-folding for simple loops (not " "reductions or recurrences)" "\nreductions Use tail-folding for loops containing reductions" "\nnoreductions Inverse of above" "\nrecurrences Use tail-folding for loops containing fixed order " "recurrences" "\nnorecurrences Inverse of above" "\nreverse Use tail-folding for loops requiring reversed " "predicates" "\nnoreverse Inverse of above") , cl::location(TailFoldingOptionLoc) ) | static | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |

SVETailFoldInsnThreshold

cl::opt< unsigned > SVETailFoldInsnThreshold("sve-tail-folding-insn-threshold", cl::init(15), cl::Hidden) ( "sve-tail-folding-insn-threshold" , cl::init(15) , cl::Hidden ) static

TailFoldingOptionLoc

TailFoldingOption TailFoldingOptionLoc