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 用户应忽略的细节。
我已经阅读了 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 用户应忽略的细节。