- name: merge_if_blocks
- description: Merge if … elif chains
- command-line: –if-block-merge
- command-line for negation: –no-if-block-merge
- option type: boolean option
- default: True
This optimization converts parts of flow graphs that result from chains of ifs and elifs like this into merged blocks.
By default flow graphing this kind of code:
if x == 0: f() elif x == 1: g() elif x == 4: h() else: j()
will result in a chain of blocks with two exits, somewhat like this:
(reflecting how Python would interpret this code). Running this optimization will transform the block structure to contain a single “choice block” with four exits:
This can then be turned into a switch by the C backend, allowing the C compiler to produce more efficient code.