Content deleted Content added
Undid revision 1022086390 by 203.144.75.49 (talk) |
m v2.05b - Bot T20 CW#61 - Fix errors for CW project (Reference before punctuation) |
||
(9 intermediate revisions by 7 users not shown) | |||
Line 1:
{{short description|Type of compiler optimization}}
{{More citations needed|date=January 2021}}
In [[computer programming]],
==Example==
Line 15 ⟶ 16:
</syntaxhighlight>
Although the calculation <code>x = y + z</code> and <code>x * x</code> is loop-invariant, precautions must be taken before moving the code outside the loop. It is possible that the loop condition is <code>false</code> (for example, if <code>n</code> holds a negative value), and in such case, the loop body should not be executed at all. One way of guaranteeing correct behaviour is using a conditional branch outside of the loop. Evaluating the loop condition can have [[Side effect (computer science)|side effects]], so an additional evaluation by the <code>if</code> construct should be compensated by replacing the <code>while</code> loop with a <code>[[Do while loop|do {} while]]</code>. If the code used <code>do {} while</code> in the first place, the whole guarding process is not needed, as the loop body is guaranteed to execute at least once.
<syntaxhighlight lang="C">
Line 36 ⟶ 37:
For example, if all reaching definitions for the operands of some simple expression are outside of the loop, the expression can be moved out of the loop.
Recent work
|last3=Rusch |first3=Neea |last4=Seiller |first4=Thomas |chapter= Distributing and Parallelizing Non-canonical Loops |title= Verification, Model Checking, and Abstract Interpretation |series=Lecture Notes in Computer Science |date=2023 |volume=13881 |pages=91–108 |doi=10.1007/978-3-031-24950-1_1 }}</ref>
==Benefits==
Line 44 ⟶ 46:
==See also==
* [[Code motion]]
* [[Loop invariant]]
|