Lines Matching defs:pinch
2505 if (_cfg->C->failing()) return; // too many D-U pinch points
2662 Node *pinch = _reg_node[def_reg]; // Get pinch point
2663 if( !pinch || _bbs[pinch->_idx] != b || // No pinch-point yet?
2665 _reg_node.map(def_reg,def); // Record def/kill as the optimistic pinch-point
2675 // Finding a kill requires a real pinch-point.
2676 // Check for not already having a pinch-point.
2678 if( pinch->Opcode() != Op_Node ) { // Or later-def/kill as pinch-point?
2679 later_def = pinch; // Must be def/kill as optimistic pinch-point
2681 pinch = _pinch_free_list.pop();
2683 pinch = new (_cfg->C) Node(1); // Pinch point to-be
2685 if (pinch->_idx >= _regalloc->node_regs_max_index()) {
2686 _cfg->C->record_method_not_compilable("too many D-U pinch points");
2689 _bbs.map(pinch->_idx,b); // Pretend it's valid in this block (lazy init)
2690 _reg_node.map(def_reg,pinch); // Record pinch-point
2691 //_regalloc->set_bad(pinch->_idx); // Already initialized this way.
2693 pinch->init_req(0, _cfg->C->top()); // set not NULL for the next call
2694 add_prec_edge_from_to(later_def,pinch); // Add edge from kill to pinch
2697 pinch->set_req(0,later_def); // Hook later def so we can find it
2698 } else { // Else have valid pinch point
2699 if( pinch->in(0) ) // If there is a later-def
2700 later_def = pinch->in(0); // Get it
2707 // See if current kill is also a use, and so is forced to be the pinch-point.
2708 if( pinch->Opcode() == Op_Node ) {
2713 // Yes, found a use/kill pinch-point
2714 pinch->set_req(0,NULL); //
2715 pinch->replace_by(kill); // Move anti-dep edges up
2716 pinch = kill;
2717 _reg_node.map(def_reg,pinch);
2723 // Add edge from kill to pinch-point
2724 add_prec_edge_from_to(kill,pinch);
2731 Node *pinch = _reg_node[use_reg]; // Get pinch point
2733 if( pinch && _bbs[pinch->_idx] == b &&
2736 if( pinch->Opcode() == Op_Node && // Real pinch-point (not optimistic?)
2737 pinch->req() == 1 ) { // pinch not yet in block?
2738 pinch->del_req(0); // yank pointer to later-def, also set flag
2739 // Insert the pinch-point in the block just after the last use
2740 b->_nodes.insert(b->find_node(use)+1,pinch);
2744 add_prec_edge_from_to(pinch,use);
2767 // the edge count down, we add a 'pinch point' node if there's more than
2777 // "pinch point", a new Node that's in the graph but not in the block.
2778 // We put edges from the prior and current DEF/KILLs to the pinch point.
2779 // We put the pinch point in _reg_node. If there's already a pinch point
2780 // we merely add an edge from the current DEF/KILL to the pinch point.
2783 // put an edge from the pinch point to the USE.
2787 // or a valid def/kill/pinch-point, or a leftover node from some prior
2861 // Check if last_safept_node was moved by pinch-point insertion in anti_do_use()
2876 // Garbage collect pinch nodes that were not consumed.
2884 // Garbage collect pinch nodes for reuse by other blocks.
2887 // edges creates many pinch nodes when the block contains
2888 // 2 or more Calls. A pinch node is used to prevent a
2892 // and use (or def), a pinch is inserted between them:
2897 // pinch
2902 // One pinch node is created per register killed when
2904 // over the block. Most of these pinch nodes are never
2910 if (_cfg->C->trace_opto_output()) tty->print("Reclaimed pinch nodes:");
2914 Node* pinch = _reg_node[k];
2915 if (pinch != NULL && pinch->Opcode() == Op_Node &&
2917 (pinch->req() == pinch->len() || pinch->in(pinch->req()) == NULL) ) {
2918 cleanup_pinch(pinch);
2919 _pinch_free_list.push(pinch);
2928 tty->print(" %d", pinch->_idx);
2938 // Clean up a pinch node for reuse.
2939 void Scheduling::cleanup_pinch( Node *pinch ) {
2940 assert (pinch && pinch->Opcode() == Op_Node && pinch->req() == 1, "just checking");
2942 for (DUIterator_Last imin, i = pinch->last_outs(imin); i >= imin; ) {
2943 Node* use = pinch->last_out(i);
2946 if (use->in(j) == pinch) {
2955 pinch->set_req(0, NULL);