【问题标题】:Constant propagation in llvmllvm 中的持续传播
【发布时间】:2016-04-25 09:25:56
【问题描述】:

我正在使用以下程序检查 llvm 的常量传播传递 -sccp

int a,b,c;
a=1;
b=2;
c=a+b;

我期待一个输出

  %a = alloca i32, align 4
  %b = alloca i32, align 4
  %c = alloca i32, align 4
  store i32 1, i32* %a, align 4
  store i32 2, i32* %b, align 4
  store i32 3, i32* %c, align 4 //constant propagation

但我得到以下输出

  %a = alloca i32, align 4
  %b = alloca i32, align 4
  %c = alloca i32, align 4
  store i32 1, i32* %a, align 4
  store i32 2, i32* %b, align 4
  %0 = load i32, i32* %a, align 4
  %1 = load i32, i32* %b, align 4
  %add = add nsw i32 %0, %1 //no constant propagation
  store i32 %add, i32* %c, align 4

我在这里做错了什么?

【问题讨论】:

  • 在llvm中是否有任何pass来实现这种不断的传播

标签: compiler-construction llvm compiler-optimization llvm-clang


【解决方案1】:

与许多其他传递一样,常量传播传递假定首先在代码上使用mem2reg

【讨论】:

  • Oak 明白了,谢谢。但是是否存在 sccp 无法检测到常量的情况。
  • @RakeshNair 我敢肯定有一些案例 - 你刚刚证明它不会查看存储和加载 - 但我相信在实践中它很少会失败。
猜你喜欢
  • 2013-02-28
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
相关资源
最近更新 更多