Multiway branch

Multiway branch is the change to a program's control flow based upon a value matching a selected criteria. It is a form of conditional statement. A multiway branch is often the most efficient method of passing control to one of a set of program labels, especially if an index has been created beforehand from the raw data.

Examples

Alternatives

A multiway branch can, frequently, be replaced with an efficient indexed table lookup (using the data value itself or a calculated derivative of the data value, as the index of an array)

"A Superoptimizer Analysis of Multiway Branch Code Generation" by Roger Anthony Sayle

switch (x) {                     /* x is month no */
  case 4:                        /* April         */                             
  case 6:                        /* June          */
  case 9:                        /* September     */
  case 11:                       /* November      */
  return true;
}

can be replaced, using a "safe-hashing" technique, with -

unsigned int t = x | 2;
switch (t) {
  case 6:
  case 11:
  return true;
}

or it can be replaced, using an index mapping table lookup, with -

x %= 12;                                            /* to ensure x is in range 0-11*/                                                 
static const int T[12] = {0,0,0,0,1,0,1,0,0,1,0,1}; /* 0-based table 'if 30 days =1,else 0'  */
return T[x];                                        /* return with boolean 1 = true, 0=false */

(in view of the simplicity of the latter case, it would be preferable to implement it in-line, since the overhead of using a function call may be greater than the indexed lookup itself.)

Quotations

See also

References

Uses material from the Wikipedia article Multiway branch, released under the CC BY-SA 4.0 license.