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 链去看待了。

posted @ 2025-06-27 00:49  PoperySang  阅读(9)  评论(0)    收藏  举报