hotspot/src/share/vm/opto/superword.hpp
changeset 30211 442fbbb31f75
parent 23528 8f1a7f5e8066
child 30588 24fc4b3a964e
equal deleted inserted replaced
30210:507826ef56fd 30211:442fbbb31f75
   247  private:
   247  private:
   248   IdealLoopTree* _lpt;             // Current loop tree node
   248   IdealLoopTree* _lpt;             // Current loop tree node
   249   LoopNode*      _lp;              // Current LoopNode
   249   LoopNode*      _lp;              // Current LoopNode
   250   Node*          _bb;              // Current basic block
   250   Node*          _bb;              // Current basic block
   251   PhiNode*       _iv;              // Induction var
   251   PhiNode*       _iv;              // Induction var
       
   252   bool           _race_possible;   // In cases where SDMU is true
   252 
   253 
   253   // Accessors
   254   // Accessors
   254   Arena* arena()                   { return _arena; }
   255   Arena* arena()                   { return _arena; }
   255 
   256 
   256   Node* bb()                       { return _bb; }
   257   Node* bb()                       { return _bb; }
   335   bool are_adjacent_refs(Node* s1, Node* s2);
   336   bool are_adjacent_refs(Node* s1, Node* s2);
   336   // Are s1 and s2 similar?
   337   // Are s1 and s2 similar?
   337   bool isomorphic(Node* s1, Node* s2);
   338   bool isomorphic(Node* s1, Node* s2);
   338   // Is there no data path from s1 to s2 or s2 to s1?
   339   // Is there no data path from s1 to s2 or s2 to s1?
   339   bool independent(Node* s1, Node* s2);
   340   bool independent(Node* s1, Node* s2);
       
   341   // Is there a data path between s1 and s2 and both are reductions?
       
   342   bool reduction(Node* s1, Node* s2);
   340   // Helper for independent
   343   // Helper for independent
   341   bool independent_path(Node* shallow, Node* deep, uint dp=0);
   344   bool independent_path(Node* shallow, Node* deep, uint dp=0);
   342   void set_alignment(Node* s1, Node* s2, int align);
   345   void set_alignment(Node* s1, Node* s2, int align);
   343   int data_size(Node* s);
   346   int data_size(Node* s);
   344   // Extend packset by following use->def and def->use links from pack members.
   347   // Extend packset by following use->def and def->use links from pack members.
   345   void extend_packlist();
   348   void extend_packlist();
   346   // Extend the packset by visiting operand definitions of nodes in pack p
   349   // Extend the packset by visiting operand definitions of nodes in pack p
   347   bool follow_use_defs(Node_List* p);
   350   bool follow_use_defs(Node_List* p);
   348   // Extend the packset by visiting uses of nodes in pack p
   351   // Extend the packset by visiting uses of nodes in pack p
   349   bool follow_def_uses(Node_List* p);
   352   bool follow_def_uses(Node_List* p);
       
   353   // For extended packsets, ordinally arrange uses packset by major component
       
   354   void order_def_uses(Node_List* p);
   350   // Estimate the savings from executing s1 and s2 as a pack
   355   // Estimate the savings from executing s1 and s2 as a pack
   351   int est_savings(Node* s1, Node* s2);
   356   int est_savings(Node* s1, Node* s2);
   352   int adjacent_profit(Node* s1, Node* s2);
   357   int adjacent_profit(Node* s1, Node* s2);
   353   int pack_cost(int ct);
   358   int pack_cost(int ct);
   354   int unpack_cost(int ct);
   359   int unpack_cost(int ct);
   417   void print_packset();
   422   void print_packset();
   418   void print_pack(Node_List* p);
   423   void print_pack(Node_List* p);
   419   void print_bb();
   424   void print_bb();
   420   void print_stmt(Node* s);
   425   void print_stmt(Node* s);
   421   char* blank(uint depth);
   426   char* blank(uint depth);
   422 };
   427 
       
   428   void packset_sort(int n);
       
   429 };
       
   430 
   423 
   431 
   424 
   432 
   425 //------------------------------SWPointer---------------------------
   433 //------------------------------SWPointer---------------------------
   426 // Information about an address for dependence checking and vector alignment
   434 // Information about an address for dependence checking and vector alignment
   427 class SWPointer VALUE_OBJ_CLASS_SPEC {
   435 class SWPointer VALUE_OBJ_CLASS_SPEC {