http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54505

             Bug #: 54505
           Summary: RFE: Inline function tables
    Classification: Unclassified
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: tree-optimization
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: a...@redhat.com


It is common to see code such as

  static const int (*ftable[])(struct context *) = { 
      [V1] = f1,
      [V2] = f2,
      ...
  };

  ...

  {
      ftable[nr](context);
  }

However, this is less efficient than an equivalent switch () statement since
the calling convention must be observed.  Some registers are clobbered, others
must be set to the arguments, and the functions must have a prolog and an
epilogue.

It is easy to recognize the pattern though and convert it into an equivalent
switch:

  switch (nr) {
  case V1:
      f1(context);
      break;
  case V2:
      f2(context);
      break;
  ...
  }

Reply via email to