Go to the documentation of this file.
13 #ifndef LLVM_ANALYSIS_SCALAREVOLUTIONDIVISION_H
14 #define LLVM_ANALYSIS_SCALAREVOLUTIONDIVISION_H
22 class ScalarEvolution;
24 struct SCEVCouldNotCompute;
31 const SCEV *Denominator,
const SCEV **Quotient,
32 const SCEV **Remainder);
59 const SCEV *Denominator);
63 void cannotDivide(
const SCEV *Numerator);
66 const SCEV *Denominator, *Quotient, *Remainder, *Zero, *One;
71 #endif // LLVM_ANALYSIS_SCALAREVOLUTIONDIVISION_H
void visitConstant(const SCEVConstant *Numerator)
This class represents a binary unsigned division operation.
This is an optimization pass for GlobalISel generic memory operations.
This class represents an unsigned minimum selection.
void visitMulExpr(const SCEVMulExpr *Numerator)
void visitCouldNotCompute(const SCEVCouldNotCompute *Numerator)
This class represents a signed maximum selection.
This class represents a cast from a pointer to a pointer-sized integer value.
void visitUMaxExpr(const SCEVUMaxExpr *Numerator)
The main scalar evolution driver.
void visitSequentialUMinExpr(const SCEVSequentialUMinExpr *Numerator)
This class represents a sign extension of a small integer value to a larger integer value.
void visitUMinExpr(const SCEVUMinExpr *Numerator)
void visitZeroExtendExpr(const SCEVZeroExtendExpr *Numerator)
This class represents a zero extension of a small integer value to a larger integer value.
This class defines a simple visitor class that may be used for various SCEV analysis purposes.
void visitTruncateExpr(const SCEVTruncateExpr *Numerator)
This class represents a truncation of an integer value to a smaller integer value.
This node represents multiplication of some number of SCEVs.
This class represents an unsigned maximum selection.
void visitSMinExpr(const SCEVSMinExpr *Numerator)
void visitAddExpr(const SCEVAddExpr *Numerator)
void visitUnknown(const SCEVUnknown *Numerator)
This class represents an analyzed expression in the program.
This class represents a constant integer value.
An object of this class is returned by queries that could not be answered.
This class represents a sequential/in-order unsigned minimum selection.
add sub stmia L5 ldr r0 bl L_printf $stub Instead of a and a wouldn t it be better to do three moves *Return an aggregate type is even return S
static void divide(ScalarEvolution &SE, const SCEV *Numerator, const SCEV *Denominator, const SCEV **Quotient, const SCEV **Remainder)
This class represents a signed minimum selection.
void visitSignExtendExpr(const SCEVSignExtendExpr *Numerator)
This node represents a polynomial recurrence on the trip count of the specified loop.
This means that we are dealing with an entirely unknown SCEV value, and only represent it as its LLVM...
void visitAddRecExpr(const SCEVAddRecExpr *Numerator)
This node represents an addition of some number of SCEVs.
void visitPtrToIntExpr(const SCEVPtrToIntExpr *Numerator)
void visitUDivExpr(const SCEVUDivExpr *Numerator)
void visitSMaxExpr(const SCEVSMaxExpr *Numerator)