Go to the source code of this file.
|
static const SCEV * | NoopOrExtend (const SCEV *S, Type *Ty, ScalarEvolution &SE, bool Signed) |
| If the type of S matches with Ty , return S .
|
|
static std::optional< LoopConstrainer::SubRanges > | calculateSubRanges (ScalarEvolution &SE, const Loop &L, InductiveRangeCheck::Range &Range, const LoopStructure &MainLoopStructure) |
|
static std::optional< InductiveRangeCheck::Range > | IntersectSignedRange (ScalarEvolution &SE, const std::optional< InductiveRangeCheck::Range > &R1, const InductiveRangeCheck::Range &R2) |
|
static std::optional< InductiveRangeCheck::Range > | IntersectUnsignedRange (ScalarEvolution &SE, const std::optional< InductiveRangeCheck::Range > &R1, const InductiveRangeCheck::Range &R2) |
|
|
static cl::opt< unsigned > | LoopSizeCutoff ("irce-loop-size-cutoff", cl::Hidden, cl::init(64)) |
|
static cl::opt< bool > | PrintChangedLoops ("irce-print-changed-loops", cl::Hidden, cl::init(false)) |
|
static cl::opt< bool > | PrintRangeChecks ("irce-print-range-checks", cl::Hidden, cl::init(false)) |
|
static cl::opt< bool > | SkipProfitabilityChecks ("irce-skip-profitability-checks", cl::Hidden, cl::init(false)) |
|
static cl::opt< unsigned > | MinRuntimeIterations ("irce-min-runtime-iterations", cl::Hidden, cl::init(10)) |
|
static cl::opt< bool > | AllowUnsignedLatchCondition ("irce-allow-unsigned-latch", cl::Hidden, cl::init(true)) |
|
static cl::opt< bool > | AllowNarrowLatchCondition ("irce-allow-narrow-latch", cl::Hidden, cl::init(true), cl::desc("If set to true, IRCE may eliminate wide range checks in loops " "with narrow latch condition.")) |
|
static cl::opt< unsigned > | MaxTypeSizeForOverflowCheck ("irce-max-type-size-for-overflow-check", cl::Hidden, cl::init(32), cl::desc("Maximum size of range check type for which can be produced runtime " "overflow check of its limit's computation")) |
|
static cl::opt< bool > | PrintScaledBoundaryRangeChecks ("irce-print-scaled-boundary-range-checks", cl::Hidden, cl::init(false)) |
|
◆ DEBUG_TYPE
#define DEBUG_TYPE "irce" |
◆ calculateSubRanges()
Definition at line 566 of file InductiveRangeCheckElimination.cpp.
References AllowNarrowLatchCondition, End, llvm::LoopStructure::ExitCountTy, llvm::ScalarEvolution::getAddExpr(), llvm::IntegerType::getBitWidth(), llvm::ScalarEvolution::getMinusSCEV(), llvm::ScalarEvolution::getOne(), llvm::ScalarEvolution::getSCEV(), llvm::ScalarEvolution::getSMaxExpr(), llvm::ScalarEvolution::getSMinExpr(), llvm::ScalarEvolution::getUMaxExpr(), llvm::ScalarEvolution::getUMinExpr(), llvm::LoopStructure::IndVarIncreasing, llvm::LoopStructure::IndVarStart, llvm::ScalarEvolution::isKnownPredicate(), llvm::LoopStructure::IsSignedPredicate, llvm::LoopStructure::LoopExitAt, NoopOrExtend(), and Range.
◆ IntersectSignedRange()
static std::optional< InductiveRangeCheck::Range > IntersectSignedRange |
( |
ScalarEvolution & |
SE, |
|
|
const std::optional< InductiveRangeCheck::Range > & |
R1, |
|
|
const InductiveRangeCheck::Range & |
R2 |
|
) |
| |
|
static |
◆ IntersectUnsignedRange()
static std::optional< InductiveRangeCheck::Range > IntersectUnsignedRange |
( |
ScalarEvolution & |
SE, |
|
|
const std::optional< InductiveRangeCheck::Range > & |
R1, |
|
|
const InductiveRangeCheck::Range & |
R2 |
|
) |
| |
|
static |
◆ NoopOrExtend()
◆ AllowNarrowLatchCondition
cl::opt< bool > AllowNarrowLatchCondition("irce-allow-narrow-latch", cl::Hidden, cl::init(true), cl::desc("If set to true, IRCE may eliminate wide range checks in loops " "with narrow latch condition.")) |
( |
"irce-allow-narrow-latch" |
, |
|
|
cl::Hidden |
, |
|
|
cl::init(true) |
, |
|
|
cl::desc("If set to true, IRCE may eliminate wide range checks in loops " "with narrow latch condition.") |
|
|
) |
| |
|
static |
◆ AllowUnsignedLatchCondition
◆ LoopSizeCutoff
cl::opt< unsigned > LoopSizeCutoff("irce-loop-size-cutoff", cl::Hidden, cl::init(64)) |
( |
"irce-loop-size-cutoff" |
, |
|
|
cl::Hidden |
, |
|
|
cl::init(64) |
|
|
) |
| |
|
static |
◆ MaxTypeSizeForOverflowCheck
cl::opt< unsigned > MaxTypeSizeForOverflowCheck("irce-max-type-size-for-overflow-check", cl::Hidden, cl::init(32), cl::desc( "Maximum size of range check type for which can be produced runtime " "overflow check of its limit's computation")) |
( |
"irce-max-type-size-for-overflow-check" |
, |
|
|
cl::Hidden |
, |
|
|
cl::init(32) |
, |
|
|
cl::desc( "Maximum size of range check type for which can be produced runtime " "overflow check of its limit's computation") |
|
|
) |
| |
|
static |
◆ MinRuntimeIterations
cl::opt< unsigned > MinRuntimeIterations("irce-min-runtime-iterations", cl::Hidden, cl::init(10)) |
( |
"irce-min-runtime-iterations" |
, |
|
|
cl::Hidden |
, |
|
|
cl::init(10) |
|
|
) |
| |
|
static |
◆ PrintChangedLoops
cl::opt< bool > PrintChangedLoops("irce-print-changed-loops", cl::Hidden, cl::init(false)) |
( |
"irce-print-changed-loops" |
, |
|
|
cl::Hidden |
, |
|
|
cl::init(false) |
|
|
) |
| |
|
static |
◆ PrintRangeChecks
cl::opt< bool > PrintRangeChecks("irce-print-range-checks", cl::Hidden, cl::init(false)) |
( |
"irce-print-range-checks" |
, |
|
|
cl::Hidden |
, |
|
|
cl::init(false) |
|
|
) |
| |
|
static |
◆ PrintScaledBoundaryRangeChecks
cl::opt< bool > PrintScaledBoundaryRangeChecks("irce-print-scaled-boundary-range-checks", cl::Hidden, cl::init(false)) |
( |
"irce-print-scaled-boundary-range-checks" |
, |
|
|
cl::Hidden |
, |
|
|
cl::init(false) |
|
|
) |
| |
|
static |
◆ SkipProfitabilityChecks
cl::opt< bool > SkipProfitabilityChecks("irce-skip-profitability-checks", cl::Hidden, cl::init(false)) |
( |
"irce-skip-profitability-checks" |
, |
|
|
cl::Hidden |
, |
|
|
cl::init(false) |
|
|
) |
| |
|
static |