Можно ли реализовать класс ‹target›MCInstPrinter без MCSubtargetInfo?

Я пишу собственный бэкенд для LLVM для цели и не указал никаких подцелей. Я хочу распечатать сборку и пытаюсь реализовать класс MCInstPrinter::ABMCInstPrinter.

Проблема, с которой я столкнулся, заключается в том, что чистая виртуальная функция

virtual void printInst(const MCInst *MI, raw_ostream &OS, StringRef Annot,
                     const MCSubtargetInfo &STI) = 0;

принимает аргумент STI типа MCSubtargetInfo. Я новичок в LLVM, поэтому я просто не понимаю всей структуры классов MC Layer, но подразумевает ли аргумент MCSubtargetInfo, что мне нужно определить ABCSubtarget, чтобы иметь возможность печатать сборку? Если нет, то для какой цели служит класс MCSubtargetInfo?

На странице справочника по классам llvm::MCSubtargetInfo из документации LLVM указано следующее: Подробное описание MCSubtargetInfo

Общий базовый класс для всех целевых подцелей.

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

Действительно ли мне нужна реализация ABCSubtarget для моей серверной части для печати?

Любые советы в правильном направлении приветствуются. Спасибо за помощь.


person GC Saab    schedule 01.09.2016    source источник
comment
Да, подцель будет необходима почти для всех вещей, связанных с MC. Subtarget — это набор функций, определяющих поведение MC, вам не нужно больше одной.   -  person Colin LeMahieu    schedule 01.09.2016


Ответы (1)


Да, вам нужно будет определить хотя бы одну подцель для вашего бэкенда. Если у вас нет каких-либо параметров, которые будут контролировать выбор подцели, это не должно быть так уж плохо, но класс должен быть там, чтобы он работал.

person echristo    schedule 02.09.2016