Для отражения свойств инструкций и зависимостей, связанных с ранним выполнением, в структуры данных планировщика, представляющие инструкции и зависимости между ними, включены флаги раннего выполнения (см. таблицу 1). Наличие флага раннего выполнения для зависимости означает, что для преодоления данной зависимости можно использовать раннее выполнение. Аналогично, такой флаг для инструкции означает, что она может быть запланирована альтернативным способом - с использованием раннего выполнения. Также специальными флагами помечаются инструкции, которые более предпочтительны для раннего выполнения, либо, наоборот, не должны в нем участвовать.
Таблица 1. Флаги раннего выполнения
BEGIN_DATA | ранняя загрузка с помощью ld.a | ld.a |
BEGIN_CONTROL | ранняя загрузка с помощью ld.s | ld.s |
BE_IN_DATA BE_IN_CONTROL | использование результата ранней загрузки | использование результата ранней загрузки |
FINISH_DATA | - | ld.c |
FINISH_CONTROL | - | chk.s |
HARD_DEP | невозможно устранить | ранняя загрузка не может быть использована |
WEAK_DEP | ранняя загрузка предпочтительна | ранняя загрузка предпочтительна |
Инициализация флагов происходит перед началом планирования, когда работает анализ зависимостей по данным. Все так называемые истинные зависимости по памяти (команда, читающая данные из памяти, зависит от ранее выполняемой команды записи этих данных) помечаются анализом зависимостей флагом BEGIN_DATA. Некоторые зависимости при этом помечаются флагом HARD_DEP (например, зависимости, возникающие при волатильных обращениях в память). Флаг зависимости по управлению BEGIN_CONTROL, BE_IN- и FINISH- флаги, а также флаги раннего выполнения для инструкций устанавливаются в процессе планирования при анализе их зависимостей.