Языки программирования - концепции и принципы

это закрепление регистра за индексной


L1:  load                      R1,l                    Загрузить индекс

        load                      R2,High             Загрузить верхнюю границу

        jump_gt               R1,R2,L2           Завершить цикл, если больше

        statement                                        Тело цикла

        load                     R1,l                    Увеличить индекс

        incr                      R1

        store                    R1,l

        jump                    L1

L2:

Очевидная оптимизация — это закрепление регистра за индексной перемен­ной I и, если возможно, еще одного регистра за High:

       compute                R1 ,ехрг_1          Нижняя граница в регистре

       compute                R2,expr_2           Верхняя граница в регистре

L1:  jump_gt                 R1,R2,L2           Завершить цикл, если больше



       statement

        incr R1                                             Увеличить индексный регистр

       jump L1

 L2:

Рассмотрим теперь простой цикл в языке С:

C

for (i = expression_1 ; expression_2; i++)

 statement;

Это компилируется в

          compute        R1,expr_1

          store              R1,i                        Нижняя граница индексации

L1:    compute        R2,expr_2               Верхняя граница внутри цикла!

          jump_gt        R1,R2,L2                Завершить цикл, если больше

          statement                                      Тело цикла

          load              R1,i                          Увеличить индекс

          incr               R1

          store             R1,i

          jump             L1

L2:

     Обратите внимание, что выражение expression_2, которое может быть очень сложным, теперь вычисляется внутри цикла. Кроме того, выражение expres-sion_2 обязательно использует значение индексной переменной i, которая из­меняется при каждой итерации. Таким образом, оптимизатор должен уметь выделить неизменяющуюся часть вычисления выражения expression_2, что­бы вынести ее из цикла.


Содержание раздела