Go to the source code of this file.
Functions
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 )
Variables
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 >
MinEliminatedChecks ("irce-min-eliminated-checks", 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 581 of file InductiveRangeCheckElimination.cpp .
References AllowNarrowLatchCondition , llvm::cast() , 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::CmpInst::ICMP_SLE , llvm::CmpInst::ICMP_SLT , llvm::CmpInst::ICMP_ULE , llvm::CmpInst::ICMP_ULT , llvm::LoopStructure::IndVarIncreasing , llvm::LoopStructure::IndVarStart , llvm::ScalarEvolution::isKnownPredicate() , llvm::LoopStructure::IsSignedPredicate , llvm::LoopStructure::LoopExitAt , NoopOrExtend() , and Range .
◆ IntersectSignedRange()◆ IntersectUnsignedRange()◆ 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
cl::opt < bool > AllowUnsignedLatchCondition("irce-allow-unsigned -latch", cl::Hidden, cl::init(true)) ( "irce-allow-unsigned -latch" , cl::Hidden , cl::init(true) )
static
◆ 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
◆ MinEliminatedChecks
cl::opt < unsigned > MinEliminatedChecks("irce-min-eliminated-checks", cl::Hidden, cl::init(10)) ( "irce-min-eliminated-checks" , 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