diff options
| author | Duncan Sands <baldrick@free.fr> | 2012-06-29 19:03:05 +0000 |
|---|---|---|
| committer | Duncan Sands <baldrick@free.fr> | 2012-06-29 19:03:05 +0000 |
| commit | 9838286d9ee325928f8f77fa4a716a4fd5a1932a (patch) | |
| tree | f5b6c8299e0a7fb456c823e46bf890f926ae23a8 /llvm/lib/Transforms | |
| parent | 1db30fc071ba673f814ab95cbd3a6a44a1b26d8e (diff) | |
| download | bcm5719-llvm-9838286d9ee325928f8f77fa4a716a4fd5a1932a.tar.gz bcm5719-llvm-9838286d9ee325928f8f77fa4a716a4fd5a1932a.zip | |
Rework this to clarify where the removal of nodes from the queue is
really happening. No intended functionality change.
llvm-svn: 159451
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/Reassociate.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/llvm/lib/Transforms/Scalar/Reassociate.cpp b/llvm/lib/Transforms/Scalar/Reassociate.cpp index 547a51e7d4e..bcf34b52568 100644 --- a/llvm/lib/Transforms/Scalar/Reassociate.cpp +++ b/llvm/lib/Transforms/Scalar/Reassociate.cpp @@ -667,15 +667,13 @@ void Reassociate::RewriteExprTree(BinaryOperator *I, /// the new expression into. SmallVector<BinaryOperator*, 8> NodesToRewrite; unsigned Opcode = I->getOpcode(); - NodesToRewrite.push_back(I); + BinaryOperator *Op = I; // ExpressionChanged - Non-null if the rewritten expression differs from the // original in some non-trivial way, requiring the clearing of optional flags. // Flags are cleared from the operator in ExpressionChanged up to I inclusive. BinaryOperator *ExpressionChanged = 0; for (unsigned i = 0; ; ++i) { - BinaryOperator *Op = NodesToRewrite.pop_back_val(); - // The last operation (which comes earliest in the IR) is special as both // operands will come from Ops, rather than just one with the other being // a subexpression. @@ -746,7 +744,7 @@ void Reassociate::RewriteExprTree(BinaryOperator *I, // from the original expression then just rewrite the rest of the expression // into it. if (BinaryOperator *BO = isReassociableOp(Op->getOperand(0), Opcode)) { - NodesToRewrite.push_back(BO); + Op = BO; continue; } @@ -757,19 +755,22 @@ void Reassociate::RewriteExprTree(BinaryOperator *I, // hard (finding the mimimal number of multiplications needed to realize a // multiplication expression is NP-complete). Whatever the reason, smart or // stupid, create a new node if there are none left. + BinaryOperator *NewOp; if (NodesToRewrite.empty()) { Constant *Undef = UndefValue::get(I->getType()); - BinaryOperator *N = BinaryOperator::Create(Instruction::BinaryOps(Opcode), - Undef, Undef, "", I); - NodesToRewrite.push_back(N); + NewOp = BinaryOperator::Create(Instruction::BinaryOps(Opcode), + Undef, Undef, "", I); + } else { + NewOp = NodesToRewrite.pop_back_val(); } DEBUG(dbgs() << "RA: " << *Op << '\n'); - Op->setOperand(0, NodesToRewrite.back()); + Op->setOperand(0, NewOp); DEBUG(dbgs() << "TO: " << *Op << '\n'); ExpressionChanged = Op; MadeChange = true; ++NumChanged; + Op = NewOp; } // If the expression changed non-trivially then clear out all subclass data |

