224 CloneMap& _clone_map; // map of nodes created in cloning
225
226 MemNode* _align_to_ref; // Memory reference that pre-loop will align to
227
228 GrowableArray<OrderedPair> _disjoint_ptrs; // runtime disambiguated pointer pairs
229
230 DepGraph _dg; // Dependence graph
231
232 // Scratch pads
233 VectorSet _visited; // Visited set
234 VectorSet _post_visited; // Post-visited set
235 Node_Stack _n_idx_list; // List of (node,index) pairs
236 GrowableArray<Node*> _nlist; // List of nodes
237 GrowableArray<Node*> _stk; // Stack of nodes
238
239 public:
240 SuperWord(PhaseIdealLoop* phase);
241
242 void transform_loop(IdealLoopTree* lpt, bool do_optimization);
243
244 void unrolling_analysis(CountedLoopNode *cl, int &local_loop_unroll_factor);
245
246 // Accessors for SWPointer
247 PhaseIdealLoop* phase() { return _phase; }
248 IdealLoopTree* lpt() { return _lpt; }
249 PhiNode* iv() { return _iv; }
250 bool early_return() { return _early_return; }
251
252 private:
253 IdealLoopTree* _lpt; // Current loop tree node
254 LoopNode* _lp; // Current LoopNode
255 Node* _bb; // Current basic block
256 PhiNode* _iv; // Induction var
257 bool _race_possible; // In cases where SDMU is true
258 bool _early_return; // True if we do not initialize
259 bool _do_vector_loop; // whether to do vectorization/simd style
260 bool _vector_loop_debug; // provide more printing in debug mode
261 int _num_work_vecs; // Number of non memory vector operations
262 int _num_reductions; // Number of reduction expressions applied
263 int _ii_first; // generation with direct deps from mem phi
264 int _ii_last; // generation with direct deps to mem phi
|
224 CloneMap& _clone_map; // map of nodes created in cloning
225
226 MemNode* _align_to_ref; // Memory reference that pre-loop will align to
227
228 GrowableArray<OrderedPair> _disjoint_ptrs; // runtime disambiguated pointer pairs
229
230 DepGraph _dg; // Dependence graph
231
232 // Scratch pads
233 VectorSet _visited; // Visited set
234 VectorSet _post_visited; // Post-visited set
235 Node_Stack _n_idx_list; // List of (node,index) pairs
236 GrowableArray<Node*> _nlist; // List of nodes
237 GrowableArray<Node*> _stk; // Stack of nodes
238
239 public:
240 SuperWord(PhaseIdealLoop* phase);
241
242 void transform_loop(IdealLoopTree* lpt, bool do_optimization);
243
244 void unrolling_analysis(int &local_loop_unroll_factor);
245
246 // Accessors for SWPointer
247 PhaseIdealLoop* phase() { return _phase; }
248 IdealLoopTree* lpt() { return _lpt; }
249 PhiNode* iv() { return _iv; }
250 bool early_return() { return _early_return; }
251
252 private:
253 IdealLoopTree* _lpt; // Current loop tree node
254 LoopNode* _lp; // Current LoopNode
255 Node* _bb; // Current basic block
256 PhiNode* _iv; // Induction var
257 bool _race_possible; // In cases where SDMU is true
258 bool _early_return; // True if we do not initialize
259 bool _do_vector_loop; // whether to do vectorization/simd style
260 bool _vector_loop_debug; // provide more printing in debug mode
261 int _num_work_vecs; // Number of non memory vector operations
262 int _num_reductions; // Number of reduction expressions applied
263 int _ii_first; // generation with direct deps from mem phi
264 int _ii_last; // generation with direct deps to mem phi
|