LLVM if else优化
LLVM if else optimization
LLVM 会从此类代码中删除未使用的 else 吗?
if (some_var) {
some_var++;
}
else {
// i will do some day something here
}
因此,如果有人想知道 clang 正在通过优化创造巨大的魔力,并且可以使用以下方法检查这一切:
clang -c -mllvm -print-after-all -O2 test.c
对于以下代码,我得到了以下 IR 优化代码:
int a(int b) {
int i = 2;
if (b>=i) {
b++;
}
else{
}
return b;
}
define i32 @a(i32 %b) #0 {
%1 = icmp sgt i32 %b, 1
%2 = zext i1 %1 to i32
%.b = add nsw i32 %2, %b
ret i32 %.b
}
int a(int b) {
int i = 2;
if (b>=i) {
b++;
}
else{
b--;
}
return b;
}
define i32 @a(i32 %b) #0 {
%1 = icmp sgt i32 %b, 1
%.0.v = select i1 %1, i32 1, i32 -1
%.0 = add i32 %.0.v, %b
ret i32 %.0
}
这意味着它会删除未使用的其他内容。
LLVM 会从此类代码中删除未使用的 else 吗?
if (some_var) {
some_var++;
}
else {
// i will do some day something here
}
因此,如果有人想知道 clang 正在通过优化创造巨大的魔力,并且可以使用以下方法检查这一切:
clang -c -mllvm -print-after-all -O2 test.c
对于以下代码,我得到了以下 IR 优化代码:
int a(int b) {
int i = 2;
if (b>=i) {
b++;
}
else{
}
return b;
}
define i32 @a(i32 %b) #0 {
%1 = icmp sgt i32 %b, 1
%2 = zext i1 %1 to i32
%.b = add nsw i32 %2, %b
ret i32 %.b
}
int a(int b) {
int i = 2;
if (b>=i) {
b++;
}
else{
b--;
}
return b;
}
define i32 @a(i32 %b) #0 {
%1 = icmp sgt i32 %b, 1
%.0.v = select i1 %1, i32 1, i32 -1
%.0 = add i32 %.0.v, %b
ret i32 %.0
}
这意味着它会删除未使用的其他内容。