|
LLVM 24.0.0git
|
#include "llvm/CodeGen/GlobalISel/CombinerHelper.h"
Protected Attributes | |
| MachineIRBuilder & | Builder |
| MachineRegisterInfo & | MRI |
| GISelChangeObserver & | Observer |
| GISelValueTracking * | VT |
| MachineDominatorTree * | MDT |
| bool | IsPreLegalize |
| const LegalizerInfo * | LI |
| const TargetInstrInfo * | TII |
| const RegisterBankInfo * | RBI |
| const TargetRegisterInfo * | TRI |
Definition at line 115 of file CombinerHelper.h.
| CombinerHelper::CombinerHelper | ( | GISelChangeObserver & | Observer, |
| MachineIRBuilder & | B, | ||
| bool | IsPreLegalize, | ||
| GISelValueTracking * | VT = nullptr, | ||
| MachineDominatorTree * | MDT = nullptr, | ||
| const LegalizerInfo * | LI = nullptr ) |
| void CombinerHelper::applyAshShlToSextInreg | ( | MachineInstr & | MI, |
| std::tuple< Register, int64_t > & | MatchInfo ) const |
| void CombinerHelper::applyBuildFn | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Use a function which takes in a MachineIRBuilder to perform a combine.
By default, it erases the instruction MI from the function.
Definition at line 4610 of file CombinerHelper.cpp.
References applyBuildFnNoErase(), and MI.
| void CombinerHelper::applyBuildFnMO | ( | const MachineOperand & | MO, |
| BuildFnTy & | MatchInfo ) const |
Use a function which takes in a MachineIRBuilder to perform a combine.
By default, it erases the instruction def'd on MO from the function.
Definition at line 8326 of file CombinerHelper.cpp.
References Builder, llvm::MachineInstr::eraseFromParent(), llvm::getDefIgnoringCopies(), llvm::MachineOperand::getReg(), and MRI.
| void CombinerHelper::applyBuildFnNoErase | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Use a function which takes in a MachineIRBuilder to perform a combine.
This variant does not erase MI after calling the build function.
Definition at line 4617 of file CombinerHelper.cpp.
Referenced by applyBuildFn().
| void CombinerHelper::applyBuildInstructionSteps | ( | MachineInstr & | MI, |
| InstructionStepsMatchInfo & | MatchInfo ) const |
Replace MI with a series of instructions described in MatchInfo.
Definition at line 3382 of file CombinerHelper.cpp.
References assert(), Builder, llvm::InstructionStepsMatchInfo::InstrsToBuild, and MI.
| void CombinerHelper::applyCombineAddP2IToPtrAdd | ( | MachineInstr & | MI, |
| std::pair< Register, bool > & | PtrRegAndCommute ) const |
Definition at line 2651 of file CombinerHelper.cpp.
References Builder, MI, MRI, and std::swap().
| void CombinerHelper::applyCombineBuildUnmerge | ( | MachineInstr & | MI, |
| MachineRegisterInfo & | MRI, | ||
| MachineIRBuilder & | B, | ||
| Register & | UnmergeSrc ) const |
| void CombinerHelper::applyCombineBuildVectorOfBitcast | ( | MachineInstr & | MI, |
| SmallVector< Register > & | Ops ) const |
Definition at line 456 of file CombinerHelper.cpp.
References AbstractManglingParser< Derived, Alloc >::Ops, Builder, llvm::LLT::fixed_vector(), MI, MRI, and llvm::Undef.
| void CombinerHelper::applyCombineConcatVectors | ( | MachineInstr & | MI, |
| SmallVector< Register > & | Ops ) const |
Replace MI with a flattened build_vector with Ops or an implicit_def if Ops is empty.
Definition at line 389 of file CombinerHelper.cpp.
References AbstractManglingParser< Derived, Alloc >::Ops, Builder, MI, MRI, and replaceRegWith().
| void CombinerHelper::applyCombineConstantFoldFpUnary | ( | MachineInstr & | MI, |
| const ConstantFP * | Cst ) const |
Transform fp_instr(cst) to constant result of the fp operation.
Definition at line 1822 of file CombinerHelper.cpp.
References Builder, constantFoldFpUnary(), llvm::ConstantFP::getValue(), MI, and MRI.
| void CombinerHelper::applyCombineConstPtrAddToI2P | ( | MachineInstr & | MI, |
| APInt & | NewCst ) const |
Definition at line 2690 of file CombinerHelper.cpp.
References Builder, llvm::cast(), and MI.
| void CombinerHelper::applyCombineCopy | ( | MachineInstr & | MI | ) | const |
Definition at line 245 of file CombinerHelper.cpp.
References MI, MRI, and replaceRegWith().
Referenced by tryCombineCopy().
| void CombinerHelper::applyCombineDivRem | ( | MachineInstr & | MI, |
| MachineInstr *& | OtherMI ) const |
Definition at line 1635 of file CombinerHelper.cpp.
References assert(), Builder, dominates(), llvm::MachineInstr::eraseFromParent(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), and MI.
| void CombinerHelper::applyCombineExtendingLoads | ( | MachineInstr & | MI, |
| PreferredTuple & | MatchInfo ) const |
rewrites to:
rewrites to:
Definition at line 868 of file CombinerHelper.cpp.
References Builder, llvm::MachineInstr::eraseFromParent(), llvm::PreferredTuple::ExtendOpcode, getExtLoadOpcForExtend(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getParent(), llvm::MachineOperand::getReg(), llvm::LLT::getSizeInBits(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::lookup(), llvm::make_pointer_range(), llvm::PreferredTuple::MI, MI, MRI, Observer, replaceRegOpWith(), replaceRegWith(), llvm::MachineOperand::setReg(), llvm::PreferredTuple::Ty, UseMI, and Uses.
Referenced by tryCombineExtendingLoads().
| void CombinerHelper::applyCombineIndexedLoadStore | ( | MachineInstr & | MI, |
| IndexedLoadStoreMatchInfo & | MatchInfo ) const |
Definition at line 1537 of file CombinerHelper.cpp.
References llvm::IndexedLoadStoreMatchInfo::Addr, llvm::IndexedLoadStoreMatchInfo::Base, Builder, llvm::dbgs(), llvm::MachineInstr::eraseFromParent(), getIndexedOpc(), llvm::IndexedLoadStoreMatchInfo::IsPre, LLVM_DEBUG, MI, MRI, llvm::IndexedLoadStoreMatchInfo::Offset, and llvm::IndexedLoadStoreMatchInfo::RematOffset.
| void CombinerHelper::applyCombineInsertVecElts | ( | MachineInstr & | MI, |
| SmallVectorImpl< Register > & | MatchInfo ) const |
Definition at line 3178 of file CombinerHelper.cpp.
References Builder, llvm::LLT::getScalarType(), MI, and MRI.
| void CombinerHelper::applyCombineMemCpyFamily | ( | MachineInstr & | MI, |
| MemCpyFamilyLoweringInfo & | MatchInfo ) const |
Definition at line 1734 of file CombinerHelper.cpp.
References assert(), Changed, llvm::MachineIRBuilder::getMF(), llvm::LegalizerHelper::Legalized, llvm::LegalizerHelper::lowerMemCpyFamily(), and MI.
| void CombinerHelper::applyCombineMulToShl | ( | MachineInstr & | MI, |
| unsigned & | ShiftVal ) const |
Definition at line 2206 of file CombinerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildConstant(), llvm::MCInstrInfo::get(), llvm::LLT::getScalarSizeInBits(), llvm::MachineIRBuilder::getTII(), MI, MRI, llvm::MachineInstr::NoSWrap, and Observer.
| void CombinerHelper::applyCombineP2IToI2P | ( | MachineInstr & | MI, |
| Register & | Reg ) const |
Transform PtrToInt(IntToPtr(x)) to x.
Definition at line 2618 of file CombinerHelper.cpp.
| void CombinerHelper::applyCombineShiftToUnmerge | ( | MachineInstr & | MI, |
| const unsigned & | ShiftVal ) const |
Definition at line 2535 of file CombinerHelper.cpp.
References assert(), Builder, llvm::LLT::changeElementSize(), llvm::Hi, llvm::Lo, MI, MRI, and Size.
Referenced by tryCombineShiftToUnmerge().
| void CombinerHelper::applyCombineShlOfExtend | ( | MachineInstr & | MI, |
| const RegisterImmPair & | MatchData ) const |
Definition at line 2287 of file CombinerHelper.cpp.
References Builder, llvm::RegisterImmPair::Imm, MI, MRI, and llvm::RegisterImmPair::Reg.
| void CombinerHelper::applyCombineShuffleConcat | ( | MachineInstr & | MI, |
| SmallVector< Register > & | Ops ) const |
Replace MI with a flattened build_vector with Ops or an implicit_def if Ops is empty.
Definition at line 562 of file CombinerHelper.cpp.
References AbstractManglingParser< Derived, Alloc >::Ops, assert(), Builder, MI, and MRI.
| void CombinerHelper::applyCombineShuffleToBuildVector | ( | MachineInstr & | MI | ) | const |
Replace MI with a build_vector.
Definition at line 475 of file CombinerHelper.cpp.
References assert(), Builder, llvm::cast(), MI, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::SmallVectorTemplateCommon< T, typename >::size().
| void CombinerHelper::applyCombineShuffleVector | ( | MachineInstr & | MI, |
| ArrayRef< Register > | Ops ) const |
Replace MI with a concat_vectors with Ops.
Definition at line 662 of file CombinerHelper.cpp.
References AbstractManglingParser< Derived, Alloc >::Ops, Builder, MI, MRI, and replaceRegWith().
| void CombinerHelper::applyCombineTruncOfShift | ( | MachineInstr & | MI, |
| std::pair< MachineInstr *, LLT > & | MatchInfo ) const |
Definition at line 2807 of file CombinerHelper.cpp.
References Builder, eraseInst(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), getTargetLowering(), MI, MRI, and replaceRegWith().
| void CombinerHelper::applyCombineUnmergeConstant | ( | MachineInstr & | MI, |
| SmallVectorImpl< APInt > & | Csts ) const |
Definition at line 2402 of file CombinerHelper.cpp.
References assert(), Builder, MI, and llvm::SmallVectorTemplateCommon< T, typename >::size().
| void CombinerHelper::applyCombineUnmergeMergeToPlainValues | ( | MachineInstr & | MI, |
| SmallVectorImpl< Register > & | Operands ) const |
Definition at line 2351 of file CombinerHelper.cpp.
References assert(), Builder, MI, MRI, Operands, and replaceRegWith().
| void CombinerHelper::applyCombineUnmergeWithDeadLanesToTrunc | ( | MachineInstr & | MI | ) | const |
Definition at line 2447 of file CombinerHelper.cpp.
| void CombinerHelper::applyCombineUnmergeZExtToZExt | ( | MachineInstr & | MI | ) | const |
Definition at line 2481 of file CombinerHelper.cpp.
References assert(), Builder, llvm::cast(), llvm::LLT::getSizeInBits(), llvm::GCastOp::getSrcReg(), MI, MRI, and replaceRegWith().
| void CombinerHelper::applyCommuteBinOpOperands | ( | MachineInstr & | MI | ) | const |
Definition at line 7430 of file CombinerHelper.cpp.
| void CombinerHelper::applyCountZeroToZeroPoison | ( | MachineInstr & | MI | ) | const |
Definition at line 8865 of file CombinerHelper.cpp.
References getCountZeroPoisonOpcode(), MI, and replaceOpcodeWith().
| void CombinerHelper::applyExpandFPowI | ( | MachineInstr & | MI, |
| int64_t | Exponent ) const |
Expands FPOWI into a series of multiplications and a division if the exponent is negative.
Definition at line 8339 of file CombinerHelper.cpp.
References llvm::sampleprof::Base, Builder, llvm::Exponent, MI, and MRI.
| void CombinerHelper::applyExtendThroughPhis | ( | MachineInstr & | MI, |
| MachineInstr *& | ExtMI ) const |
Definition at line 4453 of file CombinerHelper.cpp.
References Builder, llvm::cast(), llvm::drop_begin(), llvm::MachineInstr::eraseFromParent(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineInstr::getParent(), llvm::MachineOperand::getReg(), I, llvm::SetVector< T, Vector, Set, N >::insert(), llvm::MIPatternMatch::m_MInstr(), MBB, MI, llvm::MIPatternMatch::mi_match(), MRI, and PHI.
| void CombinerHelper::applyExtractAllEltsFromBuildVector | ( | MachineInstr & | MI, |
| SmallVectorImpl< std::pair< Register, MachineInstr * > > & | MatchInfo ) const |
Definition at line 4598 of file CombinerHelper.cpp.
References assert(), MI, MRI, and replaceRegWith().
| void CombinerHelper::applyExtractVecEltBuildVec | ( | MachineInstr & | MI, |
| Register & | Reg ) const |
Definition at line 4539 of file CombinerHelper.cpp.
References assert(), Builder, llvm::LLT::getSizeInBits(), MI, MRI, and replaceSingleDefInstWithReg().
| void CombinerHelper::applyFoldBinOpIntoSelect | ( | MachineInstr & | MI, |
| const unsigned & | SelectOpNo ) const |
SelectOperand is the operand in binary operator MI that is the select to fold.
Definition at line 4015 of file CombinerHelper.cpp.
References Builder, llvm::cast(), getReg(), MI, MRI, and Select.
| void CombinerHelper::applyFsubToFneg | ( | MachineInstr & | MI, |
| Register & | MatchInfo ) const |
Definition at line 6371 of file CombinerHelper.cpp.
References Builder, eraseInst(), MI, and MRI.
| void CombinerHelper::applyFunnelShiftConstantModulo | ( | MachineInstr & | MI | ) | const |
Replaces the shift amount in MI with ShiftAmt % BW.
| MI |
Definition at line 3041 of file CombinerHelper.cpp.
References assert(), Builder, llvm::getIConstantVRegValWithLookThrough(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getSizeInBits(), llvm::APInt::getZExtValue(), MI, MRI, and llvm::APInt::urem().
| void CombinerHelper::applyFunnelShiftToRotate | ( | MachineInstr & | MI | ) | const |
| void CombinerHelper::applyLshrOfTruncOfLshr | ( | MachineInstr & | MI, |
| LshrOfTruncOfLshr & | MatchInfo ) const |
Definition at line 2173 of file CombinerHelper.cpp.
References assert(), Builder, llvm::APInt::getLowBitsSet(), llvm::LLT::getScalarSizeInBits(), llvm::APInt::getZExtValue(), llvm::LshrOfTruncOfLshr::InnerShiftTy, llvm::LshrOfTruncOfLshr::Mask, llvm::LshrOfTruncOfLshr::MaskVal, MI, llvm::LshrOfTruncOfLshr::ShiftAmt, llvm::LshrOfTruncOfLshr::ShiftAmtTy, and llvm::LshrOfTruncOfLshr::Src.
| void CombinerHelper::applyNotCmp | ( | MachineInstr & | MI, |
| SmallVectorImpl< Register > & | RegsToNegate ) const |
Definition at line 3844 of file CombinerHelper.cpp.
References Builder, llvm::CmpInst::getInversePredicate(), llvm::MachineOperand::getPredicate(), llvm_unreachable, MI, MRI, Observer, replaceRegWith(), and llvm::MachineOperand::setPredicate().
| void CombinerHelper::applyOptBrCondByInvertingCond | ( | MachineInstr & | MI, |
| MachineInstr *& | BrCond ) const |
Definition at line 1701 of file CombinerHelper.cpp.
References Builder, llvm::getICmpTrueVal(), llvm::MachineOperand::getMBB(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), getTargetLowering(), MI, MRI, Observer, llvm::MachineOperand::setMBB(), llvm::MachineOperand::setReg(), and llvm::Xor.
| void CombinerHelper::applyPtrAddImmedChain | ( | MachineInstr & | MI, |
| PtrAddChain & | MatchInfo ) const |
Definition at line 1910 of file CombinerHelper.cpp.
References assert(), llvm::PtrAddChain::Bank, llvm::PtrAddChain::Base, llvm::MachineIRBuilder::buildConstant(), llvm::PtrAddChain::Flags, llvm::PtrAddChain::Imm, MI, MRI, Observer, and setRegBank().
| void CombinerHelper::applyRepeatedFPDivisor | ( | SmallVector< MachineInstr * > & | MatchInfo | ) | const |
Definition at line 7062 of file CombinerHelper.cpp.
References Builder, getParent(), getReg(), MI, and MRI.
| void CombinerHelper::applyRotateOutOfRange | ( | MachineInstr & | MI | ) | const |
| void CombinerHelper::applySDivByPow2 | ( | MachineInstr & | MI | ) | const |
Definition at line 6062 of file CombinerHelper.cpp.
References llvm::Add, assert(), llvm::BitWidth, Builder, llvm::cast(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), getTargetLowering(), llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_SLT, llvm::LLT::integer(), llvm::LLT::isVector(), MI, MRI, and llvm::LLT::vector().
| void CombinerHelper::applySDivOrSRemByConst | ( | MachineInstr & | MI | ) | const |
Definition at line 5897 of file CombinerHelper.cpp.
References buildSDivOrSRemUsingMul(), MI, and replaceSingleDefInstWithReg().
| void CombinerHelper::applySextInRegOfLoad | ( | MachineInstr & | MI, |
| std::tuple< Register, unsigned > & | MatchInfo ) const |
Definition at line 1168 of file CombinerHelper.cpp.
References assert(), Builder, llvm::cast(), llvm::MachineInstr::eraseFromParent(), llvm::GMemOperation::getMMO(), llvm::GLoadStore::getPointerReg(), MI, MRI, and replaceRegWith().
| void CombinerHelper::applyShiftImmedChain | ( | MachineInstr & | MI, |
| RegisterImmPair & | MatchInfo ) const |
Definition at line 1969 of file CombinerHelper.cpp.
References assert(), Builder, Imm, llvm::RegisterImmPair::Imm, MI, MRI, Observer, and llvm::RegisterImmPair::Reg.
| void CombinerHelper::applyShiftOfShiftedLogic | ( | MachineInstr & | MI, |
| ShiftOfShiftedLogic & | MatchInfo ) const |
Definition at line 2087 of file CombinerHelper.cpp.
References assert(), Builder, llvm::MachineInstr::eraseFromParent(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), getReg(), llvm::MachineOperand::getReg(), llvm::ShiftOfShiftedLogic::Logic, llvm::ShiftOfShiftedLogic::LogicNonShiftReg, MI, MRI, llvm::ShiftOfShiftedLogic::Shift2, and llvm::ShiftOfShiftedLogic::ValSum.
| void CombinerHelper::applySimplifyAddToSub | ( | MachineInstr & | MI, |
| std::tuple< Register, Register > & | MatchInfo ) const |
Definition at line 3196 of file CombinerHelper.cpp.
| void CombinerHelper::applySimplifySRemByPow2 | ( | MachineInstr & | MI | ) | const |
Combine G_SREM x, (+/-2^k) to a bias-and-mask sequence.
Definition at line 6135 of file CombinerHelper.cpp.
References assert(), llvm::BitWidth, Builder, llvm::cast(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), getTargetLowering(), llvm::Masked, MI, and MRI.
| void CombinerHelper::applySimplifyURemByPow2 | ( | MachineInstr & | MI | ) | const |
| void CombinerHelper::applyTruncSSatS | ( | MachineInstr & | MI, |
| Register & | MatchInfo ) const |
Definition at line 6245 of file CombinerHelper.cpp.
| void CombinerHelper::applyTruncSSatU | ( | MachineInstr & | MI, |
| Register & | MatchInfo ) const |
Definition at line 6278 of file CombinerHelper.cpp.
| void CombinerHelper::applyUDivByPow2 | ( | MachineInstr & | MI | ) | const |
Given an G_UDIV MI expressing an unsigned divided by a pow2 constant, return expressions that implements it by shifting.
Definition at line 6121 of file CombinerHelper.cpp.
References assert(), Builder, llvm::cast(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), getTargetLowering(), MI, and MRI.
| void CombinerHelper::applyUDivOrURemByConst | ( | MachineInstr & | MI | ) | const |
Definition at line 5842 of file CombinerHelper.cpp.
References buildUDivOrURemUsingMul(), MI, and replaceSingleDefInstWithReg().
| void CombinerHelper::applyUMulHToLShr | ( | MachineInstr & | MI | ) | const |
Definition at line 6192 of file CombinerHelper.cpp.
References Builder, buildLogBase2(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), llvm::LLT::getScalarSizeInBits(), getTargetLowering(), MI, and MRI.
| void CombinerHelper::applyUseVectorTruncate | ( | MachineInstr & | MI, |
| Register & | MatchInfo ) const |
Definition at line 3739 of file CombinerHelper.cpp.
References Builder, llvm::BuildMI(), llvm::cast(), llvm::LLT::changeElementType(), llvm::LLT::getNumElements(), llvm::LLT::getScalarType(), I, MI, MRI, and llvm::SmallVectorTemplateBase< T, bool >::push_back().
| void CombinerHelper::applyXorOfAndWithSameReg | ( | MachineInstr & | MI, |
| std::pair< Register, Register > & | MatchInfo ) const |
| MachineInstr * CombinerHelper::buildSDivOrSRemUsingMul | ( | MachineInstr & | MI | ) | const |
Given an G_SDIV MI or G_SREM MI expressing a signed divide by constant, return an expression that implements it by multiplying by a magic number.
Ref: "Hacker's Delight" or "The PowerPC Compiler Writer's Guide".
Definition at line 5902 of file CombinerHelper.cpp.
References llvm::APInt::ashrInPlace(), assert(), Builder, C(), llvm::cast(), llvm::APInt::countr_zero(), llvm::SmallVectorTemplateCommon< T, typename >::empty(), llvm::SignedDivisionByConstantInfo::get(), llvm::getDefIgnoringCopies(), llvm::getIConstantSplatVal(), llvm::getOpcodeDef(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getScalarType(), llvm::APInt::getSExtValue(), getTargetLowering(), llvm::APInt::isAllOnes(), llvm::MachineInstr::IsExact, llvm::APInt::isNegative(), llvm::APInt::isOne(), llvm::APInt::isStrictlyPositive(), llvm::SignedDivisionByConstantInfo::Magic, llvm::matchUnaryPredicate(), MI, MRI, llvm::APInt::multiplicativeInverse(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SignedDivisionByConstantInfo::ShiftAmount, and T.
Referenced by applySDivOrSRemByConst().
| MachineInstr * CombinerHelper::buildUDivOrURemUsingMul | ( | MachineInstr & | MI | ) | const |
Given an G_UDIV MI or G_UREM MI expressing a divide by constant, return an expression that implements it by multiplying by a magic number.
Ref: "Hacker's Delight" or "The PowerPC Compiler Writer's Guide".
Definition at line 5622 of file CombinerHelper.cpp.
References assert(), Builder, C(), llvm::cast(), llvm::APInt::countl_zero(), llvm::APInt::countr_zero(), llvm::SmallVectorTemplateCommon< T, typename >::empty(), llvm::UnsignedDivisionByConstantInfo::get(), llvm::APInt::getBitWidth(), llvm::getDefIgnoringCopies(), llvm::getIConstantSplatVal(), llvm::APInt::getOneBitSet(), llvm::getOpcodeDef(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getScalarType(), getTargetLowering(), llvm::APInt::getZero(), llvm::CmpInst::ICMP_EQ, llvm::LLT::integer(), llvm::UnsignedDivisionByConstantInfo::IsAdd, llvm::MachineInstr::IsExact, llvm::APInt::isOne(), llvm_unreachable, llvm::APInt::lshrInPlace(), llvm::UnsignedDivisionByConstantInfo::Magic, llvm::matchUnaryPredicate(), MI, MRI, llvm::APInt::multiplicativeInverse(), llvm::UnsignedDivisionByConstantInfo::PostShift, llvm::UnsignedDivisionByConstantInfo::PreShift, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and VT.
Referenced by applyUDivOrURemByConst().
| bool CombinerHelper::canCombineFMadOrFMA | ( | MachineInstr & | MI, |
| bool & | AllowFusionGlobally, | ||
| bool & | HasFMAD, | ||
| bool & | Aggressive, | ||
| bool | CanReassociate = false ) const |
Definition at line 6395 of file CombinerHelper.cpp.
References llvm::Aggressive, llvm::FPOpFusion::Fast, llvm::MachineInstr::FmContract, llvm::MachineInstr::FmReassoc, isLegalOrBeforeLegalizer(), isPreLegalize(), MI, MRI, and Options.
Referenced by matchCombineFAddFMAFMulToFMadOrFMA(), matchCombineFAddFMulToFMadOrFMA(), matchCombineFAddFpExtFMulToFMadOrFMA(), matchCombineFAddFpExtFMulToFMadOrFMAAggressive(), matchCombineFSubFMulToFMadOrFMA(), matchCombineFSubFNegFMulToFMadOrFMA(), matchCombineFSubFpExtFMulToFMadOrFMA(), and matchCombineFSubFpExtFNegFMulToFMadOrFMA().
| bool CombinerHelper::dominates | ( | const MachineInstr & | DefMI, |
| const MachineInstr & | UseMI ) const |
Returns true if DefMI dominates UseMI.
By definition an instruction dominates itself.
If we haven't been provided with a MachineDominatorTree during construction, this function returns a conservative result that tracks just a single basic block.
Definition at line 1075 of file CombinerHelper.cpp.
References assert(), DefMI, isPredecessor(), MDT, and UseMI.
Referenced by applyCombineDivRem(), and matchRepeatedFPDivisor().
| void CombinerHelper::eraseInst | ( | MachineInstr & | MI | ) | const |
Erase MI.
Definition at line 2889 of file CombinerHelper.cpp.
References MI.
Referenced by applyCombineTruncOfShift(), and applyFsubToFneg().
|
inline |
Definition at line 136 of file CombinerHelper.h.
References Builder.
| LLVMContext & CombinerHelper::getContext | ( | ) | const |
Definition at line 82 of file CombinerHelper.cpp.
References Builder.
| const DataLayout & CombinerHelper::getDataLayout | ( | ) | const |
Definition at line 78 of file CombinerHelper.cpp.
References llvm::MachineFunction::getDataLayout(), and getMachineFunction().
| const MachineFunction & CombinerHelper::getMachineFunction | ( | ) | const |
Definition at line 74 of file CombinerHelper.cpp.
References Builder.
Referenced by getDataLayout().
|
inline |
Definition at line 144 of file CombinerHelper.h.
References RBI.
| const RegisterBank * CombinerHelper::getRegBank | ( | Register | Reg | ) | const |
Get the register bank of Reg.
If Reg has not been assigned a register, a register class, or a register bank, then this returns nullptr.
Definition at line 221 of file CombinerHelper.cpp.
Referenced by matchPtrAddImmedChain().
| const TargetLowering & CombinerHelper::getTargetLowering | ( | ) | const |
Definition at line 70 of file CombinerHelper.cpp.
References Builder.
Referenced by applyCombineTruncOfShift(), applyOptBrCondByInvertingCond(), applySDivByPow2(), applySimplifySRemByPow2(), applyUDivByPow2(), applyUMulHToLShr(), buildSDivOrSRemUsingMul(), buildUDivOrURemUsingMul(), isDesirableToCommuteWithShift(), matchBitfieldExtractFromAnd(), matchBitfieldExtractFromSExtInReg(), matchBitfieldExtractFromShr(), matchBitfieldExtractFromShrAnd(), matchCombineExtractedVectorLoad(), matchCombineShlOfExtend(), matchCombineTruncOfShift(), matchExtractVecEltBuildVec(), matchExtractVectorElementWithBuildVector(), matchExtractVectorElementWithBuildVectorTrunc(), matchFPowIExpansion(), matchHoistLogicOpWithSameOpcodeHands(), matchICmpToLHSKnownBits(), matchICmpToTrueFalseKnownBits(), matchLoadOrCombine(), matchNarrowBinopFeedingAnd(), matchNonNegZext(), matchRepeatedFPDivisor(), matchSDivOrSRemByConst(), matchSuboCarryOut(), matchUDivOrURemByConst(), matchUMulHToLShr(), and tryReassocBinOp().
|
inline |
Definition at line 140 of file CombinerHelper.h.
References TII.
|
inline |
Definition at line 142 of file CombinerHelper.h.
References TRI.
|
inline |
Definition at line 134 of file CombinerHelper.h.
References VT.
Ty is a legal integer constant type on the target. Definition at line 178 of file CombinerHelper.cpp.
References llvm::LLT::getElementType(), isLegal(), isLegalOrBeforeLegalizer(), and isPreLegalize().
Referenced by matchAddOverflow(), matchCastOfInteger(), matchCombineSubToAdd(), matchExtractVectorElementWithShuffleVector(), matchMulOBy0(), and matchSuboCarryOut().
| bool CombinerHelper::isDesirableToCommuteWithShift | ( | const MachineInstr & | MI | ) | const |
MI (a G_SHL) with the binop feeding it. Definition at line 2126 of file CombinerHelper.cpp.
References getTargetLowering(), llvm::TargetLowering::isDesirableToCommuteWithShift(), isPreLegalize(), and MI.
| bool CombinerHelper::isLegal | ( | const LegalityQuery & | Query | ) | const |
Query is legal on the target. Definition at line 156 of file CombinerHelper.cpp.
References assert(), llvm::LegalizeActions::Legal, and LI.
Referenced by isConstantLegalOrBeforeLegalizer(), isLegalOrBeforeLegalizer(), isLegalOrHasWidenScalar(), matchAVG(), matchCombineBuildUnmerge(), matchCombineBuildVectorOfBitcast(), matchSDivOrSRemByConst(), matchSimplifyNegMinMax(), and matchUseVectorTruncate().
| bool CombinerHelper::isLegalOrBeforeLegalizer | ( | const LegalityQuery & | Query | ) | const |
Query is legal on the target. Definition at line 161 of file CombinerHelper.cpp.
References isLegal(), and isPreLegalize().
Referenced by canCombineFMadOrFMA(), isConstantLegalOrBeforeLegalizer(), matchAddOverflow(), matchAshrShlToSextInreg(), matchCastOfBuildVector(), matchCastOfSelect(), matchCombineConcatVectors(), matchCombineDivRem(), matchCombineExtractedVectorLoad(), matchCombineLoadWithAndMask(), matchCombineShlOfExtend(), matchCombineShuffleConcat(), matchCombineSubToAdd(), matchCombineTruncOfShift(), matchCountZeroToZeroPoison(), matchExtOfExt(), matchExtractVectorElement(), matchExtractVectorElementWithBuildVectorTrunc(), matchExtractVectorElementWithShuffleVector(), llvm::AMDGPUCombinerHelper::matchFoldFAbsFptrunc(), matchFreezeOfSingleMaybePoisonOperand(), matchFunnelShiftToRotate(), matchHoistLogicOpWithSameOpcodeHands(), matchICmpToLHSKnownBits(), matchInsertVectorElementOOB(), matchLoadOrCombine(), matchMergeXAndUndef(), matchMergeXAndZero(), matchNarrowBinop(), matchNarrowBinopFeedingAnd(), matchNonNegZext(), matchOrShiftToFunnelShift(), matchRedundantNegOperands(), matchSDivOrSRemByConst(), matchSelectIMinMax(), matchSextInRegOfLoad(), matchSextOfTrunc(), matchShlOfVScale(), matchShuffleDisjointMask(), matchSuboCarryOut(), matchSubOfVScale(), matchTruncateOfExt(), matchTruncUSatUToFPTOUISat(), matchUDivOrURemByConst(), matchUMulHToLShr(), matchUnmergeValuesAnyExtBuildVector(), and matchZextOfTrunc().
| bool CombinerHelper::isLegalOrHasFewerElements | ( | const LegalityQuery & | Query | ) | const |
Query is legal on the target, or if Query will perform a FewerElements action on the target. Definition at line 171 of file CombinerHelper.cpp.
References llvm::LegalizeActions::FewerElements, llvm::LegalizeActions::Legal, and LI.
Referenced by matchTruncSSatS(), matchTruncSSatU(), and matchTruncUSatU().
| bool CombinerHelper::isLegalOrHasWidenScalar | ( | const LegalityQuery & | Query | ) | const |
Query is legal on the target, or if Query will perform WidenScalar action on the target. Definition at line 166 of file CombinerHelper.cpp.
References isLegal(), LI, and llvm::LegalizeActions::WidenScalar.
Referenced by matchSDivOrSRemByConst().
| bool CombinerHelper::isPredecessor | ( | const MachineInstr & | DefMI, |
| const MachineInstr & | UseMI ) const |
Returns true if DefMI precedes UseMI or they are the same instruction.
Both must be in the same basic block.
Definition at line 1059 of file CombinerHelper.cpp.
References assert(), DefMI, llvm::find_if(), llvm_unreachable, MBB, MI, and UseMI.
Referenced by dominates().
| bool CombinerHelper::isPreLegalize | ( | ) | const |
Definition at line 154 of file CombinerHelper.cpp.
References IsPreLegalize.
Referenced by canCombineFMadOrFMA(), isConstantLegalOrBeforeLegalizer(), isDesirableToCommuteWithShift(), isLegalOrBeforeLegalizer(), and matchCombineExtendingLoads().
| bool CombinerHelper::matchAddEToAddO | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Match: (G_*ADDE x, y, 0) -> (G_*ADDO x, y) (G_*SUBE x, y, 0) -> (G_*SUBO x, y)
Definition at line 5544 of file CombinerHelper.cpp.
References assert(), B(), llvm::MIPatternMatch::m_SpecificICstOrSplat(), MI, llvm::MIPatternMatch::mi_match(), MRI, and Observer.
| bool CombinerHelper::matchAddOfVScale | ( | const MachineOperand & | MO, |
| BuildFnTy & | MatchInfo ) const |
Definition at line 365 of file CombinerHelperVectorOps.cpp.
References B(), llvm::GenericMachineInstr::getReg(), llvm::MachineOperand::getReg(), llvm::GVScale::getSrc(), llvm::MIPatternMatch::m_GAdd(), llvm::MIPatternMatch::m_GVScale(), llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchAddOverflow | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Combine addos.
Definition at line 8158 of file CombinerHelper.cpp.
References llvm::Add, llvm::ConstantRange::AlwaysOverflowsHigh, llvm::ConstantRange::AlwaysOverflowsLow, B(), llvm::cast(), llvm::ConstantRange::fromKnownBits(), llvm::MachineInstr::getFlag(), llvm::GBinOp::getLHSReg(), llvm::getOpcodeDef(), llvm::GBinOp::getRHSReg(), isConstantLegalOrBeforeLegalizer(), isLegalOrBeforeLegalizer(), llvm::ConstantRange::MayOverflow, MI, MRI, llvm::ConstantRange::NeverOverflows, llvm::MachineInstr::NoSWrap, llvm::MachineInstr::NoUWrap, llvm::ConstantRange::signedAddMayOverflow(), llvm::ConstantRange::unsignedAddMayOverflow(), and VT.
| bool CombinerHelper::matchAddSubSameReg | ( | MachineInstr & | MI, |
| Register & | Src ) const |
Transform G_ADD(x, G_SUB(y, x)) to y.
Transform G_ADD(G_SUB(y, x), x) to y.
Definition at line 7081 of file CombinerHelper.cpp.
References assert(), llvm::MIPatternMatch::m_GSub(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchAllExplicitUsesAreUndef | ( | MachineInstr & | MI | ) | const |
Return true if all register explicit use operands on MI are defined by a G_IMPLICIT_DEF.
Definition at line 2837 of file CombinerHelper.cpp.
References llvm::all_of(), and MI.
| bool CombinerHelper::matchAnd | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
| bool CombinerHelper::matchAndOrDisjointMask | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Definition at line 4817 of file CombinerHelper.cpp.
References assert(), B(), llvm::MIPatternMatch::m_all_of(), llvm::MIPatternMatch::m_GAnd(), llvm::MIPatternMatch::m_GOr(), llvm::MIPatternMatch::m_ICst(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), MRI, and Observer.
| bool CombinerHelper::matchAshrShlToSextInreg | ( | MachineInstr & | MI, |
| std::tuple< Register, int64_t > & | MatchInfo ) const |
Match ashr (shl x, C), C -> sext_inreg (C)
Definition at line 3396 of file CombinerHelper.cpp.
References assert(), isLegalOrBeforeLegalizer(), llvm::MIPatternMatch::m_GAShr(), llvm::MIPatternMatch::m_GShl(), llvm::MIPatternMatch::m_ICstOrSplat(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchAVG | ( | MachineInstr & | MI, |
| MachineRegisterInfo & | MRI, | ||
| Register | X, | ||
| Register | Y, | ||
| unsigned | TargetOpc ) const |
| LLVM_ABI bool llvm::CombinerHelper::matchBinOpSameVal | ( | MachineInstr & | MI | ) | const |
Optimize (x op x) -> x.
References llvm::Aggressive, B(), llvm::sampleprof::Base, llvm::Exponent, LHS, LLVM_ABI, MI, MRI, llvm::Offset, Opc, llvm::Other, Reg, RHS, X, and Y.
| bool CombinerHelper::matchBinopWithNeg | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Fold a bitwiseop (~b +/- c) -> a bitwiseop ~(b -/+ c)
Definition at line 3256 of file CombinerHelper.cpp.
| bool CombinerHelper::matchBitfieldExtractFromAnd | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Match: and (lshr x, cst), mask -> ubfx x, cst, width.
Form a G_UBFX from "(a srl b) & mask", where b and mask are constants.
Definition at line 4883 of file CombinerHelper.cpp.
References llvm::cast(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), getTargetLowering(), LI, MI, and MRI.
| bool CombinerHelper::matchBitfieldExtractFromSExtInReg | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Form a G_SBFX from a G_SEXT_INREG fed by a right shift.
Definition at line 4853 of file CombinerHelper.cpp.
References assert(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), getTargetLowering(), LI, MI, and MRI.
| bool CombinerHelper::matchBitfieldExtractFromShr | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Match: shr (shl x, n), k -> sbfx/ubfx x, pos, width.
Definition at line 4932 of file CombinerHelper.cpp.
References assert(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), getTargetLowering(), LI, MI, and MRI.
| bool CombinerHelper::matchBitfieldExtractFromShrAnd | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Match: shr (and x, n), k -> ubfx x, pos, width.
Definition at line 4982 of file CombinerHelper.cpp.
References assert(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), getTargetLowering(), LI, MI, and MRI.
| bool CombinerHelper::matchBuildVectorIdentityFold | ( | MachineInstr & | MI, |
| Register & | MatchInfo ) const |
Definition at line 7097 of file CombinerHelper.cpp.
References llvm::LLT::getElementType(), llvm::LLT::getSizeInBits(), llvm::Hi, llvm::Lo, llvm::MIPatternMatch::m_any_of(), llvm::MIPatternMatch::m_GBitcast(), llvm::MIPatternMatch::m_GBuildVector(), llvm::MIPatternMatch::m_GBuildVectorTrunc(), llvm::MIPatternMatch::m_GCst(), llvm::MIPatternMatch::m_GImplicitDef(), llvm::MIPatternMatch::m_GLShr(), llvm::MIPatternMatch::m_GTrunc(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchCanonicalizeFCmp | ( | const MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Definition at line 115 of file CombinerHelperCompares.cpp.
References assert(), B(), llvm::cast(), llvm::GFConstant::getConstant(), llvm::CmpInst::getSwappedPredicate(), llvm::CmpInst::isFPPredicate(), MI, MRI, and std::swap().
| bool CombinerHelper::matchCanonicalizeICmp | ( | const MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Definition at line 90 of file CombinerHelperCompares.cpp.
References assert(), B(), llvm::cast(), llvm::GIConstant::getConstant(), llvm::CmpInst::getSwappedPredicate(), llvm::CmpInst::isIntPredicate(), MI, MRI, and std::swap().
| bool CombinerHelper::matchCastOfBuildVector | ( | const MachineInstr & | CastMI, |
| const MachineInstr & | BVMI, | ||
| BuildFnTy & | MatchInfo ) const |
Definition at line 299 of file CombinerHelperCasts.cpp.
References B(), llvm::cast(), llvm::GMergeLikeInstr::getNumSources(), llvm::MachineInstr::getOpcode(), llvm::GenericMachineInstr::getReg(), llvm::LLT::getScalarType(), I, isLegalOrBeforeLegalizer(), MRI, and llvm::SmallVectorTemplateBase< T, bool >::push_back().
| bool CombinerHelper::matchCastOfInteger | ( | const MachineInstr & | CastMI, |
| APInt & | MatchInfo ) const |
Definition at line 364 of file CombinerHelperCasts.cpp.
References llvm::cast(), llvm::getIConstantFromReg(), llvm::MachineInstr::getOpcode(), llvm::GenericMachineInstr::getReg(), llvm::LLT::getScalarSizeInBits(), llvm::GCastOp::getSrcReg(), isConstantLegalOrBeforeLegalizer(), and MRI.
| bool CombinerHelper::matchCastOfSelect | ( | const MachineInstr & | Cast, |
| const MachineInstr & | SelectMI, | ||
| BuildFnTy & | MatchInfo ) const |
Definition at line 203 of file CombinerHelperCasts.cpp.
References B(), llvm::cast(), Cond, llvm::MachineInstr::getOpcode(), llvm::GenericMachineInstr::getReg(), isLegalOrBeforeLegalizer(), MRI, and Select.
| bool CombinerHelper::matchCombineAddP2IToPtrAdd | ( | MachineInstr & | MI, |
| std::pair< Register, bool > & | PtrRegAndCommute ) const |
Transform G_ADD (G_PTRTOINT x), y -> G_PTRTOINT (G_PTR_ADD x, y) Transform G_ADD y, (G_PTRTOINT x) -> G_PTRTOINT (G_PTR_ADD x, y)
Definition at line 2626 of file CombinerHelper.cpp.
References assert(), llvm::LLT::getScalarSizeInBits(), llvm::MIPatternMatch::m_GPtrToInt(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchCombineAnyExtTrunc | ( | MachineInstr & | MI, |
| Register & | Reg ) const |
Transform anyext(trunc(x)) to x.
Definition at line 2699 of file CombinerHelper.cpp.
References assert(), llvm::canReplaceReg(), llvm::getSrcRegIgnoringCopies(), llvm::Register::isValid(), llvm::MIPatternMatch::m_all_of(), llvm::MIPatternMatch::m_GTrunc(), llvm::MIPatternMatch::m_Reg(), llvm::MIPatternMatch::m_SpecificType(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchCombineBuildUnmerge | ( | MachineInstr & | MI, |
| MachineRegisterInfo & | MRI, | ||
| Register & | UnmergeSrc ) const |
Definition at line 3582 of file CombinerHelper.cpp.
References llvm::cast(), llvm::getDefIgnoringCopies(), llvm::getOpcodeDef(), I, isLegal(), IsPreLegalize, llvm::LLT::isVector(), MI, MRI, and llvm::Undef.
| bool CombinerHelper::matchCombineBuildVectorOfBitcast | ( | MachineInstr & | MI, |
| SmallVector< Register > & | Ops ) const |
Combine G_BUILD_VECTOR(G_UNMERGE(G_BITCAST), Undef) to G_BITCAST(G_BUILD_VECTOR(..))
Definition at line 411 of file CombinerHelper.cpp.
References AbstractManglingParser< Derived, Alloc >::Ops, llvm::all_of(), llvm::cast(), llvm::LLT::fixed_vector(), llvm::GUnmerge::getNumDefs(), llvm::getOpcodeDef(), llvm::GenericMachineInstr::getReg(), llvm::GUnmerge::getSourceReg(), isLegal(), llvm::LLT::isScalar(), llvm::MIPatternMatch::m_all_of(), llvm::MIPatternMatch::m_GBitcast(), llvm::MIPatternMatch::m_GImplicitDef(), llvm::MIPatternMatch::m_Reg(), llvm::MIPatternMatch::m_SpecificType(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchCombineConcatVectors | ( | MachineInstr & | MI, |
| SmallVector< Register > & | Ops ) const |
If MI is G_CONCAT_VECTORS, try to combine it.
Returns true if MI changed. Right now, we support:
Check if the G_CONCAT_VECTORS MI is undef or if it can be flattened into a build_vector. In the first case Ops will be empty In the second case Ops will contain the operands needed to produce the flattened build_vector.
Definition at line 330 of file CombinerHelper.cpp.
References AbstractManglingParser< Derived, Alloc >::Ops, assert(), Builder, isLegalOrBeforeLegalizer(), llvm::MIPatternMatch::m_MInstr(), MI, llvm::MIPatternMatch::mi_match(), MRI, and llvm::Undef.
| bool CombinerHelper::matchCombineConstPtrAddToI2P | ( | MachineInstr & | MI, |
| APInt & | NewCst ) const |
Definition at line 2669 of file CombinerHelper.cpp.
References Builder, llvm::cast(), llvm::getIConstantVRegVal(), llvm::MIPatternMatch::m_GIntToPtr(), llvm::MIPatternMatch::m_ICst(), MI, llvm::MIPatternMatch::mi_match(), MRI, llvm::APInt::sextOrTrunc(), and llvm::APInt::zextOrTrunc().
| bool CombinerHelper::matchCombineCopy | ( | MachineInstr & | MI | ) | const |
Definition at line 238 of file CombinerHelper.cpp.
References llvm::canReplaceReg(), MI, and MRI.
Referenced by tryCombineCopy().
| bool CombinerHelper::matchCombineDivRem | ( | MachineInstr & | MI, |
| MachineInstr *& | OtherMI ) const |
Try to combine G_[SU]DIV and G_[SU]REM into a single G_[SU]DIVREM when their source operands are identical.
Definition at line 1572 of file CombinerHelper.cpp.
References isLegalOrBeforeLegalizer(), llvm_unreachable, matchEqualDefs(), MI, MRI, and UseMI.
| bool CombinerHelper::matchCombineExtendingLoads | ( | MachineInstr & | MI, |
| PreferredTuple & | MatchInfo ) const |
Definition at line 792 of file CombinerHelper.cpp.
References llvm::dyn_cast(), llvm::GAnyLoad::getDstReg(), getExtLoadOpcForExtend(), llvm::GMemOperation::getMMO(), llvm::GLoadStore::getPointerReg(), llvm::LLT::getSizeInBits(), llvm::has_single_bit(), llvm::isa(), isPreLegalize(), llvm::LLT::isScalar(), llvm::LegalizeActions::Legal, LI, MI, MRI, and UseMI.
Referenced by tryCombineExtendingLoads().
| bool CombinerHelper::matchCombineExtractedVectorLoad | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Combine a G_EXTRACT_VECTOR_ELT of a load into a narrowed load.
Definition at line 1415 of file CombinerHelper.cpp.
References assert(), B(), C(), llvm::commonAlignment(), DL, llvm::MachineInstr::eraseFromParent(), llvm::Fast, llvm::MachinePointerInfo::getAddrSpace(), llvm::MachineMemOperand::getAlign(), llvm::Function::getContext(), llvm::MachineFunction::getDataLayout(), llvm::MachineFunction::getFunction(), llvm::getIConstantVRegVal(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::MachineFunction::getMachineMemOperand(), llvm::getOpcodeDef(), llvm::MachineInstr::getOperand(), llvm::MachineInstr::getParent(), llvm::MachineMemOperand::getPointerInfo(), llvm::MachineOperand::getReg(), llvm::LLT::getSizeInBits(), getTargetLowering(), llvm::LegalizerHelper::getVectorElementPointer(), llvm::MachinePointerInfo::getWithOffset(), II, llvm::LLT::isByteSized(), isLegalOrBeforeLegalizer(), MI, MRI, llvm::Offset, and llvm::Vector.
| bool CombinerHelper::matchCombineFAddFMAFMulToFMadOrFMA | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Transform (fadd (fma x, y, (fmul u, v)), z) -> (fma x, y, (fma u, v, z)) (fadd (fmad x, y, (fmul u, v)), z) -> (fmad x, y, (fmad u, v, z))
Definition at line 6542 of file CombinerHelper.cpp.
References llvm::Aggressive, assert(), B(), canCombineFMadOrFMA(), llvm::MachineInstr::getFlags(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MIPatternMatch::m_GFMul(), llvm::MIPatternMatch::m_MInstr(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), MRI, X, and Y.
| bool CombinerHelper::matchCombineFAddFMulToFMadOrFMA | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Transform (fadd (fmul x, y), z) -> (fma x, y, z) (fadd (fmul x, y), z) -> (fmad x, y, z)
Definition at line 6426 of file CombinerHelper.cpp.
References llvm::Aggressive, assert(), B(), canCombineFMadOrFMA(), hasMoreUses(), isContractableFMul(), llvm::MIPatternMatch::m_MInstr(), MI, llvm::MIPatternMatch::mi_match(), MRI, and std::swap().
| bool CombinerHelper::matchCombineFAddFpExtFMulToFMadOrFMA | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Transform (fadd (fpext (fmul x, y)), z) -> (fma (fpext x), (fpext y), z) (fadd (fpext (fmul x, y)), z) -> (fmad (fpext x), (fpext y), z)
Definition at line 6483 of file CombinerHelper.cpp.
References llvm::Aggressive, assert(), B(), canCombineFMadOrFMA(), llvm::MachineInstr::getFlags(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), hasMoreUses(), isContractableFMul(), llvm::MIPatternMatch::m_GFPExt(), llvm::MIPatternMatch::m_MInstr(), MI, llvm::MIPatternMatch::mi_match(), MRI, and std::swap().
| bool CombinerHelper::matchCombineFAddFpExtFMulToFMadOrFMAAggressive | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Definition at line 6608 of file CombinerHelper.cpp.
References llvm::Aggressive, assert(), B(), canCombineFMadOrFMA(), llvm::MachineInstr::getFlags(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), getReg(), llvm::MachineOperand::getReg(), hasMoreUses(), isContractableFMul(), llvm::MIPatternMatch::m_GFPExt(), llvm::MIPatternMatch::m_MInstr(), MI, llvm::MIPatternMatch::mi_match(), MRI, std::swap(), X, and Y.
| bool CombinerHelper::matchCombineFMinMaxNaN | ( | MachineInstr & | MI, |
| unsigned & | Info ) const |
Definition at line 6981 of file CombinerHelper.cpp.
References llvm::getConstantFPVRegVal(), llvm::ConstantFP::getValueAPF(), llvm::APFloat::isNaN(), MI, and MRI.
| bool CombinerHelper::matchCombineFSubFMulToFMadOrFMA | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Transform (fsub (fmul x, y), z) -> (fma x, y, -z) (fsub (fmul x, y), z) -> (fmad x, y, -z)
Definition at line 6754 of file CombinerHelper.cpp.
References llvm::Aggressive, assert(), B(), canCombineFMadOrFMA(), hasMoreUses(), isContractableFMul(), llvm::MIPatternMatch::m_MInstr(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchCombineFSubFNegFMulToFMadOrFMA | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Transform (fsub (fneg (fmul, x, y)), z) -> (fma (fneg x), y, (fneg z)) (fsub (fneg (fmul, x, y)), z) -> (fmad (fneg x), y, (fneg z))
Definition at line 6814 of file CombinerHelper.cpp.
References llvm::Aggressive, assert(), B(), canCombineFMadOrFMA(), llvm::MachineInstr::getFlags(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), isContractableFMul(), llvm::MIPatternMatch::m_GFNeg(), llvm::MIPatternMatch::m_MInstr(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchCombineFSubFpExtFMulToFMadOrFMA | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Transform (fsub (fpext (fmul x, y)), z) -> (fma (fpext x), (fpext y), (fneg z)) (fsub (fpext (fmul x, y)), z) -> (fmad (fpext x), (fpext y), (fneg z))
Definition at line 6865 of file CombinerHelper.cpp.
References llvm::Aggressive, assert(), B(), canCombineFMadOrFMA(), llvm::MachineInstr::getFlags(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), isContractableFMul(), llvm::MIPatternMatch::m_GFPExt(), llvm::MIPatternMatch::m_MInstr(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchCombineFSubFpExtFNegFMulToFMadOrFMA | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Transform (fsub (fpext (fneg (fmul x, y))), z) -> (fneg (fma (fpext x), (fpext y), z)) (fsub (fpext (fneg (fmul x, y))), z) -> (fneg (fmad (fpext x), (fpext y), z))
Definition at line 6919 of file CombinerHelper.cpp.
References llvm::Aggressive, assert(), B(), canCombineFMadOrFMA(), llvm::MachineInstr::getFlags(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), isContractableFMul(), llvm::MIPatternMatch::m_GFNeg(), llvm::MIPatternMatch::m_GFPExt(), llvm::MIPatternMatch::m_MInstr(), MI, llvm::MIPatternMatch::mi_match(), MRI, X, and Y.
| bool CombinerHelper::matchCombineIndexedLoadStore | ( | MachineInstr & | MI, |
| IndexedLoadStoreMatchInfo & | MatchInfo ) const |
Definition at line 1520 of file CombinerHelper.cpp.
References llvm::IndexedLoadStoreMatchInfo::Addr, llvm::IndexedLoadStoreMatchInfo::Base, llvm::cast(), llvm::GMemOperation::isAtomic(), llvm::IndexedLoadStoreMatchInfo::IsPre, MI, llvm::IndexedLoadStoreMatchInfo::Offset, and llvm::IndexedLoadStoreMatchInfo::RematOffset.
| bool CombinerHelper::matchCombineInsertVecElts | ( | MachineInstr & | MI, |
| SmallVectorImpl< Register > & | MatchInfo ) const |
Definition at line 3131 of file CombinerHelper.cpp.
References llvm::all_of(), assert(), llvm::LLT::getNumElements(), llvm::MachineInstr::getNumOperands(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), I, llvm::LLT::isScalableVector(), isValid(), llvm::LLT::isVector(), llvm::MIPatternMatch::m_GInsertVecElt(), llvm::MIPatternMatch::m_ICst(), llvm::MIPatternMatch::m_MInstr(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), MRI, and llvm::SmallVectorImpl< T >::resize().
| bool CombinerHelper::matchCombineLoadWithAndMask | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Match (and (load x), mask) -> zextload x.
Definition at line 973 of file CombinerHelper.cpp.
References assert(), B(), llvm::APInt::countr_one(), llvm::MachineInstr::eraseFromParent(), llvm::GAnyLoad::getDstReg(), llvm::getIConstantVRegValWithLookThrough(), llvm::MachineMemOperand::getPointerInfo(), llvm::LLT::getSizeInBits(), llvm::MachineMemOperand::getSizeInBits(), llvm::LocationSize::getValue(), llvm::isa(), llvm::MachineMemOperand::isAtomic(), isLegalOrBeforeLegalizer(), llvm::APInt::isMask(), llvm::isPowerOf2_32(), llvm::MachineMemOperand::isVolatile(), llvm::MIPatternMatch::m_GAnyLoad(), llvm::MIPatternMatch::m_MMO(), llvm::MIPatternMatch::m_Reg(), llvm::LegalityQuery::MemDesc::MemoryTy, MI, llvm::MIPatternMatch::mi_match(), MRI, RegSize, replaceRegWith(), and llvm::LLT::scalar().
| bool CombinerHelper::matchCombineMemCpyFamily | ( | MachineInstr & | MI, |
| MemCpyFamilyLoweringInfo & | MatchInfo, | ||
| unsigned | MaxLen = 0 ) const |
Definition at line 1726 of file CombinerHelper.cpp.
References llvm::canLowerMemCpyFamily(), MI, and MRI.
| bool CombinerHelper::matchCombineMergeUnmerge | ( | MachineInstr & | MI, |
| Register & | MatchInfo ) const |
Fold away a merge of an unmerge of the corresponding values.
Definition at line 2300 of file CombinerHelper.cpp.
References llvm::cast(), llvm::SmallVectorImpl< T >::emplace_back(), llvm::getOpcodeDef(), I, Merge, MI, MRI, and llvm::SmallVectorTemplateCommon< T, typename >::size().
| bool CombinerHelper::matchCombineMulToShl | ( | MachineInstr & | MI, |
| unsigned & | ShiftVal ) const |
Transform a multiply by a power-of-2 value to a left shift.
Definition at line 2194 of file CombinerHelper.cpp.
References assert(), llvm::getIConstantVRegValWithLookThrough(), MI, and MRI.
| bool CombinerHelper::matchCombineShiftToUnmerge | ( | MachineInstr & | MI, |
| unsigned | TargetShiftSize, | ||
| unsigned & | ShiftVal ) const |
Reduce a shift by a constant to an unmerge and a shift on a half sized type.
This will not produce a shift smaller than TargetShiftSize.
Definition at line 2510 of file CombinerHelper.cpp.
References assert(), llvm::getIConstantVRegValWithLookThrough(), MI, MRI, and Size.
Referenced by tryCombineShiftToUnmerge().
| bool CombinerHelper::matchCombineShlOfExtend | ( | MachineInstr & | MI, |
| RegisterImmPair & | MatchData ) const |
Definition at line 2248 of file CombinerHelper.cpp.
References assert(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), getTargetLowering(), llvm::RegisterImmPair::Imm, llvm::isConstantOrConstantSplatVector(), isLegalOrBeforeLegalizer(), LI, llvm::MIPatternMatch::m_GAnyExt(), llvm::MIPatternMatch::m_GSExt(), llvm::MIPatternMatch::m_GZExt(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), MRI, llvm::RegisterImmPair::Reg, and VT.
| bool CombinerHelper::matchCombineShuffleConcat | ( | MachineInstr & | MI, |
| SmallVector< Register > & | Ops ) const |
Definition at line 504 of file CombinerHelper.cpp.
References AbstractManglingParser< Derived, Alloc >::Ops, llvm::LLT::getNumElements(), llvm::GMergeLikeInstr::getNumSources(), llvm::GenericMachineInstr::getReg(), llvm::GMergeLikeInstr::getSourceReg(), isLegalOrBeforeLegalizer(), llvm::MIPatternMatch::m_GConcatVectors(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchCombineShuffleVector | ( | MachineInstr & | MI, |
| SmallVectorImpl< Register > & | Ops ) const |
Check if the G_SHUFFLE_VECTOR MI can be replaced by a concat_vectors.
Ops will contain the operands needed to produce the flattened concat_vectors.
Definition at line 588 of file CombinerHelper.cpp.
References AbstractManglingParser< Derived, Alloc >::Ops, assert(), Builder, MI, and MRI.
| bool CombinerHelper::matchCombineSubToAdd | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Definition at line 2220 of file CombinerHelper.cpp.
References B(), llvm::cast(), llvm::getIConstantFromReg(), Imm, isConstantLegalOrBeforeLegalizer(), isLegalOrBeforeLegalizer(), MI, MRI, llvm::MachineInstr::NoSWrap, llvm::MachineInstr::NoUWrap, Observer, and llvm::Sub.
| bool CombinerHelper::matchCombineTruncOfShift | ( | MachineInstr & | MI, |
| std::pair< MachineInstr *, LLT > & | MatchInfo ) const |
Transform trunc (shl x, K) to shl (trunc x), K if K < VT.getScalarSizeInBits().
Transforms trunc ([al]shr x, K) to (trunc ([al]shr (MidVT (trunc x)), K)) if K <= (MidVT.getScalarSizeInBits() - VT.getScalarSizeInBits()) MidVT is obtained by finding a legal type between the trunc's src and dst types.
Definition at line 2746 of file CombinerHelper.cpp.
References assert(), llvm::getDefIgnoringCopies(), getMidVTForTruncRightShiftCombine(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::LLT::getScalarSizeInBits(), getTargetLowering(), isLegalOrBeforeLegalizer(), llvm::Known, MI, MRI, and VT.
| bool CombinerHelper::matchCombineUnmergeConstant | ( | MachineInstr & | MI, |
| SmallVectorImpl< APInt > & | Csts ) const |
Transform G_UNMERGE Constant -> Constant1, Constant2, ...
Definition at line 2382 of file CombinerHelper.cpp.
References llvm::SmallVectorImpl< T >::emplace_back(), llvm::LLT::getSizeInBits(), llvm::APInt::lshr(), llvm::MIPatternMatch::m_GConstantOrFConstantBits(), MI, llvm::MIPatternMatch::mi_match(), MRI, and llvm::APInt::trunc().
| bool CombinerHelper::matchCombineUnmergeMergeToPlainValues | ( | MachineInstr & | MI, |
| SmallVectorImpl< Register > & | Operands ) const |
Transform <ty,...> G_UNMERGE(G_MERGE ty X, Y, Z) -> ty X, Y, Z.
Definition at line 2327 of file CombinerHelper.cpp.
References assert(), llvm::cast(), llvm::getOpcodeDef(), llvm::LLT::getSizeInBits(), MI, MRI, Operands, and peekThroughBitcast().
| bool CombinerHelper::matchCombineUnmergeUndef | ( | MachineInstr & | MI, |
| std::function< void(MachineIRBuilder &)> & | MatchInfo ) const |
Transform G_UNMERGE G_IMPLICIT_DEF -> G_IMPLICIT_DEF, G_IMPLICIT_DEF, ...
Definition at line 2417 of file CombinerHelper.cpp.
References B(), llvm::MIPatternMatch::m_GImplicitDef(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchCombineUnmergeWithDeadLanesToTrunc | ( | MachineInstr & | MI | ) | const |
Transform X, Y<dead> = G_UNMERGE Z -> X = G_TRUNC Z.
Definition at line 2432 of file CombinerHelper.cpp.
| bool CombinerHelper::matchCombineUnmergeZExtToZExt | ( | MachineInstr & | MI | ) | const |
Transform X, Y = G_UNMERGE(G_ZEXT(Z)) -> X = G_ZEXT(Z); Y = G_CONSTANT 0.
Definition at line 2455 of file CombinerHelper.cpp.
References assert(), llvm::LLT::getSizeInBits(), llvm::LLT::isVector(), llvm::MIPatternMatch::m_GZExt(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchCombineZextTrunc | ( | MachineInstr & | MI, |
| Register & | Reg ) const |
Transform zext(trunc(x)) to x.
Definition at line 2713 of file CombinerHelper.cpp.
References assert(), llvm::canReplaceReg(), llvm::LLT::getScalarSizeInBits(), llvm::MIPatternMatch::m_all_of(), llvm::MIPatternMatch::m_GTrunc(), llvm::MIPatternMatch::m_Reg(), llvm::MIPatternMatch::m_SpecificType(), MI, llvm::MIPatternMatch::mi_match(), MRI, and VT.
| bool CombinerHelper::matchCommuteConstantToRHS | ( | MachineInstr & | MI | ) | const |
Match constant LHS ops that should be commuted.
Definition at line 7388 of file CombinerHelper.cpp.
References llvm::getIConstantVRegVal(), llvm::MachineInstr::getOpcode(), llvm::MIPatternMatch::m_MInstr(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchCommuteFPConstantToRHS | ( | MachineInstr & | MI | ) | const |
Match constant LHS FP ops that should be commuted.
Definition at line 7421 of file CombinerHelper.cpp.
References llvm::MIPatternMatch::m_GFCstOrSplat(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchConstantFoldBinOp | ( | MachineInstr & | MI, |
| APInt & | MatchInfo ) const |
Do constant folding when opportunities are exposed after MIR building.
Definition at line 5367 of file CombinerHelper.cpp.
References llvm::ConstantFoldBinOp(), MI, and MRI.
| bool CombinerHelper::matchConstantFoldCastOp | ( | MachineInstr & | MI, |
| APInt & | MatchInfo ) const |
Do constant folding when opportunities are exposed after MIR building.
Definition at line 5337 of file CombinerHelper.cpp.
References llvm::ConstantFoldCastOp(), MI, and MRI.
| bool CombinerHelper::matchConstantFoldFMA | ( | MachineInstr & | MI, |
| ConstantFP *& | MatchInfo ) const |
Constant fold G_FMA/G_FMAD.
Definition at line 5390 of file CombinerHelper.cpp.
References _, assert(), llvm::APFloat::fusedMultiplyAdd(), llvm::getConstantFPVRegVal(), llvm::ConstantFP::getValueAPF(), MI, MRI, and llvm::APFloatBase::rmNearestTiesToEven.
| bool CombinerHelper::matchConstantFoldFPBinOp | ( | MachineInstr & | MI, |
| ConstantFP *& | MatchInfo ) const |
Do constant FP folding when opportunities are exposed after MIR building.
Definition at line 5378 of file CombinerHelper.cpp.
References llvm::ConstantFoldFPBinOp(), MI, and MRI.
| bool CombinerHelper::matchConstantFoldUnaryIntOp | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Constant fold a unary integer op (G_CTLZ, G_CTTZ, G_CTPOP and their _ZERO_POISON variants, G_ABS, G_BSWAP, G_BITREVERSE) when the operand is a scalar constant or a G_BUILD_VECTOR of constants.
Definition at line 5350 of file CombinerHelper.cpp.
References B(), llvm::ConstantFoldUnaryIntOp(), MI, and MRI.
| bool CombinerHelper::matchConstantFPOp | ( | const MachineOperand & | MOP, |
| double | C ) const |
Return true if MOP is defined by a G_FCONSTANT or splat with a value exactly equal to C.
Definition at line 2997 of file CombinerHelper.cpp.
References C(), llvm::MachineOperand::getReg(), llvm::MachineOperand::isReg(), llvm::MIPatternMatch::m_GFCstOrSplat(), llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchConstantLargerBitWidth | ( | MachineInstr & | MI, |
| unsigned | ConstIdx ) const |
Checks if constant at ConstIdx is larger than MI 's bitwidth.
| ConstIdx | Index of the constant |
Definition at line 3027 of file CombinerHelper.cpp.
References llvm::getIConstantVRegValWithLookThrough(), llvm::LLT::getSizeInBits(), MI, and MRI.
| bool CombinerHelper::matchConstantOp | ( | const MachineOperand & | MOP, |
| int64_t | C ) const |
Return true if MOP is defined by a G_CONSTANT or splat with a value equal to C.
Definition at line 2988 of file CombinerHelper.cpp.
References C(), llvm::MachineOperand::getReg(), llvm::isConstantOrConstantSplatVector(), llvm::MachineOperand::isReg(), and MRI.
| bool CombinerHelper::matchConstantSelectCmp | ( | MachineInstr & | MI, |
| unsigned & | OpIdx ) const |
Return true if a G_SELECT instruction MI has a constant comparison.
If true, OpIdx will store the operand index of the known selected value.
Definition at line 2879 of file CombinerHelper.cpp.
References llvm::cast(), llvm::GSelect::getCondReg(), llvm::isConstantOrConstantSplatVector(), MI, and MRI.
| bool CombinerHelper::matchCountZeroToZeroPoison | ( | MachineInstr & | MI | ) | const |
Definition at line 8851 of file CombinerHelper.cpp.
References getCountZeroPoisonOpcode(), isLegalOrBeforeLegalizer(), MI, MRI, and VT.
| bool CombinerHelper::matchCtls | ( | MachineInstr & | CtlzMI, |
| BuildFnTy & | MatchInfo ) const |
Definition at line 8760 of file CombinerHelper.cpp.
References assert(), B(), llvm::BitWidth, llvm::LegalizeActions::Custom, llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::LegalizeActions::Legal, LI, llvm::MIPatternMatch::m_DeferredReg(), llvm::MIPatternMatch::m_GAShr(), llvm::MIPatternMatch::m_GOr(), llvm::MIPatternMatch::m_GShl(), llvm::MIPatternMatch::m_GXor(), llvm::MIPatternMatch::m_OneUse(), llvm::MIPatternMatch::m_Reg(), llvm::MIPatternMatch::m_SpecificICst(), llvm::MIPatternMatch::mi_match(), MRI, llvm::LegalizeActions::WidenScalar, and X.
| bool CombinerHelper::matchDivByPow2 | ( | MachineInstr & | MI, |
| bool | IsSigned ) const |
Given an G_SDIV MI expressing a signed divided by a pow2 constant, return expressions that implements it by shifting.
Definition at line 6048 of file CombinerHelper.cpp.
References assert(), C(), llvm::cast(), llvm::dyn_cast(), llvm::matchUnaryPredicate(), MI, and MRI.
| bool CombinerHelper::matchEqualDefs | ( | const MachineOperand & | MOP1, |
| const MachineOperand & | MOP2 ) const |
Return true if MOP1 and MOP2 are register operands are defined by equivalent instructions.
Definition at line 2891 of file CombinerHelper.cpp.
References llvm::any_of(), Builder, llvm::dyn_cast(), llvm::MachineInstr::findRegisterDefOperandIdx(), llvm::getDefSrcRegIgnoringCopies(), llvm::GMemOperation::getMemSizeInBits(), llvm::MachineOperand::getReg(), llvm::MachineInstr::isDereferenceableInvariantLoad(), llvm::MachineOperand::isReg(), llvm::MachineInstr::mayLoadOrStore(), and MRI.
Referenced by matchCombineDivRem(), matchHoistLogicOpWithSameOpcodeHands(), and matchSelectSameVal().
| bool CombinerHelper::matchExtendThroughPhis | ( | MachineInstr & | MI, |
| MachineInstr *& | ExtMI ) const |
Definition at line 4399 of file CombinerHelper.cpp.
References Builder, llvm::cast(), DefMI, llvm::getDefIgnoringCopies(), llvm::MachineInstr::getOpcode(), I, llvm::SmallPtrSetImpl< PtrType >::insert(), MI, MRI, PHI, and llvm::SmallPtrSetImplBase::size().
| bool CombinerHelper::matchExtOfExt | ( | const MachineInstr & | FirstMI, |
| const MachineInstr & | SecondMI, | ||
| BuildFnTy & | MatchInfo ) const |
Definition at line 235 of file CombinerHelperCasts.cpp.
References B(), llvm::cast(), llvm::First, llvm::MachineInstr::getFlag(), llvm::MachineInstr::getOpcode(), llvm::GenericMachineInstr::getReg(), llvm::GCastOp::getSrcReg(), isLegalOrBeforeLegalizer(), MRI, llvm::MachineInstr::NoFlags, and llvm::MachineInstr::NonNeg.
| bool CombinerHelper::matchExtractAllEltsFromBuildVector | ( | MachineInstr & | MI, |
| SmallVectorImpl< std::pair< Register, MachineInstr * > > & | MatchInfo ) const |
Definition at line 4556 of file CombinerHelper.cpp.
References llvm::SmallBitVector::all(), assert(), llvm::getIConstantVRegVal(), llvm::LLT::getNumElements(), II, MI, MRI, and llvm::SmallBitVector::set().
| bool CombinerHelper::matchExtractVecEltBuildVec | ( | MachineInstr & | MI, |
| Register & | Reg ) const |
Definition at line 4500 of file CombinerHelper.cpp.
References assert(), llvm::getIConstantVRegValWithLookThrough(), llvm::getMVTForLLT(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), getTargetLowering(), llvm::MIPatternMatch::m_GTrunc(), llvm::MIPatternMatch::m_MInstr(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchExtractVectorElement | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Combine extract vector element.
Definition at line 33 of file CombinerHelperVectorOps.cpp.
References B(), llvm::cast(), llvm::getIConstantVRegValWithLookThrough(), llvm::GExtractVectorElement::getIndexReg(), llvm::LLT::getNumElements(), llvm::GenericMachineInstr::getReg(), llvm::GExtractVectorElement::getVectorReg(), llvm::LLT::isFixedVector(), isLegalOrBeforeLegalizer(), MI, MRI, and llvm::Vector.
| bool CombinerHelper::matchExtractVectorElementWithBuildVector | ( | const MachineInstr & | MI, |
| const MachineInstr & | MI2, | ||
| BuildFnTy & | MatchInfo ) const |
Combine extract vector element with a build vector on the vector register.
Definition at line 148 of file CombinerHelperVectorOps.cpp.
References B(), llvm::cast(), llvm::getIConstantFromReg(), llvm::GExtractVectorElement::getIndexReg(), llvm::getMVTForLLT(), llvm::GenericMachineInstr::getReg(), llvm::GMergeLikeInstr::getSourceReg(), getTargetLowering(), llvm::GExtractVectorElement::getVectorReg(), MI, MRI, and llvm::Vector.
| bool CombinerHelper::matchExtractVectorElementWithBuildVectorTrunc | ( | const MachineOperand & | MO, |
| BuildFnTy & | MatchInfo ) const |
Combine extract vector element with a build vector trunc on the vector register.
Definition at line 188 of file CombinerHelperVectorOps.cpp.
References B(), llvm::cast(), llvm::getDefIgnoringCopies(), llvm::getIConstantVRegValWithLookThrough(), llvm::GExtractVectorElement::getIndexReg(), llvm::getMVTForLLT(), llvm::getOpcodeDef(), llvm::GenericMachineInstr::getReg(), llvm::MachineOperand::getReg(), llvm::GMergeLikeInstr::getSourceReg(), getTargetLowering(), llvm::GExtractVectorElement::getVectorReg(), isLegalOrBeforeLegalizer(), MRI, and llvm::Vector.
| bool CombinerHelper::matchExtractVectorElementWithDifferentIndices | ( | const MachineOperand & | MO, |
| BuildFnTy & | MatchInfo ) const |
Combine extract vector element with a insert vector element on the vector register and different indices.
Definition at line 91 of file CombinerHelperVectorOps.cpp.
References B(), llvm::cast(), llvm::getDefIgnoringCopies(), llvm::getIConstantVRegValWithLookThrough(), llvm::GExtractVectorElement::getIndexReg(), llvm::getOpcodeDef(), llvm::GenericMachineInstr::getReg(), llvm::MachineOperand::getReg(), llvm::GExtractVectorElement::getVectorReg(), MRI, and llvm::Vector.
| bool CombinerHelper::matchExtractVectorElementWithShuffleVector | ( | const MachineInstr & | MI, |
| const MachineInstr & | MI2, | ||
| BuildFnTy & | MatchInfo ) const |
Combine extract vector element with a shuffle vector on the vector register.
Definition at line 255 of file CombinerHelperVectorOps.cpp.
References assert(), B(), llvm::cast(), llvm::getIConstantFromReg(), llvm::GExtractVectorElement::getIndexReg(), llvm::GShuffleVector::getMask(), llvm::LLT::getNumElements(), llvm::GenericMachineInstr::getReg(), llvm::GShuffleVector::getSrc1Reg(), llvm::GShuffleVector::getSrc2Reg(), isConstantLegalOrBeforeLegalizer(), isLegalOrBeforeLegalizer(), llvm::LLT::isVector(), MI, MRI, and llvm::Offset.
| bool CombinerHelper::matchFoldAMinusC1MinusC2 | ( | const MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Definition at line 8433 of file CombinerHelper.cpp.
References A(), B(), llvm::cast(), llvm::getIConstantFromReg(), llvm::GBinOp::getLHSReg(), llvm::GenericMachineInstr::getReg(), llvm::GBinOp::getRHSReg(), llvm::MIPatternMatch::m_GSub(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchFoldAMinusC1PlusC2 | ( | const MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Definition at line 8483 of file CombinerHelper.cpp.
References A(), llvm::Add, B(), llvm::cast(), llvm::getIConstantFromReg(), llvm::MIPatternMatch::m_GSub(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchFoldAPlusC1MinusC2 | ( | const MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Definition at line 8383 of file CombinerHelper.cpp.
References A(), B(), llvm::cast(), llvm::getIConstantFromReg(), llvm::MIPatternMatch::m_GAdd(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), MRI, and llvm::Sub.
| bool CombinerHelper::matchFoldBinOpIntoSelect | ( | MachineInstr & | MI, |
| unsigned & | SelectOpNo ) const |
Push a binary operator through a select on constants.
binop (select cond, K0, K1), K2 -> select cond, (binop K0, K2), (binop K1, K2)
Definition at line 3955 of file CombinerHelper.cpp.
References llvm::isAllOnesOrAllOnesSplat(), llvm::isConstantOrConstantVector(), llvm::isNullOrNullSplat(), llvm::MIPatternMatch::m_GISelect(), llvm::MIPatternMatch::m_MInstr(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchFoldC1Minus2MinusC2 | ( | const MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Definition at line 8458 of file CombinerHelper.cpp.
References A(), B(), llvm::cast(), llvm::getIConstantFromReg(), llvm::GBinOp::getLHSReg(), llvm::GenericMachineInstr::getReg(), llvm::GBinOp::getRHSReg(), llvm::MIPatternMatch::m_GSub(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchFoldC2MinusAPlusC1 | ( | const MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Definition at line 8408 of file CombinerHelper.cpp.
References A(), B(), llvm::cast(), llvm::getIConstantFromReg(), llvm::MIPatternMatch::m_GAdd(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), MRI, and llvm::Sub.
| bool CombinerHelper::matchFPowIExpansion | ( | MachineInstr & | MI, |
| int64_t | Exponent ) const |
Match FPOWI if it's safe to extend it into a series of multiplications.
Definition at line 8333 of file CombinerHelper.cpp.
References llvm::Exponent, getTargetLowering(), llvm::TargetLoweringBase::isBeneficialToExpandPowI(), and MI.
| bool CombinerHelper::matchFreezeOfSingleMaybePoisonOperand | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Definition at line 252 of file CombinerHelper.cpp.
References assert(), B(), llvm::canCreateUndefOrPoison(), llvm::cast(), llvm::MachineInstr::findRegisterUseOperand(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::MachineInstr::getParent(), llvm::MachineOperand::getReg(), llvm::isa(), llvm::isGuaranteedNotToBeUndefOrPoison(), isLegalOrBeforeLegalizer(), llvm::MachineInstr::isPHI(), llvm::MIPatternMatch::m_MInstr(), MI, llvm::MIPatternMatch::mi_match(), MRI, Observer, replaceRegOpWith(), replaceRegWith(), TRI, and llvm::MachineInstr::uses().
| bool CombinerHelper::matchFsubToFneg | ( | MachineInstr & | MI, |
| Register & | MatchInfo ) const |
Definition at line 6346 of file CombinerHelper.cpp.
References assert(), llvm::MachineInstr::FmNsz, llvm::getFConstantSplat(), llvm::getFConstantVRegValWithLookThrough(), MI, and MRI.
| bool CombinerHelper::matchFunnelShiftToRotate | ( | MachineInstr & | MI | ) | const |
Match an FSHL or FSHR that can be combined to a ROTR or ROTL rotate.
Definition at line 4676 of file CombinerHelper.cpp.
References assert(), isLegalOrBeforeLegalizer(), MI, MRI, Opc, X, and Y.
| bool CombinerHelper::matchHoistLogicOpWithSameOpcodeHands | ( | MachineInstr & | MI, |
| InstructionStepsMatchInfo & | MatchInfo ) const |
Match (logic_op (op x...), (op y...)) -> (op (logic_op x, y))
Definition at line 3274 of file CombinerHelper.cpp.
References assert(), llvm::Function::getContext(), llvm::getDefIgnoringCopies(), llvm::MachineFunction::getFunction(), llvm::MachineInstr::getNumOperands(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), getTargetLowering(), isLegalOrBeforeLegalizer(), llvm::MachineOperand::isReg(), llvm::TargetLoweringBase::isTruncateFree(), llvm::LLT::isValid(), llvm::Register::isValid(), llvm::TargetLoweringBase::isZExtFree(), matchEqualDefs(), MI, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), X, and Y.
| bool CombinerHelper::matchICmpToLHSKnownBits | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
MI can be replaced with its LHS based off of KnownBits information. Definition at line 4773 of file CombinerHelper.cpp.
References assert(), B(), llvm::getICmpTrueVal(), llvm::LLT::getSizeInBits(), getTargetLowering(), llvm::CmpInst::ICMP_EQ, llvm::CmpInst::isEquality(), isLegalOrBeforeLegalizer(), llvm::LLT::isVector(), llvm::MIPatternMatch::m_SpecificICst(), MI, llvm::MIPatternMatch::mi_match(), MRI, and VT.
| bool CombinerHelper::matchICmpToTrueFalseKnownBits | ( | MachineInstr & | MI, |
| int64_t & | MatchInfo ) const |
MI can be replaced with a true or false constant based off of KnownBits information. Definition at line 4729 of file CombinerHelper.cpp.
References assert(), llvm::ICmpInst::compare(), llvm::getICmpTrueVal(), getTargetLowering(), llvm::CmpInst::ICMP_UGE, llvm::CmpInst::ICMP_ULT, MI, MRI, and VT.
| bool CombinerHelper::matchInsertExtractVecEltOutOfBounds | ( | MachineInstr & | MI | ) | const |
Return true if a G_{EXTRACT,INSERT}_VECTOR_ELT has an out of range index.
Definition at line 2862 of file CombinerHelper.cpp.
References assert(), llvm::getIConstantVRegVal(), llvm::LLT::getNumElements(), llvm::LLT::isScalableVector(), MI, and MRI.
| bool CombinerHelper::matchInsertVectorElementOOB | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Combine insert vector element OOB.
Definition at line 342 of file CombinerHelperVectorOps.cpp.
References B(), llvm::cast(), llvm::getIConstantVRegValWithLookThrough(), llvm::LLT::getNumElements(), llvm::LLT::isFixedVector(), isLegalOrBeforeLegalizer(), MI, and MRI.
| bool CombinerHelper::matchLoadOrCombine | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Match expression trees of the form.
And check if the tree can be replaced with a M-bit load + possibly a bswap.
Definition at line 4285 of file CombinerHelper.cpp.
References assert(), bigEndianByteAt(), C(), DL, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::Fast, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::find(), llvm::Function::getContext(), llvm::MachineFunction::getDataLayout(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getMachineMemOperand(), llvm::GMemOperation::getMMO(), llvm::MachineMemOperand::getPointerInfo(), llvm::GLoadStore::getPointerReg(), getTargetLowering(), isBigEndian(), llvm::DataLayout::isBigEndian(), isLegalOrBeforeLegalizer(), littleEndianByteAt(), llvm::LegalityQuery::MemDesc::MemoryTy, MI, and MRI.
| bool CombinerHelper::matchLshrOfTruncOfLshr | ( | MachineInstr & | MI, |
| LshrOfTruncOfLshr & | MatchInfo, | ||
| MachineInstr & | ShiftMI ) const |
Fold (lshr (trunc (lshr x, C1)), C2) -> trunc (shift x, (C1 + C2))
Definition at line 2132 of file CombinerHelper.cpp.
References assert(), llvm::APInt::getBitWidth(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::LLT::getScalarSizeInBits(), llvm::LshrOfTruncOfLshr::InnerShiftTy, llvm::MIPatternMatch::m_ICstOrSplat(), llvm::LshrOfTruncOfLshr::Mask, llvm::LshrOfTruncOfLshr::MaskVal, MI, llvm::MIPatternMatch::mi_match(), MRI, llvm::LshrOfTruncOfLshr::ShiftAmt, llvm::LshrOfTruncOfLshr::ShiftAmtTy, llvm::LshrOfTruncOfLshr::Src, and llvm::APInt::zext().
| bool CombinerHelper::matchMergeXAndUndef | ( | const MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Definition at line 30 of file CombinerHelperArtifacts.cpp.
References assert(), B(), llvm::cast(), isLegalOrBeforeLegalizer(), Merge, MI, and MRI.
| bool CombinerHelper::matchMergeXAndZero | ( | const MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Definition at line 59 of file CombinerHelperArtifacts.cpp.
References B(), llvm::cast(), isLegalOrBeforeLegalizer(), Merge, MI, and MRI.
| bool CombinerHelper::matchMulOBy0 | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Match: (G_*MULO x, 0) -> 0 + no carry out.
Definition at line 5525 of file CombinerHelper.cpp.
References assert(), B(), isConstantLegalOrBeforeLegalizer(), llvm::MIPatternMatch::m_SpecificICstOrSplat(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchMulOBy2 | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Match: (G_UMULO x, 2) -> (G_UADDO x, x) (G_SMULO x, 2) -> (G_SADDO x, x)
Definition at line 5506 of file CombinerHelper.cpp.
References assert(), B(), Builder, llvm::MIPatternMatch::m_SpecificICstOrSplat(), MI, llvm::MIPatternMatch::mi_match(), MRI, Observer, and Opc.
| bool CombinerHelper::matchMulOfVScale | ( | const MachineOperand & | MO, |
| BuildFnTy & | MatchInfo ) const |
Definition at line 383 of file CombinerHelperVectorOps.cpp.
References B(), llvm::getIConstantVRegVal(), llvm::GenericMachineInstr::getReg(), llvm::MachineOperand::getReg(), llvm::GVScale::getSrc(), llvm::MIPatternMatch::m_GMul(), llvm::MIPatternMatch::m_GVScale(), llvm::MIPatternMatch::m_Reg(), llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchNarrowBinop | ( | const MachineInstr & | TruncMI, |
| const MachineInstr & | BinopMI, | ||
| BuildFnTy & | MatchInfo ) const |
trunc (binop X, C) --> binop (trunc X, trunc C).
Definition at line 339 of file CombinerHelperCasts.cpp.
References B(), llvm::cast(), llvm::GBinOp::getLHSReg(), llvm::MachineInstr::getOpcode(), llvm::GenericMachineInstr::getReg(), llvm::GBinOp::getRHSReg(), isLegalOrBeforeLegalizer(), and MRI.
| bool CombinerHelper::matchNarrowBinopFeedingAnd | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
MI. Definition at line 5415 of file CombinerHelper.cpp.
References assert(), B(), Builder, llvm::getDefIgnoringCopies(), llvm::getIConstantVRegValWithLookThrough(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::LLT::getSizeInBits(), getTargetLowering(), llvm::LLT::integer(), isLegalOrBeforeLegalizer(), llvm::LLT::isScalar(), MI, MRI, and Observer.
| bool CombinerHelper::matchNonNegZext | ( | const MachineOperand & | MO, |
| BuildFnTy & | MatchInfo ) const |
Combine zext nneg to sext.
Definition at line 119 of file CombinerHelperCasts.cpp.
References B(), llvm::getMVTForLLT(), llvm::MachineOperand::getReg(), getTargetLowering(), isLegalOrBeforeLegalizer(), llvm::MIPatternMatch::m_GZExt(), llvm::MIPatternMatch::m_Reg(), llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchNotCmp | ( | MachineInstr & | MI, |
| SmallVectorImpl< Register > & | RegsToNegate ) const |
Combine inverting a result of a compare into the opposite cond code.
Definition at line 3766 of file CombinerHelper.cpp.
References assert(), Builder, I, isConstValidTrue(), llvm::MIPatternMatch::m_GXor(), llvm::MIPatternMatch::m_ICst(), llvm::MIPatternMatch::m_ICstOrSplat(), llvm::MIPatternMatch::m_MInstr(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::SmallVectorTemplateCommon< T, typename >::size().
| bool CombinerHelper::matchOperandIsKnownToBeAPowerOfTwo | ( | const MachineOperand & | MO, |
| bool | OrNegative = false ) const |
Check if operand MO is known to be a power of 2.
When OrNegative is true, also match operands whose negation is a power of 2 (i.e. whose absolute value is a power of 2).
Definition at line 3073 of file CombinerHelper.cpp.
References llvm::MachineOperand::getReg(), llvm::isKnownToBeAPowerOfTwo(), MRI, and VT.
| bool CombinerHelper::matchOptBrCondByInvertingCond | ( | MachineInstr & | MI, |
| MachineInstr *& | BrCond ) const |
If a brcond's true block is not the fallthrough, make it so by inverting the condition and swapping operands.
Definition at line 1667 of file CombinerHelper.cpp.
References assert(), llvm::MachineOperand::getMBB(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), MBB, and MI.
| bool CombinerHelper::matchOr | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
| bool CombinerHelper::matchOrShiftToFunnelShift | ( | MachineInstr & | MI, |
| bool | AllowScalarConstants, | ||
| BuildFnTy & | MatchInfo ) const |
Definition at line 4623 of file CombinerHelper.cpp.
References assert(), B(), llvm::BitWidth, isLegalOrBeforeLegalizer(), llvm::MIPatternMatch::m_GLShr(), llvm::MIPatternMatch::m_GOr(), llvm::MIPatternMatch::m_GShl(), llvm::MIPatternMatch::m_GSub(), llvm::MIPatternMatch::m_ICstOrSplat(), llvm::MIPatternMatch::m_Reg(), llvm::MIPatternMatch::m_SpecificICstOrSplat(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchOverlappingAnd | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Fold and(and(x, C1), C2) -> C1&C2 ? and(x, C1&C2) : 0.
and(and(x, C1), C2) -> C1&C2 ? and(x, C1&C2) : 0
Definition at line 3429 of file CombinerHelper.cpp.
References assert(), B(), llvm::MIPatternMatch::m_GAnd(), llvm::MIPatternMatch::m_ICst(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), MRI, and replaceRegWith().
| bool CombinerHelper::matchPtrAddImmedChain | ( | MachineInstr & | MI, |
| PtrAddChain & | MatchInfo ) const |
Definition at line 1830 of file CombinerHelper.cpp.
References llvm::PtrAddChain::Bank, llvm::PtrAddChain::Base, llvm::sampleprof::Base, llvm::TargetLoweringBase::AddrMode::BaseOffs, llvm::dyn_cast(), llvm::PtrAddChain::Flags, llvm::getIConstantVRegValWithLookThrough(), llvm::GenericMachineInstr::getReg(), getRegBank(), llvm::APInt::getSExtValue(), llvm::getTypeForLLT(), llvm::TargetLoweringBase::AddrMode::HasBaseReg, llvm::PtrAddChain::Imm, llvm::MachineInstr::InBounds, llvm::MIPatternMatch::m_GPtrAdd(), llvm::MIPatternMatch::m_MIFlags(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), MRI, llvm::MachineInstr::NoUSWrap, llvm::MachineInstr::NoUWrap, and UseMI.
| bool CombinerHelper::matchPtrAddZero | ( | MachineInstr & | MI | ) | const |
}
Combine G_PTR_ADD with nullptr to G_INTTOPTR
Definition at line 3920 of file CombinerHelper.cpp.
References assert(), Builder, llvm::cast(), DL, llvm::getIConstantVRegVal(), llvm::isBuildVectorAllZeros(), llvm::MIPatternMatch::m_MInstr(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchReassocCommBinOp | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Reassociate commutative binary operations like G_ADD.
Definition at line 5321 of file CombinerHelper.cpp.
References MI, Opc, and tryReassocBinOp().
| bool CombinerHelper::matchReassocConstantInnerLHS | ( | GPtrAdd & | MI, |
| MachineInstr * | LHS, | ||
| MachineInstr * | RHS, | ||
| BuildFnTy & | MatchInfo ) const |
Definition at line 5149 of file CombinerHelper.cpp.
References B(), llvm::cast(), llvm::MachineInstr::InBounds, llvm::MIPatternMatch::m_GCst(), llvm::MIPatternMatch::m_GPtrAdd(), llvm::MIPatternMatch::m_OneNonDBGUse(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), MRI, llvm::MachineInstr::NoUSWrap, llvm::MachineInstr::NoUWrap, and Observer.
Referenced by matchReassocPtrAdd().
| bool CombinerHelper::matchReassocConstantInnerRHS | ( | GPtrAdd & | MI, |
| MachineInstr * | RHS, | ||
| BuildFnTy & | MatchInfo ) const |
Definition at line 5105 of file CombinerHelper.cpp.
References B(), Builder, llvm::getIConstantVRegVal(), llvm::MachineInstr::InBounds, MI, MRI, llvm::MachineInstr::NoUSWrap, llvm::MachineInstr::NoUWrap, and Observer.
Referenced by matchReassocPtrAdd().
| bool CombinerHelper::matchReassocFoldConstantsInSubTree | ( | GPtrAdd & | MI, |
| MachineInstr * | LHS, | ||
| MachineInstr * | RHS, | ||
| BuildFnTy & | MatchInfo ) const |
Definition at line 5201 of file CombinerHelper.cpp.
References B(), llvm::dyn_cast(), llvm::getIConstantVRegVal(), llvm::MachineInstr::InBounds, MI, MRI, llvm::MachineInstr::NoUSWrap, llvm::MachineInstr::NoUWrap, and Observer.
Referenced by matchReassocPtrAdd().
| bool CombinerHelper::matchReassocPtrAdd | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Reassociate pointer calculations with G_ADD involved, to allow better addressing mode usage.
Definition at line 5248 of file CombinerHelper.cpp.
References llvm::cast(), llvm::MIPatternMatch::m_MInstr(), matchReassocConstantInnerLHS(), matchReassocConstantInnerRHS(), matchReassocFoldConstantsInSubTree(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchRedundantAnd | ( | MachineInstr & | MI, |
| Register & | Replacement ) const |
MI is a G_AND instruction whose operands are x and y where x & y == x or x & y == y. (E.g., one of operands is all-ones value.)| [in] | MI | - The G_AND instruction. |
| [out] | Replacement | - A register the G_AND should be replaced with on success. |
Definition at line 3456 of file CombinerHelper.cpp.
References assert(), llvm::canReplaceReg(), llvm::KnownBits::isUnknown(), MI, MRI, llvm::KnownBits::One, VT, and llvm::KnownBits::Zero.
| bool CombinerHelper::matchRedundantBinOpInEquality | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Transform: (X + Y) == X -> Y == 0 (X - Y) == X -> Y == 0 (X ^ Y) == X -> Y == 0 (X + Y) != X -> Y != 0 (X - Y) != X -> Y != 0 (X ^ Y) != X -> Y != 0.
Definition at line 7300 of file CombinerHelper.cpp.
References assert(), B(), llvm::CmpInst::isEquality(), llvm::MIPatternMatch::m_any_of(), llvm::MIPatternMatch::m_c_GICmp(), llvm::MIPatternMatch::m_GAdd(), llvm::MIPatternMatch::m_GSub(), llvm::MIPatternMatch::m_GXor(), llvm::MIPatternMatch::m_Pred(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), MRI, Register, X, and Y.
| bool CombinerHelper::matchRedundantNegOperands | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Transform (fadd x, fneg(y)) -> (fsub x, y) (fadd fneg(x), y) -> (fsub y, x) (fsub x, fneg(y)) -> (fadd x, y) (fmul fneg(x), fneg(y)) -> (fmul x, y) (fdiv fneg(x), fneg(y)) -> (fdiv x, y) (fmad fneg(x), fneg(y), z) -> (fmad x, y, z) (fma fneg(x), fneg(y), z) -> (fma x, y, z)
fold (fsub x, fneg(y)) -> (fadd x, y)
Definition at line 6312 of file CombinerHelper.cpp.
References assert(), B(), isLegalOrBeforeLegalizer(), llvm::MIPatternMatch::m_GFAdd(), llvm::MIPatternMatch::m_GFNeg(), llvm::MIPatternMatch::m_GFSub(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), MRI, Observer, Opc, X, and Y.
| bool CombinerHelper::matchRedundantOr | ( | MachineInstr & | MI, |
| Register & | Replacement ) const |
MI is a G_OR instruction whose operands are x and y where x | y == x or x | y == y. (E.g., one of operands is all-zeros value.)| [in] | MI | - The G_OR instruction. |
| [out] | Replacement | - A register the G_OR should be replaced with on success. |
Definition at line 3512 of file CombinerHelper.cpp.
References assert(), llvm::canReplaceReg(), MI, MRI, llvm::KnownBits::One, VT, and llvm::KnownBits::Zero.
| bool CombinerHelper::matchRedundantSExtInReg | ( | MachineInstr & | MI | ) | const |
MI is a G_SEXT_INREG that can be erased. Definition at line 3554 of file CombinerHelper.cpp.
| bool CombinerHelper::matchRedundantSextInReg | ( | MachineInstr & | Root, |
| MachineInstr & | Other, | ||
| BuildFnTy & | MatchInfo ) const |
Definition at line 385 of file CombinerHelperCasts.cpp.
References assert(), B(), llvm::canReplaceReg(), llvm::MachineOperand::getImm(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), MRI, Observer, and llvm::Other.
| bool CombinerHelper::matchRepeatedFPDivisor | ( | MachineInstr & | MI, |
| SmallVector< MachineInstr * > & | MatchInfo ) const |
Definition at line 7012 of file CombinerHelper.cpp.
References assert(), llvm::SmallVectorTemplateCommon< T, typename >::back(), llvm::TargetLowering::combineRepeatedFPDivisors(), dominates(), llvm::MachineInstr::FmArcp, getTargetLowering(), llvm::isConstantOrConstantSplatVectorFP(), MI, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SmallVectorTemplateCommon< T, typename >::size(), std::swap(), X, and Y.
| bool CombinerHelper::matchRotateOutOfRange | ( | MachineInstr & | MI | ) | const |
Definition at line 4700 of file CombinerHelper.cpp.
References assert(), C(), llvm::dyn_cast(), llvm::matchUnaryPredicate(), MI, and MRI.
| bool CombinerHelper::matchSDivOrSRemByConst | ( | MachineInstr & | MI | ) | const |
Combine G_SDIV or G_SREM by constant into a multiply by magic constant.
Definition at line 5847 of file CombinerHelper.cpp.
References assert(), C(), llvm::LLT::changeElementSize(), llvm::getApproximateEVTForLLT(), llvm::LLT::getScalarSizeInBits(), getTargetLowering(), llvm::isConstantOrConstantVector(), llvm::MachineInstr::IsExact, isLegal(), isLegalOrBeforeLegalizer(), isLegalOrHasWidenScalar(), LI, llvm::MIPatternMatch::m_MInstr(), llvm::matchUnaryPredicate(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchSelect | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Combine selects.
Definition at line 7884 of file CombinerHelper.cpp.
References llvm::cast(), MI, and Select.
| bool CombinerHelper::matchSelectIMinMax | ( | const MachineOperand & | MO, |
| BuildFnTy & | MatchInfo ) const |
Combine select to integer min/max.
Definition at line 7781 of file CombinerHelper.cpp.
References B(), llvm::MachineOperand::getReg(), llvm::CmpInst::getSwappedPredicate(), llvm::CmpInst::ICMP_SGE, llvm::CmpInst::ICMP_SGT, llvm::CmpInst::ICMP_SLE, llvm::CmpInst::ICMP_SLT, llvm::CmpInst::ICMP_UGE, llvm::CmpInst::ICMP_UGT, llvm::CmpInst::ICMP_ULE, llvm::CmpInst::ICMP_ULT, llvm::CmpInst::isEquality(), isLegalOrBeforeLegalizer(), llvm::LLT::isPointerOrPointerVector(), llvm::MIPatternMatch::m_GICmp(), llvm::MIPatternMatch::m_GISelect(), llvm::MIPatternMatch::m_Pred(), llvm::MIPatternMatch::m_Reg(), llvm::MIPatternMatch::mi_match(), MRI, and std::swap().
| bool CombinerHelper::matchSelectSameVal | ( | MachineInstr & | MI | ) | const |
Optimize (cond ? x : x) -> x.
Definition at line 3065 of file CombinerHelper.cpp.
References assert(), llvm::canReplaceReg(), matchEqualDefs(), MI, and MRI.
| bool CombinerHelper::matchSextInRegOfLoad | ( | MachineInstr & | MI, |
| std::tuple< Register, unsigned > & | MatchInfo ) const |
Match sext_inreg(load p), imm -> sextload p.
Definition at line 1114 of file CombinerHelper.cpp.
References assert(), llvm::LLT::getSizeInBits(), llvm::MachineMemOperand::getSizeInBits(), llvm::LocationSize::getValue(), llvm::MachineMemOperand::isAtomic(), isLegalOrBeforeLegalizer(), llvm::isPowerOf2_32(), llvm::LLT::isVector(), llvm::MachineMemOperand::isVolatile(), llvm::MIPatternMatch::m_GLoad(), llvm::MIPatternMatch::m_MMO(), llvm::MIPatternMatch::m_Reg(), llvm::LegalityQuery::MemDesc::MemoryTy, MI, llvm::MIPatternMatch::mi_match(), MRI, and llvm::LLT::scalar().
| bool CombinerHelper::matchSextOfTrunc | ( | const MachineOperand & | MO, |
| BuildFnTy & | MatchInfo ) const |
Combine sext of trunc.
Definition at line 30 of file CombinerHelperCasts.cpp.
References B(), llvm::cast(), llvm::getDefIgnoringCopies(), llvm::MachineInstr::getFlag(), llvm::GenericMachineInstr::getReg(), llvm::MachineOperand::getReg(), llvm::LLT::getScalarSizeInBits(), llvm::GCastOp::getSrcReg(), isLegalOrBeforeLegalizer(), MRI, and llvm::MachineInstr::NoSWrap.
| bool CombinerHelper::matchSextTruncSextLoad | ( | MachineInstr & | MI | ) | const |
Definition at line 1087 of file CombinerHelper.cpp.
References assert(), llvm::getOpcodeDef(), llvm::MIPatternMatch::m_GTrunc(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchShiftImmedChain | ( | MachineInstr & | MI, |
| RegisterImmPair & | MatchInfo ) const |
Fold (shift (shift base, x), y) -> (shift base (x+y))
Definition at line 1924 of file CombinerHelper.cpp.
References assert(), llvm::sampleprof::Base, llvm::getIConstantVRegValWithLookThrough(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::RegisterImmPair::Imm, llvm::MIPatternMatch::m_MInstr(), MI, llvm::MIPatternMatch::mi_match(), MRI, and llvm::RegisterImmPair::Reg.
| bool CombinerHelper::matchShiftOfShiftedLogic | ( | MachineInstr & | MI, |
| ShiftOfShiftedLogic & | MatchInfo ) const |
If we have a shift-by-constant of a bitwise logic op that itself has a shift-by-constant operand with identical opcode, we may be able to convert that into 2 independent shifts followed by the logic op.
Definition at line 2001 of file CombinerHelper.cpp.
References assert(), llvm::getIConstantVRegValWithLookThrough(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::ShiftOfShiftedLogic::Logic, llvm::ShiftOfShiftedLogic::LogicNonShiftReg, llvm::MIPatternMatch::m_MInstr(), MI, llvm::MIPatternMatch::mi_match(), MRI, llvm::ShiftOfShiftedLogic::Shift2, and llvm::ShiftOfShiftedLogic::ValSum.
| bool CombinerHelper::matchShiftsTooBig | ( | MachineInstr & | MI, |
| std::optional< int64_t > & | MatchInfo ) const |
Match shifts greater or equal to the range (the bitwidth of the result datatype, or the effective bitwidth of the source value).
Definition at line 7368 of file CombinerHelper.cpp.
References C(), llvm::dyn_cast(), getMinUselessShift(), llvm::LLT::getScalarSizeInBits(), llvm::matchUnaryPredicate(), MI, MRI, and VT.
| bool CombinerHelper::matchShlOfVScale | ( | const MachineOperand & | MO, |
| BuildFnTy & | MatchInfo ) const |
Definition at line 429 of file CombinerHelperVectorOps.cpp.
References B(), llvm::getIConstantVRegVal(), llvm::GenericMachineInstr::getReg(), llvm::MachineOperand::getReg(), llvm::GVScale::getSrc(), isLegalOrBeforeLegalizer(), llvm::MIPatternMatch::m_GShl(), llvm::MIPatternMatch::m_GVScale(), llvm::MIPatternMatch::m_Reg(), llvm::MIPatternMatch::mi_match(), MRI, and llvm::APInt::shl().
| bool CombinerHelper::matchShuffleDisjointMask | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Turn shuffle a, b, mask -> shuffle undef, b, mask iff mask does not reference a.
Definition at line 8631 of file CombinerHelper.cpp.
References B(), llvm::cast(), commuteMask(), llvm::getOpcodeDef(), isLegalOrBeforeLegalizer(), MI, MRI, and llvm::Undef.
| bool CombinerHelper::matchShuffleUndefRHS | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Remove references to rhs if it is undef.
Definition at line 8587 of file CombinerHelper.cpp.
References B(), llvm::cast(), Changed, MI, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::ArrayRef< T >::size().
| bool CombinerHelper::matchSimplifyAddToSub | ( | MachineInstr & | MI, |
| std::tuple< Register, Register > & | MatchInfo ) const |
Return true if MI is a G_ADD which can be simplified to a G_SUB.
Definition at line 3111 of file CombinerHelper.cpp.
References llvm::MIPatternMatch::m_Neg(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchSimplifyNegMinMax | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Tranform (neg (min/max x, (neg x))) into (max/min x, (neg x)).
Definition at line 7855 of file CombinerHelper.cpp.
References assert(), B(), llvm::getInverseGMinMaxOpcode(), llvm::MachineInstr::getOpcode(), isLegal(), llvm::MIPatternMatch::m_all_of(), llvm::MIPatternMatch::m_any_of(), llvm::MIPatternMatch::m_DeferredReg(), llvm::MIPatternMatch::m_GSMax(), llvm::MIPatternMatch::m_GSMin(), llvm::MIPatternMatch::m_GUMax(), llvm::MIPatternMatch::m_GUMin(), llvm::MIPatternMatch::m_MInstr(), llvm::MIPatternMatch::m_Neg(), llvm::MIPatternMatch::m_OneUse(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), MRI, and X.
| bool CombinerHelper::matchSimplifySelectToMinMax | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
MI to a min/max instruction of some sort. Definition at line 7285 of file CombinerHelper.cpp.
References assert(), Cond, llvm::MIPatternMatch::m_GTrunc(), llvm::MIPatternMatch::m_OneNonDBGUse(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchSubAddSameReg | ( | MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Transform: (x + y) - y -> x (x + y) - x -> y x - (y + x) -> 0 - y x - (x + z) -> 0 - z.
Definition at line 5578 of file CombinerHelper.cpp.
References assert(), B(), llvm::MIPatternMatch::m_GAdd(), llvm::MIPatternMatch::m_GSub(), llvm::MIPatternMatch::m_ICstOrSplat(), llvm::MIPatternMatch::m_Reg(), llvm::MIPatternMatch::m_SpecificICstOrSplat(), MI, llvm::MIPatternMatch::mi_match(), MRI, X, and Y.
| bool CombinerHelper::matchSuboCarryOut | ( | const MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Definition at line 8683 of file CombinerHelper.cpp.
References llvm::ConstantRange::AlwaysOverflowsHigh, llvm::ConstantRange::AlwaysOverflowsLow, B(), llvm::cast(), llvm::ConstantRange::fromKnownBits(), llvm::GBinOpCarryOut::getCarryOutReg(), llvm::getICmpTrueVal(), llvm::GBinOpCarryOut::getLHSReg(), llvm::GenericMachineInstr::getReg(), llvm::GBinOpCarryOut::getRHSReg(), getTargetLowering(), isConstantLegalOrBeforeLegalizer(), isLegalOrBeforeLegalizer(), llvm::GSubCarryOut::isSigned(), llvm::LLT::isVector(), llvm::ConstantRange::MayOverflow, MI, MRI, llvm::ConstantRange::NeverOverflows, llvm::MachineInstr::NoSWrap, llvm::MachineInstr::NoUWrap, llvm::ConstantRange::signedSubMayOverflow(), llvm::ConstantRange::unsignedSubMayOverflow(), and VT.
| bool CombinerHelper::matchSubOfVScale | ( | const MachineOperand & | MO, |
| BuildFnTy & | MatchInfo ) const |
Definition at line 405 of file CombinerHelperVectorOps.cpp.
References B(), llvm::GenericMachineInstr::getReg(), llvm::MachineOperand::getReg(), llvm::GVScale::getSrc(), isLegalOrBeforeLegalizer(), llvm::MIPatternMatch::m_GSub(), llvm::MIPatternMatch::m_GVScale(), llvm::MIPatternMatch::m_MIFlags(), llvm::MIPatternMatch::m_Reg(), llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchTruncateOfExt | ( | const MachineInstr & | Root, |
| const MachineInstr & | ExtMI, | ||
| BuildFnTy & | MatchInfo ) const |
Transform trunc ([asz]ext x) to x or ([asz]ext x) or (trunc x).
Definition at line 140 of file CombinerHelperCasts.cpp.
References B(), llvm::cast(), llvm::MachineInstr::getOpcode(), llvm::GenericMachineInstr::getReg(), llvm::LLT::getScalarSizeInBits(), llvm::GCastOp::getSrcReg(), isLegalOrBeforeLegalizer(), and MRI.
| bool CombinerHelper::matchTruncBuildVectorFold | ( | MachineInstr & | MI, |
| Register & | MatchInfo ) const |
Definition at line 7143 of file CombinerHelper.cpp.
References llvm::MIPatternMatch::m_GBitcast(), llvm::MIPatternMatch::m_GBuildVector(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchTruncLshrBuildVectorFold | ( | MachineInstr & | MI, |
| Register & | MatchInfo ) const |
Definition at line 7154 of file CombinerHelper.cpp.
References llvm::LLT::getSizeInBits(), llvm::MIPatternMatch::m_GBitcast(), llvm::MIPatternMatch::m_GBuildVector(), llvm::MIPatternMatch::m_GCst(), llvm::MIPatternMatch::m_GLShr(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchTruncSSatS | ( | MachineInstr & | MI, |
| Register & | MatchInfo ) const |
Definition at line 6208 of file CombinerHelper.cpp.
References assert(), llvm::LLT::getScalarSizeInBits(), llvm::APInt::getSignedMaxValue(), llvm::APInt::getSignedMinValue(), isLegalOrHasFewerElements(), LI, llvm::MIPatternMatch::m_GSMax(), llvm::MIPatternMatch::m_GSMin(), llvm::MIPatternMatch::m_Reg(), llvm::MIPatternMatch::m_SpecificICstOrSplat(), MI, llvm::MIPatternMatch::mi_match(), MRI, llvm::MachineInstr::NoSWrap, and llvm::APInt::sext().
| bool CombinerHelper::matchTruncSSatU | ( | MachineInstr & | MI, |
| Register & | MatchInfo ) const |
Definition at line 6252 of file CombinerHelper.cpp.
References assert(), llvm::APInt::getMaxValue(), llvm::LLT::getScalarSizeInBits(), isLegalOrHasFewerElements(), LI, llvm::MIPatternMatch::m_GSMax(), llvm::MIPatternMatch::m_GSMin(), llvm::MIPatternMatch::m_GUMin(), llvm::MIPatternMatch::m_Reg(), llvm::MIPatternMatch::m_SpecificICstOrSplat(), MI, llvm::MIPatternMatch::mi_match(), MRI, and llvm::APInt::zext().
| bool CombinerHelper::matchTruncUSatU | ( | MachineInstr & | MI, |
| MachineInstr & | MinMI ) const |
Definition at line 6285 of file CombinerHelper.cpp.
References assert(), llvm::APInt::getMaxValue(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::LLT::getScalarSizeInBits(), isLegalOrHasFewerElements(), LI, llvm::MIPatternMatch::m_GSMax(), llvm::MIPatternMatch::m_Reg(), llvm::MIPatternMatch::m_SpecificICstOrSplat(), MI, llvm::MIPatternMatch::mi_match(), MRI, and llvm::APInt::zext().
| bool CombinerHelper::matchTruncUSatUToFPTOUISat | ( | MachineInstr & | MI, |
| MachineInstr & | SrcMI ) const |
Definition at line 6303 of file CombinerHelper.cpp.
References llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), isLegalOrBeforeLegalizer(), LI, MI, and MRI.
| bool CombinerHelper::matchUDivOrURemByConst | ( | MachineInstr & | MI | ) | const |
Combine G_UDIV or G_UREM by constant into a multiply by magic constant.
Definition at line 5791 of file CombinerHelper.cpp.
References assert(), C(), llvm::LLT::changeElementSize(), llvm::getApproximateEVTForLLT(), llvm::LLT::getScalarSizeInBits(), getTargetLowering(), llvm::isConstantOrConstantVector(), llvm::MachineInstr::IsExact, isLegalOrBeforeLegalizer(), llvm::LLT::isVector(), LI, llvm::MIPatternMatch::m_MInstr(), llvm::matchUnaryPredicate(), MI, llvm::MIPatternMatch::mi_match(), MRI, and llvm::LLT::scalar().
| bool CombinerHelper::matchUMulHToLShr | ( | MachineInstr & | MI | ) | const |
Definition at line 6172 of file CombinerHelper.cpp.
References assert(), C(), llvm::dyn_cast(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), getTargetLowering(), isLegalOrBeforeLegalizer(), llvm::matchUnaryPredicate(), MI, and MRI.
| bool CombinerHelper::matchUndefSelectCmp | ( | MachineInstr & | MI | ) | const |
Return true if a G_SELECT instruction MI has an undef comparison.
Definition at line 2856 of file CombinerHelper.cpp.
References assert(), llvm::getOpcodeDef(), MI, and MRI.
| bool CombinerHelper::matchUndefShuffleVectorMask | ( | MachineInstr & | MI | ) | const |
Return true if a G_SHUFFLE_VECTOR instruction MI has an undef mask.
Definition at line 2844 of file CombinerHelper.cpp.
References llvm::all_of(), assert(), and MI.
| bool CombinerHelper::matchUndefStore | ( | MachineInstr & | MI | ) | const |
Return true if a G_STORE instruction MI is storing an undef value.
Definition at line 2850 of file CombinerHelper.cpp.
References assert(), llvm::getOpcodeDef(), MI, and MRI.
| bool CombinerHelper::matchUnmergeValuesAnyExtBuildVector | ( | const MachineInstr & | MI, |
| BuildFnTy & | MatchInfo ) const |
Definition at line 8508 of file CombinerHelper.cpp.
References AbstractManglingParser< Derived, Alloc >::Ops, B(), llvm::cast(), llvm::LLT::getElementType(), llvm::GUnmerge::getNumDefs(), llvm::LLT::getNumElements(), llvm::GMergeLikeInstr::getNumSources(), llvm::MachineInstr::getOperand(), llvm::GenericMachineInstr::getReg(), llvm::MachineOperand::getReg(), llvm::GMergeLikeInstr::getSourceReg(), llvm::GUnmerge::getSourceReg(), I, llvm::LLT::isFixedVector(), isLegalOrBeforeLegalizer(), llvm::MIPatternMatch::m_GAnyExt(), llvm::MIPatternMatch::m_GBuildVector(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchUseVectorTruncate | ( | MachineInstr & | MI, |
| Register & | MatchInfo ) const |
Definition at line 3670 of file CombinerHelper.cpp.
References llvm::BuildMI(), llvm::cast(), llvm::LLT::changeElementType(), llvm::LLT::getElementCount(), llvm::LLT::getElementType(), llvm::LLT::getNumElements(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::LLT::getScalarType(), llvm::GUnmerge::getSourceReg(), I, llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::isKnownMultipleOf(), isLegal(), IsPreLegalize, llvm::MIPatternMatch::m_GImplicitDef(), llvm::MIPatternMatch::m_GTrunc(), llvm::MIPatternMatch::m_GUnmerge(), llvm::MIPatternMatch::m_MInstr(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
| bool CombinerHelper::matchXorOfAndWithSameReg | ( | MachineInstr & | MI, |
| std::pair< Register, Register > & | MatchInfo ) const |
Fold (xor (and x, y), y) -> (and (not x), y) {.
Definition at line 3876 of file CombinerHelper.cpp.
References assert(), llvm::MIPatternMatch::m_GAnd(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), MRI, std::swap(), X, and Y.
| bool CombinerHelper::matchZextOfTrunc | ( | const MachineOperand & | MO, |
| BuildFnTy & | MatchInfo ) const |
Combine zext of trunc.
Definition at line 84 of file CombinerHelperCasts.cpp.
References B(), llvm::cast(), llvm::getDefIgnoringCopies(), llvm::GenericMachineInstr::getReg(), llvm::MachineOperand::getReg(), llvm::LLT::getScalarSizeInBits(), llvm::GCastOp::getSrcReg(), isLegalOrBeforeLegalizer(), MRI, llvm::MachineInstr::NonNeg, and llvm::MachineInstr::NoUWrap.
| void CombinerHelper::replaceInstWithConstant | ( | MachineInstr & | MI, |
| APInt | C ) const |
| void CombinerHelper::replaceInstWithConstant | ( | MachineInstr & | MI, |
| int64_t | C ) const |
| void CombinerHelper::replaceInstWithFConstant | ( | MachineInstr & | MI, |
| ConstantFP * | CFP ) const |
Replace an instruction with an G_FCONSTANT with value CFP.
Definition at line 3098 of file CombinerHelper.cpp.
References assert(), Builder, llvm::ConstantFP::getValueAPF(), and MI.
| void CombinerHelper::replaceInstWithFConstant | ( | MachineInstr & | MI, |
| double | C ) const |
| void CombinerHelper::replaceInstWithUndef | ( | MachineInstr & | MI | ) | const |
Replace an instruction with a G_IMPLICIT_DEF.
Definition at line 3105 of file CombinerHelper.cpp.
| void CombinerHelper::replaceOpcodeWith | ( | MachineInstr & | FromMI, |
| unsigned | ToOpcode ) const |
Replace the opcode in instruction with a new opcode and inform the observer of the changes.
Definition at line 212 of file CombinerHelper.cpp.
References Builder, Observer, and llvm::MachineInstr::setDesc().
Referenced by applyCountZeroToZeroPoison(), and llvm::AMDGPUCombinerHelper::applyFoldableFneg().
| void CombinerHelper::replaceRegOpWith | ( | MachineRegisterInfo & | MRI, |
| MachineOperand & | FromRegOp, | ||
| Register | ToReg ) const |
Replace a single register operand with a new register and inform the observer of the changes.
Definition at line 201 of file CombinerHelper.cpp.
References assert(), llvm::MachineOperand::getParent(), MRI, Observer, and llvm::MachineOperand::setReg().
Referenced by applyCombineExtendingLoads(), llvm::AMDGPUCombinerHelper::applyFoldableFneg(), and matchFreezeOfSingleMaybePoisonOperand().
| void CombinerHelper::replaceRegWith | ( | MachineRegisterInfo & | MRI, |
| Register | FromReg, | ||
| Register | ToReg ) const |
MachineRegisterInfo::replaceRegWith() and inform the observer of the changes.
Definition at line 189 of file CombinerHelper.cpp.
References Builder, MRI, and Observer.
Referenced by applyCombineConcatVectors(), applyCombineCopy(), applyCombineExtendingLoads(), applyCombineShuffleVector(), applyCombineTruncOfShift(), applyCombineUnmergeMergeToPlainValues(), applyCombineUnmergeZExtToZExt(), applyExtractAllEltsFromBuildVector(), llvm::AMDGPUCombinerHelper::applyFoldableFneg(), applyNotCmp(), applySextInRegOfLoad(), matchCombineLoadWithAndMask(), matchFreezeOfSingleMaybePoisonOperand(), matchOverlappingAnd(), replaceSingleDefInstWithOperand(), and replaceSingleDefInstWithReg().
| void CombinerHelper::replaceSingleDefInstWithOperand | ( | MachineInstr & | MI, |
| unsigned | OpIdx ) const |
Delete MI and replace all of its uses with its OpIdx-th operand.
Definition at line 3008 of file CombinerHelper.cpp.
References assert(), llvm::canReplaceReg(), MI, MRI, and replaceRegWith().
| void CombinerHelper::replaceSingleDefInstWithReg | ( | MachineInstr & | MI, |
| Register | Replacement ) const |
Delete MI and replace all of its uses with Replacement.
Definition at line 3018 of file CombinerHelper.cpp.
References assert(), llvm::canReplaceReg(), MI, MRI, and replaceRegWith().
Referenced by applyExtractVecEltBuildVec(), applySDivOrSRemByConst(), and applyUDivOrURemByConst().
| void CombinerHelper::setRegBank | ( | Register | Reg, |
| const RegisterBank * | RegBank ) const |
Set the register bank of Reg.
Does nothing if the RegBank is null. This is the counterpart to getRegBank.
Definition at line 225 of file CombinerHelper.cpp.
References MRI.
Referenced by applyPtrAddImmedChain().
| bool CombinerHelper::tryCombineCopy | ( | MachineInstr & | MI | ) | const |
If MI is COPY, try to combine it.
Returns true if MI changed.
Definition at line 231 of file CombinerHelper.cpp.
References applyCombineCopy(), matchCombineCopy(), and MI.
| bool CombinerHelper::tryCombineExtendingLoads | ( | MachineInstr & | MI | ) | const |
If MI is extend that consumes the result of a load, try to combine it.
Returns true if MI changed.
Definition at line 765 of file CombinerHelper.cpp.
References applyCombineExtendingLoads(), matchCombineExtendingLoads(), and MI.
| bool CombinerHelper::tryCombineMemCpyFamily | ( | MachineInstr & | MI, |
| unsigned | MaxLen = 0 ) const |
Optimize memcpy intrinsics et al, e.g.
constant len calls. /p MaxLen if non-zero specifies the max length of a mem libcall to inline.
For example (pre-indexed):
$addr = G_PTR_ADD $base, $offset [...] $val = G_LOAD $addr [...] $whatever = COPY $addr
-->
$val, $addr = G_INDEXED_LOAD $base, $offset, 1 (IsPre) [...] $whatever = COPY $addr
or (post-indexed):
G_STORE $val, $base [...] $addr = G_PTR_ADD $base, $offset [...] $whatever = COPY $addr
-->
$addr = G_INDEXED_STORE $val, $base, $offset [...] $whatever = COPY $addr
Definition at line 1747 of file CombinerHelper.cpp.
References llvm::MachineIRBuilder::getMF(), llvm::LegalizerHelper::Legalized, llvm::LegalizerHelper::lowerMemCpyFamily(), and MI.
| bool CombinerHelper::tryCombineShiftToUnmerge | ( | MachineInstr & | MI, |
| unsigned | TargetShiftAmount ) const |
Definition at line 2607 of file CombinerHelper.cpp.
References applyCombineShiftToUnmerge(), matchCombineShiftToUnmerge(), and MI.
| bool CombinerHelper::tryReassocBinOp | ( | unsigned | Opc, |
| Register | DstReg, | ||
| Register | Op0, | ||
| Register | Op1, | ||
| BuildFnTy & | MatchInfo ) const |
Try to reassociate to reassociate operands of a commutative binop.
Definition at line 5282 of file CombinerHelper.cpp.
References B(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), getTargetLowering(), llvm::isConstantOrConstantSplatVector(), llvm::MIPatternMatch::m_MInstr(), llvm::MIPatternMatch::mi_match(), MRI, and Opc.
Referenced by matchReassocCommBinOp().
|
protected |
Definition at line 117 of file CombinerHelper.h.
Referenced by applyAshShlToSextInreg(), applyBuildFnMO(), applyBuildFnNoErase(), applyBuildInstructionSteps(), applyCombineAddP2IToPtrAdd(), applyCombineBuildVectorOfBitcast(), applyCombineConcatVectors(), applyCombineConstantFoldFpUnary(), applyCombineConstPtrAddToI2P(), applyCombineDivRem(), applyCombineExtendingLoads(), applyCombineIndexedLoadStore(), applyCombineInsertVecElts(), applyCombineP2IToI2P(), applyCombineShiftToUnmerge(), applyCombineShlOfExtend(), applyCombineShuffleConcat(), applyCombineShuffleToBuildVector(), applyCombineShuffleVector(), applyCombineTruncOfShift(), applyCombineUnmergeConstant(), applyCombineUnmergeMergeToPlainValues(), applyCombineUnmergeWithDeadLanesToTrunc(), applyCombineUnmergeZExtToZExt(), applyExpandFPowI(), llvm::AMDGPUCombinerHelper::applyExpandPromotedF16FMed3(), applyExtendThroughPhis(), applyExtractVecEltBuildVec(), llvm::AMDGPUCombinerHelper::applyFoldableFneg(), applyFoldBinOpIntoSelect(), llvm::AMDGPUCombinerHelper::applyFoldFAbsFptrunc(), applyFsubToFneg(), applyFunnelShiftConstantModulo(), applyFunnelShiftToRotate(), applyLshrOfTruncOfLshr(), llvm::SPIRVCombinerHelper::applyMatrixMultiply(), llvm::SPIRVCombinerHelper::applyMatrixTranspose(), applyNotCmp(), applyOptBrCondByInvertingCond(), applyRepeatedFPDivisor(), applyRotateOutOfRange(), applySDivByPow2(), applySextInRegOfLoad(), applyShiftImmedChain(), applyShiftOfShiftedLogic(), applySimplifyAddToSub(), applySimplifySRemByPow2(), applySimplifyURemByPow2(), llvm::SPIRVCombinerHelper::applySPIRVDistance(), llvm::SPIRVCombinerHelper::applySPIRVFaceForward(), llvm::SPIRVCombinerHelper::applySPIRVNormalize(), applyTruncSSatS(), applyTruncSSatU(), applyUDivByPow2(), applyUMulHToLShr(), applyUseVectorTruncate(), applyXorOfAndWithSameReg(), buildSDivOrSRemUsingMul(), buildUDivOrURemUsingMul(), CombinerHelper(), getBuilder(), getContext(), getMachineFunction(), getTargetLowering(), matchCombineConcatVectors(), matchCombineConstPtrAddToI2P(), llvm::AMDGPUCombinerHelper::matchCombineFmulWithSelectToFldexp(), matchCombineShuffleVector(), matchEqualDefs(), matchExtendThroughPhis(), matchMulOBy2(), matchNarrowBinopFeedingAnd(), matchNotCmp(), matchPtrAddZero(), matchReassocConstantInnerRHS(), replaceInstWithConstant(), replaceInstWithConstant(), replaceInstWithFConstant(), replaceInstWithFConstant(), replaceInstWithUndef(), replaceOpcodeWith(), and replaceRegWith().
|
protected |
Definition at line 122 of file CombinerHelper.h.
Referenced by llvm::AMDGPUCombinerHelper::AMDGPUCombinerHelper(), CombinerHelper(), isPreLegalize(), matchCombineBuildUnmerge(), matchUseVectorTruncate(), and llvm::SPIRVCombinerHelper::SPIRVCombinerHelper().
|
protected |
Definition at line 123 of file CombinerHelper.h.
Referenced by llvm::AMDGPUCombinerHelper::AMDGPUCombinerHelper(), CombinerHelper(), isLegal(), isLegalOrHasFewerElements(), isLegalOrHasWidenScalar(), matchBitfieldExtractFromAnd(), matchBitfieldExtractFromSExtInReg(), matchBitfieldExtractFromShr(), matchBitfieldExtractFromShrAnd(), matchCombineExtendingLoads(), matchCombineShlOfExtend(), matchCtls(), matchSDivOrSRemByConst(), matchTruncSSatS(), matchTruncSSatU(), matchTruncUSatU(), matchTruncUSatUToFPTOUISat(), matchUDivOrURemByConst(), and llvm::SPIRVCombinerHelper::SPIRVCombinerHelper().
|
protected |
Definition at line 121 of file CombinerHelper.h.
Referenced by llvm::AMDGPUCombinerHelper::AMDGPUCombinerHelper(), CombinerHelper(), dominates(), and llvm::SPIRVCombinerHelper::SPIRVCombinerHelper().
|
protected |
Definition at line 118 of file CombinerHelper.h.
Referenced by applyAshShlToSextInreg(), applyBuildFnMO(), applyCombineAddP2IToPtrAdd(), applyCombineBuildUnmerge(), applyCombineBuildVectorOfBitcast(), applyCombineConcatVectors(), applyCombineConstantFoldFpUnary(), applyCombineCopy(), applyCombineExtendingLoads(), applyCombineIndexedLoadStore(), applyCombineInsertVecElts(), applyCombineMulToShl(), applyCombineShiftToUnmerge(), applyCombineShlOfExtend(), applyCombineShuffleConcat(), applyCombineShuffleToBuildVector(), applyCombineShuffleVector(), applyCombineTruncOfShift(), applyCombineUnmergeMergeToPlainValues(), applyCombineUnmergeZExtToZExt(), applyExpandFPowI(), llvm::AMDGPUCombinerHelper::applyExpandPromotedF16FMed3(), applyExtendThroughPhis(), applyExtractAllEltsFromBuildVector(), applyExtractVecEltBuildVec(), llvm::AMDGPUCombinerHelper::applyFoldableFneg(), applyFoldBinOpIntoSelect(), llvm::AMDGPUCombinerHelper::applyFoldFAbsFptrunc(), applyFsubToFneg(), applyFunnelShiftConstantModulo(), applyNotCmp(), applyOptBrCondByInvertingCond(), applyPtrAddImmedChain(), applyRepeatedFPDivisor(), applyRotateOutOfRange(), applySDivByPow2(), applySextInRegOfLoad(), applyShiftImmedChain(), applyShiftOfShiftedLogic(), applySimplifySRemByPow2(), applySimplifyURemByPow2(), llvm::SPIRVCombinerHelper::applySPIRVDistance(), llvm::SPIRVCombinerHelper::applySPIRVFaceForward(), applyUDivByPow2(), applyUMulHToLShr(), applyUseVectorTruncate(), applyXorOfAndWithSameReg(), buildSDivOrSRemUsingMul(), buildUDivOrURemUsingMul(), canCombineFMadOrFMA(), CombinerHelper(), getRegBank(), matchAddEToAddO(), matchAddOfVScale(), matchAddOverflow(), matchAddSubSameReg(), matchAndOrDisjointMask(), matchAshrShlToSextInreg(), matchAVG(), matchBinOpSameVal(), matchBinopWithNeg(), matchBitfieldExtractFromAnd(), matchBitfieldExtractFromSExtInReg(), matchBitfieldExtractFromShr(), matchBitfieldExtractFromShrAnd(), matchBuildVectorIdentityFold(), matchCanonicalizeFCmp(), matchCanonicalizeICmp(), matchCastOfBuildVector(), matchCastOfInteger(), matchCastOfSelect(), matchCombineAddP2IToPtrAdd(), matchCombineAnyExtTrunc(), matchCombineBuildUnmerge(), matchCombineBuildVectorOfBitcast(), matchCombineConcatVectors(), matchCombineConstPtrAddToI2P(), matchCombineCopy(), matchCombineDivRem(), matchCombineExtendingLoads(), matchCombineExtractedVectorLoad(), matchCombineFAddFMAFMulToFMadOrFMA(), matchCombineFAddFMulToFMadOrFMA(), matchCombineFAddFpExtFMulToFMadOrFMA(), matchCombineFAddFpExtFMulToFMadOrFMAAggressive(), matchCombineFMinMaxNaN(), llvm::AMDGPUCombinerHelper::matchCombineFmulWithSelectToFldexp(), matchCombineFSubFMulToFMadOrFMA(), matchCombineFSubFNegFMulToFMadOrFMA(), matchCombineFSubFpExtFMulToFMadOrFMA(), matchCombineFSubFpExtFNegFMulToFMadOrFMA(), matchCombineInsertVecElts(), matchCombineLoadWithAndMask(), matchCombineMemCpyFamily(), matchCombineMergeUnmerge(), matchCombineMulToShl(), matchCombineShiftToUnmerge(), matchCombineShlOfExtend(), matchCombineShuffleConcat(), matchCombineShuffleVector(), matchCombineSubToAdd(), matchCombineTruncOfShift(), matchCombineUnmergeConstant(), matchCombineUnmergeMergeToPlainValues(), matchCombineUnmergeUndef(), matchCombineUnmergeWithDeadLanesToTrunc(), matchCombineUnmergeZExtToZExt(), matchCombineZextTrunc(), matchCommuteConstantToRHS(), matchCommuteFPConstantToRHS(), matchConstantFoldBinOp(), matchConstantFoldCastOp(), matchConstantFoldFMA(), matchConstantFoldFPBinOp(), matchConstantFoldUnaryIntOp(), matchConstantFPOp(), llvm::AMDGPUCombinerHelper::matchConstantIs32BitMask(), matchConstantLargerBitWidth(), matchConstantOp(), matchConstantSelectCmp(), matchCountZeroToZeroPoison(), matchCtls(), matchDivByPow2(), matchEqualDefs(), llvm::AMDGPUCombinerHelper::matchExpandPromotedF16FMed3(), matchExtendThroughPhis(), matchExtOfExt(), matchExtractAllEltsFromBuildVector(), matchExtractVecEltBuildVec(), matchExtractVectorElement(), matchExtractVectorElementWithBuildVector(), matchExtractVectorElementWithBuildVectorTrunc(), matchExtractVectorElementWithDifferentIndices(), matchExtractVectorElementWithShuffleVector(), llvm::SPIRVCombinerHelper::matchFDivToNormalize(), llvm::AMDGPUCombinerHelper::matchFoldableFneg(), matchFoldAMinusC1MinusC2(), matchFoldAMinusC1PlusC2(), matchFoldAPlusC1MinusC2(), matchFoldBinOpIntoSelect(), matchFoldC1Minus2MinusC2(), matchFoldC2MinusAPlusC1(), llvm::AMDGPUCombinerHelper::matchFoldFAbsFptrunc(), matchFreezeOfSingleMaybePoisonOperand(), matchFsubToFneg(), matchFunnelShiftToRotate(), matchHoistLogicOpWithSameOpcodeHands(), matchICmpToLHSKnownBits(), matchICmpToTrueFalseKnownBits(), matchInsertExtractVecEltOutOfBounds(), matchInsertVectorElementOOB(), llvm::SPIRVCombinerHelper::matchLengthToDistance(), matchLoadOrCombine(), matchLshrOfTruncOfLshr(), matchMergeXAndUndef(), matchMergeXAndZero(), matchMulOBy0(), matchMulOBy2(), matchMulOfVScale(), matchNarrowBinop(), matchNarrowBinopFeedingAnd(), matchNonNegZext(), matchNotCmp(), matchOperandIsKnownToBeAPowerOfTwo(), matchOrShiftToFunnelShift(), matchOverlappingAnd(), matchPtrAddImmedChain(), matchPtrAddZero(), matchReassocConstantInnerLHS(), matchReassocConstantInnerRHS(), matchReassocFoldConstantsInSubTree(), matchReassocPtrAdd(), matchRedundantAnd(), matchRedundantBinOpInEquality(), matchRedundantNegOperands(), matchRedundantOr(), matchRedundantSExtInReg(), matchRedundantSextInReg(), matchRepeatedFPDivisor(), matchRotateOutOfRange(), matchSDivOrSRemByConst(), matchSelectIMinMax(), matchSelectSameVal(), llvm::SPIRVCombinerHelper::matchSelectToFaceForward(), matchSextInRegOfLoad(), matchSextOfTrunc(), matchSextTruncSextLoad(), matchShiftImmedChain(), matchShiftOfShiftedLogic(), matchShiftsTooBig(), matchShlOfVScale(), matchShuffleDisjointMask(), matchShuffleUndefRHS(), matchSimplifyAddToSub(), matchSimplifyNegMinMax(), matchSimplifySelectToMinMax(), matchSubAddSameReg(), matchSuboCarryOut(), matchSubOfVScale(), matchTruncateOfExt(), matchTruncBuildVectorFold(), matchTruncLshrBuildVectorFold(), matchTruncSSatS(), matchTruncSSatU(), matchTruncUSatU(), matchTruncUSatUToFPTOUISat(), matchUDivOrURemByConst(), matchUMulHToLShr(), matchUndefSelectCmp(), matchUndefStore(), matchUnmergeValuesAnyExtBuildVector(), matchUseVectorTruncate(), matchXorOfAndWithSameReg(), matchZextOfTrunc(), replaceRegOpWith(), replaceRegWith(), replaceSingleDefInstWithOperand(), replaceSingleDefInstWithReg(), setRegBank(), and tryReassocBinOp().
|
protected |
Definition at line 119 of file CombinerHelper.h.
Referenced by llvm::AMDGPUCombinerHelper::AMDGPUCombinerHelper(), applyCombineExtendingLoads(), applyCombineMulToShl(), applyCommuteBinOpOperands(), applyFunnelShiftToRotate(), applyNotCmp(), applyOptBrCondByInvertingCond(), applyPtrAddImmedChain(), applyRotateOutOfRange(), applyShiftImmedChain(), applyXorOfAndWithSameReg(), CombinerHelper(), matchAddEToAddO(), matchAndOrDisjointMask(), matchCombineSubToAdd(), matchFreezeOfSingleMaybePoisonOperand(), matchMulOBy2(), matchNarrowBinopFeedingAnd(), matchReassocConstantInnerLHS(), matchReassocConstantInnerRHS(), matchReassocFoldConstantsInSubTree(), matchRedundantNegOperands(), matchRedundantSextInReg(), replaceOpcodeWith(), replaceRegOpWith(), replaceRegWith(), and llvm::SPIRVCombinerHelper::SPIRVCombinerHelper().
|
protected |
Definition at line 125 of file CombinerHelper.h.
Referenced by CombinerHelper(), getRBI(), and getRegBank().
|
protected |
Definition at line 124 of file CombinerHelper.h.
Referenced by CombinerHelper(), and getTII().
|
protected |
Definition at line 126 of file CombinerHelper.h.
Referenced by CombinerHelper(), getRegBank(), getTRI(), and matchFreezeOfSingleMaybePoisonOperand().
|
protected |
Definition at line 120 of file CombinerHelper.h.
Referenced by llvm::AMDGPUCombinerHelper::AMDGPUCombinerHelper(), buildUDivOrURemUsingMul(), llvm::AMDGPUCombinerHelper::canIgnoreLegacyMinMaxTies(), CombinerHelper(), getValueTracking(), matchAddOverflow(), matchCombineShlOfExtend(), matchCombineTruncOfShift(), matchCombineZextTrunc(), matchCountZeroToZeroPoison(), matchICmpToLHSKnownBits(), matchICmpToTrueFalseKnownBits(), matchOperandIsKnownToBeAPowerOfTwo(), matchRedundantAnd(), matchRedundantOr(), matchRedundantSExtInReg(), matchShiftsTooBig(), matchSuboCarryOut(), and llvm::SPIRVCombinerHelper::SPIRVCombinerHelper().