Loop-invariant code motion: Difference between revisions

Content deleted Content added
move sentence to next paragraph; make other names bold
rewrote first sentence
Line 1:
{{Unreferenced|date=May 2007}}
 
In [[computer programming]], '''Looploop-invariant code''' consists of statements (in an [[Imperativeimperative programming|imperative]] [[Computer programming|programming language]] language consists of statements) which couldcan be moved to beforeoutside the loopbody (ifof thea 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]].