Lines Matching refs:InductiveRangeCheck

100 class InductiveRangeCheck {
129 static InductiveRangeCheck::RangeCheckKind
133 InductiveRangeCheck() :
142 OS << "InductiveRangeCheck:\n";
183 typedef SpecificBumpPtrAllocator<InductiveRangeCheck> AllocatorTy;
198 static InductiveRangeCheck *create(AllocatorTy &Alloc, BranchInst *BI,
204 InductiveRangeCheck::AllocatorTy Allocator;
237 const char *InductiveRangeCheck::rangeCheckKindToStr(
238 InductiveRangeCheck::RangeCheckKind RCK) {
240 case InductiveRangeCheck::RANGE_CHECK_UNKNOWN:
243 case InductiveRangeCheck::RANGE_CHECK_UPPER:
246 case InductiveRangeCheck::RANGE_CHECK_LOWER:
249 case InductiveRangeCheck::RANGE_CHECK_BOTH:
265 InductiveRangeCheck::RangeCheckKind
266 InductiveRangeCheck::parseRangeCheckICmp(Loop *L, ICmpInst *ICI,
332 InductiveRangeCheck::RangeCheckKind
333 InductiveRangeCheck::parseRangeCheck(Loop *L, ScalarEvolution &SE,
347 return InductiveRangeCheck::RANGE_CHECK_UNKNOWN;
352 if (RCKindA == InductiveRangeCheck::RANGE_CHECK_UNKNOWN ||
353 RCKindB == InductiveRangeCheck::RANGE_CHECK_UNKNOWN)
354 return InductiveRangeCheck::RANGE_CHECK_UNKNOWN;
357 return InductiveRangeCheck::RANGE_CHECK_UNKNOWN;
360 return InductiveRangeCheck::RANGE_CHECK_UNKNOWN;
364 return InductiveRangeCheck::RANGE_CHECK_UNKNOWN;
368 return (InductiveRangeCheck::RangeCheckKind)(RCKindA | RCKindB);
376 if (RCKind == InductiveRangeCheck::RANGE_CHECK_UNKNOWN)
377 return InductiveRangeCheck::RANGE_CHECK_UNKNOWN;
381 return InductiveRangeCheck::RANGE_CHECK_UNKNOWN;
386 return InductiveRangeCheck::RANGE_CHECK_UNKNOWN;
390 InductiveRangeCheck *
391 InductiveRangeCheck::create(InductiveRangeCheck::AllocatorTy &A, BranchInst *BI,
406 auto RCKind = InductiveRangeCheck::parseRangeCheck(L, SE, BI->getCondition(),
409 if (RCKind == InductiveRangeCheck::RANGE_CHECK_UNKNOWN)
413 assert((!(RCKind & InductiveRangeCheck::RANGE_CHECK_UPPER) || Length) &&
423 InductiveRangeCheck *IRC = new (A.Allocate()) InductiveRangeCheck;
610 InductiveRangeCheck::Range Range;
618 ScalarEvolution &SE, InductiveRangeCheck::Range R)
1307 Optional<InductiveRangeCheck::Range>
1308 InductiveRangeCheck::computeSafeIterationSpace(ScalarEvolution &SE,
1366 assert(Kind == InductiveRangeCheck::RANGE_CHECK_LOWER && "invariant!");
1372 return InductiveRangeCheck::Range(Begin, End);
1375 static Optional<InductiveRangeCheck::Range>
1377 const Optional<InductiveRangeCheck::Range> &R1,
1378 const InductiveRangeCheck::Range &R2, IRBuilder<> &B) {
1391 return InductiveRangeCheck::Range(NewBegin, NewEnd);
1407 InductiveRangeCheck::AllocatorTy IRCAlloc;
1408 SmallVector<InductiveRangeCheck *, 16> RangeChecks;
1415 if (InductiveRangeCheck *IRC =
1416 InductiveRangeCheck::create(IRCAlloc, TBI, L, SE, BPI))
1426 for (InductiveRangeCheck *IRC : RangeChecks)
1450 Optional<InductiveRangeCheck::Range> SafeIterRange;
1453 SmallVector<InductiveRangeCheck *, 4> RangeChecksToEliminate;
1456 for (InductiveRangeCheck *IRC : RangeChecks) {
1490 for (InductiveRangeCheck *IRC : RangeChecksToEliminate) {