Генератор кода LLVM: является ли машинное представление машинно-независимым? - PullRequest
0 голосов
/ 30 сентября 2018

Обратите внимание : этот вопрос не о LLVM IR , а о LLVM MIR , внутреннее промежуточное представление ниже предыдущего.

В этой документации по LLVM Классы описания машинного кода , говорится (выделяя мою):

На высоком уровне код LLVM транслируется * для конкретной машины представление, сформированное из экземпляров MachineFunction, MachineBasicBlock и MachineInstr ...

Однако этот же абзац продолжается и гласит:

Это представление полностью target agnostic , представляющий инструкции в их наиболее абстрактной форме ...

Мой вопрос: как понять этот абзац?

Мне трудно согласовать претензиючто это промежуточное представление является машинно-зависимым и целевым агностиком одновременно.Я думал, что «машина» и «цель» в контексте LLVM означают одно и то же - архитектура набора команд (например, x86_64, MIPS), используемая скомпилированным исполняемым файлом.

Примеры приветствуются.

1 Ответ

0 голосов
/ 30 сентября 2018

Существуют разные способы быть специфичными для платформы.Например, у вас может быть код операции с другим именем для add, или, возможно, с другой семантикой переполнения, или вы можете использовать один и тот же add для всех с операндами / флагами, заданными одинаковыми аргументами для всех целевых платформ,с теми же значениями по умолчанию.

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

МашинаIR представляет инструкции в их наиболее абстрактной форме.Он не пытается скрыть, что на этой цели указатели имеют 32 бита.

...