summaryrefslogtreecommitdiff
path: root/lib/Transforms/Scalar/Reassociate.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-12-31 17:51:05 +0000
committerChris Lattner <sabre@nondot.org>2009-12-31 17:51:05 +0000
commit9fdaefad580194353f34b6d72669591f8f9d811a (patch)
tree99afcb92a2888e2458e1c3fc22532023a016ad18 /lib/Transforms/Scalar/Reassociate.cpp
parent4760467ff2c5e9d03d469cee2f14c6e68b096d65 (diff)
downloadllvm-9fdaefad580194353f34b6d72669591f8f9d811a.tar.gz
llvm-9fdaefad580194353f34b6d72669591f8f9d811a.tar.bz2
llvm-9fdaefad580194353f34b6d72669591f8f9d811a.tar.xz
factor statistic updating better.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92362 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar/Reassociate.cpp')
-rw-r--r--lib/Transforms/Scalar/Reassociate.cpp28
1 files changed, 9 insertions, 19 deletions
diff --git a/lib/Transforms/Scalar/Reassociate.cpp b/lib/Transforms/Scalar/Reassociate.cpp
index 195bd69a4c..6c6de1b968 100644
--- a/lib/Transforms/Scalar/Reassociate.cpp
+++ b/lib/Transforms/Scalar/Reassociate.cpp
@@ -563,15 +563,11 @@ static Value *OptimizeAndOrXor(unsigned Opcode, std::vector<ValueEntry> &Ops) {
Value *X = BinaryOperator::getNotArgument(Ops[i].Op);
unsigned FoundX = FindInOperandList(Ops, i, X);
if (FoundX != i) {
- if (Opcode == Instruction::And) { // ...&X&~X = 0
- ++NumAnnihil;
+ if (Opcode == Instruction::And) // ...&X&~X = 0
return Constant::getNullValue(X->getType());
- }
- if (Opcode == Instruction::Or) { // ...|X|~X = -1
- ++NumAnnihil;
+ if (Opcode == Instruction::Or) // ...|X|~X = -1
return Constant::getAllOnesValue(X->getType());
- }
}
}
@@ -586,10 +582,9 @@ static Value *OptimizeAndOrXor(unsigned Opcode, std::vector<ValueEntry> &Ops) {
++NumAnnihil;
} else {
assert(Opcode == Instruction::Xor);
- if (e == 2) {
- ++NumAnnihil;
+ if (e == 2)
return Constant::getNullValue(Ops[0].Op->getType());
- }
+
// ... X^X -> ...
Ops.erase(Ops.begin()+i, Ops.begin()+i+2);
i -= 1; e -= 2;
@@ -618,10 +613,8 @@ Value *Reassociate::OptimizeAdd(std::vector<ValueEntry> &Ops) {
continue;
// Remove X and -X from the operand list.
- if (Ops.size() == 2) {
- ++NumAnnihil;
+ if (Ops.size() == 2)
return Constant::getNullValue(X->getType());
- }
Ops.erase(Ops.begin()+i);
if (i < FoundX)
@@ -657,11 +650,9 @@ Value *Reassociate::OptimizeExpression(BinaryOperator *I,
switch (Opcode) {
default: break;
case Instruction::And:
- if (CstVal->isZero()) { // ... & 0 -> 0
- ++NumAnnihil;
+ if (CstVal->isZero()) // ... & 0 -> 0
return CstVal;
- }
- if (CstVal->isAllOnesValue()) // ... & -1 -> ...
+ if (CstVal->isAllOnesValue()) // ... & -1 -> ...
Ops.pop_back();
break;
case Instruction::Mul:
@@ -674,10 +665,8 @@ Value *Reassociate::OptimizeExpression(BinaryOperator *I,
Ops.pop_back(); // ... * 1 -> ...
break;
case Instruction::Or:
- if (CstVal->isAllOnesValue()) { // ... | -1 -> -1
- ++NumAnnihil;
+ if (CstVal->isAllOnesValue()) // ... | -1 -> -1
return CstVal;
- }
// FALLTHROUGH!
case Instruction::Add:
case Instruction::Xor:
@@ -883,6 +872,7 @@ void Reassociate::ReassociateExpression(BinaryOperator *I) {
DEBUG(errs() << "Reassoc to scalar: " << *V << "\n");
I->replaceAllUsesWith(V);
RemoveDeadBinaryOp(I);
+ ++NumAnnihil;
return;
}