我正在努力将另一个IR转换为llvm IR。
我的IR是这样的:
a = 1;
b = a;
a = a + 1;
目前,我正在使用alloca在我的IR中创建变量(这里是“a”和“b”)。
但是,alloca可能太重了,它会引入大量的加载存储指令。如果功能很大,这将是一个问题。实际上,对于我的情况,大多数变量都是寄存器宽度。所以我只想让它们成为一个带名字的虚拟寄存器。
有谁知道如何创建虚拟寄存器(变量)而不是内存变量?
我的意思是如何避免使用“alloca”?
答案 0 :(得分:4)
你不应该。生成SSA代码是一个非常困难的问题,因此它在LLVM传递中为所有前端解决了一次。您应该使用alloca
并加载/存储,然后运行mem2reg
传递以将其转换为SSA变量。 Clang也这样做(将您的示例代码粘贴在C函数中,而compile it没有优化)。