LLVM
8.0.1
|
#include "llvm/Support/KnownBits.h"
Public Member Functions | |
KnownBits () | |
KnownBits (unsigned BitWidth) | |
Create a known bits object of BitWidth bits initialized to unknown. More... | |
unsigned | getBitWidth () const |
Get the bit width of this value. More... | |
bool | hasConflict () const |
Returns true if there is conflicting information. More... | |
bool | isConstant () const |
Returns true if we know the value of all bits. More... | |
const APInt & | getConstant () const |
Returns the value when all bits have a known value. More... | |
bool | isUnknown () const |
Returns true if we don't know any bits. More... | |
void | resetAll () |
Resets the known state of all bits. More... | |
bool | isZero () const |
Returns true if value is all zero. More... | |
bool | isAllOnes () const |
Returns true if value is all one bits. More... | |
void | setAllZero () |
Make all bits known to be zero and discard any previous information. More... | |
void | setAllOnes () |
Make all bits known to be one and discard any previous information. More... | |
bool | isNegative () const |
Returns true if this value is known to be negative. More... | |
bool | isNonNegative () const |
Returns true if this value is known to be non-negative. More... | |
void | makeNegative () |
Make this value negative. More... | |
void | makeNonNegative () |
Make this value non-negative. More... | |
KnownBits | trunc (unsigned BitWidth) |
Truncate the underlying known Zero and One bits. More... | |
KnownBits | zext (unsigned BitWidth) |
Zero extends the underlying known Zero and One bits. More... | |
KnownBits | sext (unsigned BitWidth) |
Sign extends the underlying known Zero and One bits. More... | |
KnownBits | zextOrTrunc (unsigned BitWidth) |
Zero extends or truncates the underlying known Zero and One bits. More... | |
unsigned | countMinTrailingZeros () const |
Returns the minimum number of trailing zero bits. More... | |
unsigned | countMinTrailingOnes () const |
Returns the minimum number of trailing one bits. More... | |
unsigned | countMinLeadingZeros () const |
Returns the minimum number of leading zero bits. More... | |
unsigned | countMinLeadingOnes () const |
Returns the minimum number of leading one bits. More... | |
unsigned | countMinSignBits () const |
Returns the number of times the sign bit is replicated into the other bits. More... | |
unsigned | countMaxTrailingZeros () const |
Returns the maximum number of trailing zero bits possible. More... | |
unsigned | countMaxTrailingOnes () const |
Returns the maximum number of trailing one bits possible. More... | |
unsigned | countMaxLeadingZeros () const |
Returns the maximum number of leading zero bits possible. More... | |
unsigned | countMaxLeadingOnes () const |
Returns the maximum number of leading one bits possible. More... | |
unsigned | countMinPopulation () const |
Returns the number of bits known to be one. More... | |
unsigned | countMaxPopulation () const |
Returns the maximum number of bits that could be one. More... | |
Static Public Member Functions | |
static KnownBits | computeForAddSub (bool Add, bool NSW, const KnownBits &LHS, KnownBits RHS) |
Compute known bits resulting from adding LHS and RHS. More... | |
Public Attributes | |
APInt | Zero |
APInt | One |
Definition at line 23 of file KnownBits.h.
|
inline |
Definition at line 34 of file KnownBits.h.
Referenced by sext(), trunc(), zext(), and zextOrTrunc().
|
inline |
Create a known bits object of BitWidth bits initialized to unknown.
Definition at line 37 of file KnownBits.h.
|
static |
Compute known bits resulting from adding LHS and RHS.
Definition at line 19 of file KnownBits.cpp.
References assert(), isNegative(), isNonNegative(), makeNegative(), makeNonNegative(), One, std::swap(), and Zero.
Referenced by computeKnownBitsAddSub(), countMaxPopulation(), and ShrinkDemandedConstant().
|
inline |
Returns the maximum number of leading one bits possible.
Definition at line 181 of file KnownBits.h.
References llvm::APInt::countLeadingZeros().
|
inline |
Returns the maximum number of leading zero bits possible.
Definition at line 176 of file KnownBits.h.
References llvm::APInt::countLeadingZeros().
Referenced by llvm::SelectionDAG::computeKnownBits(), computeKnownBitsFromOperator(), foldCttzCtlz(), isAlwaysLive(), and isKnownNonZero().
|
inline |
Returns the maximum number of bits that could be one.
Definition at line 191 of file KnownBits.h.
References llvm::MCID::Add, computeForAddSub(), llvm::APInt::countPopulation(), and getBitWidth().
Referenced by llvm::SelectionDAG::computeKnownBits(), computeKnownBitsFromOperator(), foldCtpop(), and llvm::SelectionDAG::isKnownToBeAPowerOfTwo().
|
inline |
Returns the maximum number of trailing one bits possible.
Definition at line 171 of file KnownBits.h.
References llvm::APInt::countTrailingZeros().
|
inline |
Returns the maximum number of trailing zero bits possible.
Definition at line 166 of file KnownBits.h.
References llvm::APInt::countTrailingZeros().
Referenced by llvm::SelectionDAG::computeKnownBits(), foldCttzCtlz(), and isAlwaysLive().
|
inline |
Returns the minimum number of leading one bits.
Definition at line 151 of file KnownBits.h.
References llvm::APInt::countLeadingOnes().
Referenced by llvm::SelectionDAG::computeKnownBits(), computeKnownBitsFromOperator(), countMinSignBits(), and llvm::InstCombiner::visitSwitchInst().
|
inline |
Returns the minimum number of leading zero bits.
Definition at line 146 of file KnownBits.h.
References llvm::APInt::countLeadingOnes().
Referenced by combineSubToSubus(), combineVectorSignBitsTruncation(), llvm::SelectionDAG::computeKnownBits(), llvm::AMDGPUTargetLowering::computeKnownBitsForTargetNode(), llvm::X86TargetLowering::computeKnownBitsForTargetNode(), computeKnownBitsFromAssume(), computeKnownBitsFromOperator(), computeKnownBitsMul(), llvm::computeOverflowForUnsignedMul(), countMinSignBits(), foldCttzCtlz(), llvm::RegsForValue::getCopyFromRegs(), isTruncateOf(), LowerAndToBT(), LowerTruncateVecI1(), llvm::AMDGPUTargetLowering::numBitsUnsigned(), llvm::AMDGPUTargetLowering::performShlCombine(), llvm::AMDGPUTargetLowering::performTruncateCombine(), ShrinkDemandedConstant(), SimplifyAndInst(), SimplifyLShrInst(), and llvm::InstCombiner::visitSwitchInst().
|
inline |
Returns the number of bits known to be one.
Definition at line 186 of file KnownBits.h.
References llvm::APInt::countPopulation().
Referenced by foldCtpop(), and llvm::SelectionDAG::isKnownToBeAPowerOfTwo().
|
inline |
Returns the number of times the sign bit is replicated into the other bits.
Definition at line 157 of file KnownBits.h.
References countMinLeadingOnes(), countMinLeadingZeros(), isNegative(), and isNonNegative().
Referenced by llvm::AMDGPUTargetLowering::computeKnownBitsForTargetNode(), and ComputeNumSignBitsImpl().
|
inline |
Returns the minimum number of trailing one bits.
Definition at line 141 of file KnownBits.h.
References llvm::APInt::countTrailingOnes().
Referenced by computeKnownBitsFromOperator().
|
inline |
Returns the minimum number of trailing zero bits.
Definition at line 136 of file KnownBits.h.
References llvm::APInt::countTrailingOnes().
Referenced by BrPHIToSelect(), llvm::SelectionDAG::computeKnownBits(), llvm::AMDGPUTargetLowering::computeKnownBitsForTargetNode(), computeKnownBitsFromOperator(), computeKnownBitsMul(), foldCttzCtlz(), llvm::SelectionDAG::InferPtrAlignment(), isKnownNonZero(), isWordAligned(), llvm::InstCombiner::replacedSelectWithOperand(), and SimplifyShift().
|
inline |
Get the bit width of this value.
Definition at line 40 of file KnownBits.h.
References assert(), and llvm::APInt::getBitWidth().
Referenced by computeKnownBits(), computeKnownBitsAddSub(), llvm::LanaiTargetLowering::computeKnownBitsForTargetNode(), llvm::AMDGPUTargetLowering::computeKnownBitsForTargetNode(), llvm::AArch64TargetLowering::computeKnownBitsForTargetNode(), llvm::ARMTargetLowering::computeKnownBitsForTargetNode(), llvm::SystemZTargetLowering::computeKnownBitsForTargetNode(), llvm::X86TargetLowering::computeKnownBitsForTargetNode(), computeKnownBitsFromAssume(), computeKnownBitsFromOperator(), llvm::computeKnownBitsFromRangeMetadata(), computeKnownBitsFromShiftOperator(), computeKnownBitsMul(), computeSignedMinMaxValuesFromKnownBits(), computeUnsignedMinMaxValuesFromKnownBits(), countMaxPopulation(), llvm::XCoreTargetLowering::EmitInstrWithCustomInserter(), llvm::FunctionLoweringInfo::GetLiveOutRegInfo(), isConstant(), isTruncateOf(), llvm::AMDGPUTargetLowering::performTruncateCombine(), ShrinkDemandedConstant(), llvm::TargetLowering::SimplifyDemandedBits(), SimplifyShift(), tryBitfieldInsertOpFromOr(), and llvm::InstCombiner::visitSwitchInst().
Returns the value when all bits have a known value.
This just returns One with a protective assertion.
Definition at line 57 of file KnownBits.h.
References assert(), isConstant(), and One.
Referenced by llvm::ConstantFoldLoadFromConstPtr(), llvm::AMDGPUTargetLowering::performTruncateCombine(), llvm::InstCombiner::run(), llvm::SimplifyInstruction(), and llvm::InstCombiner::visitReturnInst().
|
inline |
Returns true if there is conflicting information.
Definition at line 47 of file KnownBits.h.
References llvm::APInt::intersects().
Referenced by llvm::SelectionDAG::computeKnownBits(), computeKnownBitsFromShiftOperator(), computeKnownBitsMul(), isAllOnes(), isConstant(), isZero(), ShrinkDemandedConstant(), llvm::TargetLowering::SimplifyDemandedBits(), and llvm::X86TargetLowering::SimplifyDemandedBitsForTargetNode().
|
inline |
Returns true if value is all one bits.
Definition at line 78 of file KnownBits.h.
References assert(), hasConflict(), and llvm::APInt::isAllOnesValue().
Referenced by computeKnownBitsFromAssume(), and llvm::InstCombiner::visitCallInst().
|
inline |
Returns true if we know the value of all bits.
Definition at line 50 of file KnownBits.h.
References assert(), llvm::APInt::countPopulation(), getBitWidth(), and hasConflict().
Referenced by llvm::ConstantFoldLoadFromConstPtr(), getConstant(), llvm::AMDGPUTargetLowering::performTruncateCombine(), llvm::InstCombiner::run(), llvm::SimplifyInstruction(), and llvm::InstCombiner::visitReturnInst().
|
inline |
Returns true if this value is known to be negative.
Definition at line 96 of file KnownBits.h.
References llvm::APInt::isSignBitSet().
Referenced by aliasSameBasePointerGEPs(), checkRippleForSignedAdd(), computeForAddSub(), llvm::AMDGPUTargetLowering::computeKnownBitsForTargetNode(), computeKnownBitsFromAssume(), computeKnownBitsFromOperator(), computeKnownBitsMul(), llvm::SelectionDAG::ComputeNumSignBits(), computeOverflowForSignedAdd(), llvm::computeOverflowForSignedSub(), llvm::computeOverflowForUnsignedAdd(), llvm::computeOverflowForUnsignedSub(), computeRecurrenceType(), countMinSignBits(), EvaluateConstantChrecAtConstant(), llvm::isKnownNegative(), isKnownNonZero(), simplifyICmpWithBinOp(), and simplifyICmpWithZero().
|
inline |
Returns true if this value is known to be non-negative.
Definition at line 99 of file KnownBits.h.
References llvm::APInt::isSignBitSet().
Referenced by aliasSameBasePointerGEPs(), canReplaceGEPIdxWithZero(), checkRippleForSignedAdd(), computeForAddSub(), llvm::AMDGPUTargetLowering::computeKnownBitsForTargetNode(), computeKnownBitsFromAssume(), computeKnownBitsFromOperator(), computeKnownBitsMul(), llvm::slpvectorizer::BoUpSLP::computeMinimumValueSizes(), llvm::SelectionDAG::ComputeNumSignBits(), ComputeNumSignBitsImpl(), computeOverflowForSignedAdd(), llvm::computeOverflowForSignedMul(), llvm::computeOverflowForSignedSub(), llvm::computeOverflowForUnsignedAdd(), llvm::computeOverflowForUnsignedSub(), computeRecurrenceType(), countMinSignBits(), EvaluateConstantChrecAtConstant(), llvm::isKnownNonNegative(), isKnownNonZero(), ShrinkDemandedConstant(), simplifyICmpWithBinOp(), simplifyICmpWithZero(), llvm::InstCombiner::simplifyRangeCheck(), and llvm::InstCombiner::visitSExt().
|
inline |
Returns true if we don't know any bits.
Definition at line 63 of file KnownBits.h.
References llvm::APInt::isNullValue().
Referenced by llvm::FunctionLoweringInfo::AddLiveOutRegInfo(), llvm::SelectionDAG::computeKnownBits(), llvm::ARMTargetLowering::computeKnownBitsForTargetNode(), and llvm::X86TargetLowering::computeKnownBitsForTargetNode().
|
inline |
Returns true if value is all zero.
Definition at line 72 of file KnownBits.h.
References assert(), hasConflict(), and llvm::APInt::isAllOnesValue().
Referenced by computeKnownBitsFromAssume(), isZero(), and llvm::InstCombiner::replacedSelectWithOperand().
|
inline |
Make this value negative.
Definition at line 102 of file KnownBits.h.
References llvm::APInt::setSignBit().
Referenced by computeForAddSub(), computeKnownBitsFromAssume(), computeKnownBitsFromOperator(), and computeKnownBitsMul().
|
inline |
Make this value non-negative.
Definition at line 107 of file KnownBits.h.
References llvm::APInt::setSignBit().
Referenced by computeForAddSub(), computeKnownBitsFromAssume(), computeKnownBitsFromOperator(), computeKnownBitsMul(), and ShrinkDemandedConstant().
|
inline |
Resets the known state of all bits.
Definition at line 66 of file KnownBits.h.
References llvm::APInt::clearAllBits().
Referenced by computeKnownBits(), llvm::SelectionDAG::computeKnownBits(), llvm::SparcTargetLowering::computeKnownBitsForTargetNode(), llvm::AMDGPUTargetLowering::computeKnownBitsForTargetNode(), llvm::ARMTargetLowering::computeKnownBitsForTargetNode(), llvm::SystemZTargetLowering::computeKnownBitsForTargetNode(), llvm::PPCTargetLowering::computeKnownBitsForTargetNode(), llvm::X86TargetLowering::computeKnownBitsForTargetNode(), llvm::TargetLowering::computeKnownBitsForTargetNode(), computeKnownBitsFromAssume(), computeKnownBitsFromOperator(), computeKnownBitsFromShiftOperator(), computeKnownBitsMul(), llvm::XCoreTargetLowering::EmitInstrWithCustomInserter(), and ShrinkDemandedConstant().
|
inline |
Make all bits known to be one and discard any previous information.
Definition at line 90 of file KnownBits.h.
References llvm::APInt::clearAllBits(), and llvm::APInt::setAllBits().
Referenced by computeKnownBitsFromAssume().
|
inline |
Make all bits known to be zero and discard any previous information.
Definition at line 84 of file KnownBits.h.
References llvm::APInt::clearAllBits(), and llvm::APInt::setAllBits().
Referenced by computeKnownBits(), llvm::X86TargetLowering::computeKnownBitsForTargetNode(), computeKnownBitsFromAssume(), and computeKnownBitsFromShiftOperator().
Sign extends the underlying known Zero and One bits.
This is equivalent to sign extending the value we're tracking.
Definition at line 125 of file KnownBits.h.
References KnownBits(), and llvm::APInt::sext().
Referenced by llvm::SelectionDAG::computeKnownBits(), llvm::ARMTargetLowering::computeKnownBitsForTargetNode(), llvm::SystemZTargetLowering::computeKnownBitsForTargetNode(), computeKnownBitsFromOperator(), and ShrinkDemandedConstant().
Truncate the underlying known Zero and One bits.
This is equivalent to truncating the value we're tracking.
Definition at line 113 of file KnownBits.h.
References KnownBits(), and llvm::APInt::trunc().
Referenced by llvm::SelectionDAG::computeKnownBits(), llvm::AMDGPUTargetLowering::computeKnownBitsForTargetNode(), llvm::X86TargetLowering::computeKnownBitsForTargetNode(), computeKnownBitsFromOperator(), and llvm::TargetLowering::SimplifyDemandedBits().
Zero extends the underlying known Zero and One bits.
This is equivalent to zero extending the value we're tracking.
Definition at line 119 of file KnownBits.h.
References KnownBits(), and llvm::APInt::zext().
Referenced by llvm::SelectionDAG::computeKnownBits(), llvm::ARMTargetLowering::computeKnownBitsForTargetNode(), and llvm::SystemZTargetLowering::computeKnownBitsForTargetNode().
Zero extends or truncates the underlying known Zero and One bits.
This is equivalent to zero extending or truncating the value we're tracking.
Definition at line 131 of file KnownBits.h.
References KnownBits(), and llvm::APInt::zextOrTrunc().
Referenced by llvm::SystemZTargetLowering::computeKnownBitsForTargetNode(), llvm::X86TargetLowering::computeKnownBitsForTargetNode(), computeKnownBitsFromOperator(), llvm::FunctionLoweringInfo::GetLiveOutRegInfo(), and ShrinkDemandedConstant().
APInt llvm::KnownBits::One |
Definition at line 25 of file KnownBits.h.
Referenced by llvm::FunctionLoweringInfo::AddLiveOutRegInfo(), aliasSameBasePointerGEPs(), calculateByteProvider(), canonicalizeSaturatedSubtract(), llvm::SelectionDAGISel::CheckOrMask(), checkRippleForSignedAdd(), computeForAddSub(), computeKnownBits(), llvm::SelectionDAG::computeKnownBits(), computeKnownBitsBinOp(), llvm::SparcTargetLowering::computeKnownBitsForTargetNode(), llvm::LanaiTargetLowering::computeKnownBitsForTargetNode(), llvm::AMDGPUTargetLowering::computeKnownBitsForTargetNode(), llvm::AArch64TargetLowering::computeKnownBitsForTargetNode(), llvm::ARMTargetLowering::computeKnownBitsForTargetNode(), llvm::X86TargetLowering::computeKnownBitsForTargetNode(), computeKnownBitsFromAssume(), computeKnownBitsFromOperator(), llvm::computeKnownBitsFromRangeMetadata(), computeKnownBitsFromShiftOperator(), computeKnownBitsMul(), llvm::SelectionDAG::ComputeNumSignBits(), llvm::computeOverflowForUnsignedMul(), llvm::FunctionLoweringInfo::ComputePHILiveOutRegInfo(), computeSignedMinMaxValuesFromKnownBits(), computeUnsignedMinMaxValuesFromKnownBits(), llvm::ConstantFoldLoadFromConstPtr(), eliminateDeadSwitchCases(), foldCttzCtlz(), generateEquivalentSub(), getConstant(), GetRangeFromMetadata(), isAlwaysLive(), isKnownNonEqual(), isKnownNonZero(), isKnownToBeAPowerOfTwo(), isOpcWithIntImmediate(), maskMatters(), processUGT_ADDCST_ADD(), llvm::InstCombiner::replacedSelectWithOperand(), ShrinkDemandedConstant(), llvm::TargetLowering::SimplifyDemandedBits(), llvm::X86TargetLowering::SimplifyDemandedBitsForTargetNode(), SimplifyRightShift(), SimplifyShift(), and llvm::InstCombiner::visitTrunc().
APInt llvm::KnownBits::Zero |
Definition at line 24 of file KnownBits.h.
Referenced by llvm::FunctionLoweringInfo::AddLiveOutRegInfo(), adjustForRedundantAnd(), aliasSameBasePointerGEPs(), calculateByteProvider(), canonicalizeSaturatedSubtract(), canTransformToMemCmp(), checkRippleForSignedAdd(), computeForAddSub(), computeKnownBits(), llvm::SelectionDAG::computeKnownBits(), computeKnownBitsBinOp(), llvm::SITargetLowering::computeKnownBitsForFrameIndex(), llvm::TargetLowering::computeKnownBitsForFrameIndex(), llvm::SparcTargetLowering::computeKnownBitsForTargetNode(), llvm::LanaiTargetLowering::computeKnownBitsForTargetNode(), llvm::AMDGPUTargetLowering::computeKnownBitsForTargetNode(), llvm::AArch64TargetLowering::computeKnownBitsForTargetNode(), llvm::ARMTargetLowering::computeKnownBitsForTargetNode(), llvm::SystemZTargetLowering::computeKnownBitsForTargetNode(), llvm::PPCTargetLowering::computeKnownBitsForTargetNode(), llvm::X86TargetLowering::computeKnownBitsForTargetNode(), computeKnownBitsFromAssume(), computeKnownBitsFromOperator(), llvm::computeKnownBitsFromRangeMetadata(), computeKnownBitsFromShiftOperator(), computeKnownBitsMul(), llvm::SelectionDAG::ComputeNumSignBits(), ComputeNumSignBitsImpl(), llvm::computeOverflowForUnsignedMul(), llvm::SelectionDAG::computeOverflowKind(), llvm::FunctionLoweringInfo::ComputePHILiveOutRegInfo(), computeSignedMinMaxValuesFromKnownBits(), computeUnsignedMinMaxValuesFromKnownBits(), llvm::ConstantFoldLoadFromConstPtr(), eliminateDeadSwitchCases(), llvm::XCoreTargetLowering::EmitInstrWithCustomInserter(), generateEquivalentSub(), getRangeForAffineARHelper(), GetRangeFromMetadata(), llvm::SelectionDAG::haveNoCommonBitsSet(), insertDAGNode(), isAlwaysLive(), isBitfieldPositioningOp(), isKnownNonEqual(), isKnownToBeAPowerOfTwo(), isOpcWithIntImmediate(), isTruePredicate(), isTruncateOf(), LowerMUL(), MaskedValueIsZero(), maskMatters(), matchRotateSub(), mayUseP9Setb(), llvm::ARMTargetLowering::PerformCMOVCombine(), llvm::ARMTargetLowering::PerformCMOVToBFICombine(), processUGT_ADDCST_ADD(), propagateMetadata(), llvm::InstCombiner::replacedSelectWithOperand(), llvm::PPCTargetLowering::SelectAddressRegImm(), llvm::PPCTargetLowering::SelectAddressRegReg(), ShrinkDemandedConstant(), llvm::TargetLowering::SimplifyDemandedBits(), llvm::X86TargetLowering::SimplifyDemandedBitsForTargetNode(), tryBitfieldInsertOpFromOr(), tryBitfieldInsertOpFromOrAndImm(), llvm::InstCombiner::visitAdd(), llvm::InstCombiner::visitSub(), llvm::InstCombiner::visitTrunc(), and llvm::InstCombiner::visitZExt().