| Index: runtime/vm/flow_graph_optimizer.h
|
| diff --git a/runtime/vm/flow_graph_optimizer.h b/runtime/vm/flow_graph_optimizer.h
|
| index 95605784c12bc5055aebfc51210b99f1071b78fe..9bbcbdffabff4bd35490efee99616367d5c21726 100644
|
| --- a/runtime/vm/flow_graph_optimizer.h
|
| +++ b/runtime/vm/flow_graph_optimizer.h
|
| @@ -283,138 +283,6 @@ class FlowGraphOptimizer : public FlowGraphVisitor {
|
| };
|
|
|
|
|
| -// Loop invariant code motion.
|
| -class LICM : public ValueObject {
|
| - public:
|
| - explicit LICM(FlowGraph* flow_graph);
|
| -
|
| - void Optimize();
|
| -
|
| - void OptimisticallySpecializeSmiPhis();
|
| -
|
| - private:
|
| - FlowGraph* flow_graph() const { return flow_graph_; }
|
| -
|
| - void Hoist(ForwardInstructionIterator* it,
|
| - BlockEntryInstr* pre_header,
|
| - Instruction* current);
|
| -
|
| - void TrySpecializeSmiPhi(PhiInstr* phi,
|
| - BlockEntryInstr* header,
|
| - BlockEntryInstr* pre_header);
|
| -
|
| - FlowGraph* const flow_graph_;
|
| -};
|
| -
|
| -
|
| -// A simple common subexpression elimination based
|
| -// on the dominator tree.
|
| -class DominatorBasedCSE : public AllStatic {
|
| - public:
|
| - // Return true, if the optimization changed the flow graph.
|
| - // False, if nothing changed.
|
| - static bool Optimize(FlowGraph* graph);
|
| -
|
| - private:
|
| - static bool OptimizeRecursive(
|
| - FlowGraph* graph,
|
| - BlockEntryInstr* entry,
|
| - CSEInstructionMap* map);
|
| -};
|
| -
|
| -
|
| -class DeadStoreElimination : public AllStatic {
|
| - public:
|
| - static void Optimize(FlowGraph* graph);
|
| -};
|
| -
|
| -
|
| -class DeadCodeElimination : public AllStatic {
|
| - public:
|
| - static void EliminateDeadPhis(FlowGraph* graph);
|
| -};
|
| -
|
| -
|
| -class AllocationSinking : public ZoneAllocated {
|
| - public:
|
| - explicit AllocationSinking(FlowGraph* flow_graph)
|
| - : flow_graph_(flow_graph),
|
| - candidates_(5),
|
| - materializations_(5) { }
|
| -
|
| - const GrowableArray<Definition*>& candidates() const {
|
| - return candidates_;
|
| - }
|
| -
|
| - // Find the materialization insterted for the given allocation
|
| - // at the given exit.
|
| - MaterializeObjectInstr* MaterializationFor(Definition* alloc,
|
| - Instruction* exit);
|
| -
|
| - void Optimize();
|
| -
|
| - void DetachMaterializations();
|
| -
|
| - private:
|
| - // Helper class to collect deoptimization exits that might need to
|
| - // rematerialize an object: that is either instructions that reference
|
| - // this object explicitly in their deoptimization environment or
|
| - // reference some other allocation sinking candidate that points to
|
| - // this object.
|
| - class ExitsCollector : public ValueObject {
|
| - public:
|
| - ExitsCollector() : exits_(10), worklist_(3) { }
|
| -
|
| - const GrowableArray<Instruction*>& exits() const { return exits_; }
|
| -
|
| - void CollectTransitively(Definition* alloc);
|
| -
|
| - private:
|
| - // Collect immediate uses of this object in the environments.
|
| - // If this object is stored into other allocation sinking candidates
|
| - // put them onto worklist so that CollectTransitively will process them.
|
| - void Collect(Definition* alloc);
|
| -
|
| - GrowableArray<Instruction*> exits_;
|
| - GrowableArray<Definition*> worklist_;
|
| - };
|
| -
|
| - void CollectCandidates();
|
| -
|
| - void NormalizeMaterializations();
|
| -
|
| - void RemoveUnusedMaterializations();
|
| -
|
| - void DiscoverFailedCandidates();
|
| -
|
| - void InsertMaterializations(Definition* alloc);
|
| -
|
| - void CreateMaterializationAt(
|
| - Instruction* exit,
|
| - Definition* alloc,
|
| - const ZoneGrowableArray<const Object*>& fields);
|
| -
|
| - void EliminateAllocation(Definition* alloc);
|
| -
|
| - Isolate* isolate() const { return flow_graph_->isolate(); }
|
| - Zone* zone() const { return flow_graph_->zone(); }
|
| -
|
| - FlowGraph* flow_graph_;
|
| -
|
| - GrowableArray<Definition*> candidates_;
|
| - GrowableArray<MaterializeObjectInstr*> materializations_;
|
| -
|
| - ExitsCollector exits_collector_;
|
| -};
|
| -
|
| -
|
| -// Optimize spill stores inside try-blocks by identifying values that always
|
| -// contain a single known constant at catch block entry.
|
| -class TryCatchAnalyzer : public AllStatic {
|
| - public:
|
| - static void Optimize(FlowGraph* flow_graph);
|
| -};
|
| -
|
| } // namespace dart
|
|
|
| #endif // VM_FLOW_GRAPH_OPTIMIZER_H_
|
|
|