LLVM - 我可以从例如我的指令格式访问变量吗?延迟槽填充?

Posted

技术标签:

【中文标题】LLVM - 我可以从例如我的指令格式访问变量吗?延迟槽填充?【英文标题】:LLVM - Can I access variables in my instruction format from e.g. the delay slot filler? 【发布时间】:2010-11-29 15:55:34 【问题描述】:

我正在开发 llvm 后端,目前正在尝试让延迟槽正常工作。槽的数量在 0-3 之间变化,最简单的 - 对我来说也是最合乎逻辑的 - 指定它的方法是将变量 numDelaySlots 添加到指令格式类中。然后,当我在 TargetInstrInfo.td 中指定我的指令时,我会使用 let numDelaySlots = 2; 例如。但是,我不确定以后是否可以访问这些信息。

是否可以通过例如 MachineBasicBlock(delayslotfiller 使用它)来访问用户定义的指令格式变量? 如果没有,是否有人对 LLVM 和可变延迟槽大小有任何经验?

【问题讨论】:

【参考方案1】:

您必须教 TableGen 如何解析这些信息以及如何处理它。您要查找的文件位于utils/TableGen/:CodeGenDAGPatterns.[h|cpp]CodeGenInstruction.[h|cpp]InstrInfoEmitter.[h|cpp]

添加该支持后,您需要使用 MachineFunctionPass 中的数据,例如 Sparc 目标中的 DelaySlotFiller.cpp 或 Mips 目标中的 MipsDelaySlotFiller.cpp。你甚至可能会努力将这些传递统一到某个地方的 CodeGen 中,因为它们的唯一区别是它们使用的 NOP。

【讨论】:

哇,抱歉花了这么长时间才接受,我没有得到任何迹象表明有答案!我只是偶然发现自己的问题正在寻找一个新问题:)

以上是关于LLVM - 我可以从例如我的指令格式访问变量吗?延迟槽填充?的主要内容,如果未能解决你的问题,请参考以下文章

Llvm 移除终结者指令

如何获取 LLVM 全局变量常量值?

LLVM 中的抽象解释

用于遗传编程的基于llvm的代码突变?

LLVM IR:具有可变 BasicBlock 目标的分支指令?

我可以从另一个文件访问变量吗?