LLVM 22.0.0git
Public Member Functions | Static Public Member Functions | List of all members
llvm::SCEVDivision Struct Reference

#include "llvm/Analysis/ScalarEvolutionDivision.h"

Inheritance diagram for llvm::SCEVDivision:
[legend]

Public Member Functions

void visitPtrToIntExpr (const SCEVPtrToIntExpr *Numerator)
 
void visitTruncateExpr (const SCEVTruncateExpr *Numerator)
 
void visitZeroExtendExpr (const SCEVZeroExtendExpr *Numerator)
 
void visitSignExtendExpr (const SCEVSignExtendExpr *Numerator)
 
void visitUDivExpr (const SCEVUDivExpr *Numerator)
 
void visitSMaxExpr (const SCEVSMaxExpr *Numerator)
 
void visitUMaxExpr (const SCEVUMaxExpr *Numerator)
 
void visitSMinExpr (const SCEVSMinExpr *Numerator)
 
void visitUMinExpr (const SCEVUMinExpr *Numerator)
 
void visitSequentialUMinExpr (const SCEVSequentialUMinExpr *Numerator)
 
void visitUnknown (const SCEVUnknown *Numerator)
 
void visitCouldNotCompute (const SCEVCouldNotCompute *Numerator)
 
void visitConstant (const SCEVConstant *Numerator)
 
void visitVScale (const SCEVVScale *Numerator)
 
void visitAddRecExpr (const SCEVAddRecExpr *Numerator)
 
void visitAddExpr (const SCEVAddExpr *Numerator)
 
void visitMulExpr (const SCEVMulExpr *Numerator)
 
- Public Member Functions inherited from llvm::SCEVVisitor< SCEVDivision, void >
void visit (const SCEV *S)
 
void visitCouldNotCompute (const SCEVCouldNotCompute *S)
 

Static Public Member Functions

static void divide (ScalarEvolution &SE, const SCEV *Numerator, const SCEV *Denominator, const SCEV **Quotient, const SCEV **Remainder)
 Computes the Quotient and Remainder of the division of Numerator by Denominator.
 

Detailed Description

Definition at line 26 of file ScalarEvolutionDivision.h.

Member Function Documentation

◆ divide()

void SCEVDivision::divide ( ScalarEvolution SE,
const SCEV Numerator,
const SCEV Denominator,
const SCEV **  Quotient,
const SCEV **  Remainder 
)
static

Computes the Quotient and Remainder of the division of Numerator by Denominator.

We are not actually performing the division here. Instead, we are trying to find SCEV expressions Quotient and Remainder that satisfy:

Numerator = Denominator * Quotient + Remainder

There may be multiple valid answers for Quotient and Remainder. This function finds one of them. Especially, there is always a trivial solution: (Quotient, Remainder) = (0, Numerator).

Note the following:

  • The condition Remainder < Denominator is NOT necessarily required.
  • Division of constants is performed as signed.
  • The multiplication of Quotient and Denominator may wrap.
  • The addition of Quotient*Denominator and Remainder may wrap.

Definition at line 59 of file ScalarEvolutionDivision.cpp.

References assert(), D, divide(), llvm::SCEV::isOne(), and llvm::SCEV::isZero().

Referenced by llvm::computeAccessFunctions(), divide(), llvm::findArrayDimensions(), findArrayDimensionsRec(), visitAddExpr(), visitAddRecExpr(), and visitMulExpr().

◆ visitAddExpr()

void SCEVDivision::visitAddExpr ( const SCEVAddExpr Numerator)

◆ visitAddRecExpr()

void SCEVDivision::visitAddRecExpr ( const SCEVAddRecExpr Numerator)

◆ visitConstant()

void SCEVDivision::visitConstant ( const SCEVConstant Numerator)

◆ visitCouldNotCompute()

void llvm::SCEVDivision::visitCouldNotCompute ( const SCEVCouldNotCompute Numerator)
inline

Definition at line 60 of file ScalarEvolutionDivision.h.

◆ visitMulExpr()

void SCEVDivision::visitMulExpr ( const SCEVMulExpr Numerator)

◆ visitPtrToIntExpr()

void llvm::SCEVDivision::visitPtrToIntExpr ( const SCEVPtrToIntExpr Numerator)
inline

Definition at line 49 of file ScalarEvolutionDivision.h.

◆ visitSequentialUMinExpr()

void llvm::SCEVDivision::visitSequentialUMinExpr ( const SCEVSequentialUMinExpr Numerator)
inline

Definition at line 58 of file ScalarEvolutionDivision.h.

◆ visitSignExtendExpr()

void llvm::SCEVDivision::visitSignExtendExpr ( const SCEVSignExtendExpr Numerator)
inline

Definition at line 52 of file ScalarEvolutionDivision.h.

◆ visitSMaxExpr()

void llvm::SCEVDivision::visitSMaxExpr ( const SCEVSMaxExpr Numerator)
inline

Definition at line 54 of file ScalarEvolutionDivision.h.

◆ visitSMinExpr()

void llvm::SCEVDivision::visitSMinExpr ( const SCEVSMinExpr Numerator)
inline

Definition at line 56 of file ScalarEvolutionDivision.h.

◆ visitTruncateExpr()

void llvm::SCEVDivision::visitTruncateExpr ( const SCEVTruncateExpr Numerator)
inline

Definition at line 50 of file ScalarEvolutionDivision.h.

◆ visitUDivExpr()

void llvm::SCEVDivision::visitUDivExpr ( const SCEVUDivExpr Numerator)
inline

Definition at line 53 of file ScalarEvolutionDivision.h.

◆ visitUMaxExpr()

void llvm::SCEVDivision::visitUMaxExpr ( const SCEVUMaxExpr Numerator)
inline

Definition at line 55 of file ScalarEvolutionDivision.h.

◆ visitUMinExpr()

void llvm::SCEVDivision::visitUMinExpr ( const SCEVUMinExpr Numerator)
inline

Definition at line 57 of file ScalarEvolutionDivision.h.

◆ visitUnknown()

void llvm::SCEVDivision::visitUnknown ( const SCEVUnknown Numerator)
inline

Definition at line 59 of file ScalarEvolutionDivision.h.

◆ visitVScale()

void SCEVDivision::visitVScale ( const SCEVVScale Numerator)

Definition at line 133 of file ScalarEvolutionDivision.cpp.

◆ visitZeroExtendExpr()

void llvm::SCEVDivision::visitZeroExtendExpr ( const SCEVZeroExtendExpr Numerator)
inline

Definition at line 51 of file ScalarEvolutionDivision.h.


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