Content deleted Content added
tweak code; added info about register pressure and rematerialization |
move sentence to next paragraph; make other names bold |
||
Line 1:
{{Unreferenced|date=May 2007}}
'''Loop-invariant code''' in an [[Imperative programming|imperative]] [[Computer programming|programming]] language consists of statements which could be moved to before the loop (if the loop always terminates), or after the loop, without affecting the semantics of the program. As a result it is executed less often, providing a speedup. Another effect of this transformation is allowing to store constants in registers and not having to calculate the address and access the memory/cache line at each iteration
'''Loop-invariant code motion''' (also called '''hoisting''' or '''scalar promotion''') is a [[compiler optimization]] which performs this movement automatically. However, if too many variables are created, there will be high [[register pressure]], especially on processors with few registers, like the 32-bit [[x86]]. If the compiler runs out of registers, some variables will be [[register spilling|spilled]]. To counteract this, the “opposite” optimization can be performed, [[rematerialization]].
==Worked example==
|