2

我在 LLVM 中的传递会生成IR这样的结果:

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

由于or实际上不需要该指令(死代码),我将所有出现%7%5. 现在,该or指令应该被删除。我可以从我的通行证中调用LLVM 的死代码消除通行证,还是有什么方法可以删除该or指令?

4

2 回答 2

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
}
于 2013-05-26T06:30:53.293 回答
1

为什么不直接安排 DCE 在通行证管理器中运行通行证。让它进行分析并决定要丢弃什么。

于 2012-02-11T11:27:17.517 回答