LLVM API Documentation

Functions
InstCombineShifts.cpp File Reference
#include "InstCombine.h"
#include "llvm/Analysis/ConstantFolding.h"
#include "llvm/Analysis/InstructionSimplify.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/PatternMatch.h"
Include dependency graph for InstCombineShifts.cpp:

Go to the source code of this file.

Functions

static bool CanEvaluateShifted (Value *V, unsigned NumBits, bool isLeftShift, InstCombiner &IC)
static ValueGetShiftedValue (Value *V, unsigned NumBits, bool isLeftShift, InstCombiner &IC)

Function Documentation

static bool CanEvaluateShifted ( Value V,
unsigned  NumBits,
bool  isLeftShift,
InstCombiner IC 
) [static]

CanEvaluateShifted - See if we can compute the specified value, but shifted logically to the left or right by some number of bits. This should return true if the expression can be computed for the same cost as the current expression tree. This is used to eliminate extraneous shifting from things like: C = shl i128 A, 64 D = shl i128 B, 96 E = or i128 C, D F = lshr i128 E, 64 where the client will ask if E can be computed shifted right by 64-bits. If this succeeds, the GetShiftedValue function will be called to produce the value.

Definition at line 68 of file InstCombineShifts.cpp.

References llvm::APIntOps::And(), CanEvaluateTruncated(), llvm::dyn_cast(), llvm::SelectInst::getFalseValue(), llvm::APInt::getHighBitsSet(), llvm::PHINode::getIncomingValue(), llvm::ConstantInt::getLimitedValue(), llvm::APInt::getLowBitsSet(), llvm::PHINode::getNumIncomingValues(), llvm::Instruction::getOpcode(), llvm::User::getOperand(), llvm::Type::getScalarSizeInBits(), llvm::SelectInst::getTrueValue(), llvm::Value::getType(), llvm::ConstantInt::getValue(), llvm::ConstantInt::getZExtValue(), llvm::Value::hasOneUse(), I, llvm::LShr, llvm::PatternMatch::m_ConstantInt(), llvm::PatternMatch::m_LShr(), llvm::PatternMatch::m_Shl(), llvm::PatternMatch::m_Value(), llvm::MaskedValueIsZero(), llvm::PatternMatch::match(), llvm::APIntOps::Or(), llvm::TargetOpcode::PHI, llvm::MCID::Select, llvm::APInt::ult(), and llvm::APIntOps::Xor().

Referenced by llvm::InstCombiner::FoldShiftByConstant().

static Value* GetShiftedValue ( Value V,
unsigned  NumBits,
bool  isLeftShift,
InstCombiner IC 
) [static]