【问题标题】:convert to LLVM IR: how to create virtual register instead of allocate a stack variable?转换为 LLVM IR:如何创建虚拟寄存器而不是分配堆栈变量?
【发布时间】:2012-10-23 14:28:25
【问题描述】:

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

我的 IR 是这样的:

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

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

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

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

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

【问题讨论】:

  • AFAIK,你不应该关心这个。只需使用 allocas 和 codegen/optimizer 即可为您完成工作。

标签: llvm


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-16
    • 2012-11-20
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多