========================================
translation.backendopt.merge\_if\_blocks
========================================

* **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:

.. image:: unmergedblocks.png

(reflecting how Python would interpret this code).  Running this
optimization will transform the block structure to contain a single
"choice block" with four exits:

.. image:: mergedblocks.png

This can then be turned into a switch by the C backend, allowing the C
compiler to produce more efficient code.
