|
LLVM 24.0.0git
|
The core instruction combiner logic. More...
#include "llvm/Transforms/InstCombine/InstCombiner.h"
Public Types | |
| using | BuilderTy = IRBuilder<TargetFolder, IRBuilderInstCombineInserter> |
| An IRBuilder that automatically inserts new instructions into the worklist. | |
Static Public Member Functions | |
| static Value * | peekThroughBitcast (Value *V, bool OneUseOnly=false) |
| Return the source operand of a potentially bitcasted value while optionally checking if it has one use. | |
| static unsigned | getComplexity (Value *V) |
| Assign a complexity or rank value to LLVM Values. | |
| static bool | isCanonicalPredicate (CmpPredicate Pred) |
| Predicate canonicalization reduces the number of patterns that need to be matched by other transforms. | |
| static Constant * | AddOne (Constant *C) |
| Add one to a Constant. | |
| static Constant * | SubOne (Constant *C) |
| Subtract one from a Constant. | |
| static bool | shouldAvoidAbsorbingNotIntoSelect (const SelectInst &SI) |
| static Constant * | getSafeVectorConstantForBinop (BinaryOperator::BinaryOps Opcode, Constant *In, bool IsRHSConstant) |
| Some binary operators require special handling to avoid poison and undefined behavior. | |
| static Value * | stripSignOnlyFPOps (Value *Val) |
| Ignore all operations which only change the sign of a value, returning the underlying magnitude value. | |
Public Attributes | |
| BuilderTy | Builder |
The core instruction combiner logic.
This class provides both the logic to recursively visit instructions and combine them.
Definition at line 49 of file InstCombiner.h.
| using llvm::InstCombiner::BuilderTy = IRBuilder<TargetFolder, IRBuilderInstCombineInserter> |
An IRBuilder that automatically inserts new instructions into the worklist.
Definition at line 72 of file InstCombiner.h.
|
inline |
Definition at line 118 of file InstCombiner.h.
References AA, AC, BFI, BPI, Builder, DC, DL, DT, F, getContext(), MinimizeSize, ORE, PSI, RPOT, SQ, TLI, and Worklist.
Referenced by llvm::InstCombinerImpl::InstCombinerImpl().
|
virtualdefault |
Add one to a Constant.
Definition at line 198 of file InstCombiner.h.
References C(), and llvm::ConstantExpr::getAdd().
Referenced by llvm::InstCombinerImpl::foldAddWithConstant(), llvm::InstCombinerImpl::visitAdd(), and llvm::InstCombinerImpl::visitSub().
|
inline |
Definition at line 363 of file InstCombiner.h.
Referenced by llvm::InstCombinerImpl::addDeadEdge(), foldIsPowerOf2(), foldIsPowerOf2OrZero(), llvm::InstCombinerImpl::freelyInvertAllUsersOf(), llvm::InstCombinerImpl::handleUnreachableFrom(), llvm::Negator::Negate(), processUZExtIdiom(), replaceExtractElements(), rewriteGEPAsOffset(), llvm::X86TTIImpl::simplifyDemandedVectorEltsIntrinsic(), and llvm::InstCombinerImpl::visitCondBrInst().
| bool InstCombiner::canBeCastedExactlyIntToFP | ( | Value * | V, |
| Type * | FPTy, | ||
| bool | IsSigned, | ||
| const Instruction * | CtxI = nullptr ) const |
Definition at line 2206 of file InstCombineCasts.cpp.
References assert(), computeKnownBits(), ComputeNumSignBits(), llvm::KnownBits::countMinLeadingZeros(), llvm::KnownBits::countMinTrailingZeros(), F, llvm::Type::getFPMantissaWidth(), llvm::PatternMatch::m_FPToI(), llvm::PatternMatch::m_FPToSI(), llvm::PatternMatch::m_Value(), and llvm::PatternMatch::match().
Referenced by foldFCmpFAbsFSubIntToFP(), getMinimumFPType(), and isKnownExactCastIntToFP().
|
inline |
Given i1 V, can every user of V be freely adapted if V is changed to !V ?
InstCombine's freelyInvertAllUsersOf() must be kept in sync with this fn. NOTE: for Instructions only!
See also: isFreeToInvert()
Definition at line 264 of file InstCombiner.h.
References assert(), llvm::cast(), I, llvm::PatternMatch::m_Not(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), shouldAvoidAbsorbingNotIntoSelect(), and llvm::Value::uses().
Referenced by canFreelyInvert(), llvm::InstCombinerImpl::canonicalizeICmpPredicate(), llvm::InstCombinerImpl::sinkNotIntoLogicalOp(), and llvm::InstCombinerImpl::sinkNotIntoOtherHandOfLogicalOp().
| void InstCombiner::computeBackEdges | ( | ) |
Definition at line 6185 of file InstructionCombining.cpp.
References BackEdges, ComputedBackEdges, F, RPOT, and llvm::successors().
Referenced by isBackEdge().
|
inline |
Definition at line 470 of file InstCombiner.h.
References llvm::computeKnownBits(), llvm::Depth, and SQ.
|
inline |
Definition at line 465 of file InstCombiner.h.
References llvm::computeKnownBits(), llvm::Depth, llvm::Known, and SQ.
Referenced by canBeCastedExactlyIntToFP(), canReplaceGEPIdxWithZero(), llvm::InstCombinerImpl::commonShiftTransforms(), llvm::InstCombinerImpl::convertOrOfShiftsToFunnelShift(), llvm::InstCombinerImpl::foldAddWithConstant(), foldCtpop(), foldCttzCtlz(), llvm::InstCombinerImpl::foldICmpAndConstConst(), foldICmpAndXX(), llvm::InstCombinerImpl::foldICmpBinOp(), llvm::InstCombinerImpl::foldICmpTruncConstant(), llvm::InstCombinerImpl::foldICmpWithZero(), llvm::InstCombinerImpl::SimplifyDemandedUseBits(), llvm::InstCombinerImpl::SimplifyDemandedUseFPClass(), llvm::InstCombinerImpl::simplifyRangeCheck(), simplifyShiftSelectingPackedElement(), llvm::InstCombinerImpl::takeLog2(), llvm::InstCombinerImpl::visitAnd(), llvm::InstCombinerImpl::visitCallInst(), llvm::InstCombinerImpl::visitLShr(), llvm::InstCombinerImpl::visitOr(), llvm::InstCombinerImpl::visitSDiv(), and llvm::InstCombinerImpl::visitSwitchInst().
|
inline |
Definition at line 494 of file InstCombiner.h.
References AC, llvm::ComputeMaxSignificantBits(), llvm::Depth, DL, and DT.
Referenced by processUGT_ADDCST_ADD(), and llvm::InstCombinerImpl::visitTrunc().
|
inline |
Definition at line 488 of file InstCombiner.h.
References AC, llvm::ComputeNumSignBits(), llvm::Depth, DL, and DT.
Referenced by canBeCastedExactlyIntToFP(), llvm::InstCombinerImpl::SimplifyDemandedUseBits(), llvm::InstCombinerImpl::visitAdd(), llvm::InstCombinerImpl::visitSExt(), and llvm::InstCombinerImpl::visitZExt().
|
inline |
Definition at line 530 of file InstCombiner.h.
References llvm::computeOverflowForSignedAdd(), LHS, RHS, and SQ.
Referenced by llvm::InstCombinerImpl::computeOverflow().
|
inline |
Definition at line 515 of file InstCombiner.h.
References llvm::computeOverflowForSignedMul(), LHS, RHS, and SQ.
Referenced by llvm::InstCombinerImpl::computeOverflow().
|
inline |
Definition at line 544 of file InstCombiner.h.
References llvm::computeOverflowForSignedSub(), LHS, RHS, and SQ.
Referenced by llvm::InstCombinerImpl::computeOverflow().
|
inline |
Definition at line 522 of file InstCombiner.h.
References llvm::computeOverflowForUnsignedAdd(), LHS, RHS, and SQ.
Referenced by llvm::InstCombinerImpl::computeOverflow().
|
inline |
Definition at line 507 of file InstCombiner.h.
References llvm::computeOverflowForUnsignedMul(), LHS, RHS, and SQ.
Referenced by llvm::InstCombinerImpl::computeOverflow().
|
inline |
Definition at line 537 of file InstCombiner.h.
References llvm::computeOverflowForUnsignedSub(), LHS, RHS, and SQ.
Referenced by llvm::InstCombinerImpl::computeOverflow().
|
pure virtual |
Combiner aware instruction erasure.
When dealing with an instruction that has side effects or produces a void value, we can't rely on DCE to delete the instruction. Instead, visit methods should return the value returned by this function.
Implemented in llvm::InstCombinerImpl.
References I.
Referenced by foldConstantIntoDotAccumulator(), instCombineDMB(), llvm::ARMTTIImpl::instCombineIntrinsic(), llvm::GCNTTIImpl::instCombineIntrinsic(), llvm::X86TTIImpl::instCombineIntrinsic(), instCombineST1ScatterIndex(), instCombineSVEPairwiseAddLong(), instCombineSVEST1(), instCombineXorSVECmpCC(), instCombineZExtSVECmpNE(), modifyIntrinsicCall(), simplifyAMDGCNImageIntrinsic(), simplifySVEIntrinsic(), and simplifyX86MaskedStore().
|
inline |
Definition at line 365 of file InstCombiner.h.
References AC.
Referenced by llvm::ARMTTIImpl::instCombineIntrinsic(), and llvm::PPCTTIImpl::instCombineIntrinsic().
|
inline |
Definition at line 373 of file InstCombiner.h.
References BFI.
Assign a complexity or rank value to LLVM Values.
This is used to reduce the amount of pattern matching needed for compares and commutative instructions. For example, if we have: icmp ugt X, Constant or xor (add X, Constant), cast Z
We do not have to consider the commuted variants of these patterns because canonicalization based on complexity guarantees the above ordering.
This routine maps IR values to various complexity ranks: 0 -> undef 1 -> Constants 2 -> Cast and (f)neg/not instructions 3 -> Other instructions and arguments
Definition at line 163 of file InstCombiner.h.
References llvm::isa(), llvm::PatternMatch::m_FNeg(), llvm::MIPatternMatch::m_Neg(), llvm::MIPatternMatch::m_Not(), llvm::PatternMatch::m_Value(), and llvm::PatternMatch::match().
Referenced by llvm::InstCombinerImpl::SimplifyAssociativeOrCommutative(), llvm::InstCombinerImpl::visitFCmpInst(), and llvm::InstCombinerImpl::visitICmpInst().
|
inline |
Definition at line 368 of file InstCombiner.h.
References DL.
Referenced by canonicalizeGEPOfConstGEPI8(), canReplaceGEPIdxWithZero(), combineConstantOffsets(), combineLoadToOperationType(), EvaluateInDifferentTypeImpl(), foldLogicCastConstant(), foldVecExtTruncToExtElt(), foldVecTruncToExtElt(), llvm::ARMTTIImpl::instCombineIntrinsic(), llvm::PPCTTIImpl::instCombineIntrinsic(), llvm::RISCVTTIImpl::instCombineIntrinsic(), llvm::X86TTIImpl::instCombineIntrinsic(), likeBitCastFromVector(), narrowUDivURem(), llvm::Negator::Negate(), optimizeIntegerToVectorInsertions(), optimizeVectorResizeWithIntegerBitCasts(), simplifyAllocaArraySize(), simplifyAMDGCNMemoryIntrinsicDemanded(), simplifyAssocCastAssoc(), simplifyX86MaskedLoad(), simplifyX86MaskedStore(), tryOptimizeShufflePattern(), unpackLoadToAggregate(), unpackStoreToAggregate(), and llvm::InstCombinerImpl::visitCallInst().
|
inline |
Definition at line 367 of file InstCombiner.h.
References DT.
Referenced by foldIdempotentBinaryIntrinsicRecurrence(), llvm::GCNTTIImpl::hoistLaneIntrinsicThroughOperand(), llvm::ARMTTIImpl::instCombineIntrinsic(), llvm::PPCTTIImpl::instCombineIntrinsic(), and llvm::Negator::Negate().
|
inline |
Definition at line 236 of file InstCombiner.h.
References Builder, and getFreelyInverted().
|
inline |
Definition at line 229 of file InstCombiner.h.
References Builder, and getFreelyInvertedImpl().
Referenced by foldICmpAndXX(), llvm::InstCombinerImpl::foldICmpBitCast(), foldICmpOrXX(), foldICmpWithLowBitMaskedVal(), getFreelyInverted(), isFreeToInvert(), llvm::InstCombinerImpl::tryFoldInstWithCtpopWithNot(), llvm::InstCombinerImpl::visitAdd(), llvm::InstCombinerImpl::visitAnd(), llvm::InstCombinerImpl::visitCallInst(), llvm::InstCombinerImpl::visitICmpInst(), and llvm::InstCombinerImpl::visitSub().
| Value * InstCombiner::getFreelyInvertedImpl | ( | Value * | V, |
| bool | WillInvertAllUses, | ||
| BuilderTy * | Builder, | ||
| bool & | DoesConsume, | ||
| unsigned | Depth ) |
Return nonnull value if V is free to invert under the condition of WillInvertAllUses.
If Builder is nonnull, it will return a simplified ~V. If Builder is null, it will return an arbitrary nonnull value (not dereferenceable). If the inversion will consume instructions, DoesConsume will be set to true. Otherwise it will be false.
Definition at line 2964 of file InstructionCombining.cpp.
References A(), llvm::PHINode::addIncoming(), assert(), B(), Builder, C(), llvm::cast(), Cond, llvm::Depth, llvm::dyn_cast(), llvm::SmallVectorImpl< T >::emplace_back(), getFreelyInvertedImpl(), llvm::getInverseMinMaxIntrinsic(), llvm::ConstantExpr::getNot(), I, II, IsSelect(), llvm::PatternMatch::m_Add(), llvm::PatternMatch::m_And(), llvm::PatternMatch::m_AShr(), llvm::PatternMatch::m_ImmConstant(), llvm::PatternMatch::m_LogicalAnd(), llvm::PatternMatch::m_LogicalOr(), llvm::PatternMatch::m_MaxOrMin(), llvm::MIPatternMatch::m_Not(), llvm::PatternMatch::m_Or(), llvm::PatternMatch::m_Select(), llvm::PatternMatch::m_SExtLike(), llvm::PatternMatch::m_Sub(), llvm::PatternMatch::m_Trunc(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::m_Xor(), llvm::PatternMatch::match(), llvm::MaxAnalysisRecursionDepth, and shouldAvoidAbsorbingNotIntoSelect().
Referenced by getFreelyInverted(), and getFreelyInvertedImpl().
|
inline |
Definition at line 370 of file InstCombiner.h.
References ORE.
|
inline |
Definition at line 374 of file InstCombiner.h.
References PSI.
|
inlinestatic |
Some binary operators require special handling to avoid poison and undefined behavior.
If a constant vector has undef elements, replace those undefs with identity constants if possible because those are always safe to execute. If no identity constant exists, replace undef with some other safe constant.
Definition at line 300 of file InstCombiner.h.
References assert(), C(), llvm::cast(), llvm::ConstantVector::get(), llvm::ConstantExpr::getBinOpIdentity(), llvm::Constant::getNullValue(), llvm::isa(), and llvm_unreachable.
Referenced by llvm::InstCombinerImpl::foldSelectShuffle(), foldSelectShuffleWith1Binop(), and llvm::InstCombinerImpl::foldVectorBinop().
|
inline |
Definition at line 369 of file InstCombiner.h.
References SQ.
Referenced by llvm::GCNTTIImpl::canSimplifyLegacyMulToMul(), foldCtpop(), foldCttzCtlz(), foldFCmpFSubIntoFCmp(), foldFPtoI(), foldICmpAndXX(), llvm::InstCombinerImpl::foldICmpEquality(), foldSelectBinOpIdentity(), llvm::InstCombinerImpl::foldSelectShuffle(), llvm::GCNTTIImpl::instCombineIntrinsic(), llvm::RISCVTTIImpl::instCombineIntrinsic(), simplifyAndOrWithOpReplaced(), simplifyX86FPMaxMin(), llvm::InstCombinerImpl::visitCallInst(), llvm::InstCombinerImpl::visitFCmpInst(), llvm::InstCombinerImpl::visitFNeg(), llvm::InstCombinerImpl::visitFSub(), and llvm::InstCombinerImpl::visitPHINode().
|
inline |
Definition at line 366 of file InstCombiner.h.
References TLI.
|
inline |
Inserts an instruction New before instruction Old.
Also adds the new instruction to the worklist and returns New so that it is suitable for use as the return from the visitation patterns.
Definition at line 400 of file InstCombiner.h.
References assert(), and Worklist.
Referenced by llvm::InstCombinerImpl::foldIntegerTypedPHI(), foldOperationIntoSelectOperand(), llvm::InstCombinerImpl::foldOpIntoPhi(), llvm::InstCombinerImpl::foldPHIArgBinOpIntoPHI(), llvm::InstCombinerImpl::foldPHIArgExtractValueInstructionIntoPHI(), llvm::InstCombinerImpl::foldPHIArgGEPIntoPHI(), llvm::InstCombinerImpl::foldPHIArgInsertValueInstructionIntoPHI(), llvm::InstCombinerImpl::foldPHIArgLoadIntoPHI(), llvm::InstCombinerImpl::foldPHIArgOpIntoPHI(), llvm::InstCombinerImpl::foldPHIArgZextsIntoPHI(), foldSelectZeroOrFixedOp(), InsertNewInstWith(), llvm::InstCombinerImpl::mergeStoreIntoSuccessor(), and replaceGEPIdxWithZero().
|
inline |
Same as InsertNewInstBefore, but also sets the debug loc.
Definition at line 409 of file InstCombiner.h.
References InsertNewInstBefore().
Referenced by llvm::InstCombinerImpl::CreateNonTerminatorUnreachable(), EvaluateInDifferentTypeImpl(), llvm::InstCombinerImpl::foldBinopWithRecurrence(), replaceExtractElements(), llvm::InstCombinerImpl::SimplifyAssociativeOrCommutative(), llvm::InstCombinerImpl::SimplifyDemandedUseBits(), llvm::InstCombinerImpl::SimplifyDemandedVectorElts(), and llvm::InstCombinerImpl::simplifyShrShlDemandedBits().
|
inline |
Definition at line 390 of file InstCombiner.h.
References BackEdges, computeBackEdges(), and ComputedBackEdges.
Referenced by llvm::InstCombinerImpl::foldOpIntoPhi().
|
inlinestatic |
Predicate canonicalization reduces the number of patterns that need to be matched by other transforms.
For example, we may swap the operands of a conditional branch or select to create a compare with a canonical (inverted) predicate which is then more likely to be matched with other values.
Definition at line 180 of file InstCombiner.h.
References llvm::CmpInst::FCMP_OGE, llvm::CmpInst::FCMP_OLE, llvm::CmpInst::FCMP_ONE, llvm::CmpInst::ICMP_NE, llvm::CmpInst::ICMP_SGE, llvm::CmpInst::ICMP_SLE, llvm::CmpInst::ICMP_UGE, and llvm::CmpInst::ICMP_ULE.
Referenced by canonicalizeCmpWithConstant(), llvm::InstCombinerImpl::canonicalizeICmpPredicate(), and llvm::InstCombinerImpl::visitCondBrInst().
Definition at line 254 of file InstCombiner.h.
References isFreeToInvert().
|
inline |
Return true if the specified value is free to invert (apply ~ to).
This happens in cases where the ~ can be eliminated. If WillInvertAllUses is true, work under the assumption that the caller intends to remove all uses of V and only keep uses of ~V.
See also: canFreelyInvertAllUsersOf()
Definition at line 248 of file InstCombiner.h.
References getFreelyInverted().
Referenced by canFreelyInvert(), isFreeToInvert(), matchDeMorgansLaws(), llvm::InstCombinerImpl::tryFoldInstWithCtpopWithNot(), llvm::InstCombinerImpl::visitAdd(), llvm::InstCombinerImpl::visitCallInst(), llvm::InstCombinerImpl::visitICmpInst(), and llvm::InstCombinerImpl::visitSub().
Return true if the cast from integer to FP can be proven to be exact for all possible inputs (the conversion does not lose any precision).
Definition at line 2257 of file InstCombineCasts.cpp.
References assert(), canBeCastedExactlyIntToFP(), and I.
Referenced by llvm::InstCombinerImpl::foldItoFPtoI(), llvm::InstCombinerImpl::visitFPExt(), and llvm::InstCombinerImpl::visitFPTrunc().
|
inline |
Definition at line 475 of file InstCombiner.h.
References llvm::Depth, llvm::isKnownToBeAPowerOfTwo(), and SQ.
Referenced by foldCtpop(), llvm::InstCombinerImpl::foldICmpEquality(), llvm::InstCombinerImpl::foldIRemByPowerOfTwoToBitTest(), simplifyValueKnownNonZero(), llvm::InstCombinerImpl::visitAnd(), llvm::InstCombinerImpl::visitCallInst(), llvm::InstCombinerImpl::visitGetElementPtrInst(), llvm::InstCombinerImpl::visitICmpInst(), llvm::InstCombinerImpl::visitLShr(), llvm::InstCombinerImpl::visitSDiv(), llvm::InstCombinerImpl::visitUDiv(), llvm::InstCombinerImpl::visitURem(), and llvm::InstCombinerImpl::visitXor().
Definition at line 183 of file InstructionCombining.cpp.
Referenced by SimplifyDemandedVectorElts().
|
inline |
Definition at line 482 of file InstCombiner.h.
References llvm::Depth, llvm::MaskedValueIsZero(), and SQ.
Referenced by canEvaluateShiftedShift(), llvm::InstCombinerImpl::visitAnd(), llvm::InstCombinerImpl::visitAShr(), llvm::InstCombinerImpl::visitCallInst(), llvm::InstCombinerImpl::visitOr(), llvm::InstCombinerImpl::visitShl(), llvm::InstCombinerImpl::visitSRem(), llvm::InstCombinerImpl::visitTrunc(), llvm::InstCombinerImpl::visitXor(), and llvm::InstCombinerImpl::visitZExt().
Return the source operand of a potentially bitcasted value while optionally checking if it has one use.
If there is no bitcast or the one use check is not met, return the input value itself.
Definition at line 139 of file InstCombiner.h.
References llvm::dyn_cast().
Referenced by llvm::X86TTIImpl::instCombineIntrinsic().
|
inline |
A combiner-aware RAUW-like routine.
This method is to be used when an instruction is found to be dead, replaceable with another preexisting expression. Here we add all uses of I to the worklist, replace all uses of I with the new value, then return I, so that the inst combiner will know that I was modified.
Definition at line 420 of file InstCombiner.h.
References llvm::dbgs(), llvm::PoisonValue::get(), I, llvm::isa(), LLVM_DEBUG, and Worklist.
Referenced by combineConstantOffsets(), llvm::InstCombinerImpl::commonCastTransforms(), llvm::InstCombinerImpl::commonIDivRemTransforms(), llvm::InstCombinerImpl::commonIDivTransforms(), convertFSqrtDivIntoFMul(), convertNvvmIntrinsicToLlvm(), llvm::InstCombinerImpl::foldAddWithConstant(), llvm::InstCombinerImpl::foldAggregateConstructionIntoAggregateReuse(), llvm::InstCombinerImpl::foldAllocaCmp(), llvm::InstCombinerImpl::foldBinopWithRecurrence(), llvm::InstCombinerImpl::foldCmpLoadFromIndexedGlobal(), llvm::InstCombinerImpl::foldCmpSelectOfConstants(), foldConstantIntoDotAccumulator(), foldCtpop(), foldCttzCtlz(), llvm::InstCombinerImpl::foldDeadPhiWeb(), llvm::InstCombinerImpl::foldFCmpIntToFPConst(), foldFCmpWithFloorAndCeil(), llvm::InstCombinerImpl::foldFMulReassoc(), foldFPtoI(), llvm::InstCombinerImpl::foldFreezeIntoRecurrence(), llvm::InstCombinerImpl::foldGEPICmp(), llvm::InstCombinerImpl::foldICmpAndConstConst(), llvm::InstCombinerImpl::foldICmpAndShift(), llvm::InstCombinerImpl::foldICmpBinOp(), llvm::InstCombinerImpl::foldICmpBinOpWithConstantViaTruthTable(), llvm::InstCombinerImpl::foldICmpBitCast(), llvm::InstCombinerImpl::foldICmpCommutative(), llvm::InstCombinerImpl::foldICmpDivConstant(), llvm::InstCombinerImpl::foldICmpMulConstant(), llvm::InstCombinerImpl::foldICmpOrConstant(), llvm::InstCombinerImpl::foldICmpSelectConstant(), llvm::InstCombinerImpl::foldICmpShlConstConst(), llvm::InstCombinerImpl::foldICmpShrConstConst(), llvm::InstCombinerImpl::foldICmpUsingBoolRange(), llvm::InstCombinerImpl::foldICmpUsingKnownBits(), llvm::InstCombinerImpl::foldICmpWithClamp(), llvm::InstCombinerImpl::foldICmpWithConstant(), llvm::InstCombinerImpl::foldICmpWithDominatingICmp(), llvm::InstCombinerImpl::foldICmpWithMinMax(), llvm::InstCombinerImpl::foldIntegerTypedPHI(), llvm::InstCombinerImpl::foldItoFPtoI(), llvm::InstCombinerImpl::foldMultiplicationOverflowCheck(), foldNeonShift(), llvm::InstCombinerImpl::foldOpIntoPhi(), llvm::InstCombinerImpl::foldPowiReassoc(), llvm::InstCombinerImpl::foldSelectIntrinsic(), llvm::InstCombinerImpl::foldSelectOpOp(), llvm::InstCombinerImpl::foldSelectShuffle(), foldSelectZeroOrFixedOp(), llvm::InstCombinerImpl::FoldShiftByConstant(), foldSinAndCosToSinCos(), llvm::InstCombinerImpl::foldVariableSignZeroExtensionOfVariableHighBitExtract(), llvm::InstCombinerImpl::foldVectorBinop(), llvm::InstCombinerImpl::freelyInvertAllUsersOf(), handleSpaceCheckIntrinsics(), llvm::InstCombinerImpl::handleUnreachableFrom(), instCombineConvertFromSVBool(), instCombineInStreamingMode(), llvm::ARMTTIImpl::instCombineIntrinsic(), llvm::GCNTTIImpl::instCombineIntrinsic(), llvm::RISCVTTIImpl::instCombineIntrinsic(), llvm::WebAssemblyTTIImpl::instCombineIntrinsic(), llvm::X86TTIImpl::instCombineIntrinsic(), instCombineLD1GatherIndex(), instCombineMaxMinNM(), instCombinePTrue(), instCombineRDFFR(), instCombineSMECntsd(), instCombineSVEAnd(), instCombineSVECmpNE(), instCombineSVECntElts(), instCombineSVECondLast(), instCombineSVEDup(), instCombineSVEDupqLane(), instCombineSVEDupX(), instCombineSVEInsr(), instCombineSVELast(), instCombineSVELD1(), instCombineSVEOrr(), instCombineSVEPairwiseAddLong(), instCombineSVEPTest(), instCombineSVESDIV(), instCombineSVESel(), instCombineSVESrshl(), instCombineSVETBL(), instCombineSVEUMin(), instCombineSVEUnpack(), instCombineSVEUxt(), instCombineSVEUzp1(), instCombineSVEVectorBinOp(), instCombineSVEVectorFuseMulAddSub(), instCombineSVEVectorMlaU(), instCombineSVEZip(), instCombineWhilelo(), instCombineXorSVECmpCC(), instCombineZExtSVECmpNE(), modifyIntrinsicCall(), processPhiNode(), processUGT_ADDCST_ADD(), processUZExtIdiom(), llvm::InstCombinerImpl::removeInstructionsBeforeUnreachable(), replaceExtractElements(), replaceGEPIdxWithZero(), rewriteGEPAsOffset(), simplifyAllocaArraySize(), llvm::InstCombinerImpl::SimplifyDemandedInstructionBits(), llvm::InstCombinerImpl::SimplifyDemandedInstructionFPClass(), simplifyIRemMulShl(), simplifyNeonTbl(), simplifySVEIntrinsic(), simplifySVEIntrinsicBinOp(), simplifySVEIntrinsicCompare(), simplifyX86MaskedLoad(), llvm::InstCombinerImpl::sinkNotIntoLogicalOp(), llvm::InstCombinerImpl::sinkNotIntoOtherHandOfLogicalOp(), llvm::InstCombinerImpl::SliceUpIllegalIntegerPHI(), tryCombineFromSVBoolBinOp(), llvm::InstCombinerImpl::tryFoldInstWithCtpopWithNot(), tryOptimizeShufflePattern(), unpackLoadToAggregate(), llvm::InstCombinerImpl::visitAdd(), llvm::InstCombinerImpl::visitAllocaInst(), llvm::InstCombinerImpl::visitAllocSite(), llvm::InstCombinerImpl::visitAnd(), llvm::InstCombinerImpl::visitAShr(), llvm::InstCombinerImpl::visitBitCast(), llvm::InstCombinerImpl::visitCallInst(), llvm::InstCombinerImpl::visitExtractElementInst(), llvm::InstCombinerImpl::visitExtractValueInst(), llvm::InstCombinerImpl::visitFAdd(), llvm::InstCombinerImpl::visitFCmpInst(), llvm::InstCombinerImpl::visitFDiv(), llvm::InstCombinerImpl::visitFMul(), llvm::InstCombinerImpl::visitFNeg(), llvm::InstCombinerImpl::visitFPTrunc(), llvm::InstCombinerImpl::visitFree(), llvm::InstCombinerImpl::visitFreeze(), llvm::InstCombinerImpl::visitFRem(), llvm::InstCombinerImpl::visitFSub(), llvm::InstCombinerImpl::visitGEPOfGEP(), llvm::InstCombinerImpl::visitGetElementPtrInst(), llvm::InstCombinerImpl::visitICmpInst(), llvm::InstCombinerImpl::visitInsertElementInst(), llvm::InstCombinerImpl::visitInsertValueInst(), llvm::InstCombinerImpl::visitLoadInst(), llvm::InstCombinerImpl::visitLShr(), llvm::InstCombinerImpl::visitMul(), llvm::InstCombinerImpl::visitOr(), llvm::InstCombinerImpl::visitPHINode(), llvm::InstCombinerImpl::visitPtrToAddr(), llvm::InstCombinerImpl::visitPtrToInt(), llvm::InstCombinerImpl::visitSDiv(), llvm::InstCombinerImpl::visitSExt(), llvm::InstCombinerImpl::visitShl(), llvm::InstCombinerImpl::visitShuffleVectorInst(), llvm::InstCombinerImpl::visitSRem(), llvm::InstCombinerImpl::visitSub(), llvm::InstCombinerImpl::visitTrunc(), llvm::InstCombinerImpl::visitUDiv(), llvm::InstCombinerImpl::visitURem(), llvm::InstCombinerImpl::visitXor(), and llvm::InstCombinerImpl::visitZExt().
|
inline |
Replace operand of instruction and add old operand to the worklist.
Definition at line 444 of file InstCombiner.h.
Referenced by combineConstantOffsets(), llvm::InstCombinerImpl::commonIDivRemTransforms(), llvm::InstCombinerImpl::commonIDivTransforms(), llvm::InstCombinerImpl::commonShiftTransforms(), foldAbsIntoRedux(), foldConstantIntoDotAccumulator(), foldFabsWithFcmpZero(), foldFCmpFSubIntoFCmp(), llvm::InstCombinerImpl::foldICmpXorConstant(), llvm::InstCombinerImpl::foldPHIArgIntToPtrToPHI(), foldSelectBinOpIdentity(), foldSelectZeroOrFixedOp(), foldShuffleWithInsert(), foldSqrtWithFcmpZero(), llvm::ARMTTIImpl::instCombineIntrinsic(), llvm::GCNTTIImpl::instCombineIntrinsic(), llvm::X86TTIImpl::instCombineIntrinsic(), simplifyAllocaArraySize(), simplifyAssocCastAssoc(), llvm::InstCombinerImpl::SimplifyAssociativeOrCommutative(), llvm::InstCombinerImpl::SimplifyDemandedUseBits(), llvm::InstCombinerImpl::SimplifyDemandedUseFPClass(), llvm::InstCombinerImpl::SimplifyDemandedVectorElts(), llvm::InstCombinerImpl::simplifyDivRemOfSelectWithZeroOp(), simplifySVEIntrinsic(), simplifySVEIntrinsicBinOp(), simplifySVEIntrinsicCompare(), simplifyValueKnownNonZero(), llvm::InstCombinerImpl::visitAdd(), llvm::InstCombinerImpl::visitAllocaInst(), llvm::InstCombinerImpl::visitAtomicRMWInst(), llvm::InstCombinerImpl::visitCallInst(), llvm::InstCombinerImpl::visitCondBrInst(), llvm::InstCombinerImpl::visitExtractElementInst(), llvm::InstCombinerImpl::visitFCmpInst(), llvm::InstCombinerImpl::visitFDiv(), llvm::InstCombinerImpl::visitGetElementPtrInst(), llvm::InstCombinerImpl::visitICmpInst(), llvm::InstCombinerImpl::visitInsertElementInst(), llvm::InstCombinerImpl::visitLoadInst(), llvm::InstCombinerImpl::visitPHINode(), llvm::InstCombinerImpl::visitReturnInst(), llvm::InstCombinerImpl::visitShuffleVectorInst(), llvm::InstCombinerImpl::visitSRem(), llvm::InstCombinerImpl::visitStoreInst(), and llvm::InstCombinerImpl::visitSwitchInst().
Replace use and add the previously used value to the worklist.
Definition at line 452 of file InstCombiner.h.
References Worklist.
Referenced by llvm::InstCombinerImpl::addDeadEdge(), llvm::InstCombinerImpl::foldFreezeIntoRecurrence(), llvm::InstCombinerImpl::SimplifyDemandedBits(), llvm::InstCombinerImpl::SimplifyDemandedFPClass(), llvm::InstCombinerImpl::simplifyDivRemOfSelectWithZeroOp(), llvm::InstCombinerImpl::visitCallInst(), and llvm::InstCombinerImpl::visitCondBrInst().
|
inlinestatic |
Definition at line 207 of file InstCombiner.h.
References llvm::PatternMatch::m_LogicalAnd(), llvm::PatternMatch::m_LogicalOr(), llvm::PatternMatch::m_Value(), and llvm::PatternMatch::match().
Referenced by canFreelyInvertAllUsersOf(), and getFreelyInvertedImpl().
|
inline |
Definition at line 555 of file InstCombiner.h.
References I, llvm::Known, SimplifyDemandedBits(), and SQ.
|
pure virtual |
Implemented in llvm::InstCombinerImpl.
References llvm::Depth, I, and llvm::Known.
Referenced by llvm::ARMTTIImpl::instCombineIntrinsic(), llvm::X86TTIImpl::instCombineIntrinsic(), SimplifyDemandedBits(), llvm::GCNTTIImpl::simplifyDemandedLaneMaskArg(), and simplifyX86VPERMMask().
|
pure virtual |
Implemented in llvm::InstCombinerImpl.
References llvm::Depth, isValidAddrSpaceCast(), and LLVM_ABI.
Referenced by llvm::X86TTIImpl::instCombineIntrinsic().
Ignore all operations which only change the sign of a value, returning the underlying magnitude value.
Definition at line 354 of file InstCombiner.h.
References llvm::PatternMatch::m_CopySign(), llvm::PatternMatch::m_FAbs(), llvm::PatternMatch::m_FNeg(), llvm::PatternMatch::m_Value(), and llvm::PatternMatch::match().
Referenced by llvm::GCNTTIImpl::instCombineIntrinsic().
Subtract one from a Constant.
Definition at line 203 of file InstCombiner.h.
References C(), and llvm::ConstantExpr::getSub().
Referenced by llvm::InstCombinerImpl::foldAddWithConstant(), llvm::InstCombinerImpl::foldICmpAndConstant(), llvm::InstCombinerImpl::visitAdd(), and llvm::InstCombinerImpl::visitSub().
| std::optional< Instruction * > InstCombiner::targetInstCombineIntrinsic | ( | IntrinsicInst & | II | ) |
Definition at line 150 of file InstructionCombining.cpp.
References II, and targetInstCombineIntrinsic().
Referenced by targetInstCombineIntrinsic(), and llvm::InstCombinerImpl::visitCallInst().
| std::optional< Value * > InstCombiner::targetSimplifyDemandedUseBitsIntrinsic | ( | IntrinsicInst & | II, |
| APInt | DemandedMask, | ||
| KnownBits & | Known, | ||
| bool & | KnownBitsComputed ) |
Definition at line 158 of file InstructionCombining.cpp.
References II, and llvm::Known.
Referenced by llvm::InstCombinerImpl::SimplifyDemandedUseBits().
| std::optional< Value * > InstCombiner::targetSimplifyDemandedVectorEltsIntrinsic | ( | IntrinsicInst & | II, |
| APInt | DemandedElts, | ||
| APInt & | UndefElts, | ||
| APInt & | UndefElts2, | ||
| APInt & | UndefElts3, | ||
| std::function< void(Instruction *, unsigned, APInt, APInt &)> | SimplifyAndSetOp ) |
Definition at line 169 of file InstructionCombining.cpp.
References II.
Referenced by llvm::InstCombinerImpl::SimplifyDemandedVectorElts().
|
protected |
Definition at line 84 of file InstCombiner.h.
Referenced by InstCombiner(), llvm::InstCombinerImpl::InstCombinerImpl(), llvm::InstCombinerImpl::SimplifyAnyMemSet(), llvm::InstCombinerImpl::SimplifyAnyMemTransfer(), llvm::InstCombinerImpl::visitAllocaInst(), llvm::InstCombinerImpl::visitAllocSite(), llvm::InstCombinerImpl::visitCallInst(), llvm::InstCombinerImpl::visitLoadInst(), and llvm::InstCombinerImpl::visitStoreInst().
|
protected |
Definition at line 87 of file InstCombiner.h.
Referenced by llvm::InstCombinerImpl::commonShiftTransforms(), ComputeMaxSignificantBits(), ComputeNumSignBits(), getAssumptionCache(), InstCombiner(), llvm::InstCombinerImpl::InstCombinerImpl(), llvm::InstCombinerImpl::run(), llvm::InstCombinerImpl::SimplifyAddWithRemainder(), llvm::InstCombinerImpl::SimplifyAnyMemSet(), llvm::InstCombinerImpl::SimplifyAnyMemTransfer(), llvm::InstCombinerImpl::visitAllocaInst(), llvm::InstCombinerImpl::visitCallInst(), and llvm::InstCombinerImpl::visitFreeze().
|
protected |
Source for annotation metadata, used by the IRBuilder inserter.
Definition at line 115 of file InstCombiner.h.
Referenced by llvm::InstCombinerImpl::run().
|
protected |
Backedges, used to avoid pushing instructions across backedges in cases where this may result in infinite combine loops.
For irreducible loops this picks an arbitrary backedge.
Definition at line 111 of file InstCombiner.h.
Referenced by computeBackEdges(), and isBackEdge().
|
protected |
Definition at line 93 of file InstCombiner.h.
Referenced by getBlockFrequencyInfo(), InstCombiner(), and llvm::InstCombinerImpl::InstCombinerImpl().
|
protected |
Definition at line 94 of file InstCombiner.h.
Referenced by llvm::InstCombinerImpl::freelyInvertAllUsersOf(), InstCombiner(), llvm::InstCombinerImpl::InstCombinerImpl(), and llvm::InstCombinerImpl::visitCondBrInst().
| BuilderTy llvm::InstCombiner::Builder |
Definition at line 73 of file InstCombiner.h.
Referenced by canonicalizeBitCastExtElt(), llvm::InstCombinerImpl::canonicalizeCondSignextOfHighBitExtractToSignextHighBitExtract(), canonicalizeGEPOfConstGEPI8(), combineConstantOffsets(), llvm::InstCombinerImpl::combineLoadToNewType(), combineStoreToNewValue(), llvm::InstCombinerImpl::commonCastTransforms(), llvm::InstCombinerImpl::commonIDivTransforms(), llvm::InstCombinerImpl::commonShiftTransforms(), llvm::InstCombinerImpl::foldAddLikeCommutative(), llvm::InstCombinerImpl::foldAddWithConstant(), llvm::InstCombinerImpl::foldAggregateConstructionIntoAggregateReuse(), llvm::InstCombinerImpl::foldBinOpOfSelectAndCastOfSelectCondition(), llvm::InstCombinerImpl::foldBinOpSelectBinOp(), llvm::InstCombinerImpl::foldBinOpShiftWithShift(), llvm::InstCombinerImpl::foldBinopWithPhiOperands(), llvm::InstCombinerImpl::foldCmpLoadFromIndexedGlobal(), llvm::InstCombinerImpl::foldCmpSelectOfConstants(), foldCtpop(), foldCttzCtlz(), llvm::InstCombinerImpl::foldDivCeil(), foldFCmpWithFloorAndCeil(), llvm::InstCombinerImpl::foldFMulReassoc(), llvm::InstCombinerImpl::foldFreezeIntoRecurrence(), llvm::InstCombinerImpl::foldGEPICmp(), llvm::InstCombinerImpl::foldICmpAddConstant(), llvm::InstCombinerImpl::foldICmpAndConstant(), llvm::InstCombinerImpl::foldICmpAndConstConst(), llvm::InstCombinerImpl::foldICmpAndShift(), foldICmpAndXX(), llvm::InstCombinerImpl::foldICmpBinOp(), llvm::InstCombinerImpl::foldICmpBinOpEqualityWithConstant(), llvm::InstCombinerImpl::foldICmpBinOpWithConstantViaTruthTable(), llvm::InstCombinerImpl::foldICmpBitCast(), llvm::InstCombinerImpl::foldICmpCommutative(), llvm::InstCombinerImpl::foldICmpDivConstant(), llvm::InstCombinerImpl::foldICmpEqIntrinsicWithConstant(), llvm::InstCombinerImpl::foldICmpEquality(), llvm::InstCombinerImpl::foldICmpInstWithConstant(), llvm::InstCombinerImpl::foldICmpIntrinsicWithConstant(), llvm::InstCombinerImpl::foldICmpOrConstant(), foldICmpOrXX(), llvm::InstCombinerImpl::foldICmpSelectConstant(), llvm::InstCombinerImpl::foldICmpShlConstant(), llvm::InstCombinerImpl::foldICmpShrConstant(), llvm::InstCombinerImpl::foldICmpSRemConstant(), llvm::InstCombinerImpl::foldICmpSubConstant(), llvm::InstCombinerImpl::foldICmpTruncConstant(), llvm::InstCombinerImpl::foldICmpTruncWithTruncOrExt(), llvm::InstCombinerImpl::foldICmpUsingBoolRange(), llvm::InstCombinerImpl::foldICmpWithClamp(), llvm::InstCombinerImpl::foldICmpWithConstant(), llvm::InstCombinerImpl::foldICmpWithDominatingICmp(), foldICmpWithLowBitMaskedVal(), llvm::InstCombinerImpl::foldICmpWithTrunc(), llvm::InstCombinerImpl::foldICmpWithZextOrSext(), llvm::InstCombinerImpl::foldICmpXorShiftConst(), foldIdempotentBinaryIntrinsicRecurrence(), llvm::InstCombinerImpl::foldIRemByPowerOfTwoToBitTest(), llvm::InstCombinerImpl::foldIsMultipleOfAPowerOfTwo(), foldLogicCastConstant(), llvm::InstCombinerImpl::foldMultiplicationOverflowCheck(), foldNeonShift(), llvm::InstCombinerImpl::FoldOrOfLogicalAnds(), llvm::InstCombinerImpl::foldPowiReassoc(), llvm::InstCombinerImpl::foldPtrToIntOrAddrOfGEP(), llvm::InstCombinerImpl::foldReversedIntrinsicOperands(), llvm::InstCombinerImpl::foldSelectICmp(), llvm::InstCombinerImpl::foldSelectIntoOp(), llvm::InstCombinerImpl::foldSelectIntrinsic(), llvm::InstCombinerImpl::foldSelectOpOp(), llvm::InstCombinerImpl::foldSelectShuffle(), llvm::InstCombinerImpl::FoldShiftByConstant(), llvm::InstCombinerImpl::foldShuffledIntrinsicOperands(), llvm::InstCombinerImpl::foldSquareSumFP(), llvm::InstCombinerImpl::foldSquareSumInt(), llvm::InstCombinerImpl::foldUsingDistributiveLaws(), llvm::InstCombinerImpl::foldVariableSignZeroExtensionOfVariableHighBitExtract(), foldVecExtTruncToExtElt(), llvm::InstCombinerImpl::foldVectorBinop(), foldVecTruncToExtElt(), freelyInvert(), getFreelyInverted(), getFreelyInverted(), getFreelyInvertedImpl(), llvm::GCNTTIImpl::hoistLaneIntrinsicThroughOperand(), llvm::InstCombinerImpl::insertRangeTest(), llvm::ARMTTIImpl::instCombineIntrinsic(), llvm::GCNTTIImpl::instCombineIntrinsic(), llvm::PPCTTIImpl::instCombineIntrinsic(), llvm::RISCVTTIImpl::instCombineIntrinsic(), llvm::WebAssemblyTTIImpl::instCombineIntrinsic(), llvm::X86TTIImpl::instCombineIntrinsic(), instCombineLD1GatherIndex(), InstCombiner(), instCombineRDFFR(), instCombineSMECntsd(), instCombineST1ScatterIndex(), instCombineSVEAnd(), instCombineSVECmpNE(), instCombineSVECntElts(), instCombineSVECondLast(), instCombineSVEDup(), instCombineSVEDupqLane(), instCombineSVEDupX(), instCombineSVELast(), instCombineSVELD1(), instCombineSVEOrr(), instCombineSVEPairwiseAddLong(), instCombineSVEPTest(), instCombineSVESDIV(), instCombineSVESel(), instCombineSVESrshl(), instCombineSVEST1(), instCombineSVETBL(), instCombineSVEUMin(), instCombineSVEUnpack(), instCombineSVEUxt(), instCombineSVEUzp1(), instCombineSVEVectorBinOp(), instCombineSVEVectorFuseMulAddSub(), instCombineSVEVectorMlaU(), instCombineWhilelo(), instCombineXorSVECmpCC(), instCombineZExtSVECmpNE(), matchDeMorgansLaws(), llvm::InstCombinerImpl::mergeStoreIntoSuccessor(), modifyIntrinsicCall(), narrowUDivURem(), optimizeIntegerToVectorInsertions(), llvm::InstCombinerImpl::OptimizePointerDifference(), optimizeVectorResizeWithIntegerBitCasts(), processPhiNode(), processUGT_ADDCST_ADD(), processUZExtIdiom(), llvm::InstCombinerImpl::pushFreezeToPreventPoisonFromPropagating(), llvm::InstCombinerImpl::reassociateShiftAmtsOfTwoSameDirectionShifts(), llvm::InstCombinerImpl::run(), llvm::InstCombinerImpl::SimplifyAddWithRemainder(), simplifyAllocaArraySize(), llvm::GCNTTIImpl::simplifyAMDGCNLaneIntrinsicDemanded(), simplifyAMDGCNMemoryIntrinsicDemanded(), simplifyAndOrWithOpReplaced(), llvm::InstCombinerImpl::SimplifyAnyMemSet(), llvm::InstCombinerImpl::SimplifyAnyMemTransfer(), llvm::InstCombinerImpl::simplifyBinOpSplats(), llvm::InstCombinerImpl::SimplifyDemandedUseBits(), llvm::InstCombinerImpl::SimplifyDemandedUseFPClass(), llvm::X86TTIImpl::simplifyDemandedVectorEltsIntrinsic(), simplifyInvariantGroupIntrinsic(), simplifyNeonTbl(), llvm::InstCombinerImpl::simplifyRangeCheck(), llvm::InstCombinerImpl::SimplifySelectsFeedingBinaryOp(), simplifyShiftSelectingPackedElement(), simplifySVEIntrinsicBinOp(), simplifySVEIntrinsicCompare(), simplifyUsingControlFlow(), simplifyValueKnownNonZero(), simplifyX86FPMaxMin(), simplifyX86MaskedLoad(), simplifyX86MaskedStore(), llvm::InstCombinerImpl::sinkNotIntoLogicalOp(), llvm::InstCombinerImpl::sinkNotIntoOtherHandOfLogicalOp(), llvm::InstCombinerImpl::SliceUpIllegalIntegerPHI(), llvm::InstCombinerImpl::takeLog2(), transformToIndexedCompare(), tryCombineFromSVBoolBinOp(), llvm::InstCombinerImpl::tryFactorizationFolds(), llvm::InstCombinerImpl::tryFoldInstWithCtpopWithNot(), tryOptimizeShufflePattern(), unpackLoadToAggregate(), unpackStoreToAggregate(), llvm::InstCombinerImpl::visitAdd(), llvm::InstCombinerImpl::visitAllocSite(), llvm::InstCombinerImpl::visitAnd(), llvm::InstCombinerImpl::visitAShr(), llvm::InstCombinerImpl::visitBitCast(), llvm::InstCombinerImpl::visitCallInst(), llvm::InstCombinerImpl::visitCondBrInst(), llvm::InstCombinerImpl::visitExtractElementInst(), llvm::InstCombinerImpl::visitExtractValueInst(), llvm::InstCombinerImpl::visitFAdd(), llvm::InstCombinerImpl::visitFCmpInst(), llvm::InstCombinerImpl::visitFDiv(), llvm::InstCombinerImpl::visitFMul(), llvm::InstCombinerImpl::visitFNeg(), llvm::InstCombinerImpl::visitFPTrunc(), llvm::InstCombinerImpl::visitFSub(), llvm::InstCombinerImpl::visitGEPOfGEP(), llvm::InstCombinerImpl::visitGetElementPtrInst(), llvm::InstCombinerImpl::visitICmpInst(), llvm::InstCombinerImpl::visitInsertElementInst(), llvm::InstCombinerImpl::visitIntToPtr(), llvm::InstCombinerImpl::visitLoadInst(), llvm::InstCombinerImpl::visitLShr(), llvm::InstCombinerImpl::visitMul(), llvm::InstCombinerImpl::visitOr(), llvm::InstCombinerImpl::visitPtrToAddr(), llvm::InstCombinerImpl::visitPtrToInt(), llvm::InstCombinerImpl::visitSDiv(), llvm::InstCombinerImpl::visitSExt(), llvm::InstCombinerImpl::visitShl(), llvm::InstCombinerImpl::visitShuffleVectorInst(), llvm::InstCombinerImpl::visitSRem(), llvm::InstCombinerImpl::visitStoreInst(), llvm::InstCombinerImpl::visitSub(), llvm::InstCombinerImpl::visitSwitchInst(), llvm::InstCombinerImpl::visitTrunc(), llvm::InstCombinerImpl::visitUDiv(), llvm::InstCombinerImpl::visitUIToFP(), llvm::InstCombinerImpl::visitURem(), llvm::InstCombinerImpl::visitXor(), and llvm::InstCombinerImpl::visitZExt().
|
protected |
Definition at line 112 of file InstCombiner.h.
Referenced by computeBackEdges(), and isBackEdge().
|
protected |
Definition at line 96 of file InstCombiner.h.
Referenced by llvm::InstCombinerImpl::eraseInstFromFunction(), llvm::InstCombinerImpl::foldICmpWithDominatingICmp(), InstCombiner(), and llvm::InstCombinerImpl::visitCondBrInst().
|
protected |
Edges that are known to never be taken.
Definition at line 103 of file InstCombiner.h.
Referenced by llvm::InstCombinerImpl::addDeadEdge(), llvm::InstCombinerImpl::handlePotentiallyDeadBlocks(), and llvm::InstCombinerImpl::prepareWorklist().
|
protected |
Definition at line 90 of file InstCombiner.h.
Referenced by ComputeMaxSignificantBits(), ComputeNumSignBits(), llvm::InstCombinerImpl::foldBinOpShiftWithShift(), llvm::InstCombinerImpl::foldBinopWithPhiOperands(), llvm::InstCombinerImpl::foldCmpLoadFromIndexedGlobal(), llvm::InstCombinerImpl::foldCmpSelectOfConstants(), llvm::InstCombinerImpl::foldFMulReassoc(), llvm::InstCombinerImpl::foldGEPICmp(), llvm::InstCombinerImpl::foldICmpBinOpWithConstantViaTruthTable(), llvm::InstCombinerImpl::foldICmpInstWithConstantNotInt(), llvm::InstCombinerImpl::foldICmpUsingKnownBits(), llvm::InstCombinerImpl::foldICmpWithCastOp(), llvm::InstCombinerImpl::foldICmpWithConstant(), llvm::InstCombinerImpl::foldICmpWithZextOrSext(), llvm::InstCombinerImpl::foldIntegerTypedPHI(), llvm::InstCombinerImpl::foldOpIntoPhi(), llvm::InstCombinerImpl::foldPHIArgZextsIntoPHI(), llvm::InstCombinerImpl::foldPtrToIntOrAddrOfGEP(), llvm::InstCombinerImpl::foldSelectICmp(), llvm::InstCombinerImpl::foldSelectShuffle(), llvm::InstCombinerImpl::foldVectorBinop(), getDataLayout(), InstCombiner(), llvm::InstCombinerImpl::InstCombinerImpl(), llvm::InstCombinerImpl::mergeStoreIntoSuccessor(), llvm::InstCombinerImpl::OptimizePointerDifference(), llvm::InstCombinerImpl::prepareWorklist(), llvm::InstCombinerImpl::SimplifyAnyMemSet(), llvm::InstCombinerImpl::SimplifyAnyMemTransfer(), llvm::InstCombinerImpl::SimplifyAssociativeOrCommutative(), llvm::InstCombinerImpl::SimplifyDemandedInstructionBits(), llvm::InstCombinerImpl::SimplifyDemandedUseBits(), llvm::InstCombinerImpl::SimplifySelectsFeedingBinaryOp(), llvm::InstCombinerImpl::tryFoldInstWithCtpopWithNot(), llvm::InstCombinerImpl::visitAllocaInst(), llvm::InstCombinerImpl::visitAllocSite(), llvm::InstCombinerImpl::visitAnd(), llvm::InstCombinerImpl::visitBitCast(), llvm::InstCombinerImpl::visitCallInst(), llvm::InstCombinerImpl::visitExtractElementInst(), llvm::InstCombinerImpl::visitFAdd(), llvm::InstCombinerImpl::visitFCmpInst(), llvm::InstCombinerImpl::visitFMul(), llvm::InstCombinerImpl::visitFNeg(), llvm::InstCombinerImpl::visitFree(), llvm::InstCombinerImpl::visitFSub(), llvm::InstCombinerImpl::visitGetElementPtrInst(), llvm::InstCombinerImpl::visitICmpInst(), llvm::InstCombinerImpl::visitInsertElementInst(), llvm::InstCombinerImpl::visitIntToPtr(), llvm::InstCombinerImpl::visitMul(), llvm::InstCombinerImpl::visitOr(), llvm::InstCombinerImpl::visitPtrToInt(), llvm::InstCombinerImpl::visitSExt(), llvm::InstCombinerImpl::visitShuffleVectorInst(), llvm::InstCombinerImpl::visitSub(), llvm::InstCombinerImpl::visitTrunc(), and llvm::InstCombinerImpl::visitUIToFP().
|
protected |
Definition at line 89 of file InstCombiner.h.
Referenced by llvm::InstCombinerImpl::commonCastTransforms(), ComputeMaxSignificantBits(), ComputeNumSignBits(), llvm::InstCombinerImpl::convertOrOfShiftsToFunnelShift(), llvm::InstCombinerImpl::dominatesAllUses(), llvm::InstCombinerImpl::foldBinopWithPhiOperands(), llvm::InstCombinerImpl::foldFreezeIntoRecurrence(), llvm::InstCombinerImpl::foldICmpWithDominatingICmp(), llvm::InstCombinerImpl::foldIntegerTypedPHI(), llvm::InstCombinerImpl::foldOpIntoPhi(), llvm::InstCombinerImpl::freezeOtherUses(), getDominatorTree(), llvm::InstCombinerImpl::handlePotentiallyDeadBlocks(), InstCombiner(), llvm::InstCombinerImpl::InstCombinerImpl(), llvm::InstCombinerImpl::prepareWorklist(), llvm::InstCombinerImpl::run(), llvm::InstCombinerImpl::SimplifyAddWithRemainder(), llvm::InstCombinerImpl::SimplifyAnyMemSet(), llvm::InstCombinerImpl::SimplifyAnyMemTransfer(), llvm::InstCombinerImpl::SimplifyDemandedVectorElts(), llvm::InstCombinerImpl::visitAllocaInst(), llvm::InstCombinerImpl::visitAnd(), llvm::InstCombinerImpl::visitCallInst(), llvm::InstCombinerImpl::visitCondBrInst(), llvm::InstCombinerImpl::visitFreeze(), llvm::InstCombinerImpl::visitOr(), and llvm::InstCombinerImpl::visitZExt().
|
protected |
Definition at line 79 of file InstCombiner.h.
Referenced by canBeCastedExactlyIntToFP(), computeBackEdges(), llvm::InstCombinerImpl::foldVectorBinop(), InstCombiner(), llvm::InstCombinerImpl::InstCombinerImpl(), llvm::InstCombinerImpl::prepareWorklist(), llvm::InstCombinerImpl::SimplifyDemandedUseFPClass(), llvm::InstCombinerImpl::SimplifyMultipleUseDemandedFPClass(), llvm::InstCombinerImpl::SimplifySelectsFeedingBinaryOp(), llvm::InstCombinerImpl::visitAllocSite(), llvm::InstCombinerImpl::visitCallInst(), llvm::InstCombinerImpl::visitFAdd(), llvm::InstCombinerImpl::visitFCmpInst(), llvm::InstCombinerImpl::visitFSub(), llvm::InstCombinerImpl::visitLoadInst(), llvm::InstCombinerImpl::visitReturnInst(), llvm::InstCombinerImpl::visitStoreInst(), llvm::InstCombinerImpl::visitSub(), and llvm::InstCombinerImpl::visitXor().
|
protected |
Definition at line 100 of file InstCombiner.h.
Referenced by llvm::InstCombinerImpl::addDeadEdge(), llvm::InstCombinerImpl::eraseInstFromFunction(), llvm::InstCombinerImpl::handleUnreachableFrom(), llvm::InstCombinerImpl::prepareWorklist(), llvm::InstCombinerImpl::run(), and llvm::InstCombinerImpl::visitGetElementPtrInst().
Definition at line 82 of file InstCombiner.h.
Referenced by InstCombiner(), and llvm::InstCombinerImpl::visitFree().
|
protected |
Definition at line 92 of file InstCombiner.h.
Referenced by getOptimizationRemarkEmitter(), InstCombiner(), and llvm::InstCombinerImpl::InstCombinerImpl().
|
protected |
Order of predecessors to canonicalize phi nodes towards.
Definition at line 106 of file InstCombiner.h.
|
protected |
Definition at line 95 of file InstCombiner.h.
Referenced by getProfileSummaryInfo(), InstCombiner(), and llvm::InstCombinerImpl::InstCombinerImpl().
|
protected |
Definition at line 98 of file InstCombiner.h.
Referenced by computeBackEdges(), InstCombiner(), llvm::InstCombinerImpl::InstCombinerImpl(), and llvm::InstCombinerImpl::prepareWorklist().
|
protected |
Definition at line 91 of file InstCombiner.h.
Referenced by llvm::InstCombinerImpl::commonCastTransforms(), llvm::InstCombinerImpl::commonIDivTransforms(), llvm::InstCombinerImpl::commonShiftTransforms(), computeKnownBits(), computeKnownBits(), computeOverflowForSignedAdd(), computeOverflowForSignedMul(), computeOverflowForSignedSub(), computeOverflowForUnsignedAdd(), computeOverflowForUnsignedMul(), computeOverflowForUnsignedSub(), llvm::InstCombinerImpl::foldAddWithConstant(), llvm::InstCombinerImpl::foldDivCeil(), llvm::InstCombinerImpl::foldICmpAddConstant(), llvm::InstCombinerImpl::foldICmpBinOp(), llvm::InstCombinerImpl::foldICmpBinOpEqualityWithConstant(), llvm::InstCombinerImpl::foldICmpCommutative(), llvm::InstCombinerImpl::foldICmpDivConstant(), llvm::InstCombinerImpl::foldICmpInstWithConstant(), llvm::InstCombinerImpl::foldICmpIntrinsicWithConstant(), llvm::InstCombinerImpl::foldICmpUsingKnownBits(), llvm::InstCombinerImpl::foldICmpWithMinMax(), llvm::InstCombinerImpl::foldICmpWithZero(), llvm::InstCombinerImpl::foldOpIntoPhi(), llvm::InstCombinerImpl::foldSelectICmp(), llvm::InstCombinerImpl::foldSelectIntoOp(), llvm::InstCombinerImpl::foldSignBitTest(), llvm::InstCombinerImpl::foldUsingDistributiveLaws(), llvm::InstCombinerImpl::foldVectorSelect(), getSimplifyQuery(), InstCombiner(), isKnownToBeAPowerOfTwo(), MaskedValueIsZero(), llvm::InstCombinerImpl::reassociateShiftAmtsOfTwoSameDirectionShifts(), llvm::InstCombinerImpl::SimplifyAssociativeOrCommutative(), SimplifyDemandedBits(), llvm::InstCombinerImpl::SimplifyDemandedFPClass(), llvm::InstCombinerImpl::SimplifyDemandedInstructionBits(), llvm::InstCombinerImpl::SimplifyDemandedInstructionFPClass(), llvm::InstCombinerImpl::SimplifyDemandedUseFPClass(), llvm::InstCombinerImpl::SimplifyMultipleUseDemandedFPClass(), llvm::InstCombinerImpl::SimplifySelectsFeedingBinaryOp(), llvm::InstCombinerImpl::tryFactorizationFolds(), llvm::InstCombinerImpl::visitAdd(), llvm::InstCombinerImpl::visitAnd(), llvm::InstCombinerImpl::visitAShr(), llvm::InstCombinerImpl::visitBitCast(), llvm::InstCombinerImpl::visitCallInst(), llvm::InstCombinerImpl::visitExtractElementInst(), llvm::InstCombinerImpl::visitExtractValueInst(), llvm::InstCombinerImpl::visitFAdd(), llvm::InstCombinerImpl::visitFCmpInst(), llvm::InstCombinerImpl::visitFDiv(), llvm::InstCombinerImpl::visitFMul(), llvm::InstCombinerImpl::visitFreeze(), llvm::InstCombinerImpl::visitFRem(), llvm::InstCombinerImpl::visitGEPOfGEP(), llvm::InstCombinerImpl::visitGetElementPtrInst(), llvm::InstCombinerImpl::visitICmpInst(), llvm::InstCombinerImpl::visitInsertElementInst(), llvm::InstCombinerImpl::visitInsertValueInst(), llvm::InstCombinerImpl::visitLoadInst(), llvm::InstCombinerImpl::visitLShr(), llvm::InstCombinerImpl::visitMul(), llvm::InstCombinerImpl::visitOr(), llvm::InstCombinerImpl::visitPHINode(), llvm::InstCombinerImpl::visitReturnInst(), llvm::InstCombinerImpl::visitSDiv(), llvm::InstCombinerImpl::visitSExt(), llvm::InstCombinerImpl::visitShl(), llvm::InstCombinerImpl::visitShuffleVectorInst(), llvm::InstCombinerImpl::visitSIToFP(), llvm::InstCombinerImpl::visitSRem(), llvm::InstCombinerImpl::visitSub(), llvm::InstCombinerImpl::visitTrunc(), llvm::InstCombinerImpl::visitUDiv(), llvm::InstCombinerImpl::visitUIToFP(), llvm::InstCombinerImpl::visitURem(), llvm::InstCombinerImpl::visitXor(), and llvm::InstCombinerImpl::visitZExt().
|
protected |
Definition at line 88 of file InstCombiner.h.
Referenced by llvm::InstCombinerImpl::fmulByZeroIsZero(), llvm::InstCombinerImpl::foldCmpLoadFromIndexedGlobal(), getTargetLibraryInfo(), InstCombiner(), llvm::InstCombinerImpl::InstCombinerImpl(), llvm::InstCombinerImpl::prepareWorklist(), llvm::InstCombinerImpl::run(), llvm::InstCombinerImpl::tryToSinkInstruction(), llvm::InstCombinerImpl::visitAllocSite(), llvm::InstCombinerImpl::visitCallInst(), llvm::InstCombinerImpl::visitFDiv(), and llvm::InstCombinerImpl::visitFree().
|
protected |
A worklist of the instructions that need to be simplified.
Definition at line 77 of file InstCombiner.h.
Referenced by llvm::InstCombinerImpl::addDeadEdge(), addToWorklist(), llvm::InstCombinerImpl::eraseInstFromFunction(), llvm::InstCombinerImpl::foldFreezeIntoRecurrence(), llvm::InstCombinerImpl::freezeOtherUses(), llvm::InstCombinerImpl::handlePotentiallyDeadBlocks(), llvm::InstCombinerImpl::handlePotentiallyDeadSuccessors(), llvm::InstCombinerImpl::handleUnreachableFrom(), InsertNewInstBefore(), InstCombiner(), llvm::InstCombinerImpl::InstCombinerImpl(), llvm::InstCombinerImpl::matchBSwapOrBitReverse(), llvm::InstCombinerImpl::prepareWorklist(), llvm::InstCombinerImpl::replaceInInstruction(), replaceInstUsesWith(), replaceOperand(), replaceUse(), llvm::InstCombinerImpl::run(), llvm::InstCombinerImpl::SimplifyDemandedVectorElts(), llvm::InstCombinerImpl::simplifyDivRemOfSelectWithZeroOp(), llvm::InstCombinerImpl::tryToSinkInstruction(), llvm::InstCombinerImpl::visitAdd(), llvm::InstCombinerImpl::visitAllocSite(), llvm::InstCombinerImpl::visitCallInst(), llvm::InstCombinerImpl::visitCondBrInst(), llvm::InstCombinerImpl::visitExtractElementInst(), and llvm::InstCombinerImpl::visitStoreInst().