LLVM: lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp File Reference (original) (raw)

Go to the source code of this file.

Macros
#define DEBUG_TYPE "instcombine"
Functions
static bool ShrinkDemandedConstant (Instruction *I, unsigned OpNo, const APInt &Demanded)
Check to see if the specified operand of the specified instruction is a constant integer.
static Value * simplifyShiftSelectingPackedElement (Instruction *I, const APInt &DemandedMask, InstCombinerImpl &IC, unsigned Depth)
Let N = 2 * M.
static unsigned getBitWidth (Type *Ty, const DataLayout &DL)
Returns the bitwidth of the given scalar or pointer type.
static Constant * getFPClassConstant (Type *Ty, FPClassTest Mask)
For floating-point classes that resolve to a single bit pattern, return that value.

DEBUG_TYPE

#define DEBUG_TYPE "instcombine"

getBitWidth()

getFPClassConstant()

ShrinkDemandedConstant()

simplifyShiftSelectingPackedElement()

Let N = 2 * M.

Given an N-bit integer representing a pack of two M-bit integers, we can select one of the packed integers by right-shifting by either zero or M (which is the most straightforward to check if M is a power of 2), and then isolating the lower M bits. In this case, we can represent the shift as a select on whether the shr amount is nonzero.

Definition at line 70 of file InstCombineSimplifyDemanded.cpp.

References assert(), llvm::InstCombiner::Builder, llvm::InstCombiner::computeKnownBits(), llvm::IRBuilderBase::CreateICmpEQ(), llvm::IRBuilderBase::CreateSelectWithUnknownProfile(), DEBUG_TYPE, llvm::Depth, llvm::APInt::getActiveBits(), llvm::KnownBits::getMaxValue(), llvm::Value::getName(), llvm::Constant::getNullValue(), llvm::Value::getType(), I, llvm::APInt::isIntN(), llvm::isPowerOf2_64(), llvm::Lower, llvm::PatternMatch::m_c_DisjointOr(), llvm::PatternMatch::m_ConstantInt(), llvm::MIPatternMatch::m_OneUse(), llvm::PatternMatch::m_Shl(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), Select, llvm::IRBuilderBase::SetInsertPoint(), llvm::Upper, and llvm::KnownBits::Zero.

Referenced by llvm::InstCombinerImpl::SimplifyDemandedUseBits().

SimplifyDemandedVectorEltsDepthLimit

cl::opt< unsigned > SimplifyDemandedVectorEltsDepthLimit("instcombine-simplify-vector-elts-depth", cl::desc( "Depth limit when simplifying vector instructions and their operands"), cl::Hidden, cl::init(10)) ( "instcombine-simplify-vector-elts-depth" , cl::desc( "Depth limit when simplifying vector instructions and their operands") , cl::Hidden , cl::init(10) ) static

VerifyKnownBits