https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114081

Tamar Christina <tnfchris at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |tnfchris at gcc dot 
gnu.org

--- Comment #6 from Tamar Christina <tnfchris at gcc dot gnu.org> ---
slightly cleaned up testcase

---
typedef struct filter_list_entry {
  const char *name;
  int id;
  void (*function)();
} filter_list_entry;

static const filter_list_entry filter_list[9] = {0};

void php_zval_filter(int filter, int id1) {
  filter_list_entry filter_func;

  int size = 9;
  for (int i = 0; i < size; ++i) {
    if (filter_list[i].id == filter) {
      filter_func = filter_list[i];
      goto done;
    }
  }

#pragma GCC novector
  for (int i = 0; i < size; ++i) {
    if (filter_list[i].id == 0x0204) {
      filter_func = filter_list[i];
      goto done;
    }
  }
done:
  if (!filter_func.id)
    filter_func.function();
}
---

seems to happen because it's doing an inner loop vect with two loops that have
early exits to the same destination.

      if (multiple_exits_p)
        {
          update_loop = new_loop;
          doms = get_all_dominated_blocks (CDI_DOMINATORS, loop->header);
          for (unsigned i = 0; i < doms.length (); ++i)
            if (flow_bb_inside_loop_p (loop, doms[i]))
              doms.unordered_remove (i);
        }

was supposed to update the dominators but something goes wrong.

Mine, but for monday..

Reply via email to