2010-12-10 2 views
1

Valgrind использует промежуточное представление кода, чтобы дать нам двоичный код инструмента, так что нам не нужно иметь дело с конструкциями уровня языка программирования. В процессе преобразования двоичного кода в код промежуточного представления Valgrind (IR), он показывает использование регистров для операций, таких как добавления и т. Д. Есть 1024 из них, которые используются. То, что я не получаю, является другим типом регистров, называемых временными регистрами, представленными как tX, где X - некоторое число. Таким образом, я могу видеть это:В чем разница между регистрами и временными регистрами?

t28 = Add32(t26,0xFFFFFFFC:I32) 
t4 = LDle:I32(t28) 

t означает временный регистр. Насколько я вижу, они, похоже, очень похожи на обычные регистры, но я не могу понять, как они отличаются. Может ли кто-нибудь сказать мне, что такое временный регистр и как он отличается от обычного регистра?

+1

У меня, вероятно, отсутствует что-то очевидное здесь, но я не вижу в этом примере ни «R», ни «T» ...? – 2010-12-10 05:21:17

+0

@ Лоуренс: Исправил мой вопрос. Спасибо, что указали это. – Legend 2010-12-10 06:04:03

ответ

2

В классе построения компилятора мне учили, что регистры в промежуточном коде являются виртуальными регистрами. Они не обязательно имеют какое-либо отношение к исполняемому файлу для целевой платформы. Они могут быть реальными регистрами CPU, или они могут быть временными в памяти. Все зависит от генератора кода и оптимизатора. Генератор кода определяет, где должны быть выделены временные ресурсы.

Основная причина для генерации ИК - максимизировать переносимость компилятора. Вы можете использовать один внешний интерфейс компилятора для всех платформ, а затем передавать IR в генераторы кода конкретной платформы. GCC работает таким образом, и я уверен, что большинство, если не все, достойные компиляторы работают таким образом.

Еще одно преимущество заключается в том, что вы можете выполнять определенные оптимизации в ИК-коде, прежде чем он будет отправлен генератору кода. Некоторые оптимизации не являются специфичными для платформы: например, код, который не зависит от цикла, может быть выведен из цикла. Оптимизатор платформы обычно оптимизируется на более низком уровне, таком как распределение регистров, ветвление и т. Д., Что действительно зависит от свойств CPU.

Смежные вопросы