1

我正在为目标编写 LLVM 的自定义后端,但没有指定任何子目标。我想打印程序集并尝试实现 MCInstPrinter::ABCMCInstPrinter 类。

我遇到的问题是纯虚函数

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

接受类型为 MCSubtargetInfo 的参数 STI。我对 LLVM 很陌生,所以我想我只是不了解 MC 层类的完整结构,但是MCSubtargetInfo 参数是否暗示我需要定义一个 ABCSubtarget 才能打印程序集?如果不是,那么 MCSubtargetInfo 类的用途是什么?

LLVM 文档中的llvm::MCSubtargetInfo 类参考页面将以下内容作为 MCSubtargetInfo 的详细描述

所有目标子目标的通用基类。

这是我认为此类仅对具有子目标的目标所必需的另一个原因,但是,尽管如此,在汇编打印中对于纯虚函数仍有这种类型的参数。

我真的需要一个 ABCSubtarget 实现来打印我的后端吗?

任何正确方向的提示都值得赞赏。谢谢您的帮助。

4

1 回答 1

2

是的,您需要为后端定义至少一个子目标。如果您没有任何可以控制子目标选择的选项,那么它应该不会太糟糕,但是该类需要在那里才能工作。

于 2016-09-02T16:06:26.890 回答