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

            Bug ID: 89059
           Summary: Once we emit switchconf tables, we don't optimize them
                    anymore
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jakub at gcc dot gnu.org
  Target Milestone: ---

For the following testcase:

static inline int
foo (int a)
{
  switch (a)
  {
  case 0:
    return 0;
  case 1 ... 3:
    return 1;
  case 4 ... 10:
    return -1;
  default:
    return 42;
  }
}

int
bar (int a)
{
  if (a < 0 || a > 3)
    __builtin_unreachable ();
  return foo (a);
}

we emit unnecessary code, I understand we want to run switchconf early, so that
inliner can already see simple code, but in this case we don't know value
ranges of the switch condition.  So, I wonder if we couldn't mark the CSWTCH
tables with some attribute or whatever and in late GIMPLE reconsider if we
can't emit something simpler, whether it is a bit test or simple comparison.
If we commit to a bit test, I wonder if we are able to simplify it later too.

Reply via email to