Thanks to visit codestin.com
Credit goes to llvm.org

LLVM 22.0.0git
llvm::InductionDescriptor Class Reference

A struct for saving information about induction variables. More...

#include "llvm/Analysis/IVDescriptors.h"

Public Types

enum  InductionKind { IK_NoInduction , IK_IntInduction , IK_PtrInduction , IK_FpInduction }
 This enum represents the kinds of inductions that we support. More...

Public Member Functions

 InductionDescriptor ()=default
 Default constructor - creates an invalid induction.
ValuegetStartValue () const
InductionKind getKind () const
const SCEVgetStep () const
BinaryOperatorgetInductionBinOp () const
LLVM_ABI ConstantIntgetConstIntStepValue () const
InstructiongetExactFPMathInst ()
 Returns floating-point induction operator that does not allow reassociation (transforming the induction requires an override of normal floating-point rules).
Instruction::BinaryOps getInductionOpcode () const
 Returns binary opcode of the induction operator.
const SmallVectorImpl< Instruction * > & getCastInsts () const
 Returns a reference to the type cast instructions in the induction update chain, that are redundant when guarded with a runtime SCEV overflow check.

Static Public Member Functions

static LLVM_ABI bool isInductionPHI (PHINode *Phi, const Loop *L, ScalarEvolution *SE, InductionDescriptor &D, const SCEV *Expr=nullptr, SmallVectorImpl< Instruction * > *CastsToIgnore=nullptr)
 Returns true if Phi is an induction in the loop L.
static LLVM_ABI bool isFPInductionPHI (PHINode *Phi, const Loop *L, ScalarEvolution *SE, InductionDescriptor &D)
 Returns true if Phi is a floating point induction in the loop L.
static LLVM_ABI bool isInductionPHI (PHINode *Phi, const Loop *L, PredicatedScalarEvolution &PSE, InductionDescriptor &D, bool Assume=false)
 Returns true if Phi is a loop L induction, in the context associated with the run-time predicate of PSE.

Detailed Description

A struct for saving information about induction variables.

Definition at line 380 of file IVDescriptors.h.

Member Enumeration Documentation

◆ InductionKind

This enum represents the kinds of inductions that we support.

Enumerator
IK_NoInduction 

Not an induction variable.

IK_IntInduction 

Integer induction variable. Step = C.

IK_PtrInduction 

Pointer induction var. Step = C.

IK_FpInduction 

Floating point induction variable.

Definition at line 383 of file IVDescriptors.h.

Constructor & Destructor Documentation

◆ InductionDescriptor()

llvm::InductionDescriptor::InductionDescriptor ( )
default

Default constructor - creates an invalid induction.

Referenced by isFPInductionPHI(), isInductionPHI(), and isInductionPHI().

Member Function Documentation

◆ getCastInsts()

const SmallVectorImpl< Instruction * > & llvm::InductionDescriptor::getCastInsts ( ) const
inline

Returns a reference to the type cast instructions in the induction update chain, that are redundant when guarded with a runtime SCEV overflow check.

Definition at line 451 of file IVDescriptors.h.

Referenced by llvm::LoopVectorizationCostModel::collectValuesToIgnore().

◆ getConstIntStepValue()

ConstantInt * InductionDescriptor::getConstIntStepValue ( ) const

Definition at line 1401 of file IVDescriptors.cpp.

References llvm::cast(), llvm::dyn_cast(), and llvm::isa().

Referenced by llvm::Loop::isCanonical().

◆ getExactFPMathInst()

Instruction * llvm::InductionDescriptor::getExactFPMathInst ( )
inline

Returns floating-point induction operator that does not allow reassociation (transforming the induction requires an override of normal floating-point rules).

Definition at line 435 of file IVDescriptors.h.

References IK_FpInduction.

Referenced by llvm::LoopVectorizationLegality::canVectorizeFPMath().

◆ getInductionBinOp()

BinaryOperator * llvm::InductionDescriptor::getInductionBinOp ( ) const
inline

Definition at line 397 of file IVDescriptors.h.

Referenced by llvm::Loop::LoopBounds::getBounds().

◆ getInductionOpcode()

Instruction::BinaryOps llvm::InductionDescriptor::getInductionOpcode ( ) const
inline

Returns binary opcode of the induction operator.

Definition at line 443 of file IVDescriptors.h.

Referenced by llvm::Loop::isAuxiliaryInductionVariable(), and llvm::Loop::isCanonical().

◆ getKind()

InductionKind llvm::InductionDescriptor::getKind ( ) const
inline

Definition at line 395 of file IVDescriptors.h.

◆ getStartValue()

Value * llvm::InductionDescriptor::getStartValue ( ) const
inline

◆ getStep()

const SCEV * llvm::InductionDescriptor::getStep ( ) const
inline

◆ isFPInductionPHI()

bool InductionDescriptor::isFPInductionPHI ( PHINode * Phi,
const Loop * L,
ScalarEvolution * SE,
InductionDescriptor & D )
static

Returns true if Phi is a floating point induction in the loop L.

If Phi is an induction, the induction descriptor D will contain the data describing this induction.

Definition at line 1407 of file IVDescriptors.cpp.

References assert(), llvm::LoopBase< BlockT, LoopT >::contains(), D(), llvm::dyn_cast(), llvm::LoopBase< BlockT, LoopT >::getHeader(), llvm::BinaryOperator::getOpcode(), llvm::User::getOperand(), llvm::ScalarEvolution::getUnknown(), I, IK_FpInduction, and InductionDescriptor().

Referenced by isInductionPHI().

◆ isInductionPHI() [1/2]

bool InductionDescriptor::isInductionPHI ( PHINode * Phi,
const Loop * L,
PredicatedScalarEvolution & PSE,
InductionDescriptor & D,
bool Assume = false )
static

Returns true if Phi is a loop L induction, in the context associated with the run-time predicate of PSE.

If Assume is true, this can add further SCEV predicates to PSE in order to prove that Phi is an induction. If Phi is an induction, D will contain the data describing this induction.

Definition at line 1565 of file IVDescriptors.cpp.

References D(), llvm::dbgs(), llvm::dyn_cast(), llvm::PredicatedScalarEvolution::getAsAddRec(), getCastsForInductionPHI(), llvm::PredicatedScalarEvolution::getSCEV(), llvm::PredicatedScalarEvolution::getSE(), InductionDescriptor(), llvm::Type::isDoubleTy(), llvm::Type::isFloatingPointTy(), llvm::Type::isFloatTy(), isFPInductionPHI(), llvm::Type::isHalfTy(), isInductionPHI(), llvm::Type::isIntegerTy(), llvm::Type::isPointerTy(), and LLVM_DEBUG.

◆ isInductionPHI() [2/2]

bool InductionDescriptor::isInductionPHI ( PHINode * Phi,
const Loop * L,
ScalarEvolution * SE,
InductionDescriptor & D,
const SCEV * Expr = nullptr,
SmallVectorImpl< Instruction * > * CastsToIgnore = nullptr )
static

Returns true if Phi is an induction in the loop L.

If Phi is an induction, the induction descriptor D will contain the data describing this induction. Since Induction Phis can only be present inside loop headers, the function will assert if it is passed a Phi whose parent is not the loop header. If by some other means the caller has a better SCEV expression for Phi than the one returned by the ScalarEvolution analysis, it can be passed through Expr. If the def-use chain associated with the phi includes casts (that we know we can ignore under proper runtime checks), they are passed through CastsToIgnore.

Definition at line 1609 of file IVDescriptors.cpp.

References assert(), D(), llvm::dbgs(), llvm::dyn_cast(), llvm::LoopBase< BlockT, LoopT >::getHeader(), llvm::SCEVAddRecExpr::getLoop(), llvm::LoopBase< BlockT, LoopT >::getLoopLatch(), llvm::LoopBase< BlockT, LoopT >::getLoopPreheader(), llvm::ScalarEvolution::getSCEV(), llvm::SCEVAddRecExpr::getStepRecurrence(), IK_IntInduction, IK_PtrInduction, InductionDescriptor(), llvm::Type::isIntegerTy(), llvm::ScalarEvolution::isLoopInvariant(), llvm::Type::isPointerTy(), llvm::ScalarEvolution::isSCEVable(), and LLVM_DEBUG.

Referenced by checkIsIndPhi(), llvm::Loop::LoopBounds::getBounds(), llvm::Loop::getInductionDescriptor(), llvm::Loop::getInductionVariable(), llvm::Loop::isAuxiliaryInductionVariable(), and isInductionPHI().


The documentation for this class was generated from the following files: