“机器值类型”是什么;其他";llvm SDV节点中的平均值
我试图更深入地理解llvm中的指令选择过程,为此,我正在一步一步地调试CODEGENANDIMITDAG函数。我在联合收割机步骤之前打印了一个小功能(见下文),这是上述功能的第一步。在图中,我看到了蓝色的线条,它们似乎总是指向“ch”,我认为这意味着“其他”机器值类型。我不明白的是蓝线的意思。。。这种依赖性是什么?那么,我对“ch”的理解正确吗?是“其他”吗 蓝色虚线箭头表示 指示并执行它们之间的特定命令。例如 可能访问相同内存的存储和加载不应重新排序, 尽管它们之间没有数据依赖关系。在这种情况下,蓝色 箭头用于表示这种隐藏的依赖关系。这些蓝色的箭 消费“机器值类型”是什么;其他";llvm SDV节点中的平均值,llvm,instructions,llvm-ir,machine-instruction,Llvm,Instructions,Llvm Ir,Machine Instruction,我试图更深入地理解llvm中的指令选择过程,为此,我正在一步一步地调试CODEGENANDIMITDAG函数。我在联合收割机步骤之前打印了一个小功能(见下文),这是上述功能的第一步。在图中,我看到了蓝色的线条,它们似乎总是指向“ch”,我认为这意味着“其他”机器值类型。我不明白的是蓝线的意思。。。这种依赖性是什么?那么,我对“ch”的理解正确吗?是“其他”吗 蓝色虚线箭头表示 指示并执行它们之间的特定命令。例如 可能访问相同内存的存储和加载不应重新排序, 尽管它们之间没有数据依赖关系。在这种情况
其他类型的链值(ch)
每个DAG都有一个特殊的EntryToken
,类型为Other
,提供
基本块的初始链值
考虑下面的例子。注意load和store之间的控件依赖关系(蓝色箭头),因为它们被允许指向相同的内存。还要注意红色箭头(胶水),它将两个指令粘在一起
int foo(int *a, int *b) {
a[0] = 42;
return b[0];
}
有意义,但是关于copyToReg(0x2efac80-加载指令之后)与store指令之间的蓝线?加载指令确实取决于存储,但加载后的指令需要取决于加载,而不是存储…我也在试图理解这些节点、行和类型,请提供任何有用的链接或关键字。提前谢谢。您可以查看llvm代码中的下一个文件:include/llvm/CodeGen/ISDOpcodes.h-这里有一些解释。