我常常对SelectionDAG和SelectionDAGISel之间的关系感到困惑,还有其他一些相关的类如SelectionDAGLowering。理解他们在高层次上的关系非常有用。
答案 0 :(得分:2)
首先,我想给你一些关于指令选择的精彩链接:
简而言之,SelectionDAG
是一种具有显式指令依赖性的内部表示。它用于指令选择和调度(DAG example)。
SelectionDAGISel
是一个传递,它将与机器无关的LLVM IR转换为机器相关的表示形式(MachineFunction
,MachineBasicBlock
,MachineInstr
),即传递构建SelectionDAG
并执行指令选择和调度。它由特定目标子类化,例如ARMDAGToDAGISel
。
SelectionDAGBuilder
是一个从LLVM IR构建SelectionDAG
的类。
我不确定SelectionDAGLowering
。它似乎是SelectionDAGBuilder
类的旧名称。