LLVM - Могу ли я получить доступ к переменным в моем формате команд, например, с помощью заполнителя слота задержки? - PullRequest
1 голос
/ 29 ноября 2010

Я работаю на бэк-энде llvm и сейчас пытаюсь заставить слоты задержки работать правильно.Количество слотов варьируется от 0 до 3, и самый простой - и для меня наиболее логичный - способ указать это - добавить переменную numDelaySlots в класс формата инструкции.Затем, когда я указываю свои инструкции в TargetInstrInfo.td, я просто использую { let numDelaySlots = 2; }, например.Однако я не уверен, что смогу получить доступ к этой информации позже.

Можно ли получить доступ к пользовательским переменным формата инструкции, например, через MachineBasicBlock (с чем работает delayslotfiller)?Если нет, есть ли у кого-нибудь опыт работы с LLVM и слотами с переменной задержкой?

1 Ответ

2 голосов
/ 01 декабря 2010

Вам нужно научить TableGen, как анализировать эту информацию, а затем что делать с ней.Файлы, которые вы ищете, находятся в utils/TableGen/:
CodeGenDAGPatterns.[h|cpp]
CodeGenInstruction.[h|cpp]
InstrInfoEmitter.[h|cpp]

Как только вы добавите эту поддержку, вам нужно будетзатем используйте данные из MachineFunctionPass, такие как DelaySlotFiller.cpp из цели Sparc или MipsDelaySlotFiller.cpp из цели Mips.Юй может даже взять на себя усилия по объединению этих проходов где-то в CodeGen, поскольку единственное отличие в них - это NOP, который они используют.

...