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