llvm 中的持续传播

Constant propagation in llvm

我正在检查 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

我做错了什么?

与许多其他传递一样,恒定传播传递假设首先在代码中使用了 mem2reg