1

我正在将另一个 IR 转换为 llvm IR。

我的 IR 是这样的:

a = 1;
b = a;
a = a + 1;

现在,我正在使用 alloca 在我的 IR 中创建变量(这里是“a”和“b”)。

但是,alloca 可能太重了,它会引入大量的加载存储指令。如果功能很大,这将是一个问题。实际上,就我而言,大多数变量都是寄存器宽度。所以我只想让它们成为一个有名字的虚拟寄存器。

有人知道如何创建虚拟寄存器(变量)而不是内存变量吗?

我的意思是如何避免使用“alloca”?

4

1 回答 1

4

你不应该这样做。生成 SSA 代码是一个相当困难的问题,因此它在 LLVM 通道中的所有前端都解决了一次。您应该使用alloca和加载/存储,然后运行mem2reg传递将它们转换为 SSA 变量。Clang 也这样做(将您的示例代码粘贴在 C 函数中,并在不进行优化的情况下对其进行编译)。

于 2012-10-23T17:15:29.983 回答