Loop unswitching


Loop unswitching is a compiler optimization. It moves a conditional statement inside a loop outside by duplicating the loop's body and placing a version of it inside each of the if and else clauses of the conditional. This enhances loop's parallelization. As modern processors can efficiently handle vectors, this optimization increases program speed.
Here is a simple example. Suppose we want to add the two arrays x and y and also do something depending on the variable w. We have the following C code:

bool w;
int x;
int y;
for

The conditional inside this loop makes it difficult to safely parallelize this loop. When we unswitch the loop, this becomes:

bool w;
int x;
int y;
if else

While the loop unswitching may double the amount of code written, each of these new loops may now be separately optimized.
Loop unswitching was introduced in GNU [Compiler Collection|gcc] in version 3.4.