首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何生成LLVM SSA格式

如何生成LLVM SSA格式
EN

Stack Overflow用户
提问于 2017-05-21 03:45:37
回答 1查看 2.5K关注 0票数 8

我编写了以下C代码,其中变量X被分配了两次:

代码语言:javascript
复制
int main()
{
        int x;
        x = 10;
        x = 20;
        return 0;
}

使用以下命令编译和生成IR表示

代码语言:javascript
复制
clang -emit-llvm -c ssa.c

红外产生

代码语言:javascript
复制
; Function Attrs: nounwind uwtable
define i32 @main() #0 {
entry:
  %retval = alloca i32, align 4
  %x = alloca i32, align 4
  store i32 0, i32* %retval
  store i32 10, i32* %x, align 4
  store i32 20, i32* %x, align 4
  ret i32 0
}

如果我对SSA格式的理解是正确的,那么在本例中,我们应该将x1和x2看作两个LLVM变量,它们分别生成并分配了两个值10和20。是否有一些具体的选项,我们应该编译,以获得SSA IR表示或我对IR表示的理解是不正确的?请给我建议。

编辑:按照一个答案中的建议,使用-mem2reg优化传递给我以下输出

代码语言:javascript
复制
clang -c -emit-llvm ssa.c -o ssa.bc
opt -mem2reg ssa.bc -o ssa.opt.bc
llvm-dis ssa.opt.bc
cat ssa.opt.ll

合成IR

代码语言:javascript
复制
; Function Attrs: nounwind uwtable
define i32 @main() #0 {
entry:
  ret i32 0
}

看起来整个x分配都是使用mem2reg优化优化的。还有其他方法来生成和保留不同的x值吗?

EN

回答 1

Stack Overflow用户

发布于 2017-05-21 07:53:17

LLVM将mem2regreg2mem转换代码传递给/从SSA表单。您可以使用opt工具运行它们。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44092972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档