我正在尝试使用LLVM IR作为编程AVR芯片的程序集的替代方案,但我遇到了一个绊脚石。
我有以下工作代码:
target triple = "avr-atmel-none"
define void @main() {
%1 = load i8, i8* inttoptr (i8 34 to i8*)
%or = or i8 %1, 1
store i8 %or, i8* inttoptr (i8 34 to i8*)
ret void
}
注意inttoptr (i8 34 to i8*)
- 这是我芯片上的内存映射IO位置,我会与之进行很多交互,所以我想给它起一个像@PORTA
这样的名字。但是,我找不到一种方法来将全局变量初始化为指向特定的内存地址。此不有效:
@PORTA = constant i8* inttoptr (i8 34 to i8*)
初始化指针变量@PORTA
的内容,而不是创建指向该地址的内容。
是否可以在LLVM IR中为某个内存地址创建全局别名?如果没有,是否有其他快捷方式可以让我为这些名称添加别名?
答案 0 :(得分:-1)
你真的需要在IR级别创建这样的别名吗? LLVM IR并不适合手动编写。
如果要从C ++ API生成代码,那么只需将inttoptr
常量表达式设为全局并在任何您喜欢的地方使用它:
ConstantExpr* porta = ...
void foo()
{
new LoadInst(..., porta);
...
new StoreInst(..., porta);
}