[unroll] Extract the code to enqueue operansd for the worklist in the

unroll analysis into a lambda and call it. That's much simpler than
duplicating all the code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229053 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chandler Carruth 2015-02-13 03:49:41 +00:00
parent 76908cba94
commit 29e00cf519

View File

@ -509,6 +509,15 @@ public:
// worklist.
SmallPtrSet<Instruction *, 4> OperandSet;
// Lambda to enque operands onto the worklist.
auto EnqueueOperands = [&](Instruction &I) {
OperandSet.clear();
for (auto *Op : I.operand_values())
if (auto *OpI = dyn_cast<Instruction>(Op))
if (OperandSet.insert(OpI).second)
Worklist.push_back(OpI);
};
// Start by initializing worklist with simplified instructions.
for (auto &FoldedKeyValue : SimplifiedValues)
if (auto *FoldedInst = dyn_cast<Instruction>(FoldedKeyValue.first)) {
@ -516,11 +525,7 @@ public:
// Add each instruction operand of this dead instruction to the
// worklist.
OperandSet.clear();
for (auto *Op : FoldedInst->operand_values())
if (auto *OpI = dyn_cast<Instruction>(Op))
if (OperandSet.insert(OpI).second)
Worklist.push_back(OpI);
EnqueueOperands(*FoldedInst);
}
// If a definition of an insn is only used by simplified or dead
@ -545,11 +550,7 @@ public:
if (AllUsersFolded) {
NumberOfOptimizedInstructions += TTI.getUserCost(I);
DeadInstructions.insert(I);
OperandSet.clear();
for (auto *Op : I->operand_values())
if (auto *OpI = dyn_cast<Instruction>(Op))
if (OperandSet.insert(OpI).second)
Worklist.push_back(OpI);
EnqueueOperands(*I);
}
}
return NumberOfOptimizedInstructions;