LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Namespaces | Functions
ScalarEvolutionExpander.cpp File Reference
#include "llvm/Analysis/ScalarEvolutionExpander.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/Support/Debug.h"
Include dependency graph for ScalarEvolutionExpander.cpp:

Go to the source code of this file.

Namespaces

 llvm
 List of target independent CodeGen pass IDs.
 

Functions

static bool FactorOutConstant (const SCEV *&S, const SCEV *&Remainder, const SCEV *Factor, ScalarEvolution &SE, const DataLayout *TD)
 
static void SimplifyAddOperands (SmallVectorImpl< const SCEV * > &Ops, Type *Ty, ScalarEvolution &SE)
 
static void SplitAddRecs (SmallVectorImpl< const SCEV * > &Ops, Type *Ty, ScalarEvolution &SE)
 
static const LoopPickMostRelevantLoop (const Loop *A, const Loop *B, DominatorTree &DT)
 
static void ExposePointerBase (const SCEV *&Base, const SCEV *&Rest, ScalarEvolution &SE)
 
static bool width_descending (Value *lhs, Value *rhs)
 Sort values by integer width for replaceCongruentIVs. More...
 
bool llvm::isSafeToExpand (const SCEV *S, ScalarEvolution &SE)
 

Function Documentation

static void ExposePointerBase ( const SCEV *&  Base,
const SCEV *&  Rest,
ScalarEvolution SE 
)
static

Move parts of Base into Rest to leave Base with the minimal expression that provides a pointer operand suitable for a GEP expansion.

Definition at line 834 of file ScalarEvolutionExpander.cpp.

References llvm::ARM_PROC::A, llvm::SmallVectorTemplateCommon< T, typename >::back(), llvm::SCEV::FlagNW, llvm::ScalarEvolution::getAddExpr(), llvm::ScalarEvolution::getAddRecExpr(), and llvm::ScalarEvolution::getConstant().

static bool FactorOutConstant ( const SCEV *&  S,
const SCEV *&  Remainder,
const SCEV Factor,
ScalarEvolution SE,
const DataLayout TD 
)
static

FactorOutConstant - Test if S is divisible by Factor, using signed division. If so, update S with Factor divided out and return true. S need not be evenly divisible if a reasonable remainder can be computed. TODO: When ScalarEvolution gets a SCEVSDivExpr, this can be made unnecessary; in its place, just signed-divide Ops[i] by the scale and check to see if the divide was folded.

Definition at line 208 of file ScalarEvolutionExpander.cpp.

References llvm::ARM_PROC::A, llvm::CallingConv::C, R600_InstFlag::FC, llvm::SCEV::FlagNW, llvm::ConstantInt::get(), llvm::ScalarEvolution::getAddExpr(), llvm::ScalarEvolution::getAddRecExpr(), llvm::ScalarEvolution::getConstant(), llvm::ScalarEvolution::getContext(), llvm::ScalarEvolution::getMulExpr(), llvm::SCEV::getType(), llvm::SCEVConstant::getValue(), llvm::ConstantInt::getValue(), llvm::SCEV::isOne(), llvm::SCEV::isZero(), and llvm::ConstantInt::isZero().

static const Loop* PickMostRelevantLoop ( const Loop A,
const Loop B,
DominatorTree DT 
)
static

PickMostRelevantLoop - Given two loops pick the one that's most relevant for SCEV expansion. If they are nested, this is the most nested. If they are neighboring, pick the later.

Definition at line 616 of file ScalarEvolutionExpander.cpp.

References llvm::ARM_PROC::A, llvm::LoopBase< N, M >::contains(), llvm::DominatorTree::dominates(), and llvm::LoopBase< N, M >::getHeader().

static void SimplifyAddOperands ( SmallVectorImpl< const SCEV * > &  Ops,
Type Ty,
ScalarEvolution SE 
)
static
static void SplitAddRecs ( SmallVectorImpl< const SCEV * > &  Ops,
Type Ty,
ScalarEvolution SE 
)
static

SplitAddRecs - Flatten a list of add operands, moving addrec start values out to the top level. For example, convert {a + b,+,c} to a, b, {0,+,d}. This helps expose more opportunities for folding parts of the expressions into GEP indices.

Definition at line 335 of file ScalarEvolutionExpander.cpp.

References llvm::ARM_PROC::A, llvm::SmallVectorImpl< T >::append(), llvm::SmallVectorTemplateCommon< T >::begin(), llvm::SmallVectorBase::empty(), llvm::SmallVectorTemplateCommon< T >::end(), llvm::SCEV::FlagNW, llvm::ScalarEvolution::getAddRecExpr(), llvm::ScalarEvolution::getConstant(), llvm::SCEV::isZero(), llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), SimplifyAddOperands(), and llvm::SmallVectorTemplateCommon< T >::size().

static bool width_descending ( Value lhs,
Value rhs 
)
static

Sort values by integer width for replaceCongruentIVs.

Definition at line 1566 of file ScalarEvolutionExpander.cpp.

References llvm::Type::getPrimitiveSizeInBits(), llvm::Value::getType(), and llvm::Type::isIntegerTy().

Referenced by llvm::SCEVExpander::replaceCongruentIVs().