LLVM: lib/Analysis/Delinearization.cpp File Reference (original) (raw)

Go to the source code of this file.

Macros
#define DL_NAME "delinearize"
#define DEBUG_TYPE DL_NAME
Functions
static bool containsUndefs (const SCEV *S)
static bool findArrayDimensionsRec (ScalarEvolution &SE, SmallVectorImpl< const SCEV * > &Terms, SmallVectorImpl< const SCEV * > &Sizes)
static bool containsParameters (SmallVectorImpl< const SCEV * > &Terms)
static int numberOfTerms (const SCEV *S)
static const SCEV * removeConstantFactors (ScalarEvolution &SE, const SCEV *T)
static std::optional< APInt > tryIntoAPInt (const SCEV *S)
static bool collectConstantAbsSteps (ScalarEvolution &SE, const SCEV *Expr, SmallVectorImpl< uint64_t > &Steps, uint64_t ElementSize)
Collects the absolute values of constant steps for all induction variables.
static bool isKnownNonNegative (ScalarEvolution *SE, const SCEV *S, const Value *Ptr)
static bool isKnownLessThan (ScalarEvolution *SE, const SCEV *S, const SCEV *Size)
Compare to see if S is less than Size, using.
Variables
static cl::opt< bool > UseFixedSizeArrayHeuristic ("delinearize-use-fixed-size-array-heuristic", cl::init(false), cl::Hidden, cl::desc("When printing analysis, use the heuristic for fixed-size arrays " "if the default delinearizetion fails."))

DEBUG_TYPE

#define DEBUG_TYPE DL_NAME

DL_NAME

#define DL_NAME "delinearize"

collectConstantAbsSteps()

Collects the absolute values of constant steps for all induction variables.

Returns true if we can prove that all step recurrences are constants and Expr is divisible by ElementSize. Each step recurrence is stored in Steps after divided by ElementSize.

Definition at line 498 of file Delinearization.cpp.

References collectConstantAbsSteps(), llvm::dyn_cast(), llvm::SCEVAddRecExpr::getStart(), llvm::SCEVAddRecExpr::getStepRecurrence(), llvm::SCEVAddRecExpr::isAffine(), Mod, llvm::SmallVectorTemplateBase< T, bool >::push_back(), tryIntoAPInt(), llvm::APInt::tryZExtValue(), and llvm::APInt::udivrem().

Referenced by collectConstantAbsSteps(), and llvm::findFixedSizeArrayDimensions().

containsParameters()

containsUndefs()

findArrayDimensionsRec()

Definition at line 203 of file Delinearization.cpp.

References llvm::SCEVDivision::divide(), llvm::dyn_cast(), E(), llvm::erase_if(), findArrayDimensionsRec(), llvm::ScalarEvolution::getMulExpr(), llvm::isa(), llvm::Last, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::SmallVectorTemplateCommon< T, typename >::size().

Referenced by llvm::findArrayDimensions(), and findArrayDimensionsRec().

isKnownLessThan()

Compare to see if S is less than Size, using.

isKnownNegative(S - Size)

with some extra checking if S is an AddRec and we can prove less-than using the loop bounds.

Definition at line 695 of file Delinearization.cpp.

References llvm::dyn_cast(), llvm::SCEVAddRecExpr::evaluateAtIteration(), llvm::ScalarEvolution::getBackedgeTakenCount(), llvm::SCEVAddRecExpr::getLoop(), llvm::ScalarEvolution::getMinusSCEV(), llvm::SCEVAddRecExpr::getStart(), llvm::SCEVAddRecExpr::getStepRecurrence(), llvm::ScalarEvolution::getTruncateOrZeroExtend(), llvm::SCEV::getType(), llvm::ScalarEvolution::hasLoopInvariantBackedgeTakenCount(), llvm::SCEVNAryExpr::hasNoSignedWrap(), llvm::isa(), llvm::SCEVAddRecExpr::isAffine(), llvm::ScalarEvolution::isKnownNegative(), llvm::ScalarEvolution::isKnownNonNegative(), llvm::ScalarEvolution::isKnownNonPositive(), Size, and T.

Referenced by llvm::validateDelinearizationResult().

isKnownNonNegative()

numberOfTerms()

int numberOfTerms ( const SCEV * S) inlinestatic

removeConstantFactors()

tryIntoAPInt()

UseFixedSizeArrayHeuristic

cl::opt< bool > UseFixedSizeArrayHeuristic("delinearize-use-fixed-size-array-heuristic", cl::init(false), cl::Hidden, cl::desc("When printing analysis, use the heuristic for fixed-size arrays " "if the default delinearizetion fails.")) ( "delinearize-use-fixed-size-array-heuristic" , cl::init(false) , cl::Hidden , cl::desc("When printing analysis, use the heuristic for fixed-size arrays " "if the default delinearizetion fails.") ) static