[Unroll] Refactor the accumulation of optimized instruction costs into

a single location.

This reduces code duplication a bit and will also pave the way for
a better separation between the visitation algorithm and the unroll
analysis.

No functionality changed.

llvm-svn: 237990
This commit is contained in:
Chandler Carruth 2015-05-22 02:47:29 +00:00
parent 1fca2edc48
commit f174a156c3
1 changed files with 10 additions and 9 deletions

View File

@ -402,14 +402,10 @@ class UnrollAnalyzer : public InstVisitor<UnrollAnalyzer, bool> {
else
SimpleV = SimplifyBinOp(I.getOpcode(), LHS, RHS, DL);
if (SimpleV)
NumberOfOptimizedInstructions += TTI.getUserCost(&I);
if (Constant *C = dyn_cast_or_null<Constant>(SimpleV)) {
if (Constant *C = dyn_cast_or_null<Constant>(SimpleV))
SimplifiedValues[&I] = C;
return true;
}
return false;
return SimpleV;
}
/// Try to fold load I.
@ -452,7 +448,6 @@ class UnrollAnalyzer : public InstVisitor<UnrollAnalyzer, bool> {
assert(CV && "Constant expected.");
SimplifiedValues[&I] = CV;
NumberOfOptimizedInstructions += TTI.getUserCost(&I);
return true;
}
@ -571,7 +566,13 @@ public:
// opportunities.
for (Instruction &I : *BB) {
UnrolledLoopSize += TTI.getUserCost(&I);
Base::visit(I);
// Visit the instruction to analyze its loop cost after unrolling,
// and if the visitor returns true, then we can optimize this
// instruction away.
if (Base::visit(I))
NumberOfOptimizedInstructions += TTI.getUserCost(&I);
// If unrolled body turns out to be too big, bail out.
if (UnrolledLoopSize - NumberOfOptimizedInstructions >
MaxUnrolledLoopSize)