Lines Matching defs:clobber
34 // This clobber belongs to a clobber_group but m_group appears to be
41 // Splay this clobber to the root of the tree while searching for a node
43 // so the search always breaks early and does not install this clobber
54 // If the previous splay operation did anything, this clobber is now an
59 // this clobber instead. In that case we change at most two clobbers:
60 // this clobber and possibly its parent.
65 // This walk always includes this clobber.
285 pp_string (pp, "clobber ");
422 auto print_clobber = [](pretty_printer *pp, const def_info *clobber)
424 pp_access (pp, clobber);
426 pp_string (pp, "grouped clobber");
427 for (const def_info *clobber : clobbers ())
430 print_clobber (pp, clobber);
447 if (clobber_info *clobber = group->prev_clobber (insn))
448 return clobber;
460 if (clobber_info *clobber = group->next_clobber (insn))
461 return clobber;
466 // Return a clobber_group for CLOBBER, creating one if CLOBBER doesn't
469 function_info::need_clobber_group (clobber_info *clobber)
471 if (clobber->is_in_group ())
472 return clobber->group ();
473 return allocate<clobber_group> (clobber);
477 // splay tree. Use a clobber_group if DEF is a clobber and a set_node
482 if (auto *clobber = dyn_cast<clobber_info *> (def))
483 return need_clobber_group (clobber);
539 // Search TREE for a clobber in INSN. If such a clobber exists, install
542 // (1) Installing the closest preceding clobber as the root and returning 1.
543 // (2) Installing the closest following clobber as the root and returning -1.
547 auto compare = [&](clobber_info *clobber)
549 return insn->compare_with (clobber->insn ());
652 // Add CLOBBER to GROUP and insert it into the function's list of
653 // accesses to CLOBBER->resource (). CLOBBER is not currently part
656 function_info::add_clobber (clobber_info *clobber, clobber_group *group)
658 // Search for either the previous or next clobber in the group.
659 // The result is less than zero if CLOBBER should come before NEIGHBOR
660 // or greater than zero if CLOBBER should come after NEIGHBOR.
661 int comparison = lookup_clobber (group->m_clobber_tree, clobber->insn ());
669 // If CLOBBER comes before NEIGHBOR, insert CLOBBER to NEIGHBOR's left,
670 // otherwise insert CLOBBER to NEIGHBOR's right.
671 clobber_info::splay_tree::insert_child (neighbor, comparison > 0, clobber);
672 clobber->set_group (group);
674 // Insert the clobber into the function-wide list and update the
678 insert_def_after (clobber, neighbor);
680 group->set_last_clobber (clobber);
684 insert_def_before (clobber, neighbor);
686 group->set_first_clobber (clobber);
690 // Remove CLOBBER from GROUP, given that GROUP contains other clobbers too.
691 // Also remove CLOBBER from the function's list of accesses to
692 // CLOBBER->resource ().
694 function_info::remove_clobber (clobber_info *clobber, clobber_group *group)
696 if (clobber == group->first_clobber ())
698 auto *new_first = as_a<clobber_info *> (clobber->next_def ());
702 else if (clobber == group->last_clobber ())
704 auto *new_last = as_a<clobber_info *> (clobber->prev_def ());
709 clobber_info *replacement = clobber_info::splay_tree::remove_node (clobber);
710 if (clobber == group->m_clobber_tree.root ())
715 clobber->set_group (nullptr);
717 remove_def_from_list (clobber);
720 // Add CLOBBER immediately before the first clobber in GROUP, given that
721 // CLOBBER is not currently part of any group.
723 function_info::prepend_clobber_to_group (clobber_info *clobber,
727 clobber_info::splay_tree::insert_child (next, 0, clobber);
728 group->set_first_clobber (clobber);
729 clobber->set_group (group);
732 // Add CLOBBER immediately after the last clobber in GROUP, given that
733 // CLOBBER is not currently part of any group.
735 function_info::append_clobber_to_group (clobber_info *clobber,
739 clobber_info::splay_tree::insert_child (prev, 1, clobber);
740 group->set_last_clobber (clobber);
741 clobber->set_group (group);
795 // Split GROUP around INSN and return the clobber that comes immediately
803 // Search for either the previous or next clobber in the group.
804 // The result is less than zero if CLOBBER should come before NEIGHBOR
805 // or greater than zero if CLOBBER should come after NEIGHBOR.
816 // NEIGHBOR is the last clobber in what will become the first group.
823 // NEIGHBOR is the first clobber in what will become the second group.
876 auto *clobber = dyn_cast<clobber_info *> (def);
878 if (clobber && prev_clobber)
879 append_clobber_to_group (clobber, need_clobber_group (prev_clobber));
948 if (auto *clobber = dyn_cast<clobber_info *> (def))
950 add_clobber (clobber, group);
970 // See if we should merge CLOBBER with a neighboring clobber.
971 auto *clobber = dyn_cast<clobber_info *> (def);
975 gcc_checking_assert (!(clobber && prev_clobber && next_clobber));
976 if (clobber && prev_clobber)
977 append_clobber_to_group (clobber, need_clobber_group (prev_clobber));
978 else if (clobber && next_clobber)
979 prepend_clobber_to_group (clobber, need_clobber_group (next_clobber));
1010 // If CLOBBER belongs to a clobber_group that contains other clobbers
1013 if (auto *clobber = dyn_cast<clobber_info *> (def))
1014 if (clobber->is_in_group ())
1016 clobber_group *group = clobber->group ();
1019 remove_clobber (clobber, group);
1284 // Return a new def_array that contains OLD_DEFS and the new clobber.
1293 auto *clobber = allocate_temp<clobber_info> (insn, regno);
1294 clobber->m_is_temp = true;
1295 return insert_access (watermark, clobber, old_defs);
1542 else if (auto *clobber = dyn_cast<const clobber_info *> (access))
1543 clobber->print (pp, flags);