Convoluția constantelor

Plierea constantă și  propagarea constantă (de asemenea , promovarea constantă, duplicarea constantă , propagarea constantă ) sunt optimizări utilizate adesea în compilatoarele moderne care reduc calculele redundante prin înlocuirea expresiilor și variabilelor constante cu valorile lor [1] . De asemenea, este adesea folosit algoritmul extins de propagare constantă condițională sparse , care realizează simultan propagarea constantă și eliminarea unor coduri mort [2] .  

Pliere constantă

Folding constant  este o optimizare care evaluează expresiile constante în timpul compilării. În primul rând, expresiile constante care conțin literale numerice sunt simplificate . Expresiile care conțin variabile care nu se modifică sau variabile declarate ca constante pot fi, de asemenea, simplificate . Luați în considerare un exemplu:

i = 320 * 200 * 32 ;

Un compilator care acceptă plierea constantă nu va genera două instrucțiuni de multiplicare și nu va înregistra rezultatul. În schimb, recunoaște acest construct ca o expresie constantă și o înlocuiește cu valoarea calculată (în acest caz, 2.048.000).

Propagare constantă

Propagarea constantă  este o optimizare care înlocuiește o expresie care returnează întotdeauna aceeași constantă atunci când este executată cu acea constantă în sine [3] . Poate fi o constantă definită înainte sau funcție aplicată constantelor Luați în considerare următorul exemplu:

int x = 14 ; int y = 7 - x / 2 ; returnează y * ( 28 / x + 2 );

Retururi de distribuție x:

int x = 14 ; int y = 7 - 14 / 2 ; returnează y * ( 28 / 14 + 2 );

În plus, plierea și răspândirea constantă yreturnează următoarele (atribuțiile xși yprobabil vor fi eliminate de optimizările de eliminare a codului mort mai târziu ):

int x = 14 ; int y = 0 ; returnează 0 ;

Vezi și

Note

  1. Workshop „Optimizing Compilers” (pe exemplul GCC). - NGU-i. Lobaciovski. - S. 100.
  2. Muchnick, 1997 , p. 362-370.
  3. Cartea Dragonului, 2008 , p. 760.

Literatură

  • Steven S. Muchnick. Proiectare și implementare avansată a compilatorului. — ediția a 5-a. - San Francisco: Morgan Kaufmann Publishers , 1997. - 856 p. - ISBN 1-55860-320-4 .
  • Alfred Aho, Monica Lam, Ravi Seti, Jeffrey Ullman. Compilatoare : Principles, Techniques, and Tools = Compilatoare: Principles, Techniques, and Tools. — ediția a II-a. - M . : „Williams”, 2008. - 1184 p. - 1500 de exemplare.  - ISBN 978-5-8459-1349-4 .

Link -uri