22 : flow_graph_(flow_graph), candidates_(5), materializations_(5) {}
43 ExitsCollector() : exits_(10), worklist_(3) {}
45 const GrowableArray<Instruction*>& exits()
const {
return exits_; }
47 void CollectTransitively(Definition* alloc);
53 void Collect(Definition* alloc);
55 GrowableArray<Instruction*> exits_;
56 GrowableArray<Definition*> worklist_;
59 void CollectCandidates();
61 void NormalizeMaterializations();
63 void RemoveUnusedMaterializations();
65 void DiscoverFailedCandidates();
67 void InsertMaterializations(Definition* alloc);
69 void CreateMaterializationAt(Instruction* exit,
71 const ZoneGrowableArray<const Slot*>& fields);
73 void EliminateAllocation(Definition* alloc);
75 enum SafeUseCheck { kOptimisticCheck, kStrictCheck };
77 bool IsAllocationSinkingCandidate(Definition* alloc, SafeUseCheck check_type);
79 bool IsSafeUse(
Value* use, SafeUseCheck check_type);
81 Zone* zone()
const {
return flow_graph_->
zone(); }
83 FlowGraph* flow_graph_;
85 GrowableArray<Definition*> candidates_;
86 GrowableArray<MaterializeObjectInstr*> materializations_;
88 ExitsCollector exits_collector_;