Efficient translation of switch statements is mandatory for any C Compiler. The Compiler applies different strategies, i.e., branch trees, jump tables, and a mixed strategy, depending on the case label values and their numbers. The following table describes how the Compiler implements these strategies.
| Method | Description |
|---|---|
| Branch Sequence | For small switches with scattered case label values, the Compiler generates an if...elsif...elsif...else... sequence if the Compiler switch -Os is active. |
| Branch Tree | For small switches with scattered case label values, the Compiler generates a branch tree. This is the equivalent to unrolling a binary search loop of a sorted jump table and therefore is very fast. However, there is a point at which this method is not feasible simply because it uses too much memory. |
| Jump Table | In such cases, the Compiler creates a table plus a call of a switch processor. There are two different switch processors. If there are a lot of labels with more or less consecutive values, a direct jump table is used. If the label values are scattered, a binary search table is used. |
| Mixed Strategy | Finally, there may be switches having clusters of label values separated by other labels with scattered values. In this case, a mixed strategy is applied, generating branch trees or search tables for the scattered labels and direct jump tables for the clusters. |