#### Пример разворачивания цикла. ```c for (i = 1000; i>0; i = i-1) x[i] = x[i] + s; ``` Без оптимизации: ```armasm Loop: LD [R1], F0 ; 1 ; простой ; 2 ADD F2, F0, F4 ; 3 ; простой ; 4 ; простой ; 5 ST F4, [R1] ; 6 ADD R1, R3, R1 ; 7 ; простой ; 8 BNE R1, R2, Loop ; 9 ; простой ; 10 ``` - 4 копии цикла развернуты без повторного использования регистров. - Размер базового блока увеличен с 5 до 14 инструкций. - 3 перехода и 3 уменьшения R1 удалены. - Адреса загрузки и сохранения изменены. - 7 тактов для исходной итерации. Разворачивание цикла сразу с оптимизацией: | Loop: | LD [R1], F0 | 1 | | :---: | :--------------: | :---------: | | | LD [R1-8], F6 | 2 | | | LD [R1-16], F10 | 3 | | | LD [R1-24], F14 | 4 | | | ADD F2, F0, F4 | 5 | | | ADD F2, F6, F8 | 6 | | | ADD F2, F10, F12 | 7 | | | ADD F2, F14, F16 | 8 | | | ST F4, [R1] | 9 | | | ST F8, [R1-8] | 10 | | | ADD R1, R3, R1; | R3 -=32; 11 | | | ST F12, [R1+16] | 12 | | | BNE R1, R2, Loop | 13 | | | ST F16, [R1+8]; | 8-32 = -24 | Время итерации цикла сократилось до 14 тактов или $\frac{14}{4}=3.5$ для исходной итерации; Ускорение $\frac{6}{3.5}=1.7$