什么机器值类型“其他”在llvm SDnodes中意味着什么

时间:2014-10-30 19:18:01

标签: llvm instructions llvm-ir machine-instruction

我试图更深入地理解llvm中的指令选择过程,为此我逐步调试CodeGenAndEmitDAG函数。我在组合步骤之前打印了一个小功能(见下文) - 上述功能的第一步。在图中,我看到蓝线,似乎他们总是指着" ch" ,我认为这意味着"其他"机器价值类型。我不明白的是蓝线的含义......这种依赖是什么?而且,我对#34; ch"的含义是正确的。 ?它是"其他" ? enter image description here

1 个答案:

答案 0 :(得分:3)

虚线蓝色箭头表示非数据流之间的依赖关系 说明并强制执行它们之间的特定顺序。例如, 存储和可能访问相同内存的负载不应重新排序, 虽然它们之间没有数据依赖关系。在这种情况下蓝色 箭头用于表示这种隐藏的依赖关系。这些蓝色箭头 消耗Other类型的链值(ch)。

每个DAG都有一个特殊EntryToken类型Other供应 基本块的初始链值。

考虑以下示例。注意加载和存储之间的控制依赖性(蓝色箭头),因为它们被允许指向相同的内存。另请注意将两条指令粘合在一起的红色箭头(胶水)。

int foo(int *a, int *b) {
  a[0] = 42;
  return b[0];
}

enter image description here