2012-02-11 67 views
1
的死代码清除删除的指令

我在LLVM通产生IR这样的:通过LLVM

%5 = icmp eq i32 %4, 0 
%7 = or i1 %5, %5 
... 

由于实际上不需要or指令(死码),我更换了所有出现的%7%5。现在,or指令应该被删除。我是否可以拨打死码消除从我的通行证中传递LLVM,还是有任何方法可以删除那条or指令?

回答

2

与LLVM的设计理念更为一致的解决方案是,不要在中替换通过,而是让InstCombine完成这项工作。那么你不需要担心运行DCE。

例如:

>cat foo.ll 
define i32 @foo(i32 %a, i32 %b) #0 { 
entry: 
    %or = or i32 %a, %a 
    ret i32 %or 
} 
> opt -S -instcombine < foo.ll 
define i32 @foo(i32 %a, i32 %b) #0 { 
entry: 
    ret i32 %a 
} 
1

你为什么不在通过经理之后安排DCE跑步?让它做它的分析并决定它想要扔掉的东西。