Reference articles on history, science, culture and more
Encyclopedia

Loop unswitching

Compiler optimization for conditionals in loops

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[1000]; int y[1000]; for (int i = 0; i < 1000; i++) { x[i] += y[i]; if (w) { y[i] = 0; } }

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

bool w; int x[1000]; int y[1000]; if (w) { for (int i = 0; i < 1000; i++) { x[i] += y[i]; y[i] = 0; } } else { for (int i = 0; i < 1000; i++) { x[i] += y[i]; } }

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 gcc in version 3.4.

Watch videos about Loop unswitchingExplainers and documentaries on YouTube (opens in a new tab)

Sources and credits

This article is adapted from the Wikipedia article Loop unswitching, written by its contributors and licensed under CC BY-SA 4.0. Fathomly has changed the layout, removed citation markers, navigation and maintenance notices, and adjusted punctuation. This adapted version is shared under the same license. For references, see the original article.

Fathomly is not affiliated with or endorsed by the Wikimedia Foundation. Spotted a problem? Tell us.