2

LLVM での私のパスは、次のIRようなものを生成します。

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

or命令は実際には必要ない (デッド コード) ため、出現するすべての を に置き換えまし%7%5。これで、or命令が削除されます。自分のパスから LLVM のDead Code Eliminationパスを呼び出すことはできますか、またはその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 に答える