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 - 我可以从例如我的指令格式访问变量吗?延迟槽填充?的主要内容,如果未能解决你的问题,请参考以下文章