作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了以下 C 代码,其中变量 X 被分配了两次:
int main()
{
int x;
x = 10;
x = 20;
return 0;
}
使用以下命令编译并生成 IR 表示
clang -emit-llvm -c ssa.c
IR 生成
; 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 IR 变量,并分别分配两个值 10 和 20。我们是否应该使用某些特定选项进行编译以获得 SSA IR 表示,或者我对 IR 表示的理解不正确?请指教。
编辑:按照一个答案中的建议,使用 -mem2reg 优化传递给我以下输出
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
; Function Attrs: nounwind uwtable
define i32 @main() #0 {
entry:
ret i32 0
}
看起来整个 x 分配已经使用 mem2reg 优化进行了优化。还有其他方法可以生成并保留不同的 x 值吗?
最佳答案
关于clang - 如何生成 LLVM SSA 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44092972/
我是一名优秀的程序员,十分优秀!