19.04.2013 Views

Apostila antiga - The Cyan Programming Language

Apostila antiga - The Cyan Programming Language

Apostila antiga - The Cyan Programming Language

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

CHAPTER 5. OTIMIZAÇÃO DE CÓDIGO 63<br />

e mesmo para<br />

i = 4;<br />

s = s + v[0] + v[1] + v[2] + v[3];<br />

Se o número de vezes que o laço será executado não for conhecido em tempo de compilação,<br />

o corpo do laço pode ser duplicado, permitindo outras otimizações como eliminação de subexpressões<br />

comuns. Pittman e Peters [7] citam como exemplo o código<br />

while ( a < b ) {<br />

b = b - a*k;<br />

a++;<br />

}<br />

transformado em<br />

while ( 1 ) {<br />

if ( a >= b )<br />

break;<br />

b = b - a*k;<br />

a++;<br />

if ( a >= b )<br />

break;<br />

b = b - a*k;<br />

a++;<br />

}<br />

O valor do primeiro cálculo de a*k pode ser colocado em uma variável temporária t1 e reutilizado<br />

na segunda atribuição<br />

b = b - a*k;<br />

que pode ser modificada para<br />

b = b - t1 + k;<br />

já que<br />

a1*k = (a0 + 1)*k = a0*k + k = t1 + k<br />

onde a0 e a1 correspondem aos dois valores da variável a neste laço.<br />

Se o número de repetições for conhecido e par, pode-se duplicar o corpo do laço reduzindo-se pela<br />

metade o número de testes de fim de laço:<br />

for ( i = 0; i < 100; i++ )<br />

s[i] = 0;<br />

i = 0;<br />

goto L1;<br />

L2: s[i] = 0;<br />

i++;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!