我试图更深入地理解llvm中的指令选择过程,为此我逐步调试CodeGenAndEmitDAG函数。我在组合步骤之前打印了一个小功能(见下文) - 上述功能的第一步。在图中,我看到蓝线,似乎他们总是指着" ch" ,我认为这意味着"其他"机器价值类型。我不明白的是蓝线的含义......这种依赖是什么?而且,我对#34; ch"的含义是正确的。 ?它是"其他" ?
答案 0 :(得分:3)
虚线蓝色箭头表示非数据流之间的依赖关系
说明并强制执行它们之间的特定顺序。例如,
存储和可能访问相同内存的负载不应重新排序,
虽然它们之间没有数据依赖关系。在这种情况下蓝色
箭头用于表示这种隐藏的依赖关系。这些蓝色箭头
消耗Other
类型的链值(ch)。
每个DAG都有一个特殊EntryToken
类型Other
供应
基本块的初始链值。
考虑以下示例。注意加载和存储之间的控制依赖性(蓝色箭头),因为它们被允许指向相同的内存。另请注意将两条指令粘合在一起的红色箭头(胶水)。
int foo(int *a, int *b) {
a[0] = 42;
return b[0];
}