LLVM汇编:将整数常量分配给寄存器

| 我正在编写一个使用LLVM作为后端的编译器,并且我的编译器生成以下LLVM汇编代码
@0 = private constant [25 x i8] c\"Hello World to %dntegers\\00\"

declare void @printf (i8*, i32)

define void @main () {
  %1 = getelementptr [25 x i8]* @0, i32 0, i32 0
  %2 = 1
  tail call void @printf(i8* %1, i32 %2)
  ret void
}
但我收到以下错误:
c.ll:8:8: error: expected instruction opcode
  %2 = 1
       ^
该文档显示了类似的示例。 你知道如何使它工作吗?目前,我正在使用:
  %2 = add i32 0, 1 ; FIXME
    
已邀请:
        如邓肯·桑兹(Duncan Sands)所指出的,请参阅LLVMdev讨论“如何为寄存器分配常量?”。   让我说,通常这样做是没有意义的。由于SSA格式,如果%x设置为5,则以后无法将其设置为其他值。因此,在所有使用%x的地方,您都可以直接在其中使用5。常见的情况是您有一个寄存器%x,并且由于执行了优化,您发现实际上%x始终具有值5。您可以在所有位置使用RAUW(也称为replaceAllUsesWith方法)将%x替换为5。 线程确实产生了一些直接使用常量的替代方法: 使用
alloca
获取指针,将其存储到该指针,然后根据需要加载该值。 创建一个指向该常量的全局指针,然后根据需要加载该值。 有人指出,“ 3”方法将在优化后最终使用寄存器。 无论如何,直接使用@ SK-logic建议的常量似乎是最干净的解决方案。     
        %1未命名。请改用%name_here。     

要回复问题请先登录注册