25112 Rev. 3.06 September 2005

Software Optimization Guide for AMD64 Processors

2.10SWITCH and Noncontiguous Case Expressions

Optimization

Use if-elsestatements in place of switch statements that have noncontiguous case expressions. (Case expressions are the individual expressions to which the single switch expression is compared.)

Application

This optimization applies to:

32-bit software

64-bit software

Rationale

If the case expressions are contiguous or nearly contiguous integer values, most compilers translate the switch statement as a jump table instead of a comparison chain. Jump tables generally improve performance because:

They reduce the number of branches to a single procedure call.

The size of the control-flow code is the same no matter how many cases there are.

The amount of control-flow code that the processor must execute is the same for all values of the switch expression.

However, if the case expressions are noncontiguous values, most compilers translate the switch statement as a comparison chain. Comparison chains are undesirable because:

They use dense sequences of conditional branches, which interfere with the processor’s ability to successfully perform branch prediction.

The size of the control-flow code increases with the number of cases.

The amount of control-flow code that the processor must execute varies with the value of the switch expression.

Chapter 2

C and C++ Source-Level Optimizations

25

Page 41
Image 41
AMD 250 manual Switch and Noncontiguous Case Expressions, Optimization