Index: runtime/vm/redundancy_elimination.cc |
diff --git a/runtime/vm/redundancy_elimination.cc b/runtime/vm/redundancy_elimination.cc |
index fa3493e86bce1292fbbeaea907a6eacac809a0b2..1b83ace2a2986971eb099243e9d7288ffb0696ef 100644 |
--- a/runtime/vm/redundancy_elimination.cc |
+++ b/runtime/vm/redundancy_elimination.cc |
@@ -31,13 +31,11 @@ class CSEInstructionMap : public ValueObject { |
Instruction* Lookup(Instruction* other) const { |
ASSERT(other->AllowsCSE()); |
- ASSERT(other->Dependencies().IsNone()); |
return map_.LookupValue(other); |
} |
void Insert(Instruction* instr) { |
ASSERT(instr->AllowsCSE()); |
- ASSERT(instr->Dependencies().IsNone()); |
return map_.Insert(instr); |
} |
@@ -1365,8 +1363,6 @@ void LICM::Optimize() { |
ZoneGrowableArray<BitVector*>* loop_invariant_loads = |
flow_graph()->loop_invariant_loads(); |
- BlockEffects* block_effects = flow_graph()->block_effects(); |
- |
for (intptr_t i = 0; i < loop_headers.length(); ++i) { |
BlockEntryInstr* header = loop_headers[i]; |
// Skip loop that don't have a pre-header block. |
@@ -1378,8 +1374,7 @@ void LICM::Optimize() { |
BlockEntryInstr* block = flow_graph()->preorder()[loop_it.Current()]; |
for (ForwardInstructionIterator it(block); !it.Done(); it.Advance()) { |
Instruction* current = it.Current(); |
- if ((current->AllowsCSE() && |
- block_effects->CanBeMovedTo(current, pre_header)) || |
+ if (current->AllowsCSE() || |
IsLoopInvariantLoad(loop_invariant_loads, i, current)) { |
bool inputs_loop_invariant = true; |
for (int i = 0; i < current->InputCount(); ++i) { |
@@ -2091,8 +2086,7 @@ class LoadOptimizer : public ValueObject { |
bool CanBeCongruent(Definition* a, Definition* b) { |
return (a->tag() == b->tag()) && |
((a->IsPhi() && (a->GetBlock() == b->GetBlock())) || |
- (a->AllowsCSE() && a->Dependencies().IsNone() && |
- a->AttributesEqual(b))); |
+ (a->AllowsCSE() && a->AttributesEqual(b))); |
} |
// Given two definitions check if they are congruent under assumption that |
@@ -2334,21 +2328,15 @@ bool DominatorBasedCSE::OptimizeRecursive(FlowGraph* graph, |
Instruction* current = it.Current(); |
if (current->AllowsCSE()) { |
Instruction* replacement = map->Lookup(current); |
- ASSERT((replacement == NULL) || replacement->AllowsCSE()); |
- if ((replacement != NULL) && |
- graph->block_effects()->IsAvailableAt(replacement, block)) { |
+ |
+ if (replacement != NULL) { |
// Replace current with lookup result. |
+ ASSERT(replacement->AllowsCSE()); |
graph->ReplaceCurrentInstruction(&it, current, replacement); |
changed = true; |
continue; |
} |
- // For simplicity we assume that instruction either does not depend on |
- // anything or does not affect anything. If this is not the case then |
- // we should first remove affected instructions from the map and |
- // then add instruction to the map so that it does not kill itself. |
- ASSERT(!current->HasUnknownSideEffects() || |
- current->Dependencies().IsNone()); |
map->Insert(current); |
} |
} |