LLVM IR Class Hierarchy
本文大量使用现有博客,并大量使用GPT问答式生成回答作为思考路径,并辅以实践校对,有问题建议实践后大声辱骂openai!(不关塔菲的事哦~)
三个简单的基础类,构成了IR节点的def-use链
%a %b ; 两个定义(Value)
\ / ; def → use 的边
\ /
%c = add i32 %a, %b ; 这个指令既是 Value 又是 User
Value、Use、User通过相互使用并连接的方式存在在LLVM IR的中
简单理解
Value 是 IR 中任意存在的节点,是一切 IR 的基础
Use 类很简单,表示和记录 Value 与 Value 之间的关系,他是一个双端指针,但两个节点却有指向性关系,即一个为 User,一个为 be used Value
User 是 Value 关系的一极,即 User 也是 Value,User 可以理解为因其 Value 派生出的类型包含了使用其他 Value 的一种Value。
- 在 def-use 视角里,边的方向规定为 “定义 → 使用”。
- 当我们站在 “User” 这个顶点看时,它本身是“使用者”,所以有 多条边指向自己 —— 这就是「有输入边」。
Value
USE
USER
因 IR 指令的的种类派生与功能实现,Value 会使用其他 Value,而这中间发起使用的 Value 即为 User,被使用的 Value 在本层 def-use 中仅看作一个神秘的 Value。当然如果被使用的 Value 也有 def-use 关系,就是另一个 User 链去看待了。

浙公网安备 33010602011771号