#include "polly/Support/SCEVAffinator.h"
#include "polly/Options.h"
#include "polly/ScopInfo.h"
#include "polly/Support/GICHelper.h"
#include "polly/Support/SCEVValidator.h"
#include "llvm/IR/DataLayout.h"
#include "isl/aff.h"
#include "isl/local_space.h"
#include "isl/set.h"
#include "isl/val.h"
usingnamespacellvm;
usingnamespacepolly;
static cl::opt<bool> IgnoreIntegerWrapping(
"polly-ignore-integer-wrapping",
cl::desc("Do not build run-time checks to proof absence of integer "
"wrapping"),
cl::Hidden, cl::cat(PollyCategory));
static int const MaxDisjunctionsInPwAff = …;
static unsigned const MaxSmallBitWidth = …;
static isl_stat addNumBasicSets(__isl_take isl_set *Domain,
__isl_take isl_aff *Aff, void *User) { … }
static bool isTooComplex(PWACtx PWAC) { … }
static SCEV::NoWrapFlags getNoWrapFlags(const SCEV *Expr) { … }
static PWACtx combine(PWACtx PWAC0, PWACtx PWAC1,
__isl_give isl_pw_aff *(Fn)(__isl_take isl_pw_aff *,
__isl_take isl_pw_aff *)) { … }
static __isl_give isl_pw_aff *getWidthExpValOnDomain(unsigned Width,
__isl_take isl_set *Dom) { … }
SCEVAffinator::SCEVAffinator(Scop *S, LoopInfo &LI)
: … { … }
Loop *SCEVAffinator::getScope() { … }
void SCEVAffinator::interpretAsUnsigned(PWACtx &PWAC, unsigned Width) { … }
void SCEVAffinator::takeNonNegativeAssumption(
PWACtx &PWAC, RecordedAssumptionsTy *RecordedAssumptions) { … }
PWACtx SCEVAffinator::getPWACtxFromPWA(isl::pw_aff PWA) { … }
PWACtx SCEVAffinator::getPwAff(const SCEV *Expr, BasicBlock *BB,
RecordedAssumptionsTy *RecordedAssumptions) { … }
PWACtx SCEVAffinator::checkForWrapping(const SCEV *Expr, PWACtx PWAC) const { … }
isl::pw_aff SCEVAffinator::addModuloSemantic(isl::pw_aff PWA,
Type *ExprType) const { … }
bool SCEVAffinator::hasNSWAddRecForLoop(Loop *L) const { … }
bool SCEVAffinator::computeModuloForExpr(const SCEV *Expr) { … }
PWACtx SCEVAffinator::visit(const SCEV *Expr) { … }
PWACtx SCEVAffinator::visitConstant(const SCEVConstant *Expr) { … }
PWACtx SCEVAffinator::visitVScale(const SCEVVScale *VScale) { … }
PWACtx SCEVAffinator::visitPtrToIntExpr(const SCEVPtrToIntExpr *Expr) { … }
PWACtx SCEVAffinator::visitTruncateExpr(const SCEVTruncateExpr *Expr) { … }
PWACtx SCEVAffinator::visitZeroExtendExpr(const SCEVZeroExtendExpr *Expr) { … }
PWACtx SCEVAffinator::visitSignExtendExpr(const SCEVSignExtendExpr *Expr) { … }
PWACtx SCEVAffinator::visitAddExpr(const SCEVAddExpr *Expr) { … }
PWACtx SCEVAffinator::visitMulExpr(const SCEVMulExpr *Expr) { … }
PWACtx SCEVAffinator::visitAddRecExpr(const SCEVAddRecExpr *Expr) { … }
PWACtx SCEVAffinator::visitSMaxExpr(const SCEVSMaxExpr *Expr) { … }
PWACtx SCEVAffinator::visitSMinExpr(const SCEVSMinExpr *Expr) { … }
PWACtx SCEVAffinator::visitUMaxExpr(const SCEVUMaxExpr *Expr) { … }
PWACtx SCEVAffinator::visitUMinExpr(const SCEVUMinExpr *Expr) { … }
PWACtx
SCEVAffinator::visitSequentialUMinExpr(const SCEVSequentialUMinExpr *Expr) { … }
PWACtx SCEVAffinator::visitUDivExpr(const SCEVUDivExpr *Expr) { … }
PWACtx SCEVAffinator::visitSDivInstruction(Instruction *SDiv) { … }
PWACtx SCEVAffinator::visitSRemInstruction(Instruction *SRem) { … }
PWACtx SCEVAffinator::visitUnknown(const SCEVUnknown *Expr) { … }
PWACtx SCEVAffinator::complexityBailout() { … }