LLVM での私のパスは、次のIR
ようなものを生成します。
%5 = icmp eq i32 %4, 0
%7 = or i1 %5, %5
...
or
命令は実際には必要ない (デッド コード) ため、出現するすべての を に置き換えまし%7
た%5
。これで、or
命令が削除されます。自分のパスから LLVM のDead Code Eliminationパスを呼び出すことはできますか、またはそのor
命令を削除する方法はありますか?
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
}