set_value_name 与 llvm global_context 相关的是什么

What is set_value_name doing in relation to llvm global_context

我已经阅读了 llvm 文档here,但仍然感到困惑。

所以我认为当在一堆 let...in 语句的顶部调用 llvm.global_context() 时,这会创建“所有 LLVM 全局数据的顶级容器”。 (我不完全理解这意味着为所有 LLVM 数据创建一个顶级容器..)

稍后如果我看到 llvm.set_value_name n p 其中 p 的类型为 llvalue

这是否意味着我已将任何等于 p 的 llvalue 的名称设置为 n,在我声明的上下文中?

我对llvm的整体理解很薄弱

上下文是拥有和管理模块、类型和常量的对象。 i32 32 在上下文中等于 i32 32,但在上下文中不等于,因为类型和常量都是在上下文中定义的。 RAM 中可能同时有两个上下文,具有独立的类型集,事实上,在某些 JIT 系统中这种情况经常发生。

粗略概述:指令存在于基本块中,每个指令都以终止符指令(跳转、return 等)结束。基本块存在于函数中。函数和全局变量存在于模块中。模块、类型和常量存在于上下文中。

有很多复杂的细节。名称所在的位置就是其中之一——从概念上讲,名称对于命名值的某些父级是唯一的,但名称的存储是在上下文中实现的,即使这在体系结构上不是必需的。正在实施的 IMO 名称有一个 LLVM 用户应忽略的细节。