我正在编写 llvm ir,但在取消引用指针时遇到问题。 如何确定指针的内部类型并取消引用指针? 示例:
let a i32 = 0;
let b *i32 = &a;
*b = 1;
let c i32 = 0;
b = &c;
*b = 1;
我想编写代码来处理所有这些场景。
您需要告诉 LLVM 类型,通常基于表示程序的抽象语法树中的信息。
LLVM 的指针就是指针,这在汇编语言中很常见。 store 构造函数生成一条指令,写入与您在
value
参数中提供的位数一样多的位,load 构造函数采用类型参数,结果将具有该类型(并从内存中读取正确的位数) ,GEP::Create函数将指针类型作为第一个参数,并据此进行计算,等等。
LLVM 到版本 9 (IIRC) 是不同的,但我现在不想讨论这个故事。