LLVM 22.0.0git
|
#include "llvm/CodeGen/GlobalISel/CombinerHelper.h"
Public Member Functions | |
CombinerHelper (GISelChangeObserver &Observer, MachineIRBuilder &B, bool IsPreLegalize, GISelValueTracking *VT=nullptr, MachineDominatorTree *MDT=nullptr, const LegalizerInfo *LI=nullptr) | |
GISelValueTracking * | getValueTracking () const |
MachineIRBuilder & | getBuilder () const |
const TargetLowering & | getTargetLowering () const |
const MachineFunction & | getMachineFunction () const |
const DataLayout & | getDataLayout () const |
LLVMContext & | getContext () const |
bool | isPreLegalize () const |
bool | isLegal (const LegalityQuery &Query) const |
bool | isLegalOrBeforeLegalizer (const LegalityQuery &Query) const |
bool | isLegalOrHasWidenScalar (const LegalityQuery &Query) const |
bool | isConstantLegalOrBeforeLegalizer (const LLT Ty) const |
void | replaceRegWith (MachineRegisterInfo &MRI, Register FromReg, Register ToReg) const |
MachineRegisterInfo::replaceRegWith() and inform the observer of the changes. | |
void | replaceRegOpWith (MachineRegisterInfo &MRI, MachineOperand &FromRegOp, Register ToReg) const |
Replace a single register operand with a new register and inform the observer of the changes. | |
void | replaceOpcodeWith (MachineInstr &FromMI, unsigned ToOpcode) const |
Replace the opcode in instruction with a new opcode and inform the observer of the changes. | |
const RegisterBank * | getRegBank (Register Reg) const |
Get the register bank of Reg . | |
void | setRegBank (Register Reg, const RegisterBank *RegBank) const |
Set the register bank of Reg . | |
bool | tryCombineCopy (MachineInstr &MI) const |
If MI is COPY, try to combine it. | |
bool | matchCombineCopy (MachineInstr &MI) const |
void | applyCombineCopy (MachineInstr &MI) const |
bool | isPredecessor (const MachineInstr &DefMI, const MachineInstr &UseMI) const |
Returns true if DefMI precedes UseMI or they are the same instruction. | |
bool | dominates (const MachineInstr &DefMI, const MachineInstr &UseMI) const |
Returns true if DefMI dominates UseMI . | |
bool | tryCombineExtendingLoads (MachineInstr &MI) const |
If MI is extend that consumes the result of a load, try to combine it. | |
bool | matchCombineExtendingLoads (MachineInstr &MI, PreferredTuple &MatchInfo) const |
void | applyCombineExtendingLoads (MachineInstr &MI, PreferredTuple &MatchInfo) const |
bool | matchCombineLoadWithAndMask (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Match (and (load x), mask) -> zextload x. | |
bool | matchCombineExtractedVectorLoad (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Combine a G_EXTRACT_VECTOR_ELT of a load into a narrowed load. | |
bool | matchCombineIndexedLoadStore (MachineInstr &MI, IndexedLoadStoreMatchInfo &MatchInfo) const |
void | applyCombineIndexedLoadStore (MachineInstr &MI, IndexedLoadStoreMatchInfo &MatchInfo) const |
bool | matchSextTruncSextLoad (MachineInstr &MI) const |
void | applySextTruncSextLoad (MachineInstr &MI) const |
bool | matchSextInRegOfLoad (MachineInstr &MI, std::tuple< Register, unsigned > &MatchInfo) const |
Match sext_inreg(load p), imm -> sextload p. | |
void | applySextInRegOfLoad (MachineInstr &MI, std::tuple< Register, unsigned > &MatchInfo) const |
bool | 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. | |
void | applyCombineDivRem (MachineInstr &MI, MachineInstr *&OtherMI) const |
bool | 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. | |
void | applyOptBrCondByInvertingCond (MachineInstr &MI, MachineInstr *&BrCond) const |
bool | matchCombineConcatVectors (MachineInstr &MI, SmallVector< Register > &Ops) const |
If MI is G_CONCAT_VECTORS, try to combine it. | |
void | applyCombineConcatVectors (MachineInstr &MI, SmallVector< Register > &Ops) const |
Replace MI with a flattened build_vector with Ops or an implicit_def if Ops is empty. | |
bool | matchCombineShuffleConcat (MachineInstr &MI, SmallVector< Register > &Ops) const |
void | applyCombineShuffleConcat (MachineInstr &MI, SmallVector< Register > &Ops) const |
Replace MI with a flattened build_vector with Ops or an implicit_def if Ops is empty. | |
bool | matchCombineShuffleToBuildVector (MachineInstr &MI) const |
Replace MI with a build_vector. | |
void | applyCombineShuffleToBuildVector (MachineInstr &MI) const |
bool | tryCombineShuffleVector (MachineInstr &MI) const |
Try to combine G_SHUFFLE_VECTOR into G_CONCAT_VECTORS. | |
bool | matchCombineShuffleVector (MachineInstr &MI, SmallVectorImpl< Register > &Ops) const |
Check if the G_SHUFFLE_VECTOR MI can be replaced by a concat_vectors. | |
void | applyCombineShuffleVector (MachineInstr &MI, const ArrayRef< Register > Ops) const |
Replace MI with a concat_vectors with Ops . | |
bool | matchShuffleToExtract (MachineInstr &MI) const |
void | applyShuffleToExtract (MachineInstr &MI) const |
bool | tryCombineMemCpyFamily (MachineInstr &MI, unsigned MaxLen=0) const |
Optimize memcpy intrinsics et al, e.g. | |
bool | matchPtrAddImmedChain (MachineInstr &MI, PtrAddChain &MatchInfo) const |
void | applyPtrAddImmedChain (MachineInstr &MI, PtrAddChain &MatchInfo) const |
bool | matchShiftImmedChain (MachineInstr &MI, RegisterImmPair &MatchInfo) const |
Fold (shift (shift base, x), y) -> (shift base (x+y)) | |
void | applyShiftImmedChain (MachineInstr &MI, RegisterImmPair &MatchInfo) const |
bool | 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. | |
void | applyShiftOfShiftedLogic (MachineInstr &MI, ShiftOfShiftedLogic &MatchInfo) const |
bool | matchCommuteShift (MachineInstr &MI, BuildFnTy &MatchInfo) const |
bool | matchCombineMulToShl (MachineInstr &MI, unsigned &ShiftVal) const |
Transform a multiply by a power-of-2 value to a left shift. | |
void | applyCombineMulToShl (MachineInstr &MI, unsigned &ShiftVal) const |
bool | matchCombineSubToAdd (MachineInstr &MI, BuildFnTy &MatchInfo) const |
bool | matchCombineShlOfExtend (MachineInstr &MI, RegisterImmPair &MatchData) const |
void | applyCombineShlOfExtend (MachineInstr &MI, const RegisterImmPair &MatchData) const |
bool | matchCombineMergeUnmerge (MachineInstr &MI, Register &MatchInfo) const |
Fold away a merge of an unmerge of the corresponding values. | |
bool | 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. | |
void | applyCombineShiftToUnmerge (MachineInstr &MI, const unsigned &ShiftVal) const |
bool | tryCombineShiftToUnmerge (MachineInstr &MI, unsigned TargetShiftAmount) const |
bool | matchCombineUnmergeMergeToPlainValues (MachineInstr &MI, SmallVectorImpl< Register > &Operands) const |
Transform <ty,...> G_UNMERGE(G_MERGE ty X, Y, Z) -> ty X, Y, Z. | |
void | applyCombineUnmergeMergeToPlainValues (MachineInstr &MI, SmallVectorImpl< Register > &Operands) const |
bool | matchCombineUnmergeConstant (MachineInstr &MI, SmallVectorImpl< APInt > &Csts) const |
Transform G_UNMERGE Constant -> Constant1, Constant2, ... | |
void | applyCombineUnmergeConstant (MachineInstr &MI, SmallVectorImpl< APInt > &Csts) const |
bool | matchCombineUnmergeUndef (MachineInstr &MI, std::function< void(MachineIRBuilder &)> &MatchInfo) const |
Transform G_UNMERGE G_IMPLICIT_DEF -> G_IMPLICIT_DEF, G_IMPLICIT_DEF, ... | |
bool | matchCombineUnmergeWithDeadLanesToTrunc (MachineInstr &MI) const |
Transform X, Y<dead> = G_UNMERGE Z -> X = G_TRUNC Z. | |
void | applyCombineUnmergeWithDeadLanesToTrunc (MachineInstr &MI) const |
bool | matchCombineUnmergeZExtToZExt (MachineInstr &MI) const |
Transform X, Y = G_UNMERGE(G_ZEXT(Z)) -> X = G_ZEXT(Z); Y = G_CONSTANT 0. | |
void | applyCombineUnmergeZExtToZExt (MachineInstr &MI) const |
void | applyCombineConstantFoldFpUnary (MachineInstr &MI, const ConstantFP *Cst) const |
Transform fp_instr(cst) to constant result of the fp operation. | |
bool | matchCombineI2PToP2I (MachineInstr &MI, Register &Reg) const |
Transform IntToPtr(PtrToInt(x)) to x if cast is in the same address space. | |
void | applyCombineI2PToP2I (MachineInstr &MI, Register &Reg) const |
void | applyCombineP2IToI2P (MachineInstr &MI, Register &Reg) const |
Transform PtrToInt(IntToPtr(x)) to x. | |
bool | 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) | |
void | applyCombineAddP2IToPtrAdd (MachineInstr &MI, std::pair< Register, bool > &PtrRegAndCommute) const |
bool | matchCombineConstPtrAddToI2P (MachineInstr &MI, APInt &NewCst) const |
void | applyCombineConstPtrAddToI2P (MachineInstr &MI, APInt &NewCst) const |
bool | matchCombineAnyExtTrunc (MachineInstr &MI, Register &Reg) const |
Transform anyext(trunc(x)) to x. | |
bool | matchCombineZextTrunc (MachineInstr &MI, Register &Reg) const |
Transform zext(trunc(x)) to x. | |
bool | matchCombineTruncOfShift (MachineInstr &MI, std::pair< MachineInstr *, LLT > &MatchInfo) const |
Transform trunc (shl x, K) to shl (trunc x), K if K < VT.getScalarSizeInBits(). | |
void | applyCombineTruncOfShift (MachineInstr &MI, std::pair< MachineInstr *, LLT > &MatchInfo) const |
bool | matchAnyExplicitUseIsUndef (MachineInstr &MI) const |
Return true if any explicit use operand on MI is defined by a G_IMPLICIT_DEF. | |
bool | matchAllExplicitUsesAreUndef (MachineInstr &MI) const |
Return true if all register explicit use operands on MI are defined by a G_IMPLICIT_DEF. | |
bool | matchUndefShuffleVectorMask (MachineInstr &MI) const |
Return true if a G_SHUFFLE_VECTOR instruction MI has an undef mask. | |
bool | matchUndefStore (MachineInstr &MI) const |
Return true if a G_STORE instruction MI is storing an undef value. | |
bool | matchUndefSelectCmp (MachineInstr &MI) const |
Return true if a G_SELECT instruction MI has an undef comparison. | |
bool | matchInsertExtractVecEltOutOfBounds (MachineInstr &MI) const |
Return true if a G_{EXTRACT,INSERT}_VECTOR_ELT has an out of range index. | |
bool | matchConstantSelectCmp (MachineInstr &MI, unsigned &OpIdx) const |
Return true if a G_SELECT instruction MI has a constant comparison. | |
void | replaceInstWithFConstant (MachineInstr &MI, double C) const |
Replace an instruction with a G_FCONSTANT with value C . | |
void | replaceInstWithFConstant (MachineInstr &MI, ConstantFP *CFP) const |
Replace an instruction with an G_FCONSTANT with value CFP . | |
void | replaceInstWithConstant (MachineInstr &MI, int64_t C) const |
Replace an instruction with a G_CONSTANT with value C . | |
void | replaceInstWithConstant (MachineInstr &MI, APInt C) const |
Replace an instruction with a G_CONSTANT with value C . | |
void | replaceInstWithUndef (MachineInstr &MI) const |
Replace an instruction with a G_IMPLICIT_DEF. | |
void | replaceSingleDefInstWithOperand (MachineInstr &MI, unsigned OpIdx) const |
Delete MI and replace all of its uses with its OpIdx-th operand. | |
void | replaceSingleDefInstWithReg (MachineInstr &MI, Register Replacement) const |
Delete MI and replace all of its uses with Replacement . | |
void | applyFunnelShiftConstantModulo (MachineInstr &MI) const |
Replaces the shift amount in MI with ShiftAmt % BW. | |
bool | matchEqualDefs (const MachineOperand &MOP1, const MachineOperand &MOP2) const |
Return true if MOP1 and MOP2 are register operands are defined by equivalent instructions. | |
bool | 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 . | |
bool | 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 . | |
bool | matchConstantLargerBitWidth (MachineInstr &MI, unsigned ConstIdx) const |
Checks if constant at ConstIdx is larger than MI 's bitwidth. | |
bool | matchSelectSameVal (MachineInstr &MI) const |
Optimize (cond ? x : x) -> x. | |
bool | matchBinOpSameVal (MachineInstr &MI) const |
Optimize (x op x) -> x. | |
bool | matchOperandIsZero (MachineInstr &MI, unsigned OpIdx) const |
Check if operand OpIdx is zero. | |
bool | matchOperandIsUndef (MachineInstr &MI, unsigned OpIdx) const |
Check if operand OpIdx is undef. | |
bool | matchOperandIsKnownToBeAPowerOfTwo (MachineInstr &MI, unsigned OpIdx) const |
Check if operand OpIdx is known to be a power of 2. | |
void | eraseInst (MachineInstr &MI) const |
Erase MI . | |
bool | 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. | |
void | applySimplifyAddToSub (MachineInstr &MI, std::tuple< Register, Register > &MatchInfo) const |
bool | matchHoistLogicOpWithSameOpcodeHands (MachineInstr &MI, InstructionStepsMatchInfo &MatchInfo) const |
Match (logic_op (op x...), (op y...)) -> (op (logic_op x, y)) | |
void | applyBuildInstructionSteps (MachineInstr &MI, InstructionStepsMatchInfo &MatchInfo) const |
Replace MI with a series of instructions described in MatchInfo . | |
bool | matchAshrShlToSextInreg (MachineInstr &MI, std::tuple< Register, int64_t > &MatchInfo) const |
Match ashr (shl x, C), C -> sext_inreg (C) | |
void | applyAshShlToSextInreg (MachineInstr &MI, std::tuple< Register, int64_t > &MatchInfo) const |
bool | matchOverlappingAnd (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Fold and(and(x, C1), C2) -> C1&C2 ? and(x, C1&C2) : 0. | |
bool | matchRedundantAnd (MachineInstr &MI, Register &Replacement) const |
bool | matchRedundantOr (MachineInstr &MI, Register &Replacement) const |
bool | matchRedundantSExtInReg (MachineInstr &MI) const |
bool | matchNotCmp (MachineInstr &MI, SmallVectorImpl< Register > &RegsToNegate) const |
Combine inverting a result of a compare into the opposite cond code. | |
void | applyNotCmp (MachineInstr &MI, SmallVectorImpl< Register > &RegsToNegate) const |
bool | matchXorOfAndWithSameReg (MachineInstr &MI, std::pair< Register, Register > &MatchInfo) const |
Fold (xor (and x, y), y) -> (and (not x), y) {. | |
void | applyXorOfAndWithSameReg (MachineInstr &MI, std::pair< Register, Register > &MatchInfo) const |
bool | matchPtrAddZero (MachineInstr &MI) const |
} | |
void | applyPtrAddZero (MachineInstr &MI) const |
void | applySimplifyURemByPow2 (MachineInstr &MI) const |
Combine G_UREM x, (known power of 2) to an add and bitmasking. | |
bool | matchFoldBinOpIntoSelect (MachineInstr &MI, unsigned &SelectOpNo) const |
Push a binary operator through a select on constants. | |
void | applyFoldBinOpIntoSelect (MachineInstr &MI, const unsigned &SelectOpNo) const |
SelectOperand is the operand in binary operator MI that is the select to fold. | |
bool | matchCombineInsertVecElts (MachineInstr &MI, SmallVectorImpl< Register > &MatchInfo) const |
void | applyCombineInsertVecElts (MachineInstr &MI, SmallVectorImpl< Register > &MatchInfo) const |
bool | matchLoadOrCombine (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Match expression trees of the form. | |
bool | matchExtendThroughPhis (MachineInstr &MI, MachineInstr *&ExtMI) const |
void | applyExtendThroughPhis (MachineInstr &MI, MachineInstr *&ExtMI) const |
bool | matchExtractVecEltBuildVec (MachineInstr &MI, Register &Reg) const |
void | applyExtractVecEltBuildVec (MachineInstr &MI, Register &Reg) const |
bool | matchExtractAllEltsFromBuildVector (MachineInstr &MI, SmallVectorImpl< std::pair< Register, MachineInstr * > > &MatchInfo) const |
void | applyExtractAllEltsFromBuildVector (MachineInstr &MI, SmallVectorImpl< std::pair< Register, MachineInstr * > > &MatchInfo) const |
void | applyBuildFn (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Use a function which takes in a MachineIRBuilder to perform a combine. | |
void | applyBuildFnNoErase (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Use a function which takes in a MachineIRBuilder to perform a combine. | |
bool | matchOrShiftToFunnelShift (MachineInstr &MI, BuildFnTy &MatchInfo) const |
bool | matchFunnelShiftToRotate (MachineInstr &MI) const |
Match an FSHL or FSHR that can be combined to a ROTR or ROTL rotate. | |
void | applyFunnelShiftToRotate (MachineInstr &MI) const |
bool | matchRotateOutOfRange (MachineInstr &MI) const |
void | applyRotateOutOfRange (MachineInstr &MI) const |
bool | matchUseVectorTruncate (MachineInstr &MI, Register &MatchInfo) const |
void | applyUseVectorTruncate (MachineInstr &MI, Register &MatchInfo) const |
bool | matchICmpToTrueFalseKnownBits (MachineInstr &MI, int64_t &MatchInfo) const |
bool | matchICmpToLHSKnownBits (MachineInstr &MI, BuildFnTy &MatchInfo) const |
bool | matchAndOrDisjointMask (MachineInstr &MI, BuildFnTy &MatchInfo) const |
bool | matchBitfieldExtractFromSExtInReg (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Form a G_SBFX from a G_SEXT_INREG fed by a right shift. | |
bool | matchBitfieldExtractFromAnd (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Match: and (lshr x, cst), mask -> ubfx x, cst, width. | |
bool | matchBitfieldExtractFromShr (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Match: shr (shl x, n), k -> sbfx/ubfx x, pos, width. | |
bool | matchBitfieldExtractFromShrAnd (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Match: shr (and x, n), k -> ubfx x, pos, width. | |
bool | matchReassocConstantInnerRHS (GPtrAdd &MI, MachineInstr *RHS, BuildFnTy &MatchInfo) const |
bool | matchReassocFoldConstantsInSubTree (GPtrAdd &MI, MachineInstr *LHS, MachineInstr *RHS, BuildFnTy &MatchInfo) const |
bool | matchReassocConstantInnerLHS (GPtrAdd &MI, MachineInstr *LHS, MachineInstr *RHS, BuildFnTy &MatchInfo) const |
bool | matchReassocPtrAdd (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Reassociate pointer calculations with G_ADD involved, to allow better addressing mode usage. | |
bool | tryReassocBinOp (unsigned Opc, Register DstReg, Register Op0, Register Op1, BuildFnTy &MatchInfo) const |
Try to reassociate to reassociate operands of a commutative binop. | |
bool | matchReassocCommBinOp (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Reassociate commutative binary operations like G_ADD. | |
bool | matchConstantFoldCastOp (MachineInstr &MI, APInt &MatchInfo) const |
Do constant folding when opportunities are exposed after MIR building. | |
bool | matchConstantFoldBinOp (MachineInstr &MI, APInt &MatchInfo) const |
Do constant folding when opportunities are exposed after MIR building. | |
bool | matchConstantFoldFPBinOp (MachineInstr &MI, ConstantFP *&MatchInfo) const |
Do constant FP folding when opportunities are exposed after MIR building. | |
bool | matchConstantFoldFMA (MachineInstr &MI, ConstantFP *&MatchInfo) const |
Constant fold G_FMA/G_FMAD. | |
bool | matchNarrowBinopFeedingAnd (MachineInstr &MI, BuildFnTy &MatchInfo) const |
MachineInstr * | 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. | |
bool | matchUDivOrURemByConst (MachineInstr &MI) const |
Combine G_UDIV or G_UREM by constant into a multiply by magic constant. | |
void | applyUDivOrURemByConst (MachineInstr &MI) const |
MachineInstr * | 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. | |
bool | matchSDivOrSRemByConst (MachineInstr &MI) const |
Combine G_SDIV or G_SREM by constant into a multiply by magic constant. | |
void | applySDivOrSRemByConst (MachineInstr &MI) const |
bool | 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. | |
void | applySDivByPow2 (MachineInstr &MI) const |
void | applyUDivByPow2 (MachineInstr &MI) const |
Given an G_UDIV MI expressing an unsigned divided by a pow2 constant, return expressions that implements it by shifting. | |
bool | matchUMulHToLShr (MachineInstr &MI) const |
void | applyUMulHToLShr (MachineInstr &MI) const |
bool | matchTruncSSatS (MachineInstr &MI, Register &MatchInfo) const |
void | applyTruncSSatS (MachineInstr &MI, Register &MatchInfo) const |
bool | matchTruncSSatU (MachineInstr &MI, Register &MatchInfo) const |
void | applyTruncSSatU (MachineInstr &MI, Register &MatchInfo) const |
bool | matchTruncUSatU (MachineInstr &MI, MachineInstr &MinMI) const |
bool | matchTruncUSatUToFPTOUISat (MachineInstr &MI, MachineInstr &SrcMI) const |
bool | tryCombine (MachineInstr &MI) const |
Try to transform MI by using all of the above combine functions. | |
bool | tryEmitMemcpyInline (MachineInstr &MI) const |
Emit loads and stores that perform the given memcpy. | |
bool | matchMulOBy2 (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Match: (G_UMULO x, 2) -> (G_UADDO x, x) (G_SMULO x, 2) -> (G_SADDO x, x) | |
bool | matchMulOBy0 (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Match: (G_*MULO x, 0) -> 0 + no carry out. | |
bool | 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) | |
bool | 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) | |
bool | matchFsubToFneg (MachineInstr &MI, Register &MatchInfo) const |
void | applyFsubToFneg (MachineInstr &MI, Register &MatchInfo) const |
bool | canCombineFMadOrFMA (MachineInstr &MI, bool &AllowFusionGlobally, bool &HasFMAD, bool &Aggressive, bool CanReassociate=false) const |
bool | 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) | |
bool | 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) | |
bool | 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)) | |
bool | matchCombineFAddFpExtFMulToFMadOrFMAAggressive (MachineInstr &MI, BuildFnTy &MatchInfo) const |
bool | 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) | |
bool | 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)) | |
bool | 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)) | |
bool | 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)) | |
bool | matchCombineFMinMaxNaN (MachineInstr &MI, unsigned &Info) const |
bool | matchAddSubSameReg (MachineInstr &MI, Register &Src) const |
Transform G_ADD(x, G_SUB(y, x)) to y. | |
bool | matchBuildVectorIdentityFold (MachineInstr &MI, Register &MatchInfo) const |
bool | matchTruncBuildVectorFold (MachineInstr &MI, Register &MatchInfo) const |
bool | matchTruncLshrBuildVectorFold (MachineInstr &MI, Register &MatchInfo) const |
bool | 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. | |
bool | matchSimplifySelectToMinMax (MachineInstr &MI, BuildFnTy &MatchInfo) const |
bool | 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. | |
bool | 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). | |
bool | matchCommuteConstantToRHS (MachineInstr &MI) const |
Match constant LHS ops that should be commuted. | |
bool | matchSextOfTrunc (const MachineOperand &MO, BuildFnTy &MatchInfo) const |
Combine sext of trunc. | |
bool | matchZextOfTrunc (const MachineOperand &MO, BuildFnTy &MatchInfo) const |
Combine zext of trunc. | |
bool | matchNonNegZext (const MachineOperand &MO, BuildFnTy &MatchInfo) const |
Combine zext nneg to sext. | |
bool | matchCommuteFPConstantToRHS (MachineInstr &MI) const |
Match constant LHS FP ops that should be commuted. | |
void | applyCommuteBinOpOperands (MachineInstr &MI) const |
bool | matchSelectIMinMax (const MachineOperand &MO, BuildFnTy &MatchInfo) const |
Combine select to integer min/max. | |
bool | matchSimplifyNegMinMax (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Tranform (neg (min/max x, (neg x))) into (max/min x, (neg x)). | |
bool | matchSelect (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Combine selects. | |
bool | matchAnd (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Combine ands. | |
bool | matchOr (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Combine ors. | |
bool | matchNarrowBinop (const MachineInstr &TruncMI, const MachineInstr &BinopMI, BuildFnTy &MatchInfo) const |
trunc (binop X, C) --> binop (trunc X, trunc C). | |
bool | matchCastOfInteger (const MachineInstr &CastMI, APInt &MatchInfo) const |
bool | matchAddOverflow (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Combine addos. | |
bool | matchExtractVectorElement (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Combine extract vector element. | |
bool | matchExtractVectorElementWithBuildVector (const MachineInstr &MI, const MachineInstr &MI2, BuildFnTy &MatchInfo) const |
Combine extract vector element with a build vector on the vector register. | |
bool | matchExtractVectorElementWithBuildVectorTrunc (const MachineOperand &MO, BuildFnTy &MatchInfo) const |
Combine extract vector element with a build vector trunc on the vector register. | |
bool | matchExtractVectorElementWithShuffleVector (const MachineInstr &MI, const MachineInstr &MI2, BuildFnTy &MatchInfo) const |
Combine extract vector element with a shuffle vector on the vector register. | |
bool | matchExtractVectorElementWithDifferentIndices (const MachineOperand &MO, BuildFnTy &MatchInfo) const |
Combine extract vector element with a insert vector element on the vector register and different indices. | |
bool | matchShuffleUndefRHS (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Remove references to rhs if it is undef. | |
bool | matchShuffleDisjointMask (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Turn shuffle a, b, mask -> shuffle undef, b, mask iff mask does not reference a. | |
void | applyBuildFnMO (const MachineOperand &MO, BuildFnTy &MatchInfo) const |
Use a function which takes in a MachineIRBuilder to perform a combine. | |
bool | matchFPowIExpansion (MachineInstr &MI, int64_t Exponent) const |
Match FPOWI if it's safe to extend it into a series of multiplications. | |
void | applyExpandFPowI (MachineInstr &MI, int64_t Exponent) const |
Expands FPOWI into a series of multiplications and a division if the exponent is negative. | |
bool | matchInsertVectorElementOOB (MachineInstr &MI, BuildFnTy &MatchInfo) const |
Combine insert vector element OOB. | |
bool | matchFreezeOfSingleMaybePoisonOperand (MachineInstr &MI, BuildFnTy &MatchInfo) const |
bool | matchAddOfVScale (const MachineOperand &MO, BuildFnTy &MatchInfo) const |
bool | matchMulOfVScale (const MachineOperand &MO, BuildFnTy &MatchInfo) const |
bool | matchSubOfVScale (const MachineOperand &MO, BuildFnTy &MatchInfo) const |
bool | matchShlOfVScale (const MachineOperand &MO, BuildFnTy &MatchInfo) const |
bool | matchTruncateOfExt (const MachineInstr &Root, const MachineInstr &ExtMI, BuildFnTy &MatchInfo) const |
Transform trunc ([asz]ext x) to x or ([asz]ext x) or (trunc x). | |
bool | matchCastOfSelect (const MachineInstr &Cast, const MachineInstr &SelectMI, BuildFnTy &MatchInfo) const |
bool | matchFoldAPlusC1MinusC2 (const MachineInstr &MI, BuildFnTy &MatchInfo) const |
bool | matchFoldC2MinusAPlusC1 (const MachineInstr &MI, BuildFnTy &MatchInfo) const |
bool | matchFoldAMinusC1MinusC2 (const MachineInstr &MI, BuildFnTy &MatchInfo) const |
bool | matchFoldC1Minus2MinusC2 (const MachineInstr &MI, BuildFnTy &MatchInfo) const |
bool | matchFoldAMinusC1PlusC2 (const MachineInstr &MI, BuildFnTy &MatchInfo) const |
bool | matchExtOfExt (const MachineInstr &FirstMI, const MachineInstr &SecondMI, BuildFnTy &MatchInfo) const |
bool | matchCastOfBuildVector (const MachineInstr &CastMI, const MachineInstr &BVMI, BuildFnTy &MatchInfo) const |
bool | matchCanonicalizeICmp (const MachineInstr &MI, BuildFnTy &MatchInfo) const |
bool | matchCanonicalizeFCmp (const MachineInstr &MI, BuildFnTy &MatchInfo) const |
bool | matchUnmergeValuesAnyExtBuildVector (const MachineInstr &MI, BuildFnTy &MatchInfo) const |
bool | matchMergeXAndUndef (const MachineInstr &MI, BuildFnTy &MatchInfo) const |
bool | matchMergeXAndZero (const MachineInstr &MI, BuildFnTy &MatchInfo) const |
bool | matchSuboCarryOut (const MachineInstr &MI, BuildFnTy &MatchInfo) const |
bool | matchRedundantSextInReg (MachineInstr &Root, MachineInstr &Other, BuildFnTy &MatchInfo) const |
Protected Attributes | |
MachineIRBuilder & | Builder |
MachineRegisterInfo & | MRI |
GISelChangeObserver & | Observer |
GISelValueTracking * | VT |
MachineDominatorTree * | MDT |
bool | IsPreLegalize |
const LegalizerInfo * | LI |
const RegisterBankInfo * | RBI |
const TargetRegisterInfo * | TRI |
Definition at line 105 of file CombinerHelper.h.
CombinerHelper::CombinerHelper | ( | GISelChangeObserver & | Observer, |
MachineIRBuilder & | B, | ||
bool | IsPreLegalize, | ||
GISelValueTracking * | VT = nullptr , |
||
MachineDominatorTree * | MDT = nullptr , |
||
const LegalizerInfo * | LI = nullptr |
||
) |
Definition at line 57 of file CombinerHelper.cpp.
void CombinerHelper::applyAshShlToSextInreg | ( | MachineInstr & | MI, |
std::tuple< Register, int64_t > & | MatchInfo | ||
) | const |
Definition at line 3299 of file CombinerHelper.cpp.
References assert(), Builder, llvm::MachineIRBuilder::buildSExtInReg(), llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), MI, MRI, and Size.
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 4399 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 7925 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 4406 of file CombinerHelper.cpp.
References Builder.
Referenced by applyBuildFn().
void CombinerHelper::applyBuildInstructionSteps | ( | MachineInstr & | MI, |
InstructionStepsMatchInfo & | MatchInfo | ||
) | const |
Replace MI
with a series of instructions described in MatchInfo
.
Definition at line 3267 of file CombinerHelper.cpp.
References assert(), Builder, llvm::MachineIRBuilder::buildInstr(), llvm::InstructionStepsMatchInfo::InstrsToBuild, and MI.
void CombinerHelper::applyCombineAddP2IToPtrAdd | ( | MachineInstr & | MI, |
std::pair< Register, bool > & | PtrRegAndCommute | ||
) | const |
Definition at line 2581 of file CombinerHelper.cpp.
References Builder, llvm::MachineIRBuilder::buildPtrAdd(), llvm::MachineIRBuilder::buildPtrToInt(), llvm::MachineRegisterInfo::getType(), LHS, MI, MRI, RHS, and std::swap().
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 372 of file CombinerHelper.cpp.
References llvm::MachineIRBuilder::buildBuildVector(), Builder, llvm::MachineIRBuilder::buildUndef(), llvm::MachineRegisterInfo::cloneVirtualRegister(), llvm::SmallVectorBase< Size_T >::empty(), MI, MRI, replaceRegWith(), and llvm::MachineIRBuilder::setInsertPt().
void CombinerHelper::applyCombineConstantFoldFpUnary | ( | MachineInstr & | MI, |
const ConstantFP * | Cst | ||
) | const |
Transform fp_instr(cst) to constant result of the fp operation.
Definition at line 1761 of file CombinerHelper.cpp.
References Builder, llvm::MachineIRBuilder::buildFConstant(), constantFoldFpUnary(), llvm::MachineIRBuilder::getContext(), llvm::ConstantFP::getValue(), MI, and MRI.
void CombinerHelper::applyCombineConstPtrAddToI2P | ( | MachineInstr & | MI, |
APInt & | NewCst | ||
) | const |
Definition at line 2620 of file CombinerHelper.cpp.
References llvm::MachineIRBuilder::buildConstant(), Builder, and MI.
void CombinerHelper::applyCombineCopy | ( | MachineInstr & | MI | ) | const |
Definition at line 237 of file CombinerHelper.cpp.
References MI, MRI, and replaceRegWith().
Referenced by tryCombineCopy().
void CombinerHelper::applyCombineDivRem | ( | MachineInstr & | MI, |
MachineInstr *& | OtherMI | ||
) | const |
Definition at line 1608 of file CombinerHelper.cpp.
References assert(), Builder, llvm::MachineIRBuilder::buildInstr(), dominates(), llvm::MachineInstr::eraseFromParent(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), MI, and llvm::MachineIRBuilder::setInstrAndDebugLoc().
void CombinerHelper::applyCombineExtendingLoads | ( | MachineInstr & | MI, |
PreferredTuple & | MatchInfo | ||
) | const |
rewrites to:
rewrites to:
Definition at line 846 of file CombinerHelper.cpp.
References Builder, llvm::MachineIRBuilder::buildTrunc(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::MachineRegisterInfo::cloneVirtualRegister(), llvm::MachineInstr::eraseFromParent(), llvm::GISelChangeObserver::erasingInstr(), llvm::PreferredTuple::ExtendOpcode, llvm::MCInstrInfo::get(), getExtLoadOpcForExtend(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getParent(), llvm::MachineOperand::getReg(), llvm::LLT::getSizeInBits(), llvm::MachineIRBuilder::getTII(), llvm::MachineRegisterInfo::getType(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::lookup(), llvm::make_pointer_range(), llvm::PreferredTuple::MI, MI, MRI, Observer, replaceRegOpWith(), replaceRegWith(), llvm::MachineIRBuilder::setInsertPt(), llvm::MachineOperand::setReg(), llvm::PreferredTuple::Ty, llvm::MachineRegisterInfo::use_operands(), UseMI, and Uses.
Referenced by tryCombineExtendingLoads().
void CombinerHelper::applyCombineI2PToP2I | ( | MachineInstr & | MI, |
Register & | Reg | ||
) | const |
Definition at line 2540 of file CombinerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildCopy(), Builder, and MI.
void CombinerHelper::applyCombineIndexedLoadStore | ( | MachineInstr & | MI, |
IndexedLoadStoreMatchInfo & | MatchInfo | ||
) | const |
Definition at line 1510 of file CombinerHelper.cpp.
References llvm::MachineInstrBuilder::addDef(), llvm::MachineInstrBuilder::addImm(), llvm::IndexedLoadStoreMatchInfo::Addr, llvm::MachineInstrBuilder::addUse(), llvm::IndexedLoadStoreMatchInfo::Base, llvm::MachineIRBuilder::buildConstant(), Builder, llvm::MachineIRBuilder::buildInstr(), llvm::MachineInstr::cloneMemRefs(), llvm::dbgs(), llvm::MachineInstr::eraseFromParent(), getIndexedOpc(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getUniqueVRegDef(), llvm::MachineRegisterInfo::getVRegDef(), 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 3133 of file CombinerHelper.cpp.
References llvm::MachineIRBuilder::buildBuildVector(), Builder, llvm::MachineIRBuilder::buildUndef(), getReg(), llvm::LLT::getScalarType(), llvm::MachineRegisterInfo::getType(), MI, and MRI.
void CombinerHelper::applyCombineMulToShl | ( | MachineInstr & | MI, |
unsigned & | ShiftVal | ||
) | const |
Definition at line 2109 of file CombinerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildConstant(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::MCInstrInfo::get(), llvm::LLT::getScalarSizeInBits(), llvm::MachineIRBuilder::getTII(), llvm::MachineRegisterInfo::getType(), MI, MRI, llvm::MachineInstr::NoSWrap, and Observer.
void CombinerHelper::applyCombineP2IToI2P | ( | MachineInstr & | MI, |
Register & | Reg | ||
) | const |
Transform PtrToInt(IntToPtr(x)) to x.
Definition at line 2548 of file CombinerHelper.cpp.
References assert(), Builder, llvm::MachineIRBuilder::buildZExtOrTrunc(), and MI.
void CombinerHelper::applyCombineShiftToUnmerge | ( | MachineInstr & | MI, |
const unsigned & | ShiftVal | ||
) | const |
Definition at line 2447 of file CombinerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildAShr(), llvm::MachineIRBuilder::buildConstant(), Builder, llvm::MachineIRBuilder::buildLShr(), llvm::MachineIRBuilder::buildMergeLikeInstr(), llvm::MachineIRBuilder::buildShl(), llvm::MachineIRBuilder::buildUnmerge(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::Hi, llvm::Lo, MI, MRI, llvm::LLT::scalar(), and Size.
Referenced by tryCombineShiftToUnmerge().
void CombinerHelper::applyCombineShlOfExtend | ( | MachineInstr & | MI, |
const RegisterImmPair & | MatchData | ||
) | const |
Definition at line 2191 of file CombinerHelper.cpp.
References llvm::MachineIRBuilder::buildConstant(), Builder, llvm::MachineIRBuilder::buildShl(), llvm::MachineIRBuilder::buildZExt(), llvm::MachineRegisterInfo::getType(), 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 496 of file CombinerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildConcatVectors(), llvm::MachineIRBuilder::buildCopy(), Builder, llvm::MachineIRBuilder::buildUndef(), llvm::MachineInstrBuilder::getReg(), llvm::MachineRegisterInfo::getType(), llvm::LLT::isValid(), MI, MRI, and llvm::SmallVectorBase< Size_T >::size().
void CombinerHelper::applyCombineShuffleToBuildVector | ( | MachineInstr & | MI | ) | const |
Definition at line 407 of file CombinerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildBuildVector(), llvm::MachineIRBuilder::buildCopy(), Builder, llvm::MachineIRBuilder::buildUndef(), llvm::MachineIRBuilder::buildUnmerge(), llvm::LLT::getElementType(), llvm::LLT::getNumElements(), llvm::MachineInstrBuilder::getReg(), llvm::MachineRegisterInfo::getType(), MI, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::SmallVectorBase< Size_T >::size().
void CombinerHelper::applyCombineShuffleVector | ( | MachineInstr & | MI, |
const ArrayRef< Register > | Ops | ||
) | const |
Replace MI
with a concat_vectors with Ops
.
Definition at line 607 of file CombinerHelper.cpp.
References llvm::MachineIRBuilder::buildCopy(), Builder, llvm::MachineIRBuilder::buildMergeLikeInstr(), llvm::MachineRegisterInfo::cloneVirtualRegister(), MI, MRI, replaceRegWith(), llvm::MachineIRBuilder::setInsertPt(), and llvm::ArrayRef< T >::size().
Referenced by tryCombineShuffleVector().
void CombinerHelper::applyCombineTruncOfShift | ( | MachineInstr & | MI, |
std::pair< MachineInstr *, LLT > & | MatchInfo | ||
) | const |
Definition at line 2737 of file CombinerHelper.cpp.
References Builder, llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::buildTrunc(), eraseInst(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineInstrBuilder::getReg(), llvm::MachineRegisterInfo::getType(), MI, MRI, and replaceRegWith().
void CombinerHelper::applyCombineUnmergeConstant | ( | MachineInstr & | MI, |
SmallVectorImpl< APInt > & | Csts | ||
) | const |
Definition at line 2311 of file CombinerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildConstant(), Builder, Idx, MI, and llvm::SmallVectorBase< Size_T >::size().
void CombinerHelper::applyCombineUnmergeMergeToPlainValues | ( | MachineInstr & | MI, |
SmallVectorImpl< Register > & | Operands | ||
) | const |
Definition at line 2255 of file CombinerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildCast(), llvm::MachineIRBuilder::buildCopy(), Builder, llvm::MachineInstrBuilder::getReg(), llvm::MachineRegisterInfo::getRegClassOrRegBank(), llvm::MachineRegisterInfo::getType(), Idx, MI, MRI, Operands, replaceRegWith(), and llvm::MachineRegisterInfo::setRegClassOrRegBank().
void CombinerHelper::applyCombineUnmergeWithDeadLanesToTrunc | ( | MachineInstr & | MI | ) | const |
Definition at line 2356 of file CombinerHelper.cpp.
References Builder, llvm::MachineIRBuilder::buildTrunc(), and MI.
void CombinerHelper::applyCombineUnmergeZExtToZExt | ( | MachineInstr & | MI | ) | const |
Definition at line 2390 of file CombinerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildConstant(), Builder, llvm::MachineIRBuilder::buildZExt(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), Idx, MI, MRI, and replaceRegWith().
void CombinerHelper::applyCommuteBinOpOperands | ( | MachineInstr & | MI | ) | const |
Definition at line 7032 of file CombinerHelper.cpp.
References llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), MI, and Observer.
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 7938 of file CombinerHelper.cpp.
References llvm::sampleprof::Base, llvm::MachineIRBuilder::buildCopy(), Builder, llvm::MachineIRBuilder::buildFConstant(), llvm::MachineIRBuilder::buildFDiv(), llvm::MachineIRBuilder::buildFMul(), llvm::Exponent, llvm::MachineRegisterInfo::getType(), MI, and MRI.
void CombinerHelper::applyExtendThroughPhis | ( | MachineInstr & | MI, |
MachineInstr *& | ExtMI | ||
) | const |
Definition at line 4247 of file CombinerHelper.cpp.
References llvm::MachineInstrBuilder::addDef(), llvm::MachineInstrBuilder::addMBB(), Builder, llvm::MachineIRBuilder::buildExtOrTrunc(), llvm::MachineIRBuilder::buildInstrNoInsert(), llvm::drop_begin(), llvm::MachineBasicBlock::end(), llvm::MachineInstr::eraseFromParent(), llvm::MachineBasicBlock::getFirstNonPHI(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineBasicBlock::getParent(), llvm::MachineOperand::getReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), I, llvm::SetVector< T, Vector, Set, N >::insert(), llvm::MachineIRBuilder::insertInstr(), MBB, MI, MRI, PHI, llvm::MachineIRBuilder::setDebugLoc(), llvm::MachineIRBuilder::setInsertPt(), and llvm::MachineIRBuilder::setInstrAndDebugLoc().
void CombinerHelper::applyExtractAllEltsFromBuildVector | ( | MachineInstr & | MI, |
SmallVectorImpl< std::pair< Register, MachineInstr * > > & | MatchInfo | ||
) | const |
Definition at line 4387 of file CombinerHelper.cpp.
References assert(), MI, MRI, and replaceRegWith().
void CombinerHelper::applyExtractVecEltBuildVec | ( | MachineInstr & | MI, |
Register & | Reg | ||
) | const |
Definition at line 4328 of file CombinerHelper.cpp.
References assert(), Builder, llvm::MachineIRBuilder::buildTrunc(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), 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 3810 of file CombinerHelper.cpp.
References Builder, llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::buildSelect(), getReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), LHS, MI, MRI, RHS, and Select.
void CombinerHelper::applyFsubToFneg | ( | MachineInstr & | MI, |
Register & | MatchInfo | ||
) | const |
Definition at line 6088 of file CombinerHelper.cpp.
References Builder, llvm::MachineIRBuilder::buildFCanonicalize(), llvm::MachineIRBuilder::buildFNeg(), eraseInst(), llvm::MachineInstrBuilder::getReg(), llvm::MachineRegisterInfo::getType(), MI, and MRI.
void CombinerHelper::applyFunnelShiftConstantModulo | ( | MachineInstr & | MI | ) | const |
Replaces the shift amount in MI
with ShiftAmt % BW.
MI |
Definition at line 2975 of file CombinerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildConstant(), Builder, llvm::MachineIRBuilder::buildInstr(), llvm::getIConstantVRegValWithLookThrough(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::APInt::getZExtValue(), MI, MRI, and llvm::APInt::urem().
void CombinerHelper::applyFunnelShiftToRotate | ( | MachineInstr & | MI | ) | const |
Definition at line 4478 of file CombinerHelper.cpp.
References assert(), Builder, llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::MCInstrInfo::get(), llvm::MachineIRBuilder::getTII(), MI, Observer, and Opc.
void CombinerHelper::applyNotCmp | ( | MachineInstr & | MI, |
SmallVectorImpl< Register > & | RegsToNegate | ||
) | const |
Definition at line 3641 of file CombinerHelper.cpp.
References Builder, llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::MCInstrInfo::get(), llvm::CmpInst::getInversePredicate(), llvm::MachineOperand::getPredicate(), llvm::MachineIRBuilder::getTII(), llvm::MachineRegisterInfo::getVRegDef(), llvm_unreachable, MI, MRI, Observer, replaceRegWith(), and llvm::MachineOperand::setPredicate().
void CombinerHelper::applyOptBrCondByInvertingCond | ( | MachineInstr & | MI, |
MachineInstr *& | BrCond | ||
) | const |
Definition at line 1674 of file CombinerHelper.cpp.
References llvm::MachineIRBuilder::buildConstant(), Builder, llvm::MachineIRBuilder::buildXor(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::getICmpTrueVal(), llvm::MachineOperand::getMBB(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), MI, MRI, Observer, llvm::MachineIRBuilder::setInstrAndDebugLoc(), llvm::MachineOperand::setMBB(), llvm::MachineOperand::setReg(), and llvm::Xor.
void CombinerHelper::applyPtrAddImmedChain | ( | MachineInstr & | MI, |
PtrAddChain & | MatchInfo | ||
) | const |
Definition at line 1850 of file CombinerHelper.cpp.
References assert(), llvm::PtrAddChain::Bank, llvm::PtrAddChain::Base, llvm::MachineIRBuilder::buildConstant(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::PtrAddChain::Flags, llvm::MachineRegisterInfo::getType(), llvm::PtrAddChain::Imm, MI, MRI, Observer, and setRegBank().
void CombinerHelper::applyPtrAddZero | ( | MachineInstr & | MI | ) | const |
Definition at line 3736 of file CombinerHelper.cpp.
References Builder, llvm::MachineIRBuilder::buildIntToPtr(), and MI.
void CombinerHelper::applyRotateOutOfRange | ( | MachineInstr & | MI | ) | const |
Definition at line 4505 of file CombinerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildConstant(), Builder, llvm::MachineIRBuilder::buildURem(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), MI, MRI, and Observer.
void CombinerHelper::applySDivByPow2 | ( | MachineInstr & | MI | ) | const |
Definition at line 5818 of file CombinerHelper.cpp.
References llvm::Add, assert(), llvm::BitWidth, llvm::MachineIRBuilder::buildAdd(), llvm::MachineIRBuilder::buildAShr(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildCTTZ(), Builder, llvm::MachineIRBuilder::buildICmp(), llvm::MachineIRBuilder::buildLShr(), llvm::MachineIRBuilder::buildNeg(), llvm::MachineIRBuilder::buildOr(), llvm::MachineIRBuilder::buildSelect(), llvm::MachineIRBuilder::buildSub(), llvm::LLT::getElementCount(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), llvm::LLT::getScalarSizeInBits(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_SLT, llvm::LLT::isVector(), LHS, MI, MRI, RHS, llvm::LLT::scalar(), and llvm::LLT::vector().
void CombinerHelper::applySDivOrSRemByConst | ( | MachineInstr & | MI | ) | const |
Definition at line 5653 of file CombinerHelper.cpp.
References buildSDivOrSRemUsingMul(), MI, and replaceSingleDefInstWithReg().
void CombinerHelper::applySextInRegOfLoad | ( | MachineInstr & | MI, |
std::tuple< Register, unsigned > & | MatchInfo | ||
) | const |
Definition at line 1146 of file CombinerHelper.cpp.
References assert(), Builder, llvm::MachineIRBuilder::buildLoadInstr(), llvm::MachineInstr::eraseFromParent(), llvm::MachineFunction::getMachineMemOperand(), llvm::MachineIRBuilder::getMF(), llvm::GMemOperation::getMMO(), llvm::GLoadStore::getPointerReg(), llvm::MachineRegisterInfo::getVRegDef(), MI, MRI, and llvm::MachineIRBuilder::setInstrAndDebugLoc().
void CombinerHelper::applySextTruncSextLoad | ( | MachineInstr & | MI | ) | const |
Definition at line 1088 of file CombinerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildCopy(), Builder, and MI.
void CombinerHelper::applyShiftImmedChain | ( | MachineInstr & | MI, |
RegisterImmPair & | MatchInfo | ||
) | const |
Definition at line 1909 of file CombinerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildConstant(), Builder, llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::RegisterImmPair::Imm, MI, MRI, Observer, and llvm::RegisterImmPair::Reg.
void CombinerHelper::applyShiftOfShiftedLogic | ( | MachineInstr & | MI, |
ShiftOfShiftedLogic & | MatchInfo | ||
) | const |
Definition at line 2022 of file CombinerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildConstant(), Builder, llvm::MachineIRBuilder::buildInstr(), llvm::MachineInstr::eraseFromParent(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), getReg(), llvm::MachineInstrBuilder::getReg(), llvm::MachineRegisterInfo::getType(), llvm::ShiftOfShiftedLogic::Logic, llvm::ShiftOfShiftedLogic::LogicNonShiftReg, MI, MRI, llvm::ShiftOfShiftedLogic::Shift2, and llvm::ShiftOfShiftedLogic::ValSum.
void CombinerHelper::applyShuffleToExtract | ( | MachineInstr & | MI | ) | const |
Definition at line 630 of file CombinerHelper.cpp.
References llvm::MachineIRBuilder::buildCopy(), Builder, llvm::MachineIRBuilder::buildExtractVectorElementConstant(), llvm::MachineIRBuilder::buildUndef(), llvm::LLT::getNumElements(), llvm::MachineRegisterInfo::getType(), I, llvm::LLT::isVector(), MI, MRI, and llvm::MachineIRBuilder::setInsertPt().
void CombinerHelper::applySimplifyAddToSub | ( | MachineInstr & | MI, |
std::tuple< Register, Register > & | MatchInfo | ||
) | const |
Definition at line 3151 of file CombinerHelper.cpp.
References Builder, llvm::MachineIRBuilder::buildSub(), and MI.
void CombinerHelper::applySimplifyURemByPow2 | ( | MachineInstr & | MI | ) | const |
Combine G_UREM x, (known power of 2) to an add and bitmasking.
The second source operand is known to be a power of 2.
Definition at line 3743 of file CombinerHelper.cpp.
References llvm::Add, llvm::MachineIRBuilder::buildAdd(), llvm::MachineIRBuilder::buildAnd(), llvm::MachineIRBuilder::buildConstant(), Builder, llvm::MachineRegisterInfo::getType(), MI, and MRI.
void CombinerHelper::applyTruncSSatS | ( | MachineInstr & | MI, |
Register & | MatchInfo | ||
) | const |
Definition at line 5952 of file CombinerHelper.cpp.
References Builder, llvm::MachineIRBuilder::buildTruncSSatS(), and MI.
void CombinerHelper::applyTruncSSatU | ( | MachineInstr & | MI, |
Register & | MatchInfo | ||
) | const |
Definition at line 5984 of file CombinerHelper.cpp.
References Builder, llvm::MachineIRBuilder::buildTruncSSatU(), and MI.
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 5877 of file CombinerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildCTTZ(), Builder, llvm::MachineIRBuilder::buildLShr(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), LHS, MI, MRI, and RHS.
void CombinerHelper::applyUDivOrURemByConst | ( | MachineInstr & | MI | ) | const |
Definition at line 5600 of file CombinerHelper.cpp.
References buildUDivOrURemUsingMul(), MI, and replaceSingleDefInstWithReg().
void CombinerHelper::applyUMulHToLShr | ( | MachineInstr & | MI | ) | const |
Definition at line 5911 of file CombinerHelper.cpp.
References llvm::MachineIRBuilder::buildConstant(), Builder, buildLogBase2(), llvm::MachineIRBuilder::buildLShr(), llvm::MachineIRBuilder::buildSub(), llvm::MachineIRBuilder::buildZExtOrTrunc(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), llvm::LLT::getScalarSizeInBits(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), LHS, MI, MRI, and RHS.
void CombinerHelper::applyUseVectorTruncate | ( | MachineInstr & | MI, |
Register & | MatchInfo | ||
) | const |
Definition at line 3537 of file CombinerHelper.cpp.
References llvm::MachineIRBuilder::buildConcatVectors(), Builder, llvm::BuildMI(), llvm::MachineIRBuilder::buildTrunc(), llvm::MachineIRBuilder::buildUndef(), llvm::LLT::changeElementType(), llvm::LLT::getNumElements(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getScalarType(), llvm::MachineRegisterInfo::getType(), I, MI, MRI, and llvm::SmallVectorTemplateBase< T, bool >::push_back().
void CombinerHelper::applyXorOfAndWithSameReg | ( | MachineInstr & | MI, |
std::pair< Register, Register > & | MatchInfo | ||
) | const |
Definition at line 3704 of file CombinerHelper.cpp.
References Builder, llvm::MachineIRBuilder::buildNot(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::MCInstrInfo::get(), llvm::MachineIRBuilder::getTII(), llvm::MachineRegisterInfo::getType(), MI, MRI, Observer, X, and Y.
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 5658 of file CombinerHelper.cpp.
References llvm::APInt::ashrInPlace(), assert(), Builder, llvm::CallingConv::C, llvm::APInt::countr_zero(), llvm::SmallVectorBase< Size_T >::empty(), llvm::SignedDivisionByConstantInfo::get(), llvm::getDefIgnoringCopies(), llvm::getIConstantSplatVal(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getScalarType(), llvm::APInt::getSExtValue(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::APInt::isAllOnes(), llvm::MachineInstr::IsExact, llvm::APInt::isNegative(), llvm::APInt::isOne(), llvm::LLT::isScalar(), llvm::APInt::isStrictlyPositive(), llvm::LLT::isVector(), LHS, llvm::SignedDivisionByConstantInfo::Magic, llvm::matchUnaryPredicate(), MI, MRI, llvm::APInt::multiplicativeInverse(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), RHS, and llvm::SignedDivisionByConstantInfo::ShiftAmount.
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 5383 of file CombinerHelper.cpp.
References assert(), Builder, llvm::CallingConv::C, llvm::LLT::changeElementSize(), llvm::APInt::countl_zero(), llvm::KnownBits::countMinLeadingZeros(), llvm::APInt::countr_zero(), llvm::SmallVectorBase< Size_T >::empty(), llvm::UnsignedDivisionByConstantInfo::get(), llvm::APInt::getBitWidth(), llvm::getDefIgnoringCopies(), llvm::getIConstantSplatVal(), llvm::GISelValueTracking::getKnownBits(), llvm::APInt::getOneBitSet(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getScalarType(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::APInt::getZero(), llvm::CmpInst::ICMP_EQ, llvm::UnsignedDivisionByConstantInfo::IsAdd, llvm::MachineInstr::IsExact, llvm::APInt::isOne(), llvm::LLT::isScalar(), llvm::LLT::isVector(), LHS, 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(), RHS, llvm::LLT::scalar(), and VT.
Referenced by applyUDivOrURemByConst().
bool CombinerHelper::canCombineFMadOrFMA | ( | MachineInstr & | MI, |
bool & | AllowFusionGlobally, | ||
bool & | HasFMAD, | ||
bool & | Aggressive, | ||
bool | CanReassociate = false |
||
) | const |
Definition at line 6112 of file CombinerHelper.cpp.
References llvm::Aggressive, llvm::FPOpFusion::Fast, llvm::MachineInstr::FmContract, llvm::MachineInstr::FmReassoc, llvm::MachineRegisterInfo::getType(), 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 1049 of file CombinerHelper.cpp.
References assert(), DefMI, llvm::MachineDominatorTree::dominates(), isPredecessor(), MDT, and UseMI.
Referenced by applyCombineDivRem().
void CombinerHelper::eraseInst | ( | MachineInstr & | MI | ) | const |
Erase MI
.
Definition at line 2822 of file CombinerHelper.cpp.
References MI.
Referenced by applyCombineTruncOfShift(), and applyFsubToFneg().
|
inline |
Definition at line 125 of file CombinerHelper.h.
References Builder.
LLVMContext & CombinerHelper::getContext | ( | ) | const |
Definition at line 81 of file CombinerHelper.cpp.
References Builder, and llvm::MachineIRBuilder::getContext().
const DataLayout & CombinerHelper::getDataLayout | ( | ) | const |
Definition at line 77 of file CombinerHelper.cpp.
References llvm::MachineFunction::getDataLayout(), and getMachineFunction().
const MachineFunction & CombinerHelper::getMachineFunction | ( | ) | const |
Definition at line 73 of file CombinerHelper.cpp.
References Builder, and llvm::MachineIRBuilder::getMF().
Referenced by getDataLayout().
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 213 of file CombinerHelper.cpp.
References llvm::RegisterBankInfo::getRegBank(), MRI, RBI, and TRI.
Referenced by matchPtrAddImmedChain().
const TargetLowering & CombinerHelper::getTargetLowering | ( | ) | const |
Definition at line 69 of file CombinerHelper.cpp.
References Builder, llvm::MachineIRBuilder::getMF(), llvm::MachineFunction::getSubtarget(), and llvm::TargetSubtargetInfo::getTargetLowering().
Referenced by applyOptBrCondByInvertingCond(), applySDivByPow2(), applyUDivByPow2(), applyUMulHToLShr(), buildSDivOrSRemUsingMul(), buildUDivOrURemUsingMul(), matchBitfieldExtractFromAnd(), matchBitfieldExtractFromSExtInReg(), matchBitfieldExtractFromShr(), matchBitfieldExtractFromShrAnd(), matchCombineExtractedVectorLoad(), matchCombineShlOfExtend(), matchCombineTruncOfShift(), matchCommuteShift(), matchExtractVecEltBuildVec(), matchExtractVectorElementWithBuildVector(), matchExtractVectorElementWithBuildVectorTrunc(), matchFPowIExpansion(), matchHoistLogicOpWithSameOpcodeHands(), matchICmpToLHSKnownBits(), matchICmpToTrueFalseKnownBits(), matchLoadOrCombine(), matchNarrowBinopFeedingAnd(), matchNonNegZext(), matchSDivOrSRemByConst(), matchSuboCarryOut(), matchUDivOrURemByConst(), matchUMulHToLShr(), and tryReassocBinOp().
|
inline |
Definition at line 123 of file CombinerHelper.h.
References VT.
Ty
is a legal integer constant type on the target. Definition at line 170 of file CombinerHelper.cpp.
References llvm::LLT::getElementType(), isLegal(), isLegalOrBeforeLegalizer(), isPreLegalize(), and llvm::LLT::isVector().
Referenced by matchAddOverflow(), matchCastOfInteger(), matchCombineSubToAdd(), matchExtractVectorElementWithShuffleVector(), matchMulOBy0(), and matchSuboCarryOut().
bool CombinerHelper::isLegal | ( | const LegalityQuery & | Query | ) | const |
Query
is legal on the target. Definition at line 155 of file CombinerHelper.cpp.
References llvm::LegalizeActionStep::Action, assert(), llvm::LegalizerInfo::getAction(), llvm::LegalizeActions::Legal, and LI.
Referenced by isConstantLegalOrBeforeLegalizer(), isLegalOrBeforeLegalizer(), isLegalOrHasWidenScalar(), matchSDivOrSRemByConst(), matchSimplifyNegMinMax(), matchTruncSSatS(), matchTruncSSatU(), matchTruncUSatU(), and matchUseVectorTruncate().
bool CombinerHelper::isLegalOrBeforeLegalizer | ( | const LegalityQuery & | Query | ) | const |
Query
is legal on the target. Definition at line 160 of file CombinerHelper.cpp.
References isLegal(), and isPreLegalize().
Referenced by canCombineFMadOrFMA(), isConstantLegalOrBeforeLegalizer(), matchAddOverflow(), matchAshrShlToSextInreg(), matchCastOfBuildVector(), matchCastOfSelect(), matchCombineConcatVectors(), matchCombineDivRem(), matchCombineExtractedVectorLoad(), matchCombineLoadWithAndMask(), matchCombineShlOfExtend(), matchCombineShuffleConcat(), matchCombineSubToAdd(), matchCombineTruncOfShift(), matchExtOfExt(), matchExtractVectorElement(), matchExtractVectorElementWithBuildVectorTrunc(), matchExtractVectorElementWithShuffleVector(), 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::isLegalOrHasWidenScalar | ( | const LegalityQuery & | Query | ) | const |
Query
is legal on the target, or if Query
will perform WidenScalar action on the target. Definition at line 165 of file CombinerHelper.cpp.
References llvm::LegalizeActionStep::Action, llvm::LegalizerInfo::getAction(), 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 1033 of file CombinerHelper.cpp.
References assert(), DefMI, llvm::MachineBasicBlock::end(), llvm::find_if(), llvm_unreachable, MBB, MI, and UseMI.
Referenced by dominates().
bool CombinerHelper::isPreLegalize | ( | ) | const |
Definition at line 153 of file CombinerHelper.cpp.
References IsPreLegalize.
Referenced by canCombineFMadOrFMA(), isConstantLegalOrBeforeLegalizer(), isLegalOrBeforeLegalizer(), matchCombineExtendingLoads(), and matchCommuteShift().
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 5305 of file CombinerHelper.cpp.
References assert(), B, llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), 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 llvm::Add, B, llvm::MachineOperand::getReg(), llvm::GenericMachineInstr::getReg(), llvm::GVScale::getSrc(), llvm::MachineRegisterInfo::getVRegDef(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), and MRI.
bool CombinerHelper::matchAddOverflow | ( | MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
Combine addos.
Definition at line 7757 of file CombinerHelper.cpp.
References llvm::Add, llvm::ConstantRange::AlwaysOverflowsHigh, llvm::ConstantRange::AlwaysOverflowsLow, B, llvm::GISelValueTracking::computeNumSignBits(), llvm::ConstantRange::fromKnownBits(), llvm::MachineInstr::getFlag(), llvm::GISelValueTracking::getKnownBits(), llvm::GBinOp::getLHSReg(), llvm::GBinOp::getRHSReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), isConstantLegalOrBeforeLegalizer(), isLegalOrBeforeLegalizer(), LHS, llvm::ConstantRange::MayOverflow, MI, MRI, llvm::ConstantRange::NeverOverflows, llvm::MachineInstr::NoSWrap, llvm::MachineInstr::NoUWrap, RHS, llvm::ConstantRange::signedAddMayOverflow(), llvm::ConstantRange::unsignedAddMayOverflow(), llvm::MachineRegisterInfo::use_nodbg_empty(), 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 6686 of file CombinerHelper.cpp.
References assert(), LHS, llvm::MIPatternMatch::m_GSub(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), MRI, and RHS.
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 2769 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 4607 of file CombinerHelper.cpp.
References assert(), B, llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::MachineRegisterInfo::getType(), llvm::LLT::isVector(), 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::matchAnyExplicitUseIsUndef | ( | MachineInstr & | MI | ) | const |
Return true if any explicit use operand on MI
is defined by a G_IMPLICIT_DEF.
Definition at line 2762 of file CombinerHelper.cpp.
References llvm::any_of(), and MI.
bool CombinerHelper::matchAshrShlToSextInreg | ( | MachineInstr & | MI, |
std::tuple< Register, int64_t > & | MatchInfo | ||
) | const |
Match ashr (shl x, C), C -> sext_inreg (C)
Definition at line 3281 of file CombinerHelper.cpp.
References assert(), llvm::MachineRegisterInfo::getType(), 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::matchBinOpSameVal | ( | MachineInstr & | MI | ) | const |
Optimize (x op x) -> x.
Definition at line 3007 of file CombinerHelper.cpp.
References llvm::canReplaceReg(), matchEqualDefs(), MI, and MRI.
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 4673 of file CombinerHelper.cpp.
References llvm::TargetLoweringBase::getPreferredShiftAmountTy(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::LegalizerInfo::isLegalOrCustom(), 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 4643 of file CombinerHelper.cpp.
References assert(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::LegalizerInfo::isLegalOrCustom(), 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 4710 of file CombinerHelper.cpp.
References assert(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::LegalizerInfo::isLegalOrCustom(), 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 4760 of file CombinerHelper.cpp.
References assert(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::LegalizerInfo::isLegalOrCustom(), LI, MI, and MRI.
bool CombinerHelper::matchBuildVectorIdentityFold | ( | MachineInstr & | MI, |
Register & | MatchInfo | ||
) | const |
Definition at line 6702 of file CombinerHelper.cpp.
References llvm::LLT::getElementType(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), 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 116 of file CombinerHelperCompares.cpp.
References assert(), B, llvm::GFConstant::getConstant(), llvm::CmpInst::getSwappedPredicate(), llvm::CmpInst::isFPPredicate(), LHS, MI, MRI, RHS, and std::swap().
bool CombinerHelper::matchCanonicalizeICmp | ( | const MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
Definition at line 91 of file CombinerHelperCompares.cpp.
References assert(), B, llvm::GIConstant::getConstant(), llvm::CmpInst::getSwappedPredicate(), llvm::CmpInst::isIntPredicate(), LHS, MI, MRI, RHS, and std::swap().
bool CombinerHelper::matchCastOfBuildVector | ( | const MachineInstr & | CastMI, |
const MachineInstr & | BVMI, | ||
BuildFnTy & | MatchInfo | ||
) | const |
Definition at line 296 of file CombinerHelperCasts.cpp.
References B, llvm::LLT::getElementType(), llvm::GMergeLikeInstr::getNumSources(), llvm::MachineInstr::getOpcode(), llvm::GenericMachineInstr::getReg(), llvm::LLT::getScalarType(), llvm::GMergeLikeInstr::getSourceReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), I, isLegalOrBeforeLegalizer(), MRI, and llvm::SmallVectorTemplateBase< T, bool >::push_back().
bool CombinerHelper::matchCastOfInteger | ( | const MachineInstr & | CastMI, |
APInt & | MatchInfo | ||
) | const |
Definition at line 361 of file CombinerHelperCasts.cpp.
References llvm::getIConstantFromReg(), llvm::MachineInstr::getOpcode(), llvm::GenericMachineInstr::getReg(), llvm::LLT::getScalarSizeInBits(), llvm::GCastOp::getSrcReg(), llvm::MachineRegisterInfo::getType(), isConstantLegalOrBeforeLegalizer(), MRI, and llvm::APInt::trunc().
bool CombinerHelper::matchCastOfSelect | ( | const MachineInstr & | Cast, |
const MachineInstr & | SelectMI, | ||
BuildFnTy & | MatchInfo | ||
) | const |
Definition at line 200 of file CombinerHelperCasts.cpp.
References B, Cond, llvm::MachineInstr::getOpcode(), llvm::GenericMachineInstr::getReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), 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 2556 of file CombinerHelper.cpp.
References assert(), llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), LHS, llvm::MIPatternMatch::m_GPtrToInt(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), MRI, and RHS.
bool CombinerHelper::matchCombineAnyExtTrunc | ( | MachineInstr & | MI, |
Register & | Reg | ||
) | const |
Transform anyext(trunc(x)) to x.
Definition at line 2629 of file CombinerHelper.cpp.
References assert(), llvm::canReplaceReg(), llvm::getSrcRegIgnoringCopies(), llvm::MachineRegisterInfo::getType(), 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::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 314 of file CombinerHelper.cpp.
References assert(), Builder, llvm::MachineIRBuilder::buildUndef(), llvm::SmallVectorImpl< T >::clear(), llvm::LLT::getNumElements(), llvm::LLT::getScalarType(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), isLegalOrBeforeLegalizer(), MI, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::MachineIRBuilder::setInsertPt().
bool CombinerHelper::matchCombineConstPtrAddToI2P | ( | MachineInstr & | MI, |
APInt & | NewCst | ||
) | const |
Definition at line 2599 of file CombinerHelper.cpp.
References Builder, llvm::getIConstantVRegVal(), llvm::MachineIRBuilder::getMF(), llvm::MachineFunction::getRegInfo(), llvm::MachineRegisterInfo::getType(), LHS, llvm::MIPatternMatch::m_GIntToPtr(), llvm::MIPatternMatch::m_ICst(), MI, llvm::MIPatternMatch::mi_match(), MRI, RHS, llvm::APInt::sextOrTrunc(), and llvm::APInt::zextOrTrunc().
bool CombinerHelper::matchCombineCopy | ( | MachineInstr & | MI | ) | const |
Definition at line 230 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 1545 of file CombinerHelper.cpp.
References llvm::MachineRegisterInfo::getType(), isLegalOrBeforeLegalizer(), llvm_unreachable, matchEqualDefs(), MI, MRI, llvm::MachineRegisterInfo::use_nodbg_instructions(), and UseMI.
bool CombinerHelper::matchCombineExtendingLoads | ( | MachineInstr & | MI, |
PreferredTuple & | MatchInfo | ||
) | const |
Definition at line 770 of file CombinerHelper.cpp.
References llvm::LegalizerInfo::getAction(), llvm::GAnyLoad::getDstReg(), getExtLoadOpcForExtend(), llvm::GMemOperation::getMMO(), llvm::GLoadStore::getPointerReg(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), isPreLegalize(), llvm::LLT::isScalar(), llvm::LegalizeActions::Legal, LI, MI, MRI, llvm::MachineRegisterInfo::use_nodbg_instructions(), 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 1388 of file CombinerHelper.cpp.
References assert(), B, llvm::CallingConv::C, llvm::commonAlignment(), DL, llvm::MachineInstr::eraseFromParent(), llvm::CallingConv::Fast, llvm::MachinePointerInfo::getAddrSpace(), llvm::MachineMemOperand::getAlign(), llvm::Function::getContext(), llvm::MachineFunction::getDataLayout(), llvm::LLT::getElementType(), llvm::MachineFunction::getFunction(), llvm::getIConstantVRegVal(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::MachineFunction::getMachineMemOperand(), llvm::MachineInstr::getOperand(), llvm::MachineInstr::getParent(), llvm::MachineMemOperand::getPointerInfo(), llvm::MachineOperand::getReg(), llvm::LLT::getSizeInBits(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::LegalizerHelper::getVectorElementPointer(), llvm::MachinePointerInfo::getWithOffset(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), 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 6252 of file CombinerHelper.cpp.
References llvm::Aggressive, assert(), B, canCombineFMadOrFMA(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), hasMoreUses(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), isContractableFMul(), LHS, MI, MRI, RHS, std::swap(), 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 6143 of file CombinerHelper.cpp.
References llvm::Aggressive, assert(), B, canCombineFMadOrFMA(), llvm::MachineRegisterInfo::getVRegDef(), hasMoreUses(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), isContractableFMul(), LHS, MI, MRI, RHS, 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 6192 of file CombinerHelper.cpp.
References llvm::Aggressive, assert(), B, canCombineFMadOrFMA(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), hasMoreUses(), isContractableFMul(), LHS, llvm::MIPatternMatch::m_GFPExt(), llvm::MIPatternMatch::m_MInstr(), MI, llvm::MIPatternMatch::mi_match(), MRI, RHS, and std::swap().
bool CombinerHelper::matchCombineFAddFpExtFMulToFMadOrFMAAggressive | ( | MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
Definition at line 6318 of file CombinerHelper.cpp.
References llvm::Aggressive, assert(), B, canCombineFMadOrFMA(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), getReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), hasMoreUses(), isContractableFMul(), LHS, llvm::MIPatternMatch::m_GFPExt(), llvm::MIPatternMatch::m_MInstr(), MI, llvm::MIPatternMatch::mi_match(), MRI, RHS, std::swap(), X, and Y.
bool CombinerHelper::matchCombineFMinMaxNaN | ( | MachineInstr & | MI, |
unsigned & | Info | ||
) | const |
Definition at line 6658 of file CombinerHelper.cpp.
References llvm::getConstantFPVRegVal(), llvm::ConstantFP::getValueAPF(), Idx, 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 6445 of file CombinerHelper.cpp.
References llvm::Aggressive, assert(), B, canCombineFMadOrFMA(), getReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), hasMoreUses(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), isContractableFMul(), LHS, MI, MRI, and RHS.
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 6498 of file CombinerHelper.cpp.
References llvm::Aggressive, assert(), B, canCombineFMadOrFMA(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), getReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), 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 6546 of file CombinerHelper.cpp.
References llvm::Aggressive, assert(), B, canCombineFMadOrFMA(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), getReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), 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 6598 of file CombinerHelper.cpp.
References llvm::Aggressive, assert(), B, canCombineFMadOrFMA(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineRegisterInfo::getType(), isContractableFMul(), llvm::MIPatternMatch::m_GFNeg(), llvm::MIPatternMatch::m_GFPExt(), llvm::MIPatternMatch::m_MInstr(), MI, llvm::MIPatternMatch::mi_match(), MRI, X, and Y.
bool CombinerHelper::matchCombineI2PToP2I | ( | MachineInstr & | MI, |
Register & | Reg | ||
) | const |
Transform IntToPtr(PtrToInt(x)) to x if cast is in the same address space.
Definition at line 2530 of file CombinerHelper.cpp.
References assert(), llvm::MachineRegisterInfo::getType(), llvm::MIPatternMatch::m_all_of(), llvm::MIPatternMatch::m_GPtrToInt(), llvm::MIPatternMatch::m_Reg(), llvm::MIPatternMatch::m_SpecificType(), MI, llvm::MIPatternMatch::mi_match(), and MRI.
bool CombinerHelper::matchCombineIndexedLoadStore | ( | MachineInstr & | MI, |
IndexedLoadStoreMatchInfo & | MatchInfo | ||
) | const |
Definition at line 1493 of file CombinerHelper.cpp.
References llvm::IndexedLoadStoreMatchInfo::Addr, llvm::IndexedLoadStoreMatchInfo::Base, 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 3086 of file CombinerHelper.cpp.
References llvm::all_of(), assert(), llvm::LLT::getNumElements(), llvm::MachineInstr::getNumOperands(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::hasOneUse(), 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, llvm::SmallVectorImpl< T >::resize(), and llvm::MachineRegisterInfo::use_instr_begin().
bool CombinerHelper::matchCombineLoadWithAndMask | ( | MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
Match (and (load x), mask) -> zextload x.
Definition at line 951 of file CombinerHelper.cpp.
References assert(), B, llvm::APInt::countr_one(), llvm::MachineInstr::eraseFromParent(), llvm::GAnyLoad::getDstReg(), llvm::getIConstantVRegValWithLookThrough(), llvm::GMemOperation::getMemSizeInBits(), llvm::GMemOperation::getMMO(), llvm::MachineMemOperand::getPointerInfo(), llvm::GLoadStore::getPointerReg(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::LocationSize::getValue(), llvm::MachineRegisterInfo::getVRegDef(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), isLegalOrBeforeLegalizer(), llvm::APInt::isMask(), llvm::isPowerOf2_32(), llvm::GMemOperation::isSimple(), llvm::LLT::isVector(), llvm::LegalityQuery::MemDesc::MemoryTy, MI, MRI, RegSize, and llvm::LLT::scalar().
bool CombinerHelper::matchCombineMergeUnmerge | ( | MachineInstr & | MI, |
Register & | MatchInfo | ||
) | const |
Fold away a merge of an unmerge of the corresponding values.
Definition at line 2204 of file CombinerHelper.cpp.
References llvm::SmallVectorImpl< T >::emplace_back(), I, Merge, MI, MRI, and llvm::SmallVectorBase< Size_T >::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 2097 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 2422 of file CombinerHelper.cpp.
References assert(), llvm::getIConstantVRegValWithLookThrough(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::LLT::isVector(), MI, MRI, and Size.
Referenced by tryCombineShiftToUnmerge().
bool CombinerHelper::matchCombineShlOfExtend | ( | MachineInstr & | MI, |
RegisterImmPair & | MatchData | ||
) | const |
Definition at line 2151 of file CombinerHelper.cpp.
References assert(), llvm::APInt::countl_one(), llvm::GISelValueTracking::getKnownZeroes(), llvm::TargetLoweringBase::getPreferredShiftAmountTy(), llvm::LLT::getScalarSizeInBits(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), llvm::RegisterImmPair::Imm, llvm::isConstantOrConstantSplatVector(), isLegalOrBeforeLegalizer(), LHS, 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, RHS, and VT.
bool CombinerHelper::matchCombineShuffleConcat | ( | MachineInstr & | MI, |
SmallVector< Register > & | Ops | ||
) | const |
Definition at line 436 of file CombinerHelper.cpp.
References llvm::SmallVectorBase< Size_T >::empty(), llvm::LLT::getNumElements(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), isLegalOrBeforeLegalizer(), MI, MRI, and llvm::SmallVectorTemplateBase< T, bool >::push_back().
bool CombinerHelper::matchCombineShuffleToBuildVector | ( | MachineInstr & | MI | ) | const |
Replace MI
with a build_vector.
Definition at line 394 of file CombinerHelper.cpp.
References assert(), llvm::MachineRegisterInfo::getType(), llvm::LLT::isVector(), MI, 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 531 of file CombinerHelper.cpp.
References assert(), Builder, llvm::MachineIRBuilder::buildUndef(), llvm::LLT::getNumElements(), llvm::MachineInstrBuilder::getReg(), llvm::MachineRegisterInfo::getType(), Idx, llvm::LLT::isVector(), MI, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::MachineIRBuilder::setInsertPt().
Referenced by tryCombineShuffleVector().
bool CombinerHelper::matchCombineSubToAdd | ( | MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
Definition at line 2123 of file CombinerHelper.cpp.
References B, llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::getIConstantFromReg(), llvm::MachineRegisterInfo::getType(), 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 2676 of file CombinerHelper.cpp.
References assert(), llvm::getDefIgnoringCopies(), llvm::GISelValueTracking::getKnownBits(), llvm::KnownBits::getMaxValue(), getMidVTForTruncRightShiftCombine(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::LLT::getScalarSizeInBits(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), isLegalOrBeforeLegalizer(), MI, MRI, llvm::APInt::uge(), llvm::APInt::ugt(), llvm::MachineRegisterInfo::use_instructions(), and VT.
bool CombinerHelper::matchCombineUnmergeConstant | ( | MachineInstr & | MI, |
SmallVectorImpl< APInt > & | Csts | ||
) | const |
Transform G_UNMERGE Constant -> Constant1, Constant2, ...
Definition at line 2286 of file CombinerHelper.cpp.
References llvm::APFloat::bitcastToAPInt(), llvm::SmallVectorImpl< T >::emplace_back(), llvm::MachineOperand::getCImm(), llvm::MachineOperand::getFPImm(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::ConstantInt::getValue(), llvm::ConstantFP::getValueAPF(), llvm::MachineRegisterInfo::getVRegDef(), Idx, llvm::APInt::lshr(), MI, 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 2231 of file CombinerHelper.cpp.
References assert(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), Idx, 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 2326 of file CombinerHelper.cpp.
References B, llvm::MachineRegisterInfo::getVRegDef(), Idx, MI, and MRI.
bool CombinerHelper::matchCombineUnmergeWithDeadLanesToTrunc | ( | MachineInstr & | MI | ) | const |
Transform X, Y<dead> = G_UNMERGE Z -> X = G_TRUNC Z.
Definition at line 2341 of file CombinerHelper.cpp.
References assert(), llvm::MachineRegisterInfo::getType(), Idx, llvm::LLT::isVector(), MI, MRI, and llvm::MachineRegisterInfo::use_nodbg_empty().
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 2364 of file CombinerHelper.cpp.
References assert(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), 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 2643 of file CombinerHelper.cpp.
References assert(), llvm::canReplaceReg(), llvm::KnownBits::countMinLeadingZeros(), llvm::GISelValueTracking::getKnownBits(), llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), 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 6993 of file CombinerHelper.cpp.
References llvm::getIConstantVRegVal(), llvm::MachineInstr::getOpcode(), llvm::MachineRegisterInfo::getVRegDef(), LHS, MI, MRI, and RHS.
bool CombinerHelper::matchCommuteFPConstantToRHS | ( | MachineInstr & | MI | ) | const |
Match constant LHS FP ops that should be commuted.
Definition at line 7023 of file CombinerHelper.cpp.
References LHS, llvm::MIPatternMatch::m_GFCstOrSplat(), MI, llvm::MIPatternMatch::mi_match(), MRI, and RHS.
bool CombinerHelper::matchCommuteShift | ( | MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
Definition at line 2061 of file CombinerHelper.cpp.
References assert(), B, getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), isPreLegalize(), llvm::MIPatternMatch::m_any_of(), llvm::MIPatternMatch::m_GAdd(), llvm::MIPatternMatch::m_GOr(), llvm::MIPatternMatch::m_ICstOrSplat(), llvm::MIPatternMatch::m_OneNonDBGUse(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), MRI, S1, and X.
bool CombinerHelper::matchConstantFoldBinOp | ( | MachineInstr & | MI, |
APInt & | MatchInfo | ||
) | const |
Do constant folding when opportunities are exposed after MIR building.
Definition at line 5128 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 5115 of file CombinerHelper.cpp.
References llvm::ConstantFoldCastOp(), llvm::MachineRegisterInfo::getType(), MI, and MRI.
bool CombinerHelper::matchConstantFoldFMA | ( | MachineInstr & | MI, |
ConstantFP *& | MatchInfo | ||
) | const |
Constant fold G_FMA/G_FMAD.
Definition at line 5151 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 5139 of file CombinerHelper.cpp.
References llvm::ConstantFoldFPBinOp(), 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 2931 of file CombinerHelper.cpp.
References llvm::CallingConv::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 2961 of file CombinerHelper.cpp.
References llvm::getIConstantVRegValWithLookThrough(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), 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 2921 of file CombinerHelper.cpp.
References llvm::CallingConv::C, llvm::MachineOperand::getReg(), llvm::MachineRegisterInfo::getVRegDef(), llvm::isConstantOrConstantSplatVector(), llvm::MachineOperand::isReg(), MI, and MRI.
Referenced by matchOperandIsZero().
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 2811 of file CombinerHelper.cpp.
References llvm::GSelect::getCondReg(), llvm::MachineRegisterInfo::getVRegDef(), llvm::isConstantOrConstantSplatVector(), MI, MRI, and OpIdx.
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 5804 of file CombinerHelper.cpp.
References assert(), llvm::CallingConv::C, llvm::matchUnaryPredicate(), MI, MRI, and RHS.
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 2824 of file CombinerHelper.cpp.
References llvm::any_of(), Builder, llvm::MachineInstr::findRegisterDefOperandIdx(), llvm::getDefSrcRegIgnoringCopies(), llvm::GMemOperation::getMemSizeInBits(), llvm::MachineOperand::getReg(), llvm::MachineIRBuilder::getTII(), llvm::MachineInstr::isDereferenceableInvariantLoad(), llvm::MachineOperand::isReg(), llvm::MachineInstr::mayLoadOrStore(), MRI, and llvm::TargetInstrInfo::produceSameValue().
Referenced by matchBinOpSameVal(), matchCombineDivRem(), matchHoistLogicOpWithSameOpcodeHands(), and matchSelectSameVal().
bool CombinerHelper::matchExtendThroughPhis | ( | MachineInstr & | MI, |
MachineInstr *& | ExtMI | ||
) | const |
Definition at line 4193 of file CombinerHelper.cpp.
References Builder, DefMI, llvm::getDefIgnoringCopies(), llvm::MachineInstr::getOpcode(), llvm::MachineIRBuilder::getTII(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), I, llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::TargetInstrInfo::isExtendLikelyToBeFolded(), llvm::LLT::isVector(), MI, MRI, PHI, llvm::SmallPtrSetImplBase::size(), and llvm::MachineRegisterInfo::use_instr_nodbg_begin().
bool CombinerHelper::matchExtOfExt | ( | const MachineInstr & | FirstMI, |
const MachineInstr & | SecondMI, | ||
BuildFnTy & | MatchInfo | ||
) | const |
Definition at line 232 of file CombinerHelperCasts.cpp.
References B, llvm::First, llvm::MachineInstr::getFlag(), llvm::MachineInstr::getOpcode(), llvm::GenericMachineInstr::getReg(), llvm::GCastOp::getSrcReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), isLegalOrBeforeLegalizer(), MRI, llvm::MachineInstr::NoFlags, and llvm::MachineInstr::NonNeg.
bool CombinerHelper::matchExtractAllEltsFromBuildVector | ( | MachineInstr & | MI, |
SmallVectorImpl< std::pair< Register, MachineInstr * > > & | MatchInfo | ||
) | const |
Definition at line 4345 of file CombinerHelper.cpp.
References llvm::SmallBitVector::all(), assert(), llvm::getIConstantVRegVal(), llvm::LLT::getNumElements(), llvm::MachineRegisterInfo::getType(), Idx, II, MI, MRI, llvm::SmallBitVector::set(), and llvm::MachineRegisterInfo::use_nodbg_instructions().
bool CombinerHelper::matchExtractVecEltBuildVec | ( | MachineInstr & | MI, |
Register & | Reg | ||
) | const |
Definition at line 4292 of file CombinerHelper.cpp.
References assert(), llvm::getIConstantVRegValWithLookThrough(), llvm::getMVTForLLT(), llvm::LLT::getNumElements(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), llvm::LLT::isScalableVector(), MI, 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::getIConstantVRegValWithLookThrough(), llvm::GExtractVectorElement::getIndexReg(), llvm::LLT::getNumElements(), llvm::GenericMachineInstr::getReg(), llvm::MachineRegisterInfo::getType(), 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::getIConstantFromReg(), llvm::GExtractVectorElement::getIndexReg(), llvm::getMVTForLLT(), llvm::GenericMachineInstr::getReg(), llvm::GMergeLikeInstr::getSourceReg(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::GExtractVectorElement::getVectorReg(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), 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::getDefIgnoringCopies(), llvm::getIConstantVRegValWithLookThrough(), llvm::GExtractVectorElement::getIndexReg(), llvm::getMVTForLLT(), llvm::MachineOperand::getReg(), llvm::GenericMachineInstr::getReg(), llvm::GMergeLikeInstr::getSourceReg(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::GExtractVectorElement::getVectorReg(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), 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::getDefIgnoringCopies(), llvm::getIConstantVRegValWithLookThrough(), llvm::GExtractVectorElement::getIndexReg(), llvm::MachineOperand::getReg(), llvm::GenericMachineInstr::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::getIConstantFromReg(), llvm::GExtractVectorElement::getIndexReg(), llvm::GShuffleVector::getMask(), llvm::LLT::getNumElements(), llvm::GenericMachineInstr::getReg(), llvm::GShuffleVector::getSrc1Reg(), llvm::GShuffleVector::getSrc2Reg(), llvm::MachineRegisterInfo::getType(), Idx, isConstantLegalOrBeforeLegalizer(), isLegalOrBeforeLegalizer(), llvm::LLT::isVector(), MI, MRI, and llvm::Offset.
bool CombinerHelper::matchFoldAMinusC1MinusC2 | ( | const MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
Definition at line 8028 of file CombinerHelper.cpp.
References B, llvm::getIConstantFromReg(), llvm::GBinOp::getLHSReg(), llvm::GenericMachineInstr::getReg(), llvm::GBinOp::getRHSReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), MI, and MRI.
bool CombinerHelper::matchFoldAMinusC1PlusC2 | ( | const MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
Definition at line 8074 of file CombinerHelper.cpp.
References llvm::Add, B, llvm::getIConstantFromReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), MI, MRI, and llvm::Sub.
bool CombinerHelper::matchFoldAPlusC1MinusC2 | ( | const MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
Definition at line 7982 of file CombinerHelper.cpp.
References llvm::Add, B, llvm::getIConstantFromReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), MI, 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 3756 of file CombinerHelper.cpp.
References llvm::MachineRegisterInfo::getVRegDef(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), llvm::isAllOnesOrAllOnesSplat(), llvm::isConstantOrConstantVector(), llvm::isNullOrNullSplat(), LHS, MI, MRI, RHS, and Select.
bool CombinerHelper::matchFoldC1Minus2MinusC2 | ( | const MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
Definition at line 8051 of file CombinerHelper.cpp.
References B, llvm::getIConstantFromReg(), llvm::GBinOp::getLHSReg(), llvm::GenericMachineInstr::getReg(), llvm::GBinOp::getRHSReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), MI, and MRI.
bool CombinerHelper::matchFoldC2MinusAPlusC1 | ( | const MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
Definition at line 8005 of file CombinerHelper.cpp.
References llvm::Add, B, llvm::getIConstantFromReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), MI, 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 7932 of file CombinerHelper.cpp.
References llvm::Exponent, getTargetLowering(), llvm::TargetLoweringBase::isBeneficialToExpandPowI(), and MI.
bool CombinerHelper::matchFreezeOfSingleMaybePoisonOperand | ( | MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
Definition at line 244 of file CombinerHelper.cpp.
References B, llvm::canCreateUndefOrPoison(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::MachineInstr::findRegisterUseOperand(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::MachineInstr::getParent(), llvm::MachineOperand::getReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getUniqueVRegDef(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), llvm::isGuaranteedNotToBeUndefOrPoison(), llvm::MachineInstr::isPHI(), MI, MRI, Observer, replaceRegOpWith(), replaceRegWith(), TRI, and llvm::MachineInstr::uses().
bool CombinerHelper::matchFsubToFneg | ( | MachineInstr & | MI, |
Register & | MatchInfo | ||
) | const |
Definition at line 6063 of file CombinerHelper.cpp.
References assert(), llvm::MachineInstr::FmNsz, llvm::getFConstantSplat(), llvm::getFConstantVRegValWithLookThrough(), llvm::MachineRegisterInfo::getType(), llvm::LLT::isVector(), LHS, 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 4466 of file CombinerHelper.cpp.
References assert(), llvm::MachineRegisterInfo::getType(), 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 3159 of file CombinerHelper.cpp.
References assert(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), llvm::Function::getContext(), llvm::getDefIgnoringCopies(), llvm::MachineFunction::getFunction(), llvm::MachineInstr::getNumOperands(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), isLegalOrBeforeLegalizer(), llvm::MachineOperand::isReg(), llvm::TargetLoweringBase::isTruncateFree(), llvm::Register::isValid(), llvm::LLT::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 4563 of file CombinerHelper.cpp.
References assert(), B, llvm::getICmpTrueVal(), llvm::GISelValueTracking::getKnownBits(), llvm::LLT::getSizeInBits(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::CmpInst::ICMP_EQ, llvm::CmpInst::isEquality(), isLegalOrBeforeLegalizer(), llvm::LLT::isVector(), LHS, 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 4519 of file CombinerHelper.cpp.
References assert(), llvm::ICmpInst::compare(), llvm::getICmpTrueVal(), llvm::GISelValueTracking::getKnownBits(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::CmpInst::ICMP_UGE, llvm::CmpInst::ICMP_ULT, llvm::LLT::isVector(), 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 2794 of file CombinerHelper.cpp.
References assert(), llvm::getIConstantVRegVal(), llvm::LLT::getNumElements(), llvm::MachineRegisterInfo::getType(), Idx, 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::getIConstantVRegValWithLookThrough(), llvm::LLT::getNumElements(), llvm::MachineRegisterInfo::getType(), 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 4079 of file CombinerHelper.cpp.
References assert(), bigEndianByteAt(), llvm::CallingConv::C, llvm::MachineRegisterInfo::cloneVirtualRegister(), DL, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::CallingConv::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(), llvm::LLT::getSizeInBits(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::DataLayout::isBigEndian(), isBigEndian(), isLegalOrBeforeLegalizer(), llvm::LLT::isVector(), littleEndianByteAt(), llvm::LegalityQuery::MemDesc::MemoryTy, MI, MRI, and Ptr.
bool CombinerHelper::matchMergeXAndUndef | ( | const MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
Definition at line 30 of file CombinerHelperArtifacts.cpp.
References assert(), B, llvm::MachineRegisterInfo::getType(), 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::MachineRegisterInfo::getType(), 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 5286 of file CombinerHelper.cpp.
References assert(), B, llvm::MachineRegisterInfo::getType(), 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 5267 of file CombinerHelper.cpp.
References assert(), B, Builder, llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::MCInstrInfo::get(), llvm::MachineIRBuilder::getTII(), 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 384 of file CombinerHelperVectorOps.cpp.
References B, llvm::getIConstantVRegVal(), llvm::MachineOperand::getReg(), llvm::GenericMachineInstr::getReg(), llvm::GVScale::getSrc(), llvm::MachineRegisterInfo::getVRegDef(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), MRI, and llvm::Mul.
bool CombinerHelper::matchNarrowBinop | ( | const MachineInstr & | TruncMI, |
const MachineInstr & | BinopMI, | ||
BuildFnTy & | MatchInfo | ||
) | const |
trunc (binop X, C) --> binop (trunc X, trunc C).
Definition at line 336 of file CombinerHelperCasts.cpp.
References B, llvm::GBinOp::getLHSReg(), llvm::MachineInstr::getOpcode(), llvm::GenericMachineInstr::getReg(), llvm::GBinOp::getRHSReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), isLegalOrBeforeLegalizer(), LHS, MRI, and RHS.
bool CombinerHelper::matchNarrowBinopFeedingAnd | ( | MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
MI
. Definition at line 5176 of file CombinerHelper.cpp.
References assert(), B, Builder, llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::buildTrunc(), llvm::MachineIRBuilder::buildZExt(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::getDefIgnoringCopies(), llvm::getIConstantVRegValWithLookThrough(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::LLT::getSizeInBits(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), isLegalOrBeforeLegalizer(), llvm::LLT::isScalar(), MI, MRI, Observer, and llvm::LLT::scalar().
bool CombinerHelper::matchNonNegZext | ( | const MachineOperand & | MO, |
BuildFnTy & | MatchInfo | ||
) | const |
Combine zext nneg to sext.
Definition at line 116 of file CombinerHelperCasts.cpp.
References B, llvm::getMVTForLLT(), llvm::MachineOperand::getReg(), llvm::GenericMachineInstr::getReg(), llvm::GCastOp::getSrcReg(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), isLegalOrBeforeLegalizer(), 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 3564 of file CombinerHelper.cpp.
References assert(), Builder, llvm::getIConstantSplatSExtVal(), llvm::MachineIRBuilder::getMF(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getSizeInBits(), llvm::MachineFunction::getSubtarget(), llvm::TargetSubtargetInfo::getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), I, isConstValidTrue(), llvm::LLT::isVector(), llvm::MIPatternMatch::m_GXor(), llvm::MIPatternMatch::m_ICst(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::SmallVectorBase< Size_T >::size().
bool CombinerHelper::matchOperandIsKnownToBeAPowerOfTwo | ( | MachineInstr & | MI, |
unsigned | OpIdx | ||
) | const |
Check if operand OpIdx
is known to be a power of 2.
Definition at line 3027 of file CombinerHelper.cpp.
References llvm::MachineOperand::getReg(), llvm::isKnownToBeAPowerOfTwo(), MI, MRI, OpIdx, and VT.
bool CombinerHelper::matchOperandIsUndef | ( | MachineInstr & | MI, |
unsigned | OpIdx | ||
) | const |
Check if operand OpIdx
is undef.
Definition at line 3020 of file CombinerHelper.cpp.
References llvm::getOpcodeDef(), llvm::MachineOperand::getReg(), llvm::MachineOperand::isReg(), MI, MRI, and OpIdx.
bool CombinerHelper::matchOperandIsZero | ( | MachineInstr & | MI, |
unsigned | OpIdx | ||
) | const |
Check if operand OpIdx
is zero.
Definition at line 3013 of file CombinerHelper.cpp.
References llvm::canReplaceReg(), matchConstantOp(), MI, MRI, and OpIdx.
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 1640 of file CombinerHelper.cpp.
References assert(), llvm::MachineBasicBlock::begin(), llvm::MachineBasicBlock::end(), llvm::MachineOperand::getMBB(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineBasicBlock::isLayoutSuccessor(), MBB, and MI.
bool CombinerHelper::matchOr | ( | MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
bool CombinerHelper::matchOrShiftToFunnelShift | ( | MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
Definition at line 4412 of file CombinerHelper.cpp.
References assert(), B, llvm::BitWidth, llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), 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 3311 of file CombinerHelper.cpp.
References assert(), B, llvm::MachineRegisterInfo::getType(), 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 1769 of file CombinerHelper.cpp.
References llvm::PtrAddChain::Bank, llvm::PtrAddChain::Base, llvm::sampleprof::Base, llvm::TargetLoweringBase::AddrMode::BaseOffs, llvm::PtrAddChain::Flags, llvm::LLT::getAddressSpace(), llvm::MachineInstr::getFlags(), llvm::getIConstantVRegValWithLookThrough(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::GenericMachineInstr::getReg(), getRegBank(), llvm::APInt::getSExtValue(), llvm::MachineRegisterInfo::getType(), llvm::getTypeForLLT(), llvm::MachineRegisterInfo::getVRegDef(), llvm::TargetLoweringBase::AddrMode::HasBaseReg, llvm::PtrAddChain::Imm, llvm::MachineInstr::InBounds, MI, MRI, llvm::MachineInstr::NoUSWrap, llvm::MachineInstr::NoUWrap, llvm::MachineRegisterInfo::use_nodbg_instructions(), and UseMI.
bool CombinerHelper::matchPtrAddZero | ( | MachineInstr & | MI | ) | const |
}
Combine G_PTR_ADD with nullptr to G_INTTOPTR
Definition at line 3717 of file CombinerHelper.cpp.
References assert(), Builder, DL, llvm::LLT::getAddressSpace(), llvm::MachineFunction::getDataLayout(), llvm::getIConstantVRegVal(), llvm::MachineIRBuilder::getMF(), llvm::LLT::getScalarType(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), llvm::isBuildVectorAllZeros(), llvm::LLT::isPointer(), llvm::LLT::isVector(), MI, and MRI.
bool CombinerHelper::matchReassocCommBinOp | ( | MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
Reassociate commutative binary operations like G_ADD.
Definition at line 5099 of file CombinerHelper.cpp.
References MI, Opc, and tryReassocBinOp().
bool CombinerHelper::matchReassocConstantInnerLHS | ( | GPtrAdd & | MI, |
MachineInstr * | LHS, | ||
MachineInstr * | RHS, | ||
BuildFnTy & | MatchInfo | ||
) | const |
Definition at line 4927 of file CombinerHelper.cpp.
References B, llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::MachineRegisterInfo::getType(), llvm::MachineInstr::InBounds, LHS, 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 4883 of file CombinerHelper.cpp.
References B, Builder, llvm::MachineIRBuilder::buildPtrAdd(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::getIConstantVRegVal(), llvm::MachineRegisterInfo::getType(), llvm::MachineInstr::InBounds, MI, MRI, llvm::MachineInstr::NoUSWrap, llvm::MachineInstr::NoUWrap, Observer, and RHS.
Referenced by matchReassocPtrAdd().
bool CombinerHelper::matchReassocFoldConstantsInSubTree | ( | GPtrAdd & | MI, |
MachineInstr * | LHS, | ||
MachineInstr * | RHS, | ||
BuildFnTy & | MatchInfo | ||
) | const |
Definition at line 4979 of file CombinerHelper.cpp.
References B, llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::getIConstantVRegVal(), llvm::MachineRegisterInfo::getType(), llvm::MachineInstr::InBounds, LHS, 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 5026 of file CombinerHelper.cpp.
References llvm::MachineRegisterInfo::getVRegDef(), LHS, matchReassocConstantInnerLHS(), matchReassocConstantInnerRHS(), matchReassocFoldConstantsInSubTree(), MI, MRI, and RHS.
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 3338 of file CombinerHelper.cpp.
References assert(), llvm::canReplaceReg(), llvm::GISelValueTracking::getKnownBits(), llvm::KnownBits::isUnknown(), LHS, MI, MRI, llvm::KnownBits::One, RHS, 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 6905 of file CombinerHelper.cpp.
References assert(), B, llvm::MachineRegisterInfo::getType(), 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, 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 6017 of file CombinerHelper.cpp.
References assert(), B, llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::MachineRegisterInfo::getType(), 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 3394 of file CombinerHelper.cpp.
References assert(), llvm::canReplaceReg(), llvm::GISelValueTracking::getKnownBits(), LHS, MI, MRI, llvm::KnownBits::One, RHS, VT, and llvm::KnownBits::Zero.
bool CombinerHelper::matchRedundantSExtInReg | ( | MachineInstr & | MI | ) | const |
MI
is a G_SEXT_INREG that can be erased. Definition at line 3436 of file CombinerHelper.cpp.
References llvm::GISelValueTracking::computeNumSignBits(), llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), MI, MRI, and VT.
bool CombinerHelper::matchRedundantSextInReg | ( | MachineInstr & | Root, |
MachineInstr & | Other, | ||
BuildFnTy & | MatchInfo | ||
) | const |
Definition at line 382 of file CombinerHelperCasts.cpp.
References assert(), B, llvm::canReplaceReg(), llvm::GISelChangeObserver::changingAllUsesOfReg(), llvm::GISelChangeObserver::finishedChangingAllUsesOfReg(), llvm::MachineOperand::getImm(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), MRI, Observer, llvm::Other, and llvm::MachineRegisterInfo::replaceRegWith().
bool CombinerHelper::matchRotateOutOfRange | ( | MachineInstr & | MI | ) | const |
Definition at line 4490 of file CombinerHelper.cpp.
References assert(), llvm::CallingConv::C, llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), 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 5605 of file CombinerHelper.cpp.
References assert(), llvm::CallingConv::C, llvm::LLT::changeElementSize(), llvm::getApproximateEVTForLLT(), llvm::AttributeList::getAttributes(), llvm::LLT::getScalarSizeInBits(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), llvm::isConstantOrConstantVector(), llvm::MachineInstr::IsExact, isLegal(), isLegalOrBeforeLegalizer(), isLegalOrHasWidenScalar(), LI, llvm::matchUnaryPredicate(), MI, MRI, and RHS.
bool CombinerHelper::matchSelect | ( | MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
bool CombinerHelper::matchSelectIMinMax | ( | const MachineOperand & | MO, |
BuildFnTy & | MatchInfo | ||
) | const |
Combine select to integer min/max.
Definition at line 7383 of file CombinerHelper.cpp.
References B, llvm::MachineOperand::getReg(), llvm::CmpInst::getSwappedPredicate(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), 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::isPointer(), MRI, Select, and std::swap().
bool CombinerHelper::matchSelectSameVal | ( | MachineInstr & | MI | ) | const |
Optimize (cond ? x : x) -> x.
Definition at line 2999 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 1094 of file CombinerHelper.cpp.
References assert(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), isLegalOrBeforeLegalizer(), llvm::isPowerOf2_32(), llvm::LLT::isVector(), llvm::LegalityQuery::MemDesc::MemoryTy, MI, MRI, and llvm::LLT::scalar().
bool CombinerHelper::matchSextOfTrunc | ( | const MachineOperand & | MO, |
BuildFnTy & | MatchInfo | ||
) | const |
Combine sext of trunc.
Definition at line 28 of file CombinerHelperCasts.cpp.
References B, llvm::getDefIgnoringCopies(), llvm::MachineInstr::getFlag(), llvm::MachineOperand::getReg(), llvm::GenericMachineInstr::getReg(), llvm::LLT::getScalarSizeInBits(), llvm::GCastOp::getSrcReg(), llvm::MachineRegisterInfo::getType(), isLegalOrBeforeLegalizer(), MRI, and llvm::MachineInstr::NoSWrap.
bool CombinerHelper::matchSextTruncSextLoad | ( | MachineInstr & | MI | ) | const |
Definition at line 1061 of file CombinerHelper.cpp.
References assert(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::LLT::isVector(), 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 1864 of file CombinerHelper.cpp.
References assert(), llvm::sampleprof::Base, llvm::getIConstantVRegValWithLookThrough(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getUniqueVRegDef(), llvm::RegisterImmPair::Imm, MI, 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 1941 of file CombinerHelper.cpp.
References assert(), llvm::getIConstantVRegValWithLookThrough(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getUniqueVRegDef(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), llvm::ShiftOfShiftedLogic::Logic, llvm::ShiftOfShiftedLogic::LogicNonShiftReg, MI, 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 6973 of file CombinerHelper.cpp.
References llvm::CallingConv::C, llvm::GISelValueTracking::getKnownBits(), getMinUselessShift(), llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::matchUnaryPredicate(), MI, MRI, and VT.
bool CombinerHelper::matchShlOfVScale | ( | const MachineOperand & | MO, |
BuildFnTy & | MatchInfo | ||
) | const |
Definition at line 425 of file CombinerHelperVectorOps.cpp.
References B, llvm::getIConstantVRegVal(), llvm::MachineOperand::getReg(), llvm::GenericMachineInstr::getReg(), llvm::GShl::getShiftReg(), llvm::GVScale::getSrc(), llvm::GShl::getSrcReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), isLegalOrBeforeLegalizer(), 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 8223 of file CombinerHelper.cpp.
References B, commuteMask(), llvm::LLT::getNumElements(), llvm::getOpcodeDef(), llvm::MachineRegisterInfo::getType(), Idx, isLegalOrBeforeLegalizer(), llvm::LLT::isVector(), MI, and MRI.
bool CombinerHelper::matchShuffleToExtract | ( | MachineInstr & | MI | ) | const |
Definition at line 622 of file CombinerHelper.cpp.
bool CombinerHelper::matchShuffleUndefRHS | ( | MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
Remove references to rhs if it is undef.
Definition at line 8179 of file CombinerHelper.cpp.
References B, llvm::LLT::getNumElements(), llvm::MachineRegisterInfo::getType(), Idx, llvm::LLT::isVector(), 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 3066 of file CombinerHelper.cpp.
References LHS, llvm::MIPatternMatch::m_Neg(), llvm::MIPatternMatch::m_Reg(), MI, llvm::MIPatternMatch::mi_match(), MRI, and RHS.
bool CombinerHelper::matchSimplifyNegMinMax | ( | MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
Tranform (neg (min/max x, (neg x))) into (max/min x, (neg x)).
Definition at line 7456 of file CombinerHelper.cpp.
References assert(), B, llvm::getInverseGMinMaxOpcode(), llvm::MachineInstr::getOpcode(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), 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_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 6890 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 5339 of file CombinerHelper.cpp.
References assert(), B, llvm::MachineRegisterInfo::getType(), 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 8275 of file CombinerHelper.cpp.
References llvm::ConstantRange::AlwaysOverflowsHigh, llvm::ConstantRange::AlwaysOverflowsLow, B, llvm::ConstantRange::fromKnownBits(), llvm::GBinOpCarryOut::getCarryOutReg(), llvm::getICmpTrueVal(), llvm::GISelValueTracking::getKnownBits(), llvm::GBinOpCarryOut::getLHSReg(), llvm::GenericMachineInstr::getReg(), llvm::GBinOpCarryOut::getRHSReg(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), isConstantLegalOrBeforeLegalizer(), isLegalOrBeforeLegalizer(), llvm::GSubCarryOut::isSigned(), llvm::LLT::isVector(), LHS, llvm::ConstantRange::MayOverflow, MI, MRI, llvm::ConstantRange::NeverOverflows, llvm::MachineInstr::NoSWrap, llvm::MachineInstr::NoUWrap, RHS, 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::MachineOperand::getReg(), llvm::GenericMachineInstr::getReg(), llvm::GVScale::getSrc(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), isLegalOrBeforeLegalizer(), MRI, and llvm::Sub.
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 137 of file CombinerHelperCasts.cpp.
References B, llvm::GenericMachineInstr::getReg(), llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), isLegalOrBeforeLegalizer(), and MRI.
bool CombinerHelper::matchTruncBuildVectorFold | ( | MachineInstr & | MI, |
Register & | MatchInfo | ||
) | const |
Definition at line 6748 of file CombinerHelper.cpp.
References llvm::MachineRegisterInfo::getType(), 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 6759 of file CombinerHelper.cpp.
References llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), 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 5927 of file CombinerHelper.cpp.
References assert(), llvm::LLT::getScalarSizeInBits(), llvm::APInt::getSignedMaxValue(), llvm::APInt::getSignedMinValue(), llvm::MachineRegisterInfo::getType(), isLegal(), LI, llvm::MIPatternMatch::m_GSMax(), llvm::MIPatternMatch::m_GSMin(), llvm::MIPatternMatch::m_Reg(), llvm::MIPatternMatch::m_SpecificICstOrSplat(), MI, llvm::MIPatternMatch::mi_match(), MRI, and llvm::APInt::sext().
bool CombinerHelper::matchTruncSSatU | ( | MachineInstr & | MI, |
Register & | MatchInfo | ||
) | const |
Definition at line 5959 of file CombinerHelper.cpp.
References assert(), llvm::APInt::getMaxValue(), llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), isLegal(), 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 5991 of file CombinerHelper.cpp.
References assert(), llvm::APInt::getMaxValue(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), isLegal(), 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 6008 of file CombinerHelper.cpp.
References llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineRegisterInfo::getType(), 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 5551 of file CombinerHelper.cpp.
References assert(), llvm::CallingConv::C, llvm::LLT::changeElementSize(), llvm::getApproximateEVTForLLT(), llvm::AttributeList::getAttributes(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), llvm::isConstantOrConstantVector(), llvm::MachineInstr::IsExact, isLegalOrBeforeLegalizer(), llvm::LLT::isVector(), LI, llvm::matchUnaryPredicate(), MI, MRI, RHS, and llvm::LLT::scalar().
bool CombinerHelper::matchUMulHToLShr | ( | MachineInstr & | MI | ) | const |
Definition at line 5891 of file CombinerHelper.cpp.
References assert(), llvm::CallingConv::C, llvm::TargetLoweringBase::getPreferredShiftAmountTy(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), isLegalOrBeforeLegalizer(), llvm::matchUnaryPredicate(), MI, MRI, and RHS.
bool CombinerHelper::matchUndefSelectCmp | ( | MachineInstr & | MI | ) | const |
Return true if a G_SELECT instruction MI
has an undef comparison.
Definition at line 2788 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 2776 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 2782 of file CombinerHelper.cpp.
References assert(), llvm::getOpcodeDef(), MI, and MRI.
bool CombinerHelper::matchUnmergeValuesAnyExtBuildVector | ( | const MachineInstr & | MI, |
BuildFnTy & | MatchInfo | ||
) | const |
Definition at line 8097 of file CombinerHelper.cpp.
References B, llvm::LLT::getElementType(), llvm::GUnmerge::getNumDefs(), llvm::LLT::getNumElements(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::GenericMachineInstr::getReg(), llvm::GUnmerge::getSourceReg(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), I, llvm::LLT::isFixedVector(), isLegalOrBeforeLegalizer(), MI, MRI, and llvm::SmallVectorTemplateBase< T, bool >::push_back().
bool CombinerHelper::matchUseVectorTruncate | ( | MachineInstr & | MI, |
Register & | MatchInfo | ||
) | const |
Definition at line 3467 of file CombinerHelper.cpp.
References llvm::BuildMI(), llvm::LLT::changeElementType(), llvm::LLT::getElementCount(), llvm::LLT::getElementType(), llvm::LLT::getNumElements(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::LLT::getScalarType(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), I, llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::isKnownMultipleOf(), isLegal(), IsPreLegalize, MI, 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 3673 of file CombinerHelper.cpp.
References assert(), llvm::MachineRegisterInfo::hasOneNonDBGUse(), 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 81 of file CombinerHelperCasts.cpp.
References B, llvm::getDefIgnoringCopies(), llvm::MachineOperand::getReg(), llvm::GenericMachineInstr::getReg(), llvm::LLT::getScalarSizeInBits(), llvm::GCastOp::getSrcReg(), llvm::MachineRegisterInfo::getType(), isLegalOrBeforeLegalizer(), MRI, llvm::MachineInstr::NonNeg, and llvm::MachineInstr::NoUWrap.
void CombinerHelper::replaceInstWithConstant | ( | MachineInstr & | MI, |
APInt | C | ||
) | const |
Replace an instruction with a G_CONSTANT with value C
.
Definition at line 3047 of file CombinerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildConstant(), Builder, llvm::CallingConv::C, and MI.
void CombinerHelper::replaceInstWithConstant | ( | MachineInstr & | MI, |
int64_t | C | ||
) | const |
Replace an instruction with a G_CONSTANT with value C
.
Definition at line 3040 of file CombinerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildConstant(), Builder, llvm::CallingConv::C, and MI.
void CombinerHelper::replaceInstWithFConstant | ( | MachineInstr & | MI, |
ConstantFP * | CFP | ||
) | const |
Replace an instruction with an G_FCONSTANT with value CFP
.
Definition at line 3053 of file CombinerHelper.cpp.
References assert(), Builder, llvm::MachineIRBuilder::buildFConstant(), llvm::ConstantFP::getValueAPF(), and MI.
void CombinerHelper::replaceInstWithFConstant | ( | MachineInstr & | MI, |
double | C | ||
) | const |
Replace an instruction with a G_FCONSTANT with value C
.
Definition at line 3033 of file CombinerHelper.cpp.
References assert(), Builder, llvm::MachineIRBuilder::buildFConstant(), llvm::CallingConv::C, and MI.
void CombinerHelper::replaceInstWithUndef | ( | MachineInstr & | MI | ) | const |
Replace an instruction with a G_IMPLICIT_DEF.
Definition at line 3060 of file CombinerHelper.cpp.
References assert(), Builder, llvm::MachineIRBuilder::buildUndef(), and MI.
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 204 of file CombinerHelper.cpp.
References Builder, llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::MCInstrInfo::get(), llvm::MachineIRBuilder::getTII(), Observer, and llvm::MachineInstr::setDesc().
Referenced by 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 193 of file CombinerHelper.cpp.
References assert(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::MachineOperand::getParent(), 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 181 of file CombinerHelper.cpp.
References llvm::MachineIRBuilder::buildCopy(), Builder, llvm::GISelChangeObserver::changingAllUsesOfReg(), llvm::MachineRegisterInfo::constrainRegAttrs(), llvm::GISelChangeObserver::finishedChangingAllUsesOfReg(), MRI, Observer, and llvm::MachineRegisterInfo::replaceRegWith().
Referenced by applyCombineConcatVectors(), applyCombineCopy(), applyCombineExtendingLoads(), applyCombineShuffleVector(), applyCombineTruncOfShift(), applyCombineUnmergeMergeToPlainValues(), applyCombineUnmergeZExtToZExt(), applyExtractAllEltsFromBuildVector(), llvm::AMDGPUCombinerHelper::applyFoldableFneg(), applyNotCmp(), 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 2942 of file CombinerHelper.cpp.
References assert(), llvm::canReplaceReg(), MI, MRI, OpIdx, and replaceRegWith().
void CombinerHelper::replaceSingleDefInstWithReg | ( | MachineInstr & | MI, |
Register | Replacement | ||
) | const |
Delete MI
and replace all of its uses with Replacement
.
Definition at line 2952 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 217 of file CombinerHelper.cpp.
References MRI, and llvm::MachineRegisterInfo::setRegBank().
Referenced by applyPtrAddImmedChain().
bool llvm::CombinerHelper::tryCombine | ( | MachineInstr & | MI | ) | const |
Try to transform MI
by using all of the above combine functions.
Returns true if changed.
bool CombinerHelper::tryCombineCopy | ( | MachineInstr & | MI | ) | const |
If MI
is COPY, try to combine it.
Returns true if MI changed.
Definition at line 223 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 743 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 1707 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 2519 of file CombinerHelper.cpp.
References applyCombineShiftToUnmerge(), matchCombineShiftToUnmerge(), and MI.
bool CombinerHelper::tryCombineShuffleVector | ( | MachineInstr & | MI | ) | const |
Try to combine G_SHUFFLE_VECTOR into G_CONCAT_VECTORS.
Returns true if MI changed.
Definition at line 522 of file CombinerHelper.cpp.
References applyCombineShuffleVector(), matchCombineShuffleVector(), and MI.
bool CombinerHelper::tryEmitMemcpyInline | ( | MachineInstr & | MI | ) | const |
Emit loads and stores that perform the given memcpy.
Assumes MI
is a G_MEMCPY_INLINE TODO: implement dynamically sized inline memcpy, and rename: s/bool tryEmit/void emit/
Definition at line 1699 of file CombinerHelper.cpp.
References llvm::MachineIRBuilder::getMF(), llvm::LegalizerHelper::Legalized, 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 5058 of file CombinerHelper.cpp.
References B, llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), getTargetLowering(), llvm::MachineRegisterInfo::getType(), llvm::MachineRegisterInfo::getVRegDef(), llvm::isConstantOrConstantSplatVector(), llvm::TargetLowering::isReassocProfitable(), MRI, and Opc.
Referenced by matchReassocCommBinOp().
|
protected |
Definition at line 107 of file CombinerHelper.h.
Referenced by applyAshShlToSextInreg(), applyBuildFnMO(), applyBuildFnNoErase(), applyBuildInstructionSteps(), applyCombineAddP2IToPtrAdd(), applyCombineConcatVectors(), applyCombineConstantFoldFpUnary(), applyCombineConstPtrAddToI2P(), applyCombineDivRem(), applyCombineExtendingLoads(), applyCombineI2PToP2I(), applyCombineIndexedLoadStore(), applyCombineInsertVecElts(), applyCombineP2IToI2P(), applyCombineShiftToUnmerge(), applyCombineShlOfExtend(), applyCombineShuffleConcat(), applyCombineShuffleToBuildVector(), applyCombineShuffleVector(), applyCombineTruncOfShift(), applyCombineUnmergeConstant(), applyCombineUnmergeMergeToPlainValues(), applyCombineUnmergeWithDeadLanesToTrunc(), applyCombineUnmergeZExtToZExt(), applyExpandFPowI(), llvm::AMDGPUCombinerHelper::applyExpandPromotedF16FMed3(), applyExtendThroughPhis(), applyExtractVecEltBuildVec(), llvm::AMDGPUCombinerHelper::applyFoldableFneg(), applyFoldBinOpIntoSelect(), applyFsubToFneg(), applyFunnelShiftConstantModulo(), applyFunnelShiftToRotate(), applyNotCmp(), applyOptBrCondByInvertingCond(), applyPtrAddZero(), applyRotateOutOfRange(), applySDivByPow2(), applySextInRegOfLoad(), applySextTruncSextLoad(), applyShiftImmedChain(), applyShiftOfShiftedLogic(), applyShuffleToExtract(), applySimplifyAddToSub(), applySimplifyURemByPow2(), applyTruncSSatS(), applyTruncSSatU(), applyUDivByPow2(), applyUMulHToLShr(), applyUseVectorTruncate(), applyXorOfAndWithSameReg(), buildSDivOrSRemUsingMul(), buildUDivOrURemUsingMul(), getBuilder(), getContext(), getMachineFunction(), getTargetLowering(), matchCombineConcatVectors(), matchCombineConstPtrAddToI2P(), llvm::AMDGPUCombinerHelper::matchCombineFmulWithSelectToFldexp(), matchCombineShuffleVector(), matchEqualDefs(), matchExtendThroughPhis(), matchMulOBy2(), matchNarrowBinopFeedingAnd(), matchNotCmp(), matchPtrAddZero(), matchReassocConstantInnerRHS(), replaceInstWithConstant(), replaceInstWithFConstant(), replaceInstWithUndef(), replaceOpcodeWith(), and replaceRegWith().
|
protected |
Definition at line 112 of file CombinerHelper.h.
Referenced by isPreLegalize(), and matchUseVectorTruncate().
|
protected |
Definition at line 113 of file CombinerHelper.h.
Referenced by isLegal(), isLegalOrHasWidenScalar(), matchBitfieldExtractFromAnd(), matchBitfieldExtractFromSExtInReg(), matchBitfieldExtractFromShr(), matchBitfieldExtractFromShrAnd(), matchCombineExtendingLoads(), matchCombineShlOfExtend(), matchSDivOrSRemByConst(), matchTruncSSatS(), matchTruncSSatU(), matchTruncUSatU(), matchTruncUSatUToFPTOUISat(), and matchUDivOrURemByConst().
|
protected |
Definition at line 111 of file CombinerHelper.h.
Referenced by dominates().
|
protected |
Definition at line 108 of file CombinerHelper.h.
Referenced by applyAshShlToSextInreg(), applyBuildFnMO(), applyCombineAddP2IToPtrAdd(), 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(), applyFsubToFneg(), applyFunnelShiftConstantModulo(), applyNotCmp(), applyOptBrCondByInvertingCond(), applyPtrAddImmedChain(), applyRotateOutOfRange(), applySDivByPow2(), applySextInRegOfLoad(), applyShiftImmedChain(), applyShiftOfShiftedLogic(), applyShuffleToExtract(), applySimplifyURemByPow2(), applyUDivByPow2(), applyUMulHToLShr(), applyUseVectorTruncate(), applyXorOfAndWithSameReg(), buildSDivOrSRemUsingMul(), buildUDivOrURemUsingMul(), canCombineFMadOrFMA(), getRegBank(), matchAddEToAddO(), matchAddOfVScale(), matchAddOverflow(), matchAddSubSameReg(), matchAndOrDisjointMask(), matchAshrShlToSextInreg(), matchBinOpSameVal(), matchBitfieldExtractFromAnd(), matchBitfieldExtractFromSExtInReg(), matchBitfieldExtractFromShr(), matchBitfieldExtractFromShrAnd(), matchBuildVectorIdentityFold(), matchCanonicalizeFCmp(), matchCanonicalizeICmp(), matchCastOfBuildVector(), matchCastOfInteger(), matchCastOfSelect(), matchCombineAddP2IToPtrAdd(), matchCombineAnyExtTrunc(), matchCombineConcatVectors(), matchCombineConstPtrAddToI2P(), matchCombineCopy(), matchCombineDivRem(), matchCombineExtendingLoads(), matchCombineExtractedVectorLoad(), matchCombineFAddFMAFMulToFMadOrFMA(), matchCombineFAddFMulToFMadOrFMA(), matchCombineFAddFpExtFMulToFMadOrFMA(), matchCombineFAddFpExtFMulToFMadOrFMAAggressive(), matchCombineFMinMaxNaN(), llvm::AMDGPUCombinerHelper::matchCombineFmulWithSelectToFldexp(), matchCombineFSubFMulToFMadOrFMA(), matchCombineFSubFNegFMulToFMadOrFMA(), matchCombineFSubFpExtFMulToFMadOrFMA(), matchCombineFSubFpExtFNegFMulToFMadOrFMA(), matchCombineI2PToP2I(), matchCombineInsertVecElts(), matchCombineLoadWithAndMask(), matchCombineMergeUnmerge(), matchCombineMulToShl(), matchCombineShiftToUnmerge(), matchCombineShlOfExtend(), matchCombineShuffleConcat(), matchCombineShuffleToBuildVector(), matchCombineShuffleVector(), matchCombineSubToAdd(), matchCombineTruncOfShift(), matchCombineUnmergeConstant(), matchCombineUnmergeMergeToPlainValues(), matchCombineUnmergeUndef(), matchCombineUnmergeWithDeadLanesToTrunc(), matchCombineUnmergeZExtToZExt(), matchCombineZextTrunc(), matchCommuteConstantToRHS(), matchCommuteFPConstantToRHS(), matchCommuteShift(), matchConstantFoldBinOp(), matchConstantFoldCastOp(), matchConstantFoldFMA(), matchConstantFoldFPBinOp(), matchConstantFPOp(), llvm::AMDGPUCombinerHelper::matchConstantIs32BitMask(), matchConstantLargerBitWidth(), matchConstantOp(), matchConstantSelectCmp(), matchDivByPow2(), matchEqualDefs(), llvm::AMDGPUCombinerHelper::matchExpandPromotedF16FMed3(), matchExtendThroughPhis(), matchExtOfExt(), matchExtractAllEltsFromBuildVector(), matchExtractVecEltBuildVec(), matchExtractVectorElement(), matchExtractVectorElementWithBuildVector(), matchExtractVectorElementWithBuildVectorTrunc(), matchExtractVectorElementWithDifferentIndices(), matchExtractVectorElementWithShuffleVector(), llvm::AMDGPUCombinerHelper::matchFoldableFneg(), matchFoldAMinusC1MinusC2(), matchFoldAMinusC1PlusC2(), matchFoldAPlusC1MinusC2(), matchFoldBinOpIntoSelect(), matchFoldC1Minus2MinusC2(), matchFoldC2MinusAPlusC1(), matchFreezeOfSingleMaybePoisonOperand(), matchFsubToFneg(), matchFunnelShiftToRotate(), matchHoistLogicOpWithSameOpcodeHands(), matchICmpToLHSKnownBits(), matchICmpToTrueFalseKnownBits(), matchInsertExtractVecEltOutOfBounds(), matchInsertVectorElementOOB(), matchLoadOrCombine(), matchMergeXAndUndef(), matchMergeXAndZero(), matchMulOBy0(), matchMulOBy2(), matchMulOfVScale(), matchNarrowBinop(), matchNarrowBinopFeedingAnd(), matchNonNegZext(), matchNotCmp(), matchOperandIsKnownToBeAPowerOfTwo(), matchOperandIsUndef(), matchOperandIsZero(), matchOrShiftToFunnelShift(), matchOverlappingAnd(), matchPtrAddImmedChain(), matchPtrAddZero(), matchReassocConstantInnerLHS(), matchReassocConstantInnerRHS(), matchReassocFoldConstantsInSubTree(), matchReassocPtrAdd(), matchRedundantAnd(), matchRedundantBinOpInEquality(), matchRedundantNegOperands(), matchRedundantOr(), matchRedundantSExtInReg(), matchRedundantSextInReg(), matchRotateOutOfRange(), matchSDivOrSRemByConst(), matchSelectIMinMax(), matchSelectSameVal(), 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(), replaceRegWith(), replaceSingleDefInstWithOperand(), replaceSingleDefInstWithReg(), setRegBank(), and tryReassocBinOp().
|
protected |
Definition at line 109 of file CombinerHelper.h.
Referenced by applyCombineExtendingLoads(), applyCombineMulToShl(), applyCommuteBinOpOperands(), applyFunnelShiftToRotate(), applyNotCmp(), applyOptBrCondByInvertingCond(), applyPtrAddImmedChain(), applyRotateOutOfRange(), applyShiftImmedChain(), applyXorOfAndWithSameReg(), matchAddEToAddO(), matchAndOrDisjointMask(), matchCombineSubToAdd(), matchFreezeOfSingleMaybePoisonOperand(), matchMulOBy2(), matchNarrowBinopFeedingAnd(), matchReassocConstantInnerLHS(), matchReassocConstantInnerRHS(), matchReassocFoldConstantsInSubTree(), matchRedundantNegOperands(), matchRedundantSextInReg(), replaceOpcodeWith(), replaceRegOpWith(), and replaceRegWith().
|
protected |
Definition at line 114 of file CombinerHelper.h.
Referenced by getRegBank().
|
protected |
Definition at line 115 of file CombinerHelper.h.
Referenced by getRegBank(), and matchFreezeOfSingleMaybePoisonOperand().
|
protected |
Definition at line 110 of file CombinerHelper.h.
Referenced by buildUDivOrURemUsingMul(), getValueTracking(), matchAddOverflow(), matchCombineShlOfExtend(), matchCombineTruncOfShift(), matchCombineZextTrunc(), matchICmpToLHSKnownBits(), matchICmpToTrueFalseKnownBits(), matchOperandIsKnownToBeAPowerOfTwo(), matchRedundantAnd(), matchRedundantOr(), matchRedundantSExtInReg(), matchShiftsTooBig(), and matchSuboCarryOut().