mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 19:12:56 +02:00
Revert r140979 due to reports of bootstrap failure.
llvm-svn: 140980
This commit is contained in:
parent
a760a29395
commit
79fec8116f
@ -5119,7 +5119,7 @@ SolveQuadraticEquation(const SCEVAddRecExpr *AddRec, ScalarEvolution &SE) {
|
|||||||
// Compute the two solutions for the quadratic formula.
|
// Compute the two solutions for the quadratic formula.
|
||||||
// The divisions must be performed as signed divisions.
|
// The divisions must be performed as signed divisions.
|
||||||
APInt NegB(-B);
|
APInt NegB(-B);
|
||||||
APInt TwoA(A << 1);
|
APInt TwoA( A << 1 );
|
||||||
if (TwoA.isMinValue()) {
|
if (TwoA.isMinValue()) {
|
||||||
const SCEV *CNC = SE.getCouldNotCompute();
|
const SCEV *CNC = SE.getCouldNotCompute();
|
||||||
return std::make_pair(CNC, CNC);
|
return std::make_pair(CNC, CNC);
|
||||||
@ -5134,7 +5134,7 @@ SolveQuadraticEquation(const SCEVAddRecExpr *AddRec, ScalarEvolution &SE) {
|
|||||||
|
|
||||||
return std::make_pair(SE.getConstant(Solution1),
|
return std::make_pair(SE.getConstant(Solution1),
|
||||||
SE.getConstant(Solution2));
|
SE.getConstant(Solution2));
|
||||||
} // end APIntOps namespace
|
} // end APIntOps namespace
|
||||||
}
|
}
|
||||||
|
|
||||||
/// HowFarToZero - Return the number of times a backedge comparing the specified
|
/// HowFarToZero - Return the number of times a backedge comparing the specified
|
||||||
@ -5228,12 +5228,8 @@ ScalarEvolution::HowFarToZero(const SCEV *V, const Loop *L) {
|
|||||||
// Handle unitary steps, which cannot wraparound.
|
// Handle unitary steps, which cannot wraparound.
|
||||||
// 1*N = -Start; -1*N = Start (mod 2^BW), so:
|
// 1*N = -Start; -1*N = Start (mod 2^BW), so:
|
||||||
// N = Distance (as unsigned)
|
// N = Distance (as unsigned)
|
||||||
if (StepC->getValue()->equalsInt(1) || StepC->getValue()->isAllOnesValue()) {
|
if (StepC->getValue()->equalsInt(1) || StepC->getValue()->isAllOnesValue())
|
||||||
ConstantRange CR = getUnsignedRange(Start);
|
return Distance;
|
||||||
const SCEV *MaxBECount = getConstant(CountDown ? CR.getUnsignedMax()
|
|
||||||
: ~CR.getUnsignedMin());
|
|
||||||
return ExitLimit(Distance, MaxBECount);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the recurrence is known not to wraparound, unsigned divide computes the
|
// If the recurrence is known not to wraparound, unsigned divide computes the
|
||||||
// back edge count. We know that the value will either become zero (and thus
|
// back edge count. We know that the value will either become zero (and thus
|
||||||
|
@ -70,31 +70,3 @@ for.end: ; preds = %for.body, %for.cond
|
|||||||
}
|
}
|
||||||
|
|
||||||
declare i32 @printf(i8*, ...)
|
declare i32 @printf(i8*, ...)
|
||||||
|
|
||||||
define void @test(i8* %a, i32 %n) nounwind {
|
|
||||||
entry:
|
|
||||||
%cmp1 = icmp sgt i32 %n, 0
|
|
||||||
br i1 %cmp1, label %for.body.lr.ph, label %for.end
|
|
||||||
|
|
||||||
for.body.lr.ph: ; preds = %entry
|
|
||||||
%tmp = zext i32 %n to i64
|
|
||||||
br label %for.body
|
|
||||||
|
|
||||||
for.body: ; preds = %for.body, %for.body.lr.ph
|
|
||||||
%indvar = phi i64 [ %indvar.next, %for.body ], [ 0, %for.body.lr.ph ]
|
|
||||||
%arrayidx = getelementptr i8* %a, i64 %indvar
|
|
||||||
store i8 0, i8* %arrayidx, align 1
|
|
||||||
%indvar.next = add i64 %indvar, 1
|
|
||||||
%exitcond = icmp ne i64 %indvar.next, %tmp
|
|
||||||
br i1 %exitcond, label %for.body, label %for.cond.for.end_crit_edge
|
|
||||||
|
|
||||||
for.cond.for.end_crit_edge: ; preds = %for.body
|
|
||||||
br label %for.end
|
|
||||||
|
|
||||||
for.end: ; preds = %for.cond.for.end_crit_edge, %entry
|
|
||||||
ret void
|
|
||||||
}
|
|
||||||
|
|
||||||
; CHECK: Determining loop execution counts for: @test
|
|
||||||
; CHECK-NEXT: backedge-taken count is
|
|
||||||
; CHECK-NEXT: max backedge-taken count is -1
|
|
||||||
|
Loading…
Reference in New Issue
Block a user