LLVM 22.0.0git
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::dyn_cast(), llvm::SCEV::isZero(), and T.

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

◆ visitAddExpr()

◆ visitAddRecExpr()

◆ visitConstant()

◆ visitCouldNotCompute()

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

Definition at line 60 of file ScalarEvolutionDivision.h.

◆ visitMulExpr()

◆ 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: