| Index: runtime/vm/flow_graph_optimizer.cc
|
| diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
|
| index f5333546f2ed98d51cc45fded39181aab427b875..5245638206025c48cbe03efc44e68fc99a1f893c 100644
|
| --- a/runtime/vm/flow_graph_optimizer.cc
|
| +++ b/runtime/vm/flow_graph_optimizer.cc
|
| @@ -4725,42 +4725,6 @@ bool FlowGraphOptimizer::TryInlineInstanceSetter(InstanceCallInstr* instr,
|
| #if defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_IA32)
|
| // Smi widening pass is only meaningful on platforms where Smi
|
| // is smaller than 32bit. For now only support it on ARM and ia32.
|
| -
|
| -class DefinitionWorklist : public ValueObject {
|
| - public:
|
| - DefinitionWorklist(FlowGraph* flow_graph,
|
| - intptr_t initial_capacity)
|
| - : defs_(initial_capacity),
|
| - contains_vector_(new(flow_graph->isolate()) BitVector(
|
| - flow_graph->isolate(), flow_graph->current_ssa_temp_index())) {
|
| - }
|
| -
|
| - void Add(Definition* defn) {
|
| - if (!Contains(defn)) {
|
| - defs_.Add(defn);
|
| - contains_vector_->Add(defn->ssa_temp_index());
|
| - }
|
| - }
|
| -
|
| - bool Contains(Definition* defn) const {
|
| - return (defn->ssa_temp_index() >= 0) &&
|
| - contains_vector_->Contains(defn->ssa_temp_index());
|
| - }
|
| -
|
| - const GrowableArray<Definition*>& definitions() const { return defs_; }
|
| - BitVector* contains_vector() const { return contains_vector_; }
|
| -
|
| - void Clear() {
|
| - defs_.TruncateTo(0);
|
| - contains_vector_->Clear();
|
| - }
|
| -
|
| - private:
|
| - GrowableArray<Definition*> defs_;
|
| - BitVector* contains_vector_;
|
| -};
|
| -
|
| -
|
| static bool CanBeWidened(BinarySmiOpInstr* smi_op) {
|
| return BinaryInt32OpInstr::IsSupported(smi_op->op_kind(),
|
| smi_op->left(),
|
| @@ -5059,17 +5023,6 @@ void TryCatchAnalyzer::Optimize(FlowGraph* flow_graph) {
|
| }
|
|
|
|
|
| -static BlockEntryInstr* FindPreHeader(BlockEntryInstr* header) {
|
| - for (intptr_t j = 0; j < header->PredecessorCount(); ++j) {
|
| - BlockEntryInstr* candidate = header->PredecessorAt(j);
|
| - if (header->dominator() == candidate) {
|
| - return candidate;
|
| - }
|
| - }
|
| - return NULL;
|
| -}
|
| -
|
| -
|
| LICM::LICM(FlowGraph* flow_graph) : flow_graph_(flow_graph) {
|
| ASSERT(flow_graph->is_licm_allowed());
|
| }
|
| @@ -5188,7 +5141,7 @@ void LICM::OptimisticallySpecializeSmiPhis() {
|
| for (intptr_t i = 0; i < loop_headers.length(); ++i) {
|
| JoinEntryInstr* header = loop_headers[i]->AsJoinEntry();
|
| // Skip loop that don't have a pre-header block.
|
| - BlockEntryInstr* pre_header = FindPreHeader(header);
|
| + BlockEntryInstr* pre_header = header->ImmediateDominator();
|
| if (pre_header == NULL) continue;
|
|
|
| for (PhiIterator it(header); !it.Done(); it.Advance()) {
|
| @@ -5216,7 +5169,7 @@ void LICM::Optimize() {
|
| 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.
|
| - BlockEntryInstr* pre_header = FindPreHeader(header);
|
| + BlockEntryInstr* pre_header = header->ImmediateDominator();
|
| if (pre_header == NULL) continue;
|
|
|
| for (BitVector::Iterator loop_it(header->loop_info());
|
| @@ -6742,7 +6695,7 @@ class LoadOptimizer : public ValueObject {
|
|
|
| for (intptr_t i = 0; i < loop_headers.length(); i++) {
|
| BlockEntryInstr* header = loop_headers[i];
|
| - BlockEntryInstr* pre_header = FindPreHeader(header);
|
| + BlockEntryInstr* pre_header = header->ImmediateDominator();
|
| if (pre_header == NULL) {
|
| invariant_loads->Add(NULL);
|
| continue;
|
|
|