Loop-invariant code motion: Difference between revisions

Content deleted Content added
Citation bot (talk | contribs)
Add: isbn, series. | Use this bot. Report bugs. | Suggested by Abductive | Category:Compiler optimizations | #UCB_Category 35/61
WikiCleanerBot (talk | contribs)
m v2.05b - Bot T20 CW#61 - Fix errors for CW project (Reference before punctuation)
 
(6 intermediate revisions by 5 users not shown)
Line 2:
{{More citations needed|date=January 2021}}
 
In [[computer programming]], '''[[loop-invariant code]]''' consists of statements or expressions (in an [[imperative programming|imperative]] [[programming language]]) whichthat can be moved outside the body of a loop without affecting the semantics of the program. '''Loop-invariant code motion''' (also called '''hoisting''' or '''scalar promotion''') is a [[compiler optimization]] whichthat performs this movement automatically.
 
==Example==
Line 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 usingby Moyen, Rubiano and [[Thomas Seiller|Seiller]] uses data-flow dependence analysis <ref>{{cite journalbook |last1=Moyen |first1=Jean-Yves |last2=Rubiano |first2=Thomas |last3=Seiller |first3=Thomas |titlechapter=Loop Quasi-Invariant Chunk Detection |journaltitle=Automated Technology for Verification and Analysis |series=Lecture Notes in Computer Science |date=2017 |volume=10482 |pages=91–108 |doi=10.1007/978-3-319-68167-2_7|isbn=978-3-319-68166-5 }}</ref> allows to detect not only invariant commands but larger code fragments such as an inner loop. The analysis also detects quasi-invariants of arbitrary degrees, that is commands or code fragments that become invariant after a fixed number of iterations of the loop body. This technique was later used by Aubert, Rubiano, Rusch, and [[Thomas Seiller|Seiller]] to automatically parallelise loops.<ref>{{cite book |last1=Aubert |first1=Clément |last2=Rubiano |first2=Thomas
|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 45 ⟶ 46:
 
==See also==
* [[Code motion]]
* [[Loop invariant]]