LLVM API Documentation
InstCombiner - The -instcombine pass. More...
#include <InstCombine.h>
Public Types | |
typedef IRBuilder< true, TargetFolder, InstCombineIRInserter > | BuilderTy |
Public Attributes | |
InstCombineWorklist | Worklist |
Worklist - All of the instructions that need to be simplified. More... | |
BuilderTy * | Builder |
Static Public Attributes | |
static char | ID = 0 |
Additional Inherited Members | |
![]() | |
static const PassInfo * | lookupPassInfo (const void *TI) |
static const PassInfo * | lookupPassInfo (StringRef Arg) |
static Pass * | createPass (AnalysisID ID) |
InstCombiner - The -instcombine pass.
Definition at line 72 of file InstCombine.h.
Builder - This is an IRBuilder that automatically inserts new instructions into the worklist when they are created.
Definition at line 86 of file InstCombine.h.
|
inline |
Definition at line 90 of file InstCombine.h.
References llvm::PassRegistry::getPassRegistry(), and llvm::initializeInstCombinerPass().
Instruction * InstCombiner::commonCastTransforms | ( | CastInst & | CI | ) |
Implement the transforms common to all CastInst visitors.
Definition at line 291 of file InstCombineCasts.cpp.
References llvm::CastInst::Create(), llvm::CastInst::getOpcode(), llvm::User::getOperand(), llvm::Value::getType(), isEliminableCastPair(), llvm::Type::isIntegerTy(), llvm::A64CC::NV, and TD.
Instruction* llvm::InstCombiner::commonDivTransforms | ( | BinaryOperator & | I | ) |
Instruction * InstCombiner::commonIDivTransforms | ( | BinaryOperator & | I | ) |
Common integer divide transforms.
This function implements the transforms common to both integer division instructions (udiv and sdiv). It is called by the visitors to those integer division instructions.
Definition at line 673 of file InstCombineMulDivRem.cpp.
References llvm::BinaryOperator::Create(), llvm::ConstantExpr::getMul(), llvm::Constant::getNullValue(), llvm::BinaryOperator::getOpcode(), llvm::User::getOperand(), llvm::Value::getType(), I, llvm::PatternMatch::m_Specific(), llvm::PatternMatch::m_SRem(), llvm::PatternMatch::m_Sub(), llvm::PatternMatch::m_URem(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), MultiplyOverflows(), llvm::A64CC::NV, llvm::User::setOperand(), simplifyValueKnownNonZero(), and llvm::X.
Instruction * InstCombiner::commonIRemTransforms | ( | BinaryOperator & | I | ) |
Common integer remainder transforms.
This function implements the transforms common to both integer remainder instructions (urem and srem). It is called by the visitors to those integer remainder instructions.
Definition at line 1113 of file InstCombineMulDivRem.cpp.
References llvm::User::getOperand(), I, llvm::A64CC::NV, llvm::User::setOperand(), and simplifyValueKnownNonZero().
Instruction * InstCombiner::commonPointerCastTransforms | ( | CastInst & | CI | ) |
Implement the transforms for cast of pointer (bitcast/ptrtoint)
Definition at line 1380 of file InstCombineCasts.cpp.
References llvm::dyn_cast(), llvm::User::getOperand(), llvm::APInt::getSExtValue(), llvm::Value::getType(), llvm::User::setOperand(), llvm::Value::takeName(), and TD.
Instruction* llvm::InstCombiner::commonRemTransforms | ( | BinaryOperator & | I | ) |
Instruction * InstCombiner::commonShiftTransforms | ( | BinaryOperator & | I | ) |
Definition at line 22 of file InstCombineShifts.cpp.
References llvm::ARM_PROC::A, llvm::ConstantInt::get(), llvm::Value::getName(), llvm::User::getOperand(), llvm::Value::getType(), I, llvm::PatternMatch::m_Power2(), llvm::PatternMatch::m_SRem(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), and llvm::User::setOperand().
|
inline |
Definition at line 303 of file InstCombine.h.
References llvm::ComputeMaskedBits(), and TD.
Definition at line 312 of file InstCombine.h.
References llvm::ComputeNumSignBits(), and TD.
Referenced by ProcessUGT_ADDCST_ADD().
Definition at line 2316 of file InstructionCombining.cpp.
References AddReachableCodeToWorklist(), llvm::Function::begin(), llvm::ConstantFoldInstruction(), llvm::SmallPtrSet< PtrType, SmallSize >::count(), llvm::dbgs(), DEBUG, llvm::Function::end(), llvm::Instruction::eraseFromParent(), llvm::UndefValue::get(), llvm::Instruction::getDebugLoc(), llvm::BasicBlock::getFirstInsertionPt(), llvm::PHINode::getIncomingBlock(), llvm::BasicBlock::getInstList(), llvm::Value::getName(), llvm::User::getOperand(), llvm::Instruction::getParent(), llvm::Value::getType(), llvm::value_use_iterator< UserTy >::getUse(), llvm::Value::hasOneUse(), I, llvm::iplist< NodeTy, Traits >::insert(), llvm::isInstructionTriviallyDead(), llvm::DebugLoc::isUnknown(), llvm::Value::print(), llvm::Value::replaceAllUsesWith(), llvm::succ_begin(), llvm::succ_end(), TD, TryToSinkInstruction(), llvm::Instruction::use_back(), llvm::Value::use_begin(), and llvm::Value::use_empty().
|
inline |
Definition at line 286 of file InstCombine.h.
References llvm::dbgs(), DEBUG, llvm::Instruction::eraseFromParent(), llvm::User::getNumOperands(), llvm::User::op_begin(), llvm::User::op_end(), and llvm::Value::use_empty().
Referenced by visitAllocaInst(), and visitStoreInst().
FoldAndOfFCmps - Optimize (fcmp)&(fcmp). NOTE: Unlike the rest of instcombine, this returns a Value which should already be inserted into the function.
Definition at line 1020 of file InstCombineAndOrXor.cpp.
References llvm::CmpInst::FCMP_FALSE, llvm::CmpInst::FCMP_ORD, llvm::CmpInst::FCMP_TRUE, llvm::ConstantInt::get(), getFCmpCode(), getFCmpValue(), llvm::User::getOperand(), llvm::CmpInst::getPredicate(), llvm::CmpInst::getSwappedPredicate(), llvm::Value::getType(), llvm::CmpInst::makeCmpResultType(), and std::swap().
FoldAndOfICmps - Fold (icmp)&(icmp) if possible.
Definition at line 784 of file InstCombineAndOrXor.cpp.
References AddOne(), llvm::tgtok::Code, llvm::dyn_cast(), foldLogOpOfMaskedICmps(), llvm::ConstantInt::get(), llvm::IntegerType::getBitWidth(), llvm::Type::getContext(), llvm::getICmpCode(), llvm::APInt::getLowBitsSet(), llvm::Value::getName(), llvm::ConstantExpr::getNeg(), getNewICmpValue(), llvm::User::getOperand(), llvm::CmpInst::getPredicate(), llvm::Value::getType(), llvm::ConstantInt::getType(), llvm::ConstantInt::getValue(), llvm::Value::hasOneUse(), llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_NE, 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_ULT, llvm::ConstantRange::intersectWith(), llvm::APInt::isAllOnesValue(), llvm::ConstantRange::isEmptySet(), llvm::ICmpInst::isEquality(), llvm::APInt::isPowerOf2(), llvm::CmpInst::isSigned(), llvm::ConstantInt::isZero(), llvm_unreachable, llvm::PatternMatch::m_And(), llvm::PatternMatch::m_ConstantInt(), llvm::PatternMatch::m_Specific(), llvm::PatternMatch::m_Trunc(), llvm::PatternMatch::m_Value(), llvm::CmpInst::makeCmpResultType(), llvm::ConstantRange::makeICmpRegion(), llvm::PatternMatch::match(), N, llvm::PredicatesFoldable(), llvm::APInt::sgt(), SubOne(), std::swap(), llvm::ICmpInst::swapOperands(), llvm::APInt::ugt(), and llvm::APInt::zext().
Instruction * InstCombiner::FoldCmpLoadFromIndexedGlobal | ( | GetElementPtrInst * | GEP, |
GlobalVariable * | GV, | ||
CmpInst & | ICI, | ||
ConstantInt * | AndCst = 0 |
||
) |
FoldCmpLoadFromIndexedGlobal - Called we see this pattern: cmp pred (load (gep GV, ...)), cmpcst where GV is a global variable with a constant initializer. Try to simplify this into some simple computation that does not need the load. For example we can optimize "icmp eq (load (gep "foo", 0, i)), 0" into "icmp eq i, 3".
If AndCst is non-null, then the loaded value is masked with that constant before doing the comparison. This handles cases like "A[i]&4 == 0".
TrueRangeEnd/FalseRangeEnd - In conjunction with First*Element, these define a state machine that triggers for ranges of values that the index is true or false for. This triggers on things like "abbbbc"[i] == 'b'. This is -2 when undefined, -3 when overdefined, and otherwise the last index in the range (inclusive). We use -2 for undefined here because we use relative comparisons and don't want 0-1 to match -1.
Definition at line 227 of file InstCombineCompares.cpp.
References llvm::CallingConv::C, llvm::ConstantFoldCompareInstOperands(), llvm::dyn_cast(), llvm::SmallVectorBase::empty(), llvm::ConstantInt::get(), llvm::Constant::getAggregateElement(), llvm::ConstantExpr::getAnd(), llvm::Type::getArrayElementType(), llvm::Type::getArrayNumElements(), llvm::Value::getContext(), llvm::ConstantExpr::getExtractValue(), llvm::GlobalVariable::getInitializer(), llvm::Type::getInt32Ty(), llvm::Type::getIntegerBitWidth(), llvm::User::getNumOperands(), llvm::User::getOperand(), llvm::CmpInst::getPredicate(), llvm::Type::getPrimitiveSizeInBits(), llvm::Intrinsic::getType(), llvm::Value::getType(), llvm::GetElementPtrInst::getType(), llvm::ConstantInt::getZExtValue(), llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_NE, llvm::CmpInst::ICMP_UGT, llvm::CmpInst::ICMP_ULT, llvm::GetElementPtrInst::isInBounds(), isZero(), llvm::SmallVectorTemplateBase< T, isPodLike >::push_back(), and TD.
Instruction * InstCombiner::FoldFCmp_IntToFP_Cst | ( | FCmpInst & | I, |
Instruction * | LHSI, | ||
Constant * | RHSC | ||
) |
FoldFCmp_IntToFP_Cst - Fold fcmp ([us]itofp x, cst) if possible.
Definition at line 3010 of file InstCombineCompares.cpp.
References llvm::APFloat::cmpGreaterThan, llvm::APFloat::cmpLessThan, llvm::APFloat::convertFromAPInt(), llvm::CmpInst::FCMP_OEQ, llvm::CmpInst::FCMP_OGE, llvm::CmpInst::FCMP_OGT, llvm::CmpInst::FCMP_OLE, llvm::CmpInst::FCMP_OLT, llvm::CmpInst::FCMP_ONE, llvm::CmpInst::FCMP_ORD, llvm::CmpInst::FCMP_UEQ, llvm::CmpInst::FCMP_UGE, llvm::CmpInst::FCMP_UGT, llvm::CmpInst::FCMP_ULE, llvm::CmpInst::FCMP_ULT, llvm::CmpInst::FCMP_UNE, llvm::CmpInst::FCMP_UNO, llvm::Type::getFPMantissaWidth(), llvm::ConstantExpr::getFPToSI(), llvm::ConstantExpr::getFPToUI(), llvm::APInt::getMaxValue(), llvm::APInt::getMinValue(), llvm::User::getOperand(), llvm::CmpInst::getPredicate(), llvm::Type::getScalarSizeInBits(), llvm::APFloat::getSemantics(), llvm::APInt::getSignedMaxValue(), llvm::APInt::getSignedMinValue(), llvm::ConstantExpr::getSIToFP(), llvm::Value::getType(), llvm::ConstantExpr::getUIToFP(), llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_NE, 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::APFloat::isNaN(), llvm::APFloat::isNegative(), llvm::APFloat::isZero(), llvm_unreachable, and llvm::APFloat::rmNearestTiesToEven.
Value * InstCombiner::foldFMulConst | ( | Instruction * | FMulOrDiv, |
ConstantFP * | C, | ||
Instruction * | InsertBefore | ||
) |
foldFMulConst() is a helper routine of InstCombiner::visitFMul(). The input FMulOrDiv
is a FMul/FDiv with one and only one operand being a constant (i.e. isFMulOrFDivWithConstant(FMulOrDiv) == true). This function is to simplify "FMulOrDiv * C" and returns the resulting expression. Note that this function could return NULL in case the constants cannot be folded into a normal floating-point.
Definition at line 357 of file InstCombineMulDivRem.cpp.
References llvm::dyn_cast(), F(), llvm::ConstantExpr::getFDiv(), llvm::ConstantExpr::getFMul(), llvm::Instruction::getOpcode(), llvm::User::getOperand(), llvm::Value::hasOneUse(), isFMulOrFDivWithConstant(), and isNormalFp().
Instruction * InstCombiner::FoldGEPICmp | ( | GEPOperator * | GEPLHS, |
Value * | RHS, | ||
ICmpInst::Predicate | Cond, | ||
Instruction & | I | ||
) |
FoldGEPICmp - Fold comparisons between a GEP instruction and something else. At this point we know that the GEP is on the LHS of the comparison.
Definition at line 611 of file InstCombineCompares.cpp.
References llvm::EmitGEPOffset(), EvaluateGEPOffsetExpression(), llvm::Constant::getNullValue(), llvm::User::getNumOperands(), llvm::User::getOperand(), llvm::Type::getPrimitiveSizeInBits(), llvm::ICmpInst::getSignedPredicate(), llvm::CmpInst::getSwappedPredicate(), llvm::Value::getType(), llvm::GEPOperator::hasAllConstantIndices(), llvm::Value::hasOneUse(), I, llvm::GEPOperator::isInBounds(), llvm::CmpInst::isSigned(), llvm::CmpInst::isTrueWhenEqual(), llvm::Value::stripPointerCasts(), and TD.
Instruction * InstCombiner::FoldICmpAddOpCst | ( | Instruction & | ICI, |
Value * | X, | ||
ConstantInt * | CI, | ||
ICmpInst::Predicate | Pred | ||
) |
FoldICmpAddOpCst - Fold "icmp pred (X+CI), X".
Definition at line 745 of file InstCombineCompares.cpp.
References llvm::CallingConv::C, llvm::ConstantInt::get(), llvm::Constant::getAllOnesValue(), llvm::Value::getContext(), llvm::ConstantExpr::getNeg(), llvm::Type::getPrimitiveSizeInBits(), llvm::APInt::getSignedMaxValue(), llvm::ConstantExpr::getSub(), llvm::Value::getType(), llvm::ConstantInt::getType(), llvm::ConstantInt::getValue(), llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_NE, 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::isTrueWhenEqual(), and llvm::ConstantInt::isZero().
Instruction * InstCombiner::FoldICmpDivCst | ( | ICmpInst & | ICI, |
BinaryOperator * | DivI, | ||
ConstantInt * | DivRHS | ||
) |
FoldICmpDivCst - Fold "icmp pred, ([su]div X, DivRHS), CmpRHS" where DivRHS and CmpRHS are both known to be integer constants.
If the division is known to be exact, then there is no remainder from the divide, so the covered range size is unit, otherwise it is the divisor.
Definition at line 809 of file InstCombineCompares.cpp.
References AddOne(), AddWithOverflow(), llvm::ConstantExpr::getMul(), llvm::ConstantExpr::getNeg(), getOne(), llvm::BinaryOperator::getOpcode(), llvm::User::getOperand(), llvm::CmpInst::getPredicate(), llvm::ConstantExpr::getSDiv(), llvm::CmpInst::getSwappedPredicate(), llvm::ConstantExpr::getUDiv(), llvm::ConstantInt::getValue(), llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_NE, llvm::CmpInst::ICMP_SGE, llvm::CmpInst::ICMP_SGT, llvm::CmpInst::ICMP_SLT, llvm::CmpInst::ICMP_UGE, llvm::CmpInst::ICMP_UGT, llvm::CmpInst::ICMP_ULT, llvm::Constant::isAllOnesValue(), llvm::ICmpInst::isEquality(), llvm::BinaryOperator::isExact(), llvm::ConstantInt::isNegative(), llvm::ConstantInt::isOne(), llvm::CmpInst::isSigned(), llvm::APInt::isStrictlyPositive(), llvm::ConstantInt::isZero(), llvm_unreachable, llvm::User::setOperand(), SubOne(), SubWithOverflow(), and llvm::X.
Instruction * InstCombiner::FoldICmpShrCst | ( | ICmpInst & | ICI, |
BinaryOperator * | DivI, | ||
ConstantInt * | DivRHS | ||
) |
FoldICmpShrCst - Handle "icmp(([al]shr X, cst1), cst2)".
Definition at line 966 of file InstCombineCompares.cpp.
References llvm::APIntOps::And(), llvm::APInt::ashr(), llvm::dyn_cast(), llvm::ConstantInt::get(), llvm::APInt::getBitWidth(), llvm::APInt::getHighBitsSet(), llvm::ConstantInt::getLimitedValue(), llvm::Value::getName(), llvm::APInt::getOneBitSet(), llvm::BinaryOperator::getOpcode(), llvm::User::getOperand(), llvm::CmpInst::getPredicate(), llvm::Value::getType(), llvm::Value::hasOneUse(), llvm::CmpInst::ICMP_NE, llvm::ICmpInst::isEquality(), llvm::BinaryOperator::isExact(), llvm::CmpInst::isSigned(), llvm::APInt::lshr(), and llvm::User::setOperand().
FoldOrOfFCmps - Optimize (fcmp)|(fcmp). NOTE: Unlike the rest of instcombine, this returns a Value which should already be inserted into the function.
Definition at line 1830 of file InstCombineAndOrXor.cpp.
References llvm::CmpInst::FCMP_FALSE, llvm::CmpInst::FCMP_TRUE, llvm::CmpInst::FCMP_UNO, llvm::ConstantInt::get(), getFCmpCode(), getFCmpValue(), llvm::User::getOperand(), llvm::CmpInst::getPredicate(), llvm::CmpInst::getSwappedPredicate(), llvm::Value::getType(), llvm::CmpInst::makeCmpResultType(), and std::swap().
FoldOrOfICmps - Fold (icmp)|(icmp) if possible.
Definition at line 1564 of file InstCombineAndOrXor.cpp.
References llvm::ARM_PROC::A, AddOne(), llvm::APIntOps::And(), llvm::tgtok::Code, llvm::dyn_cast(), foldLogOpOfMaskedICmps(), llvm::getICmpCode(), llvm::Value::getName(), llvm::ConstantExpr::getNeg(), getNewICmpValue(), llvm::BinaryOperator::getOpcode(), llvm::User::getOperand(), llvm::CmpInst::getPredicate(), llvm::ConstantInt::getSigned(), llvm::ConstantExpr::getSub(), llvm::ConstantInt::getValue(), llvm::Value::hasOneUse(), llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_NE, 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_ULT, llvm::ICmpInst::isEquality(), IsOneHotValue(), llvm::APInt::isPowerOf2(), llvm::CmpInst::isSigned(), llvm::ConstantInt::isZero(), llvm_unreachable, llvm::PatternMatch::m_Add(), llvm::PatternMatch::m_ConstantInt(), llvm::PatternMatch::m_Specific(), llvm::PatternMatch::match(), llvm::PredicatesFoldable(), llvm::APInt::sgt(), SubOne(), std::swap(), llvm::ICmpInst::swapOperands(), llvm::APInt::ugt(), llvm::APInt::ule(), and llvm::APIntOps::Xor().
Instruction * InstCombiner::FoldOrWithConstants | ( | BinaryOperator & | I, |
Value * | Op, | ||
Value * | A, | ||
Value * | B, | ||
Value * | C | ||
) |
FoldOrWithConstants - This helper function folds:
((A | B) & C1) | (B & C2)
into:
(A & C1) | B
when the XOR of the two constants is "all ones" (-1).
Definition at line 1896 of file InstCombineAndOrXor.cpp.
References llvm::CallingConv::C, llvm::dyn_cast(), llvm::ConstantInt::getValue(), llvm::APInt::isAllOnesValue(), llvm::PatternMatch::m_And(), llvm::PatternMatch::m_ConstantInt(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), and llvm::APIntOps::Xor().
Instruction * InstCombiner::FoldSelectIntoOp | ( | SelectInst & | SI, |
Value * | TrueVal, | ||
Value * | FalseVal | ||
) |
FoldSelectIntoOp - Try fold the select into one of the operands to facilitate further optimization.
Definition at line 211 of file InstCombineSelect.cpp.
References llvm::CallingConv::C, llvm::BinaryOperator::Create(), llvm::SelectInst::getCondition(), llvm::BinaryOperator::getOpcode(), GetSelectFoldableConstant(), GetSelectFoldableOperands(), llvm::BinaryOperator::hasNoSignedWrap(), llvm::BinaryOperator::hasNoUnsignedWrap(), llvm::BinaryOperator::isExact(), isSelect01(), llvm::BinaryOperator::setIsExact(), and llvm::Value::takeName().
Instruction * InstCombiner::FoldSelectOpOp | ( | SelectInst & | SI, |
Instruction * | TI, | ||
Instruction * | FI | ||
) |
FoldSelectOpOp - Here we have (select c, TI, FI), and we know that TI and FI have the same opcode and only one use each. Try to simplify this.
Definition at line 124 of file InstCombineSelect.cpp.
References llvm::BinaryOperator::Create(), llvm::CastInst::Create(), llvm::SelectInst::getCondition(), llvm::Value::getName(), llvm::User::getNumOperands(), llvm::Instruction::getOpcode(), llvm::User::getOperand(), llvm::Value::getType(), llvm::Type::getVectorNumElements(), llvm::Instruction::isCast(), llvm::Instruction::isCommutative(), llvm::Type::isVectorTy(), and llvm_unreachable.
Instruction * InstCombiner::FoldShiftByConstant | ( | Value * | Op0, |
ConstantInt * | Op1, | ||
BinaryOperator & | I | ||
) |
Definition at line 312 of file InstCombineShifts.cpp.
References llvm::APIntOps::And(), CanEvaluateShifted(), llvm::BinaryOperator::Create(), llvm::dbgs(), DEBUG, llvm::dyn_cast(), llvm::ConstantInt::get(), llvm::ConstantExpr::get(), llvm::Value::getContext(), llvm::APInt::getHighBitsSet(), llvm::ConstantInt::getLimitedValue(), llvm::APInt::getLowBitsSet(), llvm::Value::getName(), llvm::Constant::getNullValue(), llvm::BinaryOperator::getOpcode(), llvm::User::getOperand(), llvm::Type::getScalarSizeInBits(), GetShiftedValue(), llvm::ConstantExpr::getShl(), llvm::Value::getType(), llvm::ConstantExpr::getZExt(), llvm::ConstantInt::getZExtValue(), llvm::BinaryOperator::hasNoSignedWrap(), llvm::BinaryOperator::hasNoUnsignedWrap(), llvm::Value::hasOneUse(), I, llvm::BinaryOperator::isExact(), llvm::Instruction::isLogicalShift(), llvm::Instruction::isShift(), llvm::APInt::lshr(), llvm::PatternMatch::m_And(), llvm::PatternMatch::m_ConstantInt(), llvm::PatternMatch::m_OneUse(), llvm::PatternMatch::m_Shr(), llvm::PatternMatch::m_Specific(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), llvm::A64CC::NV, llvm::APIntOps::Or(), llvm::BinaryOperator::setHasNoSignedWrap(), llvm::BinaryOperator::setHasNoUnsignedWrap(), llvm::BinaryOperator::setIsExact(), llvm::User::setOperand(), llvm::Value::takeName(), llvm::ConstantInt::uge(), llvm::NVPTX::PTXLdStInstCode::V2, llvm::X, and llvm::APIntOps::Xor().
Instruction * InstCombiner::FoldSPFofSPF | ( | Instruction * | Inner, |
SelectPatternFlavor | SPF1, | ||
Value * | A, | ||
Value * | B, | ||
Instruction & | Outer, | ||
SelectPatternFlavor | SPF2, | ||
Value * | C | ||
) |
FoldSPFofSPF - We have an SPF (e.g. a min or max) of an SPF of the form: SPF2(SPF1(A, B), C)
Definition at line 632 of file InstCombineSelect.cpp.
References llvm::SPF_SMAX, llvm::SPF_SMIN, llvm::SPF_UMAX, and llvm::SPF_UMIN.
|
virtual |
getAnalysisUsage - This function should be overriden by passes that need analysis information to do their job. If a pass specifies that it uses a particular analysis result to this function, it can then use the getAnalysis<AnalysisType>() function, below.
Reimplemented from llvm::Pass.
Definition at line 90 of file InstructionCombining.cpp.
|
inline |
Definition at line 102 of file InstCombine.h.
References TD.
Referenced by CollectInsertionElements(), EvaluateGEPOffsetExpression(), GetShiftedValue(), InstCombineLoadCast(), InstCombineStoreToCast(), OptimizeIntegerToVectorInsertions(), and OptimizeIntToFloatBitCast().
|
inline |
Definition at line 104 of file InstCombine.h.
Referenced by GetShiftedValue().
|
inline |
Definition at line 244 of file InstCombine.h.
References llvm::BasicBlock::getInstList(), llvm::Instruction::getParent(), and llvm::iplist< NodeTy, Traits >::insert().
Referenced by visitAllocaInst().
|
inline |
Definition at line 256 of file InstCombine.h.
References llvm::Instruction::getDebugLoc(), and llvm::Instruction::setDebugLoc().
|
inline |
Definition at line 308 of file InstCombine.h.
References llvm::MaskedValueIsZero(), and TD.
Optimize pointer differences into the same array into a size. Consider: &A[10] - &A[0]: we should compile this to "10". LHS/RHS are the pointer operands to the ptrtoint instructions for the LHS/RHS of the subtract.
Definition at line 1285 of file InstCombineAddSub.cpp.
References llvm::EmitGEPOffset(), and TD.
|
inline |
Definition at line 267 of file InstCombine.h.
References llvm::dbgs(), DEBUG, llvm::UndefValue::get(), llvm::Value::getType(), I, and llvm::Value::replaceAllUsesWith().
Referenced by ProcessUAddIdiom(), ProcessUGT_ADDCST_ADD(), SliceUpIllegalIntegerPHI(), visitAllocaInst(), visitLoadInst(), and visitPHINode().
runOnFunction - Virtual method overriden by subclasses to do the per-function processing of the pass.
Builder - This is an IRBuilder that automatically inserts new instructions into the worklist when they are created.
Implements llvm::FunctionPass.
Definition at line 2497 of file InstructionCombining.cpp.
References llvm::Function::getAttributes(), llvm::Function::getContext(), llvm::AttributeSet::hasAttribute(), llvm::LowerDbgDeclare(), llvm::Attribute::MinSize, and TD.
bool InstCombiner::SimplifyDivRemOfSelect | ( | BinaryOperator & | I | ) |
SimplifyDivRemOfSelect - Try to fold a divide or remainder of a select instruction.
Definition at line 600 of file InstCombineMulDivRem.cpp.
References llvm::BasicBlock::begin(), llvm::User::getOperand(), llvm::Instruction::getParent(), llvm::Value::hasOneUse(), I, llvm::User::setOperand(), llvm::A64DB::ST, and llvm::Value::use_empty().
Instruction * InstCombiner::SliceUpIllegalIntegerPHI | ( | PHINode & | FirstPhi | ) |
SliceUpIllegalIntegerPHI - This is an integer PHI and we know that it has an illegal type: see if it is only used by trunc or trunc(lshr) operations. If so, we split the PHI into the various pieces being extracted. This sort of thing is introduced when SROA promotes an aggregate to large integer values.
TODO: The user of the trunc may be an bitcast to float/double/vector or an inttoptr. We should produce new PHIs in the right type.
Definition at line 618 of file InstCombinePHI.cpp.
References llvm::PHINode::addIncoming(), llvm::array_pod_sort(), llvm::SmallVectorTemplateCommon< T >::begin(), Builder, llvm::SmallPtrSet< PtrType, SmallSize >::count(), llvm::PHINode::Create(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateLShr(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateTrunc(), llvm::dbgs(), DEBUG, llvm::dyn_cast(), llvm::SmallVectorBase::empty(), llvm::SmallVectorTemplateCommon< T >::end(), llvm::ConstantInt::get(), llvm::UndefValue::get(), llvm::PHINode::getIncomingBlock(), llvm::PHINode::getIncomingValue(), llvm::Value::getName(), llvm::PHINode::getNumIncomingValues(), llvm::Instruction::getOpcode(), llvm::User::getOperand(), llvm::Instruction::getParent(), llvm::BasicBlock::getTerminator(), llvm::Value::getType(), llvm::Value::hasOneUse(), llvm::SmallPtrSet< PtrType, SmallSize >::insert(), llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), ReplaceInstUsesWith(), llvm::IRBuilderBase::SetInsertPoint(), llvm::SmallVectorTemplateCommon< T >::size(), llvm::RegState::Undef, llvm::Instruction::use_back(), llvm::Value::use_begin(), and llvm::Value::use_end().
Referenced by visitPHINode().
Instruction * InstCombiner::visitAdd | ( | BinaryOperator & | I | ) |
Definition at line 913 of file InstCombineAddSub.cpp.
References llvm::ARM_PROC::A, AddOne(), llvm::ComputeMaskedBits(), llvm::SelectInst::Create(), llvm::BinaryOperator::CreateNeg(), llvm::dyn_cast(), dyn_castFoldableMul(), llvm::ConstantInt::get(), llvm::ConstantExpr::getAdd(), llvm::IntegerType::getBitWidth(), llvm::SelectInst::getCondition(), llvm::SelectInst::getFalseValue(), llvm::APInt::getHighBitsSet(), llvm::Value::getName(), llvm::User::getOperand(), llvm::Type::getScalarSizeInBits(), llvm::ConstantExpr::getSExt(), llvm::SelectInst::getTrueValue(), llvm::ConstantExpr::getTrunc(), llvm::Value::getType(), llvm::ConstantInt::getValue(), llvm::ConstantExpr::getXor(), llvm::BinaryOperator::hasNoSignedWrap(), llvm::BinaryOperator::hasNoUnsignedWrap(), llvm::Value::hasOneUse(), llvm::Type::isIntegerTy(), llvm::APInt::isPowerOf2(), llvm::APInt::isSignBit(), IT(), llvm::APInt::logBase2(), llvm::PatternMatch::m_And(), llvm::PatternMatch::m_ConstantInt(), llvm::PatternMatch::m_Mul(), llvm::PatternMatch::m_Not(), llvm::PatternMatch::m_Specific(), llvm::PatternMatch::m_Sub(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::m_Xor(), llvm::PatternMatch::m_Zero(), llvm::MaskedValueIsZero(), llvm::PatternMatch::match(), N, llvm::A64CC::NV, llvm::BinaryOperator::setHasNoSignedWrap(), llvm::BinaryOperator::setHasNoUnsignedWrap(), llvm::SimplifyAddInst(), SubOne(), std::swap(), TD, llvm::X, and Y.
Instruction * InstCombiner::visitAddrSpaceCast | ( | AddrSpaceCastInst & | CI | ) |
Definition at line 1860 of file InstCombineCasts.cpp.
Instruction * InstCombiner::visitAllocaInst | ( | AllocaInst & | AI | ) |
Definition at line 153 of file InstCombineLoadStoreAlloca.cpp.
References Builder, llvm::CallingConv::C, llvm::IRBuilder< preserveNames, T, Inserter >::CreateAlloca(), llvm::GetElementPtrInst::CreateInBounds(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateIntCast(), llvm::dbgs(), DEBUG, llvm::dyn_cast(), EraseInstFromFunction(), llvm::ConstantInt::get(), llvm::ArrayType::get(), llvm::AllocaInst::getAlignment(), llvm::AllocaInst::getAllocatedType(), llvm::AllocaInst::getArraySize(), llvm::ConstantExpr::getBitCast(), llvm::Value::getContext(), llvm::Function::getEntryBlock(), llvm::BasicBlock::getFirstNonPHIOrDbg(), llvm::Type::getInt64Ty(), llvm::DataLayout::getIntPtrType(), llvm::Value::getName(), llvm::Constant::getNullValue(), llvm::getOrEnforceKnownAlignment(), llvm::Instruction::getParent(), llvm::BasicBlock::getParent(), llvm::DataLayout::getPrefTypeAlignment(), llvm::AllocaInst::getType(), llvm::Value::getType(), llvm::DataLayout::getTypeAllocSize(), InsertNewInstBefore(), llvm::AllocaInst::isArrayAllocation(), isOnlyCopiedFromConstantGlobal(), llvm::Type::isSized(), llvm::Instruction::moveBefore(), ReplaceInstUsesWith(), llvm::AllocaInst::setAlignment(), llvm::User::setOperand(), llvm::SmallVectorTemplateCommon< T >::size(), and visitAllocSite().
Instruction * InstCombiner::visitAllocSite | ( | Instruction & | FI | ) |
Definition at line 1478 of file InstructionCombining.cpp.
References llvm::InvokeInst::Create(), llvm::Intrinsic::donothing, F(), llvm::ConstantInt::get(), llvm::UndefValue::get(), llvm::Value::getContext(), llvm::Intrinsic::getDeclaration(), llvm::Type::getInt1Ty(), llvm::Value::getType(), isAllocSiteRemovable(), llvm::ConstantInt::isZero(), llvm::None, llvm::Intrinsic::objectsize, llvm::SmallVectorTemplateCommon< T >::size(), and Users.
Referenced by visitAllocaInst().
Instruction * InstCombiner::visitAnd | ( | BinaryOperator & | I | ) |
Definition at line 1098 of file InstCombineAndOrXor.cpp.
References llvm::ARM_PROC::A, llvm::APInt::countLeadingZeros(), llvm::BinaryOperator::Create(), llvm::CastInst::Create(), llvm::SelectInst::Create(), llvm::BinaryOperator::CreateNot(), dyn_castNotVal(), llvm::ConstantExpr::getAnd(), llvm::APInt::getBitWidth(), llvm::APInt::getLowBitsSet(), llvm::Value::getName(), llvm::Constant::getNullValue(), llvm::User::getOperand(), llvm::Type::getScalarType(), llvm::ConstantExpr::getTrunc(), llvm::Value::getType(), llvm::ConstantInt::getValue(), llvm::Value::hasOneUse(), I, llvm::Type::isIntegerTy(), llvm::Type::isIntOrIntVectorTy(), llvm::PatternMatch::m_And(), llvm::PatternMatch::m_ConstantInt(), llvm::PatternMatch::m_Not(), llvm::PatternMatch::m_Or(), llvm::PatternMatch::m_SExt(), llvm::PatternMatch::m_Specific(), llvm::PatternMatch::m_Trunc(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::m_Xor(), llvm::PatternMatch::m_Zero(), llvm::MaskedValueIsZero(), llvm::PatternMatch::match(), llvm::A64CC::NV, llvm::APIntOps::Or(), llvm::SimplifyAndInst(), std::swap(), TD, and llvm::APIntOps::Xor().
Instruction * InstCombiner::visitAShr | ( | BinaryOperator & | I | ) |
Definition at line 755 of file InstCombineShifts.cpp.
References llvm::ComputeNumSignBits(), llvm::APInt::getLowBitsSet(), llvm::User::getOperand(), llvm::Type::getScalarSizeInBits(), llvm::APInt::getSignBit(), llvm::Value::getType(), I, llvm::BinaryOperator::isExact(), llvm::PatternMatch::m_Shl(), llvm::PatternMatch::m_Specific(), llvm::PatternMatch::m_Value(), llvm::MaskedValueIsZero(), llvm::PatternMatch::match(), llvm::BinaryOperator::setIsExact(), llvm::SimplifyAShrInst(), TD, and llvm::X.
Instruction * InstCombiner::visitBitCast | ( | BitCastInst & | CI | ) |
Definition at line 1727 of file InstCombineCasts.cpp.
References llvm::CastInst::Create(), llvm::InsertElementInst::Create(), llvm::GetElementPtrInst::CreateInBounds(), llvm::UndefValue::get(), llvm::PointerType::getAddressSpace(), llvm::Value::getContext(), llvm::SequentialType::getElementType(), llvm::Type::getInt32Ty(), llvm::Constant::getNullValue(), llvm::Type::getNumContainedTypes(), llvm::User::getOperand(), llvm::Value::getType(), llvm::Type::getVectorNumElements(), llvm::Type::isDoubleTy(), llvm::Type::isFloatTy(), llvm::Type::isPointerTy(), llvm::Type::isVectorTy(), OptimizeIntegerToVectorInsertions(), OptimizeIntToFloatBitCast(), and OptimizeVectorResize().
Instruction * InstCombiner::visitBranchInst | ( | BranchInst & | BI | ) |
Definition at line 1605 of file InstructionCombining.cpp.
References llvm::CmpInst::FCMP_OGE, llvm::CmpInst::FCMP_OLE, llvm::CmpInst::FCMP_ONE, llvm::BranchInst::getCondition(), llvm::CmpInst::getInversePredicate(), llvm::Value::hasOneUse(), llvm::CmpInst::ICMP_NE, llvm::CmpInst::ICMP_SGE, llvm::CmpInst::ICMP_SLE, llvm::CmpInst::ICMP_UGE, llvm::CmpInst::ICMP_ULE, llvm::PatternMatch::m_Br(), llvm::PatternMatch::m_FCmp(), llvm::PatternMatch::m_ICmp(), llvm::PatternMatch::m_Not(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), llvm::BranchInst::setCondition(), llvm::CmpInst::setPredicate(), llvm::BranchInst::swapSuccessors(), llvm::X, and Y.
Instruction * InstCombiner::visitCallInst | ( | CallInst & | CI | ) |
visitCallInst - CallInst simplification. This mostly only handles folding of intrinsic instructions. For normal calls, it allows visitCallSite to do the heavy lifting.
Definition at line 201 of file InstCombineCalls.cpp.
References llvm::Intrinsic::arm_neon_vld1, llvm::Intrinsic::arm_neon_vld2, llvm::Intrinsic::arm_neon_vld2lane, llvm::Intrinsic::arm_neon_vld3, llvm::Intrinsic::arm_neon_vld3lane, llvm::Intrinsic::arm_neon_vld4, llvm::Intrinsic::arm_neon_vld4lane, llvm::Intrinsic::arm_neon_vmulls, llvm::Intrinsic::arm_neon_vmullu, llvm::Intrinsic::arm_neon_vst1, llvm::Intrinsic::arm_neon_vst2, llvm::Intrinsic::arm_neon_vst2lane, llvm::Intrinsic::arm_neon_vst3, llvm::Intrinsic::arm_neon_vst3lane, llvm::Intrinsic::arm_neon_vst4, llvm::Intrinsic::arm_neon_vst4lane, llvm::Intrinsic::bswap, llvm::CallingConv::C, llvm::ComputeMaskedBits(), llvm::APInt::countLeadingZeros(), llvm::APInt::countTrailingZeros(), llvm::CastInst::Create(), llvm::InsertValueInst::Create(), llvm::CastInst::CreateSExtOrBitCast(), llvm::CastInst::CreateZExtOrBitCast(), llvm::Intrinsic::ctlz, llvm::Intrinsic::cttz, llvm::Function::doesNotThrow(), llvm::CallInst::doesNotThrow(), llvm::dyn_cast(), llvm::ConstantInt::get(), llvm::ConstantFP::get(), llvm::ConstantAggregateZero::get(), llvm::ConstantStruct::get(), llvm::ConstantVector::get(), llvm::UndefValue::get(), llvm::Constant::getAggregateElement(), llvm::CallInst::getArgOperand(), llvm::APInt::getBitsSet(), getBitWidth(), llvm::IntegerType::getBitWidth(), llvm::Value::getContext(), llvm::Intrinsic::getDeclaration(), llvm::SequentialType::getElementType(), llvm::ConstantInt::getFalse(), llvm::APInt::getHighBitsSet(), llvm::Type::getInt32Ty(), llvm::Type::getIntegerBitWidth(), llvm::IntrinsicInst::getIntrinsicID(), llvm::getKnownAlignment(), llvm::MemIntrinsic::getLength(), llvm::APInt::getLowBitsSet(), llvm::Constant::getNullValue(), llvm::CallInst::getNumArgOperands(), llvm::VectorType::getNumElements(), llvm::getObjectSize(), llvm::getOrEnforceKnownAlignment(), llvm::Instruction::getParent(), llvm::BasicBlock::getParent(), llvm::GlobalValue::getParent(), llvm::Type::getPrimitiveSizeInBits(), llvm::BasicBlock::getTerminator(), llvm::ConstantInt::getTrue(), llvm::Value::getType(), llvm::PointerType::getUnqual(), llvm::ConstantInt::getZExtValue(), I, llvm::isFreeCall(), llvm::MemIntrinsic::isVolatile(), IT(), llvm::PatternMatch::m_BSwap(), llvm::PatternMatch::m_Trunc(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), llvm::Intrinsic::memcpy, llvm::Intrinsic::memset, llvm::Intrinsic::objectsize, llvm::Intrinsic::powi, llvm::Intrinsic::ppc_altivec_lvx, llvm::Intrinsic::ppc_altivec_lvxl, llvm::Intrinsic::ppc_altivec_stvx, llvm::Intrinsic::ppc_altivec_stvxl, llvm::Intrinsic::ppc_altivec_vperm, llvm::Intrinsic::sadd_with_overflow, llvm::CallInst::setArgOperand(), llvm::CallInst::setCalledFunction(), llvm::CallInst::setDoesNotThrow(), llvm::APInt::sext(), llvm::Intrinsic::smul_with_overflow, llvm::Intrinsic::ssub_with_overflow, llvm::A64DB::ST, llvm::Intrinsic::stackrestore, llvm::Intrinsic::stacksave, std::swap(), llvm::Value::takeName(), TD, llvm::Intrinsic::uadd_with_overflow, llvm::APInt::umul_ov(), llvm::Intrinsic::umul_with_overflow, llvm::Intrinsic::usub_with_overflow, llvm::X, llvm::Intrinsic::x86_sse2_cvtsd2si, llvm::Intrinsic::x86_sse2_cvtsd2si64, llvm::Intrinsic::x86_sse2_cvttsd2si, llvm::Intrinsic::x86_sse2_cvttsd2si64, llvm::Intrinsic::x86_sse2_storeu_dq, llvm::Intrinsic::x86_sse2_storeu_pd, llvm::Intrinsic::x86_sse41_pmovsxbw, llvm::Intrinsic::x86_sse41_pmovsxdq, llvm::Intrinsic::x86_sse41_pmovsxwd, llvm::Intrinsic::x86_sse41_pmovzxbw, llvm::Intrinsic::x86_sse41_pmovzxdq, llvm::Intrinsic::x86_sse41_pmovzxwd, llvm::Intrinsic::x86_sse_cvtss2si, llvm::Intrinsic::x86_sse_cvtss2si64, llvm::Intrinsic::x86_sse_cvttss2si, llvm::Intrinsic::x86_sse_cvttss2si64, llvm::Intrinsic::x86_sse_storeu_ps, and llvm::APInt::zext().
Instruction * InstCombiner::visitExtractElementInst | ( | ExtractElementInst & | EI | ) |
Definition at line 175 of file InstCombineVectorOps.cpp.
References llvm::CallingConv::C, CheapToScalarize(), llvm::BinaryOperator::Create(), llvm::CastInst::Create(), llvm::SelectInst::Create(), llvm::ExtractElementInst::Create(), FindScalarElement(), llvm::ConstantInt::get(), llvm::UndefValue::get(), llvm::Value::getContext(), llvm::ExtractElementInst::getIndexOperand(), llvm::Type::getInt32Ty(), llvm::Value::getName(), llvm::VectorType::getNumElements(), llvm::User::getOperand(), llvm::Value::getType(), llvm::Type::getVectorNumElements(), llvm::ExtractElementInst::getVectorOperandType(), llvm::Value::hasOneUse(), I, llvm::ARM_PROC::IE, Int32Ty, llvm::Type::isVectorTy(), llvm::APInt::setBit(), and llvm::User::setOperand().
Instruction * InstCombiner::visitExtractValueInst | ( | ExtractValueInst & | EV | ) |
Definition at line 1677 of file InstructionCombining.cpp.
References llvm::ExtractValueInst::Create(), llvm::InsertValueInst::Create(), llvm::UndefValue::get(), llvm::Constant::getAggregateElement(), llvm::ExtractValueInst::getAggregateOperand(), llvm::ExtractValueInst::getIndices(), llvm::ConstantExpr::getNot(), llvm::ExtractValueInst::getNumIndices(), llvm::ExtractValueInst::hasIndices(), I, llvm::CmpInst::ICMP_UGT, llvm::ExtractValueInst::idx_begin(), llvm::ExtractValueInst::idx_end(), llvm::makeArrayRef(), llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::Intrinsic::sadd_with_overflow, llvm::Intrinsic::smul_with_overflow, llvm::Intrinsic::ssub_with_overflow, llvm::Intrinsic::uadd_with_overflow, llvm::Intrinsic::umul_with_overflow, and llvm::Intrinsic::usub_with_overflow.
Instruction * InstCombiner::visitFAdd | ( | BinaryOperator & | I | ) |
Definition at line 1182 of file InstCombineAddSub.cpp.
References llvm::ARM_PROC::A, llvm::SelectInst::Create(), llvm::dyn_cast(), llvm::Instruction::getFastMathFlags(), llvm::ConstantExpr::getFPToSI(), llvm::User::getOperand(), llvm::ConstantExpr::getSIToFP(), llvm::Value::getType(), llvm::Instruction::hasNoSignedZeros(), llvm::Instruction::hasUnsafeAlgebra(), llvm::Constant::isNegativeZeroValue(), llvm::PatternMatch::m_AnyZero(), llvm::PatternMatch::m_Select(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), llvm::A64CC::NV, llvm::SimplifyFAddInst(), and TD.
Instruction * InstCombiner::visitFCmpInst | ( | FCmpInst & | I | ) |
Orders the operands of the compare so that they are listed from most complex to least complex. This puts constants before unary operators, before binary operators.
Definition at line 3211 of file InstCombineCompares.cpp.
References llvm::CallingConv::C, llvm::Call, llvm::APFloat::clearSign(), llvm::APFloat::cmpLessThan, llvm::APFloat::compare(), llvm::APFloat::convert(), llvm::SelectInst::Create(), llvm::dyn_cast(), F(), llvm::LibFunc::fabs, llvm::LibFunc::fabsf, llvm::LibFunc::fabsl, llvm::CmpInst::FCMP_OEQ, llvm::CmpInst::FCMP_OGE, llvm::CmpInst::FCMP_OGT, llvm::CmpInst::FCMP_OLE, llvm::CmpInst::FCMP_OLT, llvm::CmpInst::FCMP_ONE, llvm::CmpInst::FCMP_ORD, llvm::CmpInst::FCMP_UEQ, llvm::CmpInst::FCMP_UGT, llvm::CmpInst::FCMP_ULT, llvm::CmpInst::FCMP_UNE, llvm::CmpInst::FCMP_UNO, llvm::ConstantFP::get(), llvm::CallInst::getArgOperand(), llvm::CallInst::getCalledFunction(), llvm::ConstantExpr::getCompare(), llvm::getComplexity(), llvm::ConstantExpr::getFNeg(), llvm::Value::getName(), llvm::Constant::getNullValue(), llvm::User::getOperand(), llvm::Instruction::getParent(), llvm::CmpInst::getPredicate(), llvm::APFloat::getSmallestNormalized(), llvm::CastInst::getSrcTy(), llvm::CmpInst::getSwappedPredicate(), llvm::Value::getType(), I, llvm::APFloat::IEEEdouble, llvm::APFloat::IEEEhalf, llvm::APFloat::IEEEquad, llvm::APFloat::IEEEsingle, llvm::Type::isDoubleTy(), llvm::Type::isFloatTy(), llvm::Type::isFP128Ty(), llvm::Type::isHalfTy(), llvm::Type::isPPC_FP128Ty(), llvm::Type::isX86_FP80Ty(), llvm::APFloat::isZero(), llvm_unreachable, llvm::SPII::Load, llvm::PatternMatch::m_FNeg(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), llvm::A64CC::NV, llvm::TargetOpcode::PHI, llvm::APFloat::PPCDoubleDouble, llvm::APFloat::rmNearestTiesToEven, llvm::MCID::Select, llvm::User::setOperand(), llvm::CmpInst::setPredicate(), llvm::SimplifyFCmpInst(), llvm::FCmpInst::swapOperands(), TD, llvm::X, llvm::APFloat::x87DoubleExtended, and Y.
Instruction * InstCombiner::visitFDiv | ( | BinaryOperator & | I | ) |
Definition at line 988 of file InstCombineMulDivRem.cpp.
References llvm::CallingConv::C, CvtFDivConstToReciprocal(), F(), llvm::Instruction::getDebugLoc(), llvm::Instruction::getFastMathFlags(), llvm::ConstantExpr::getFDiv(), llvm::ConstantExpr::getFMul(), llvm::User::getOperand(), llvm::Instruction::hasAllowReciprocal(), llvm::Value::hasOneUse(), llvm::Instruction::hasUnsafeAlgebra(), llvm::APFloat::isNormal(), llvm::PatternMatch::m_ConstantFP(), llvm::PatternMatch::m_FDiv(), llvm::PatternMatch::m_FMul(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), llvm::Instruction::setFastMathFlags(), llvm::SimplifyFDivInst(), TD, llvm::X, and Y.
Instruction * InstCombiner::visitFMul | ( | BinaryOperator & | I | ) |
Definition at line 405 of file InstCombineMulDivRem.cpp.
References llvm::ARM_PROC::A, llvm::CallingConv::C, llvm::Instruction::copyFastMathFlags(), llvm::SelectInst::Create(), detectLog2OfHalf(), llvm::dyn_cast(), llvm::Instruction::getFastMathFlags(), llvm::ConstantExpr::getFMul(), llvm::ConstantFP::getNegativeZero(), llvm::Instruction::getOpcode(), llvm::User::getOperand(), llvm::Value::getType(), llvm::ConstantFP::getValueAPF(), llvm::Instruction::hasNoInfs(), llvm::Instruction::hasNoNaNs(), llvm::Instruction::hasNoSignedZeros(), llvm::Value::hasOneUse(), llvm::Instruction::hasUnsafeAlgebra(), llvm::APFloat::isFiniteNonZero(), isFMulOrFDivWithConstant(), llvm::BinaryOperator::isFNeg(), llvm::Type::isIntegerTy(), isNormalFp(), llvm::PatternMatch::m_FMul(), llvm::PatternMatch::m_FPOne(), llvm::PatternMatch::m_FSub(), llvm::PatternMatch::m_UIToFP(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), llvm::A64CC::NV, llvm::CallInst::setArgOperand(), llvm::SimplifyFMulInst(), std::swap(), llvm::Value::takeName(), TD, and Y.
Instruction * InstCombiner::visitFPExt | ( | CastInst & | CI | ) |
Definition at line 1303 of file InstCombineCasts.cpp.
Instruction * InstCombiner::visitFPToSI | ( | FPToSIInst & | FI | ) |
Definition at line 1327 of file InstCombineCasts.cpp.
References llvm::dyn_cast(), llvm::Type::getFPMantissaWidth(), llvm::User::getOperand(), llvm::Type::getScalarSizeInBits(), and llvm::Value::getType().
Instruction * InstCombiner::visitFPToUI | ( | FPToUIInst & | FI | ) |
Definition at line 1307 of file InstCombineCasts.cpp.
References llvm::dyn_cast(), llvm::Type::getFPMantissaWidth(), llvm::User::getOperand(), llvm::Type::getScalarSizeInBits(), and llvm::Value::getType().
Instruction * InstCombiner::visitFPTrunc | ( | FPTruncInst & | CI | ) |
Definition at line 1189 of file InstCombineCasts.cpp.
References llvm::Call, llvm::BinaryOperator::Create(), llvm::CallInst::Create(), llvm::SelectInst::Create(), llvm::BinaryOperator::CreateFNeg(), llvm::dyn_cast(), llvm::Intrinsic::fabs, llvm::UndefValue::get(), llvm::CallInst::getArgOperand(), llvm::Function::getAttributes(), llvm::CallInst::getCalledFunction(), llvm::Intrinsic::getDeclaration(), llvm::IntrinsicInst::getIntrinsicID(), llvm::Function::getIntrinsicID(), llvm::Value::getName(), llvm::CallInst::getNumArgOperands(), llvm::BinaryOperator::getOpcode(), llvm::CastInst::getOpcode(), llvm::User::getOperand(), llvm::Module::getOrInsertFunction(), llvm::Instruction::getParent(), llvm::BasicBlock::getParent(), llvm::GlobalValue::getParent(), llvm::Type::getScalarSizeInBits(), llvm::Value::getType(), llvm::Value::hasOneUse(), I, llvm::Type::isDoubleTy(), llvm::Type::isFloatTy(), llvm::BinaryOperator::isFNeg(), LookThroughFPExtensions(), llvm::CallInst::setAttributes(), llvm::LibFunc::sqrt, llvm::Intrinsic::sqrt, and llvm::LibFunc::sqrtf.
Instruction * InstCombiner::visitFree | ( | CallInst & | FI | ) |
Definition at line 1574 of file InstructionCombining.cpp.
References llvm::UndefValue::get(), llvm::CallInst::getArgOperand(), llvm::Value::getContext(), llvm::Type::getInt1PtrTy(), llvm::ConstantInt::getTrue(), I, and tryToMoveFreeBeforeNullTest().
Instruction * InstCombiner::visitFRem | ( | BinaryOperator & | I | ) |
Definition at line 1248 of file InstCombineMulDivRem.cpp.
References llvm::User::getOperand(), I, llvm::SimplifyFRemInst(), and TD.
Instruction * InstCombiner::visitFSub | ( | BinaryOperator & | I | ) |
Definition at line 1520 of file InstCombineAddSub.cpp.
References llvm::Instruction::copyFastMathFlags(), llvm::Instruction::getFastMathFlags(), llvm::User::getOperand(), llvm::Value::getType(), llvm::Instruction::hasUnsafeAlgebra(), llvm::A64CC::NV, llvm::SimplifyFSubInst(), and TD.
Instruction * InstCombiner::visitGetElementPtrInst | ( | GetElementPtrInst & | GEP | ) |
See if we can simplify: X = bitcast A* to B* Y = gep X, <...constant indices...> into a gep of the original struct. This is important for SROA and alias analysis of unions. If "A" is also a bitcast, wait for A/X to be merged.
Definition at line 1073 of file InstructionCombining.cpp.
References llvm::GetElementPtrInst::accumulateConstantOffset(), llvm::SmallVectorImpl< T >::append(), llvm::CastInst::Create(), llvm::GetElementPtrInst::Create(), llvm::GetElementPtrInst::CreateInBounds(), llvm::dyn_cast(), llvm::SmallVectorBase::empty(), llvm::gep_type_begin(), llvm::gep_type_end(), llvm::PointerType::getAddressSpace(), llvm::Type::getArrayElementType(), llvm::SequentialType::getElementType(), llvm::Type::getInt8PtrTy(), llvm::Value::getName(), llvm::Constant::getNullValue(), llvm::GetElementPtrInst::getNumIndices(), llvm::User::getNumOperands(), llvm::User::getOperand(), llvm::GetElementPtrInst::getPointerAddressSpace(), llvm::Type::getPointerElementType(), llvm::GetElementPtrInst::getPointerOperandType(), llvm::Type::getPrimitiveSizeInBits(), llvm::Type::getScalarSizeInBits(), llvm::APInt::getSExtValue(), llvm::Value::getType(), llvm::GetElementPtrInst::getType(), I, llvm::GetElementPtrInst::idx_begin(), llvm::GetElementPtrInst::idx_end(), llvm::isAllocationFn(), llvm::Type::isArrayTy(), llvm::GetElementPtrInst::isInBounds(), llvm::Type::isSized(), llvm::PatternMatch::m_Neg(), llvm::PatternMatch::m_PtrToInt(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), llvm::User::op_begin(), llvm::User::op_end(), llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::User::setOperand(), shouldMergeGEPs(), llvm::SimplifyGEPInst(), llvm::Value::stripPointerCasts(), llvm::Value::takeName(), and TD.
Instruction * InstCombiner::visitICmpInst | ( | ICmpInst & | I | ) |
Orders the operands of the compare so that they are listed from most complex to least complex. This puts constants before unary operators, before binary operators.
Definition at line 2082 of file InstCombineCompares.cpp.
References llvm::ARM_PROC::A, llvm::APInt::abs(), llvm::CallingConv::C, ComputeSignedMinMaxValuesFromKnownBits(), ComputeUnsignedMinMaxValuesFromKnownBits(), llvm::APInt::countTrailingZeros(), llvm::CmpInst::Create(), llvm::SelectInst::Create(), llvm::BinaryOperator::CreateNot(), DemandedBitsLHSMask(), llvm::dyn_cast(), llvm::ConstantInt::get(), llvm::Constant::getAllOnesValue(), llvm::APInt::getAllOnesValue(), llvm::ConstantExpr::getBitCast(), getBitWidth(), llvm::ConstantInt::getBitWidth(), llvm::APInt::getBitWidth(), llvm::getComplexity(), llvm::Value::getContext(), llvm::ConstantInt::getFalse(), llvm::ConstantExpr::getICmp(), llvm::CmpInst::getInversePredicate(), llvm::ConstantInt::getLimitedValue(), llvm::APInt::getLowBitsSet(), llvm::Value::getName(), llvm::ConstantExpr::getNot(), llvm::Constant::getNullValue(), llvm::APInt::getOneBitSet(), llvm::BinaryOperator::getOpcode(), llvm::User::getOperand(), llvm::User::getOperandUse(), llvm::Instruction::getParent(), llvm::CmpInst::getPredicate(), llvm::Type::getPrimitiveSizeInBits(), llvm::Type::getScalarSizeInBits(), llvm::Type::getScalarType(), llvm::ICmpInst::getSignedPredicate(), llvm::CmpInst::getSwappedPredicate(), llvm::ConstantInt::getTrue(), llvm::Value::getType(), llvm::ICmpInst::getUnsignedPredicate(), llvm::ConstantInt::getValue(), llvm::BinaryOperator::hasNoSignedWrap(), llvm::BinaryOperator::hasNoUnsignedWrap(), llvm::Value::hasOneUse(), I, llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_NE, 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::ICmpInst::isEquality(), llvm::BinaryOperator::isExact(), llvm::Type::isIntegerTy(), llvm::Type::isIntOrIntVectorTy(), llvm::isKnownToBeAPowerOfTwo(), llvm::APInt::isNegative(), llvm::Type::isPointerTy(), llvm::APInt::isPowerOf2(), isSignBitCheck(), llvm::CmpInst::isSigned(), llvm::CmpInst::isUnsigned(), llvm_unreachable, llvm::SPII::Load, llvm::APInt::logBase2(), llvm::PatternMatch::m_Add(), llvm::PatternMatch::m_AllOnes(), llvm::PatternMatch::m_And(), llvm::PatternMatch::m_AShr(), llvm::PatternMatch::m_ConstantInt(), llvm::PatternMatch::m_LShr(), llvm::PatternMatch::m_Not(), llvm::PatternMatch::m_One(), llvm::PatternMatch::m_OneUse(), llvm::PatternMatch::m_Power2(), llvm::PatternMatch::m_Select(), llvm::PatternMatch::m_Shl(), llvm::PatternMatch::m_Specific(), llvm::PatternMatch::m_Sub(), llvm::PatternMatch::m_Trunc(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::m_Xor(), llvm::PatternMatch::m_Zero(), llvm::PatternMatch::m_ZExt(), llvm::PatternMatch::match(), NC, llvm::APIntOps::Not(), llvm::A64CC::NV, llvm::TargetOpcode::PHI, ProcessUAddIdiom(), ProcessUGT_ADDCST_ADD(), llvm::MCID::Select, llvm::User::setOperand(), llvm::SimplifyICmpInst(), llvm::APInt::sle(), llvm::APInt::slt(), std::swap(), swapMayExposeCSEOpportunities(), llvm::ICmpInst::swapOperands(), TD, llvm::APInt::uge(), llvm::APInt::ule(), llvm::APInt::ult(), llvm::Value::use_begin(), llvm::X, llvm::APIntOps::Xor(), Y, and llvm::APInt::zext().
Instruction * InstCombiner::visitICmpInstWithCastAndCast | ( | ICmpInst & | ICI | ) |
visitICmpInstWithCastAndCast - Handle icmp (cast x to y), (cast/cst). We only handle extending casts so far.
Definition at line 1778 of file InstCombineCompares.cpp.
References llvm::BinaryOperator::CreateNot(), llvm::dyn_cast(), llvm::Constant::getAllOnesValue(), llvm::ConstantExpr::getCast(), llvm::Type::getIntegerBitWidth(), llvm::ConstantExpr::getIntToPtr(), llvm::Value::getName(), llvm::CastInst::getOpcode(), llvm::User::getOperand(), llvm::CmpInst::getPredicate(), llvm::ConstantExpr::getTrunc(), llvm::Value::getType(), llvm::ICmpInst::getUnsignedPredicate(), llvm::CmpInst::ICMP_UGT, llvm::CmpInst::ICMP_ULT, llvm::ICmpInst::isEquality(), llvm::CmpInst::isSigned(), and TD.
Instruction * InstCombiner::visitICmpInstWithInstAndIntCst | ( | ICmpInst & | ICI, |
Instruction * | LHSI, | ||
ConstantInt * | RHS | ||
) |
visitICmpInstWithInstAndIntCst - Handle "icmp (instr, intcst)".
Definition at line 1055 of file InstCombineCompares.cpp.
References AddOne(), llvm::APIntOps::And(), llvm::Intrinsic::bswap, llvm::APInt::byteSwap(), llvm::CallingConv::C, llvm::ComputeMaskedBits(), llvm::APInt::countTrailingZeros(), llvm::Intrinsic::ctlz, llvm::Intrinsic::ctpop, llvm::Intrinsic::cttz, llvm::dyn_cast(), llvm::IntegerType::get(), llvm::ConstantInt::get(), llvm::ConstantExpr::get(), llvm::APInt::getActiveBits(), llvm::ConstantExpr::getAnd(), llvm::ConstantExpr::getAShr(), getBitWidth(), llvm::IntegerType::getBitWidth(), llvm::ConstantInt::getBitWidth(), llvm::APInt::getBitWidth(), llvm::Value::getContext(), llvm::APInt::getHighBitsSet(), llvm::ConstantInt::getLimitedValue(), llvm::APInt::getLowBitsSet(), llvm::ConstantRange::getLower(), llvm::ConstantExpr::getLShr(), llvm::Value::getName(), llvm::ConstantExpr::getNeg(), llvm::ConstantExpr::getNot(), llvm::Constant::getNullValue(), llvm::APInt::getOneBitSet(), llvm::Instruction::getOpcode(), llvm::BinaryOperator::getOpcode(), llvm::User::getOperand(), llvm::CmpInst::getPredicate(), llvm::Type::getPrimitiveSizeInBits(), llvm::ConstantExpr::getShl(), llvm::ICmpInst::getSignedPredicate(), llvm::ConstantExpr::getSub(), llvm::CmpInst::getSwappedPredicate(), llvm::ConstantExpr::getTrunc(), llvm::Value::getType(), llvm::ConstantInt::getType(), llvm::ICmpInst::getUnsignedPredicate(), llvm::ConstantRange::getUpper(), llvm::ConstantInt::getValue(), llvm::ConstantExpr::getXor(), llvm::ConstantExpr::getZExt(), llvm::ConstantInt::getZExtValue(), llvm::Value::hasOneUse(), llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_NE, 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::APInt::isAllOnesValue(), llvm::Instruction::isArithmeticShift(), llvm::ICmpInst::isEquality(), llvm::BinaryOperator::isExact(), isHighOnes(), llvm::Instruction::isLogicalShift(), llvm::APInt::isMinValue(), llvm::ConstantInt::isNegative(), llvm::APInt::isNonNegative(), llvm::Constant::isNullValue(), llvm::APInt::isPowerOf2(), llvm::Instruction::isShift(), llvm::APInt::isSignBit(), isSignBitCheck(), llvm::CmpInst::isSigned(), isSignTest(), llvm::CmpInst::isUnsigned(), llvm::ConstantInt::isZero(), LI, llvm::APInt::logBase2(), llvm::PatternMatch::m_One(), llvm::PatternMatch::m_Or(), llvm::PatternMatch::m_PtrToInt(), llvm::PatternMatch::m_Shl(), llvm::PatternMatch::m_Value(), llvm::ICmpInst::makeConstantRange(), llvm::PatternMatch::match(), llvm::APIntOps::Or(), P, llvm::User::setOperand(), llvm::APInt::sgt(), SubOne(), llvm::Value::takeName(), llvm::ConstantInt::uge(), llvm::X, llvm::APIntOps::Xor(), and llvm::APInt::zext().
Instruction * InstCombiner::visitInsertElementInst | ( | InsertElementInst & | IE | ) |
Definition at line 474 of file InstCombineVectorOps.cpp.
References CollectShuffleElements(), llvm::ConstantVector::get(), llvm::UndefValue::get(), llvm::APInt::getAllOnesValue(), llvm::VectorType::getNumElements(), llvm::User::getOperand(), llvm::Value::getType(), llvm::InsertElementInst::getType(), llvm::Value::hasOneUse(), llvm::ARM_PROC::IE, and llvm::Instruction::use_back().
|
inline |
Definition at line 210 of file InstCombine.h.
Instruction * InstCombiner::visitIntToPtr | ( | IntToPtrInst & | CI | ) |
Definition at line 1355 of file InstCombineCasts.cpp.
References llvm::VectorType::get(), llvm::IntToPtrInst::getAddressSpace(), llvm::Value::getContext(), llvm::User::getOperand(), llvm::Type::getScalarSizeInBits(), llvm::Value::getType(), llvm::Type::getVectorNumElements(), llvm::Type::isVectorTy(), P, and TD.
Instruction * InstCombiner::visitInvokeInst | ( | InvokeInst & | II | ) |
Definition at line 757 of file InstCombineCalls.cpp.
Instruction * InstCombiner::visitLandingPadInst | ( | LandingPadInst & | LI | ) |
Definition at line 1871 of file InstructionCombining.cpp.
References llvm::LandingPadInst::addClause(), llvm::SmallVectorTemplateCommon< T >::begin(), llvm::SmallPtrSet< PtrType, SmallSize >::count(), llvm::LandingPadInst::Create(), llvm::dyn_cast(), llvm::SmallVectorBase::empty(), llvm::SmallVectorImpl< T >::erase(), llvm::ArrayType::get(), llvm::ConstantArray::get(), llvm::LandingPadInst::getClause(), llvm::SequentialType::getElementType(), llvm::Constant::getNullValue(), llvm::LandingPadInst::getNumClauses(), llvm::ArrayType::getNumElements(), llvm::User::getOperand(), llvm::LandingPadInst::getPersonalityFn(), llvm::Intrinsic::getType(), llvm::Value::getType(), llvm::SmallPtrSet< PtrType, SmallSize >::insert(), llvm::LandingPadInst::isCatch(), isCatchAll(), llvm::LandingPadInst::isCleanup(), llvm::LandingPadInst::isFilter(), LI, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), RecognizePersonality(), llvm::SmallVectorImpl< T >::reserve(), llvm::LandingPadInst::setCleanup(), shorter_filter(), llvm::SmallVectorTemplateCommon< T >::size(), and llvm::Value::stripPointerCasts().
Instruction * InstCombiner::visitLoadInst | ( | LoadInst & | LI | ) |
Definition at line 341 of file InstCombineLoadStoreAlloca.cpp.
References Align(), Builder, llvm::CallingConv::C, llvm::SelectInst::Create(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateLoad(), llvm::FindAvailableLoadedValue(), llvm::UndefValue::get(), llvm::DataLayout::getABITypeAlignment(), llvm::LoadInst::getAlignment(), llvm::Constant::getNullValue(), llvm::User::getOperand(), llvm::getOrEnforceKnownAlignment(), llvm::Instruction::getParent(), llvm::LoadInst::getPointerAddressSpace(), llvm::DataLayout::getPrefTypeAlignment(), llvm::Value::getType(), llvm::Value::hasOneUse(), InstCombineLoadCast(), llvm::isSafeToLoadUnconditionally(), llvm::LoadInst::isSimple(), LI, ReplaceInstUsesWith(), llvm::LoadInst::setAlignment(), llvm::User::setOperand(), and llvm::NVPTX::PTXLdStInstCode::V2.
Instruction * InstCombiner::visitLShr | ( | BinaryOperator & | I | ) |
Definition at line 715 of file InstCombineShifts.cpp.
References llvm::Intrinsic::ctlz, llvm::Intrinsic::ctpop, llvm::Intrinsic::cttz, llvm::APInt::getLowBitsSet(), llvm::User::getOperand(), llvm::Type::getScalarSizeInBits(), llvm::ConstantInt::getSigned(), llvm::Value::getType(), I, llvm::BinaryOperator::isExact(), llvm::isPowerOf2_32(), llvm::Log2_32(), llvm::MaskedValueIsZero(), llvm::BinaryOperator::setIsExact(), llvm::SimplifyLShrInst(), and TD.
Instruction * InstCombiner::visitMul | ( | BinaryOperator & | I | ) |
i1 mul -> i1 and.
Definition at line 117 of file InstCombineMulDivRem.cpp.
References llvm::APInt::abs(), llvm::BinaryOperator::CreateNeg(), llvm::dyn_cast(), llvm::ConstantInt::get(), getLogBase2Vector(), llvm::Value::getName(), llvm::Constant::getNullValue(), llvm::BinaryOperator::getOpcode(), llvm::User::getOperand(), llvm::Type::getPrimitiveSizeInBits(), llvm::ConstantExpr::getShl(), llvm::Value::getType(), llvm::BinaryOperator::hasNoSignedWrap(), llvm::BinaryOperator::hasNoUnsignedWrap(), llvm::Value::hasOneUse(), llvm::Type::isIntegerTy(), llvm::APInt::isNegative(), llvm::APInt::isPowerOf2(), llvm::Type::isVectorTy(), llvm::APInt::logBase2(), llvm::PatternMatch::m_Add(), llvm::PatternMatch::m_AllOnes(), llvm::PatternMatch::m_APInt(), llvm::PatternMatch::m_Constant(), llvm::PatternMatch::m_ConstantInt(), llvm::PatternMatch::m_Mul(), llvm::PatternMatch::m_One(), llvm::PatternMatch::m_Shl(), llvm::PatternMatch::m_Sub(), llvm::PatternMatch::m_Value(), llvm::MaskedValueIsZero(), llvm::PatternMatch::match(), llvm::A64CC::NV, llvm::BinaryOperator::setHasNoSignedWrap(), llvm::BinaryOperator::setHasNoUnsignedWrap(), llvm::SimplifyMulInst(), llvm::Value::takeName(), TD, llvm::X, and Y.
Instruction * InstCombiner::visitOr | ( | BinaryOperator & | I | ) |
Definition at line 1916 of file InstCombineAndOrXor.cpp.
References llvm::ARM_PROC::A, llvm::CallingConv::C, llvm::BinaryOperator::Create(), llvm::CastInst::Create(), llvm::SelectInst::Create(), llvm::BinaryOperator::CreateNot(), llvm::dyn_cast(), dyn_castNotVal(), llvm::Value::getName(), llvm::CastInst::getOpcode(), llvm::User::getOperand(), llvm::ConstantExpr::getOr(), llvm::ConstantInt::getSigned(), llvm::Value::getType(), llvm::ConstantInt::getValue(), llvm::Value::hasOneUse(), I, llvm::Type::isIntegerTy(), llvm::Type::isIntOrIntVectorTy(), llvm::Type::isVectorTy(), llvm::PatternMatch::m_Add(), llvm::PatternMatch::m_And(), llvm::PatternMatch::m_ConstantInt(), llvm::PatternMatch::m_LogicalShift(), llvm::PatternMatch::m_Not(), llvm::PatternMatch::m_Or(), llvm::PatternMatch::m_Select(), llvm::PatternMatch::m_SExt(), llvm::PatternMatch::m_Specific(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::m_Xor(), llvm::MaskedValueIsZero(), llvm::PatternMatch::match(), MatchSelectFromAndOr(), llvm::APIntOps::Not(), llvm::A64CC::NV, llvm::APIntOps::Or(), llvm::AArch64ISD::Ret, llvm::SimplifyOrInst(), std::swap(), llvm::Value::takeName(), TD, llvm::NVPTX::PTXLdStInstCode::V2, llvm::APIntOps::Xor(), and Y.
Instruction * InstCombiner::visitPHINode | ( | PHINode & | PN | ) |
Definition at line 792 of file InstCombinePHI.cpp.
References llvm::BasicBlock::begin(), DeadPHICycle(), llvm::UndefValue::get(), llvm::PHINode::getBasicBlockIndex(), llvm::PHINode::getIncomingBlock(), llvm::PHINode::getIncomingValue(), llvm::PHINode::getNumIncomingValues(), llvm::Instruction::getParent(), llvm::Type::getPrimitiveSizeInBits(), llvm::Value::getType(), llvm::Value::hasOneUse(), llvm::SmallPtrSet< PtrType, SmallSize >::insert(), llvm::Type::isIntegerTy(), llvm::DataLayout::isLegalInteger(), PHIsEqualValue(), ReplaceInstUsesWith(), llvm::PHINode::setIncomingBlock(), llvm::PHINode::setIncomingValue(), llvm::SimplifyInstruction(), SliceUpIllegalIntegerPHI(), and llvm::Instruction::use_back().
Instruction * InstCombiner::visitPtrToInt | ( | PtrToIntInst & | CI | ) |
Definition at line 1434 of file InstCombineCasts.cpp.
References llvm::CastInst::CreateIntegerCast(), llvm::VectorType::get(), llvm::Value::getContext(), llvm::User::getOperand(), llvm::PtrToIntInst::getPointerAddressSpace(), llvm::Type::getScalarSizeInBits(), llvm::Value::getType(), llvm::Type::getVectorNumElements(), llvm::Type::isVectorTy(), P, and TD.
Instruction * InstCombiner::visitSDiv | ( | BinaryOperator & | I | ) |
Definition at line 907 of file InstCombineMulDivRem.cpp.
References llvm::BinaryOperator::CreateNeg(), llvm::ConstantInt::get(), llvm::Value::getName(), llvm::ConstantExpr::getNeg(), llvm::User::getOperand(), llvm::Type::getPrimitiveSizeInBits(), llvm::APInt::getSignBit(), llvm::Value::getType(), llvm::BinaryOperator::isExact(), llvm::Type::isIntegerTy(), llvm::PatternMatch::m_Power2(), llvm::PatternMatch::m_Shl(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::m_Zero(), llvm::MaskedValueIsZero(), llvm::PatternMatch::match(), llvm::SimplifySDivInst(), and TD.
Instruction * InstCombiner::visitSelectInst | ( | SelectInst & | SI | ) |
Definition at line 732 of file InstCombineSelect.cpp.
References llvm::CallingConv::C, CanSelectOperandBeMappingIntoPredBlock(), llvm::CmpInst::FCMP_OEQ, llvm::CmpInst::FCMP_UNE, foldSelectICmpAnd(), llvm::APInt::getAllOnesValue(), llvm::SelectInst::getCondition(), llvm::SelectInst::getFalseValue(), llvm::Value::getName(), llvm::BinaryOperator::getNotArgument(), llvm::User::getOperand(), llvm::SelectInst::getTrueValue(), llvm::Value::getType(), llvm::ConstantFP::getValueAPF(), llvm::Type::isFPOrFPVectorTy(), llvm::Type::isIntegerTy(), llvm::BinaryOperator::isNot(), llvm::APFloat::isZero(), llvm::PatternMatch::m_Not(), llvm::PatternMatch::m_Specific(), llvm::PatternMatch::match(), MatchSelectPattern(), llvm::A64CC::NV, llvm::User::setOperand(), llvm::SimplifySelectInst(), std::swap(), and TD.
Instruction * InstCombiner::visitSelectInstWithICmp | ( | SelectInst & | SI, |
ICmpInst * | ICI | ||
) |
visitSelectInstWithICmp - Visit a SelectInst that has an ICmpInst as its first operand.
Definition at line 418 of file InstCombineSelect.cpp.
References llvm::APIntOps::And(), llvm::dyn_cast(), foldSelectICmpAndOr(), llvm::ConstantInt::get(), llvm::IntegerType::getBitWidth(), llvm::SelectInst::getFalseValue(), llvm::User::getOperand(), llvm::CmpInst::getPredicate(), llvm::Type::getScalarSizeInBits(), llvm::ConstantExpr::getSExt(), llvm::CmpInst::getSwappedPredicate(), llvm::SelectInst::getTrueValue(), llvm::Value::getType(), llvm::ConstantInt::getValue(), llvm::ConstantExpr::getZExt(), llvm::Value::hasOneUse(), llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_NE, llvm::CmpInst::ICMP_SGT, llvm::CmpInst::ICMP_SLT, llvm::CmpInst::ICMP_UGT, llvm::CmpInst::ICMP_ULT, llvm::CmpInst::isUnsigned(), llvm::PatternMatch::m_SExt(), llvm::PatternMatch::m_Specific(), llvm::PatternMatch::m_ZExt(), llvm::PatternMatch::match(), llvm::Instruction::moveBefore(), llvm::User::setOperand(), llvm::CmpInst::setPredicate(), SimplifyWithOpReplaced(), std::swap(), and TD.
Instruction * InstCombiner::visitSExt | ( | SExtInst & | CI | ) |
Definition at line 1059 of file InstCombineCasts.cpp.
References llvm::ARM_PROC::A, CanEvaluateSExtd(), llvm::ComputeNumSignBits(), llvm::dbgs(), DEBUG, llvm::ConstantInt::get(), llvm::Value::getName(), llvm::User::getOperand(), llvm::Type::getScalarSizeInBits(), llvm::Value::getType(), llvm::Value::hasOneUse(), llvm::PatternMatch::m_AShr(), llvm::PatternMatch::m_ConstantInt(), llvm::PatternMatch::m_Shl(), llvm::PatternMatch::m_Trunc(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), and llvm::Instruction::use_back().
Instruction * InstCombiner::visitShl | ( | BinaryOperator & | I | ) |
Definition at line 677 of file InstCombineShifts.cpp.
References llvm::ARM_PROC::A, llvm::ComputeNumSignBits(), llvm::APInt::getHighBitsSet(), llvm::User::getOperand(), llvm::ConstantExpr::getShl(), llvm::BinaryOperator::hasNoSignedWrap(), llvm::BinaryOperator::hasNoUnsignedWrap(), I, llvm::PatternMatch::m_Constant(), llvm::PatternMatch::m_OneUse(), llvm::PatternMatch::m_Shl(), llvm::PatternMatch::m_Value(), llvm::MaskedValueIsZero(), llvm::PatternMatch::match(), llvm::BinaryOperator::setHasNoSignedWrap(), llvm::BinaryOperator::setHasNoUnsignedWrap(), llvm::SimplifyShlInst(), and TD.
Instruction * InstCombiner::visitShuffleVectorInst | ( | ShuffleVectorInst & | SVI | ) |
Definition at line 778 of file InstCombineVectorOps.cpp.
References CanEvaluateShuffled(), llvm::dyn_cast(), llvm::ConstantInt::get(), llvm::ConstantVector::get(), llvm::UndefValue::get(), llvm::APInt::getAllOnesValue(), llvm::Value::getContext(), llvm::Type::getInt32Ty(), llvm::User::getOperand(), llvm::ShuffleVectorInst::getShuffleMask(), llvm::Value::getType(), llvm::ShuffleVectorInst::getType(), Int32Ty, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::User::setOperand(), and llvm::SmallVectorTemplateCommon< T >::size().
Instruction * InstCombiner::visitSIToFP | ( | CastInst & | CI | ) |
Definition at line 1351 of file InstCombineCasts.cpp.
Instruction * InstCombiner::visitSRem | ( | BinaryOperator & | I | ) |
Definition at line 1177 of file InstCombineMulDivRem.cpp.
References llvm::CallingConv::C, llvm::ConstantVector::get(), llvm::Constant::getAggregateElement(), llvm::Value::getName(), llvm::ConstantExpr::getNeg(), llvm::User::getOperand(), llvm::Type::getPrimitiveSizeInBits(), llvm::APInt::getSignBit(), llvm::Value::getType(), llvm::Type::getVectorNumElements(), I, llvm::Type::isIntegerTy(), llvm::MaskedValueIsZero(), llvm::User::setOperand(), llvm::SimplifySRemInst(), and TD.
Instruction * InstCombiner::visitStoreInst | ( | StoreInst & | SI | ) |
Definition at line 566 of file InstCombineLoadStoreAlloca.cpp.
References llvm::InstCombineWorklist::Add(), llvm::BasicBlock::begin(), equivalentAddressValues(), EraseInstFromFunction(), llvm::UndefValue::get(), llvm::DataLayout::getABITypeAlignment(), llvm::StoreInst::getAlignment(), llvm::User::getOperand(), llvm::getOrEnforceKnownAlignment(), llvm::Instruction::getParent(), llvm::StoreInst::getPointerAddressSpace(), llvm::DataLayout::getPrefTypeAlignment(), llvm::Value::getType(), llvm::Value::hasOneUse(), InstCombineStoreToCast(), llvm::StoreInst::isSimple(), LI, llvm::StoreInst::setAlignment(), llvm::User::setOperand(), and Worklist.
Instruction * InstCombiner::visitSub | ( | BinaryOperator & | I | ) |
Definition at line 1352 of file InstCombineAddSub.cpp.
References llvm::ARM_PROC::A, AddOne(), llvm::BinaryOperator::CreateNeg(), llvm::BinaryOperator::CreateNot(), llvm::CastInst::CreateSExtOrBitCast(), llvm::CastInst::CreateZExtOrBitCast(), dyn_castFoldableMul(), llvm::ConstantInt::get(), llvm::ConstantExpr::getNeg(), llvm::User::getOperand(), llvm::Type::getPrimitiveSizeInBits(), llvm::ConstantExpr::getShl(), llvm::ConstantExpr::getSub(), llvm::Value::getType(), llvm::ConstantInt::getValue(), llvm::BinaryOperator::hasNoSignedWrap(), llvm::BinaryOperator::hasNoUnsignedWrap(), llvm::Type::isIntegerTy(), llvm::APFloat::isZero(), llvm::PatternMatch::m_Add(), llvm::PatternMatch::m_AllOnes(), llvm::PatternMatch::m_And(), llvm::PatternMatch::m_AShr(), llvm::PatternMatch::m_Constant(), llvm::PatternMatch::m_ConstantInt(), llvm::PatternMatch::m_LShr(), llvm::PatternMatch::m_Mul(), llvm::PatternMatch::m_Neg(), llvm::PatternMatch::m_Not(), llvm::PatternMatch::m_PtrToInt(), llvm::PatternMatch::m_SDiv(), llvm::PatternMatch::m_SExt(), llvm::PatternMatch::m_Shl(), llvm::PatternMatch::m_Specific(), llvm::PatternMatch::m_Sub(), llvm::PatternMatch::m_Trunc(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::m_Zero(), llvm::PatternMatch::m_ZExt(), llvm::PatternMatch::match(), llvm::BinaryOperator::setHasNoSignedWrap(), llvm::BinaryOperator::setHasNoUnsignedWrap(), llvm::SimplifySubInst(), SubOne(), TD, llvm::X, and Y.
Instruction * InstCombiner::visitSwitchInst | ( | SwitchInst & | SI | ) |
Definition at line 1653 of file InstructionCombining.cpp.
References llvm::SwitchInst::case_begin(), llvm::SwitchInst::case_end(), llvm::SwitchInst::getCondition(), llvm::Instruction::getOpcode(), llvm::User::getOperand(), llvm::ConstantExpr::getSub(), and llvm::SwitchInst::setCondition().
Instruction * InstCombiner::visitTrunc | ( | TruncInst & | CI | ) |
Definition at line 436 of file InstCombineCasts.cpp.
References llvm::ARM_PROC::A, CanEvaluateTruncated(), llvm::CastInst::CreateIntegerCast(), llvm::dbgs(), DEBUG, llvm::ConstantInt::get(), llvm::Value::getName(), llvm::Constant::getNullValue(), llvm::User::getOperand(), llvm::Type::getPrimitiveSizeInBits(), llvm::Type::getScalarSizeInBits(), llvm::ConstantExpr::getTrunc(), llvm::Value::getType(), llvm::ConstantInt::getZExtValue(), llvm::Value::hasOneUse(), llvm::CmpInst::ICMP_NE, llvm::Type::isVectorTy(), llvm::PatternMatch::m_And(), llvm::PatternMatch::m_ConstantInt(), llvm::PatternMatch::m_LShr(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::m_ZExt(), llvm::PatternMatch::match(), and llvm::Value::takeName().
Instruction * InstCombiner::visitUDiv | ( | BinaryOperator & | I | ) |
Definition at line 846 of file InstCombineMulDivRem.cpp.
References llvm::SelectInst::Create(), dyn_castZExtVal(), llvm::ConstantInt::getBitWidth(), llvm::ConstantInt::getLimitedValue(), llvm::User::getOperand(), llvm::Value::getType(), llvm::Instruction::insertBefore(), llvm::BinaryOperator::isExact(), llvm::PatternMatch::m_ConstantInt(), llvm::PatternMatch::m_LShr(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), NC, llvm::SimplifyUDivInst(), TD, visitUDivOperand(), and llvm::X.
Instruction * InstCombiner::visitUIToFP | ( | CastInst & | CI | ) |
Definition at line 1347 of file InstCombineCasts.cpp.
Instruction * InstCombiner::visitURem | ( | BinaryOperator & | I | ) |
Definition at line 1145 of file InstCombineMulDivRem.cpp.
References dyn_castZExtVal(), llvm::MipsISD::Ext, llvm::Constant::getAllOnesValue(), llvm::User::getOperand(), llvm::Value::getType(), llvm::isKnownToBeAPowerOfTwo(), llvm::PatternMatch::m_One(), llvm::PatternMatch::match(), llvm::SimplifyURemInst(), and TD.
Instruction * InstCombiner::visitXor | ( | BinaryOperator & | I | ) |
Definition at line 2248 of file InstCombineAndOrXor.cpp.
References llvm::ARM_PROC::A, llvm::APIntOps::And(), llvm::CallingConv::C, llvm::tgtok::Code, llvm::BinaryOperator::Create(), llvm::CastInst::Create(), llvm::CmpInst::Create(), llvm::dyn_cast(), dyn_castNotVal(), llvm::ConstantInt::get(), llvm::ConstantExpr::getAnd(), llvm::ConstantExpr::getCast(), llvm::Instruction::getDebugLoc(), llvm::getICmpCode(), llvm::Value::getName(), llvm::ConstantExpr::getNeg(), getNewICmpValue(), llvm::ConstantExpr::getNot(), llvm::BinaryOperator::getOpcode(), llvm::CmpInst::getOpcode(), llvm::User::getOperand(), llvm::ConstantExpr::getOr(), llvm::ConstantExpr::getSub(), llvm::Value::getType(), llvm::ConstantInt::getType(), llvm::ConstantInt::getValue(), llvm::Value::hasOneUse(), I, isFreeToInvert(), llvm::Type::isIntegerTy(), llvm::Instruction::isShift(), llvm::APInt::lshr(), llvm::PatternMatch::m_And(), llvm::PatternMatch::m_Or(), llvm::PatternMatch::m_Value(), llvm::MaskedValueIsZero(), llvm::PatternMatch::match(), llvm::A64CC::NV, llvm::APIntOps::Or(), llvm::PredicatesFoldable(), llvm::User::setOperand(), llvm::SimplifyXorInst(), std::swap(), llvm::BinaryOperator::swapOperands(), llvm::Value::takeName(), TD, and llvm::APIntOps::Xor().
Instruction * InstCombiner::visitZExt | ( | ZExtInst & | CI | ) |
Definition at line 757 of file InstCombineCasts.cpp.
References llvm::ARM_PROC::A, llvm::APIntOps::And(), llvm::CallingConv::C, CanEvaluateZExtd(), llvm::BinaryOperator::Create(), llvm::dbgs(), DEBUG, llvm::dyn_cast(), llvm::ConstantInt::get(), llvm::APInt::getHighBitsSet(), llvm::APInt::getLowBitsSet(), llvm::Value::getName(), llvm::BinaryOperator::getOpcode(), llvm::User::getOperand(), llvm::Type::getScalarSizeInBits(), llvm::Value::getType(), llvm::ConstantExpr::getZExt(), llvm::Value::hasOneUse(), llvm::Type::isIntegerTy(), llvm::PatternMatch::m_Not(), llvm::PatternMatch::m_Value(), llvm::MaskedValueIsZero(), llvm::PatternMatch::match(), llvm::APIntOps::Or(), llvm::Instruction::use_back(), llvm::X, and llvm::APIntOps::Xor().
BuilderTy* llvm::InstCombiner::Builder |
Definition at line 87 of file InstCombine.h.
Referenced by EvaluateGEPOffsetExpression(), FoldOperationIntoSelectOperand(), foldUDivNegCst(), foldUDivShl(), GetShiftedValue(), InstCombineLoadCast(), InstCombineStoreToCast(), OptimizeIntegerToVectorInsertions(), OptimizeIntToFloatBitCast(), OptimizeVectorResize(), ProcessUAddIdiom(), ProcessUGT_ADDCST_ADD(), simplifyValueKnownNonZero(), SliceUpIllegalIntegerPHI(), visitAllocaInst(), and visitLoadInst().
|
static |
Definition at line 89 of file InstCombine.h.
InstCombineWorklist llvm::InstCombiner::Worklist |
Worklist - All of the instructions that need to be simplified.
Definition at line 82 of file InstCombine.h.
Referenced by AddReachableCodeToWorklist(), GetShiftedValue(), and visitStoreInst().