Генерация высококачественного кода для программ, написанных на СИ
Шрифт:
* ----------------------- */
¦ Проверка того, как компилятор генерирует адрес ¦
¦ переменной с константным индексом, размножает
¦ копии и регистры ¦
* ------------------------------------------------ */
¦ Удаление общих подвыражений ¦
* ----------------------------- */
¦ Вынесение инвариантного кода ¦
¦ (j * k) может быть вынесено из цикла ¦
* -------------------------------------- */
¦ Вызов функции с аргументами ¦
* ----------------------------- */
¦ Вызов функции без аргументов ¦
* ------------------------------ */
/* ------------------------------------------------------ *
¦
¦ Проверка недостижимого кода и лишних ¦
¦ присваиваний. Не должен генерироваться код. ¦
* ------------------------------------------------------ */
/* ---------------------------------------------------- *
¦ Функция: unnecessary_loop ¦
¦ Цикл в следующей функции ненужен, так как ¦
¦ значение присваивания постоянно. В идеале ¦
¦ цикл должен быть удален. ¦
* ---------------------------------------------------- */
/* ---------------------------------------------------- *
¦ Функция: loop_jamming ¦
¦ Два цикла в этой функции имеют одинаковые ¦
¦ заголовки и могут быть слиты в один. ¦
* ---------------------------------------------------- */
/* ------------------------------------------------------ *
¦ Функция: loop_unrolling ¦
¦ Цикл в этой функции должен быть заменен ¦