forked from OSchip/llvm-project
[IRCE][NFC] Store Length as SCEV in RangeCheck instead of Value
llvm-svn: 316889
This commit is contained in:
parent
d18443edad
commit
390fc57771
|
@ -151,7 +151,7 @@ class InductiveRangeCheck {
|
|||
|
||||
const SCEV *Offset = nullptr;
|
||||
const SCEV *Scale = nullptr;
|
||||
Value *Length = nullptr;
|
||||
const SCEV *Length = nullptr;
|
||||
Use *CheckUse = nullptr;
|
||||
RangeCheckKind Kind = RANGE_CHECK_UNKNOWN;
|
||||
bool IsSigned = true;
|
||||
|
@ -168,7 +168,7 @@ class InductiveRangeCheck {
|
|||
public:
|
||||
const SCEV *getOffset() const { return Offset; }
|
||||
const SCEV *getScale() const { return Scale; }
|
||||
Value *getLength() const { return Length; }
|
||||
const SCEV *getLength() const { return Length; }
|
||||
bool isSigned() const { return IsSigned; }
|
||||
|
||||
void print(raw_ostream &OS) const {
|
||||
|
@ -419,7 +419,7 @@ void InductiveRangeCheck::extractRangeChecksFromCond(
|
|||
return;
|
||||
|
||||
InductiveRangeCheck IRC;
|
||||
IRC.Length = Length;
|
||||
IRC.Length = Length ? SE.getSCEV(Length) : nullptr;
|
||||
IRC.Offset = IndexAddRec->getStart();
|
||||
IRC.Scale = IndexAddRec->getStepRecurrence(SE);
|
||||
IRC.CheckUse = &ConditionUse;
|
||||
|
@ -1660,9 +1660,9 @@ InductiveRangeCheck::computeSafeIterationSpace(
|
|||
|
||||
// We strengthen "0 <= I" to "0 <= I < INT_SMAX" and "I < L" to "0 <= I < L".
|
||||
// We can potentially do much better here.
|
||||
if (Value *V = getLength()) {
|
||||
UpperLimit = SE.getSCEV(V);
|
||||
} else {
|
||||
if (const SCEV *L = getLength())
|
||||
UpperLimit = L;
|
||||
else {
|
||||
assert(Kind == InductiveRangeCheck::RANGE_CHECK_LOWER && "invariant!");
|
||||
unsigned BitWidth = cast<IntegerType>(IndVar->getType())->getBitWidth();
|
||||
UpperLimit = SE.getConstant(APInt::getSignedMaxValue(BitWidth));
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
; CHECK: irce: loop has 1 inductive range checks:
|
||||
; CHECK-NEXT:InductiveRangeCheck:
|
||||
; CHECK-NEXT: Kind: RANGE_CHECK_UPPER
|
||||
; CHECK-NEXT: Offset: %offset Scale: 1 Length: %len = load i32, i32* %a_len_ptr, !range !0
|
||||
; CHECK-NEXT: Offset: %offset Scale: 1 Length: %len
|
||||
; CHECK-NEXT: CheckUse: br i1 %abc, label %in.bounds, label %out.of.bounds, !prof !1 Operand: 0
|
||||
; CHECK-NEXT: irce: in function incrementing: constrained Loop at depth 1 containing: %loop<header><exiting>,%in.bounds<latch><exiting>
|
||||
|
||||
|
|
Loading…
Reference in New Issue