src/share/vm/opto/superword.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 7077439 Sdiff src/share/vm/opto

src/share/vm/opto/superword.cpp

Print this page




  53   _node_info(arena(), 8,  0, SWNodeInfo::initial), // info needed per node
  54   _align_to_ref(NULL),                    // memory reference to align vectors to
  55   _disjoint_ptrs(arena(), 8,  0, OrderedPair::initial), // runtime disambiguated pointer pairs
  56   _dg(_arena),                            // dependence graph
  57   _visited(arena()),                      // visited node set
  58   _post_visited(arena()),                 // post visited node set
  59   _n_idx_list(arena(), 8),                // scratch list of (node,index) pairs
  60   _stk(arena(), 8, 0, NULL),              // scratch stack of nodes
  61   _nlist(arena(), 8, 0, NULL),            // scratch list of nodes
  62   _lpt(NULL),                             // loop tree node
  63   _lp(NULL),                              // LoopNode
  64   _bb(NULL),                              // basic block
  65   _iv(NULL)                               // induction var
  66 {}
  67 
  68 //------------------------------transform_loop---------------------------
  69 void SuperWord::transform_loop(IdealLoopTree* lpt) {
  70   assert(lpt->_head->is_CountedLoop(), "must be");
  71   CountedLoopNode *cl = lpt->_head->as_CountedLoop();
  72 


  73   if (!cl->is_main_loop() ) return; // skip normal, pre, and post loops
  74 
  75   // Check for no control flow in body (other than exit)
  76   Node *cl_exit = cl->loopexit();
  77   if (cl_exit->in(0) != lpt->_head) return;
  78 
  79   // Make sure the are no extra control users of the loop backedge
  80   if (cl->back_control()->outcnt() != 1) {
  81     return;
  82   }
  83 
  84   // Check for pre-loop ending with CountedLoopEnd(Bool(Cmp(x,Opaque1(limit))))
  85   CountedLoopEndNode* pre_end = get_pre_loop_end(cl);
  86   if (pre_end == NULL) return;
  87   Node *pre_opaq1 = pre_end->limit();
  88   if (pre_opaq1->Opcode() != Op_Opaque1) return;
  89 
  90   // Do vectors exist on this architecture?
  91   if (vector_width_in_bytes() == 0) return;
  92 




  53   _node_info(arena(), 8,  0, SWNodeInfo::initial), // info needed per node
  54   _align_to_ref(NULL),                    // memory reference to align vectors to
  55   _disjoint_ptrs(arena(), 8,  0, OrderedPair::initial), // runtime disambiguated pointer pairs
  56   _dg(_arena),                            // dependence graph
  57   _visited(arena()),                      // visited node set
  58   _post_visited(arena()),                 // post visited node set
  59   _n_idx_list(arena(), 8),                // scratch list of (node,index) pairs
  60   _stk(arena(), 8, 0, NULL),              // scratch stack of nodes
  61   _nlist(arena(), 8, 0, NULL),            // scratch list of nodes
  62   _lpt(NULL),                             // loop tree node
  63   _lp(NULL),                              // LoopNode
  64   _bb(NULL),                              // basic block
  65   _iv(NULL)                               // induction var
  66 {}
  67 
  68 //------------------------------transform_loop---------------------------
  69 void SuperWord::transform_loop(IdealLoopTree* lpt) {
  70   assert(lpt->_head->is_CountedLoop(), "must be");
  71   CountedLoopNode *cl = lpt->_head->as_CountedLoop();
  72 
  73   if (!cl->is_valid_counted_loop()) return; // skip malformed counted loop
  74 
  75   if (!cl->is_main_loop() ) return; // skip normal, pre, and post loops
  76 
  77   // Check for no control flow in body (other than exit)
  78   Node *cl_exit = cl->loopexit();
  79   if (cl_exit->in(0) != lpt->_head) return;
  80 
  81   // Make sure the are no extra control users of the loop backedge
  82   if (cl->back_control()->outcnt() != 1) {
  83     return;
  84   }
  85 
  86   // Check for pre-loop ending with CountedLoopEnd(Bool(Cmp(x,Opaque1(limit))))
  87   CountedLoopEndNode* pre_end = get_pre_loop_end(cl);
  88   if (pre_end == NULL) return;
  89   Node *pre_opaq1 = pre_end->limit();
  90   if (pre_opaq1->Opcode() != Op_Opaque1) return;
  91 
  92   // Do vectors exist on this architecture?
  93   if (vector_width_in_bytes() == 0) return;
  94 


src/share/vm/opto/superword.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File