Cykeldelning

Loop splitting är en  kompilatoroptimering som försöker förenkla loopen eller eliminera beroenden i loopen genom att dela upp den i flera delar som har samma källloopkropp och olika räknarintervall.

Till exempel följande kod:

int p = 10 ; för ( int i = 0 ; i < 10 ; ++ i ) { y [ i ] = x [ i ] + x [ p ]; p = i ; }

som ett resultat av att tillämpa optimeringen konverteras till:

y [ 0 ] = x [ 0 ] + x [ 10 ]; för ( int i = 1 ; i < 10 ; ++ i ) { y [ i ] = x [ i ] + x [ i -1] ; }


Den nya koden är likvärdig med den tidigare, men eliminerar behovet av "p"-variabeln inuti loopkroppen.

Denna optimering dök upp först i GCC version 3.4.

Anteckningar

Litteratur

  • Alfred Aho, Monica Lam, Ravi Seti, Jeffrey Ullman. Compilers : Principles, Techniques and Tools = Compilers: Principles, Techniques and Tools. — 2:a upplagan. - M . : "Williams", 2008. - 1184 sid. - 1500 exemplar.  - ISBN 978-5-8459-1349-4 .
  • Steven S. Muchnick. Avancerad kompilatordesign och implementering. — 5:e upplagan. - San Francisco: Morgan Kaufmann Publishers , 1997. - 856 sid. - ISBN 1-55860-320-4 .
  • Kennedy, Ken; & Allen, Randy. Optimera kompilatorer för moderna arkitekturer: en beroendebaserad metod  . - Morgan Kaufmann , 2001. - ISBN 1-55860-286-0 .