死んだ命令を取り除くために活性解析を実装しようとしています。私はisInstructionTriviallyDead()
が存在することを知っていますが、def-use(またはuse-def)チェーンを使ってコードを削除する方法を学びたいと思います。LLVM - 死活コードを取り除くLiveness分析
私が現在やっているやり方は、(inst_iterator
を使って)ブロック内のすべての命令を繰り返し実行していて、すべての命令をループしています。最終的には、命令が、私はそれが死んで検討し、何の使用を持っていない場合は、そのためeraseFromParent()
を使用して削除することができますこれは、次のようになります。
for (inst_iterator I = inst_begin(F), E = inst_end(F); I != E; ++I) {
bool deadInst = true;
Instruction *inst = &*I;
for (User* pUser : inst->users()) {
// If we enter this loop, we have at least one use, so instruction isn't dead
deadInst = false;
}
// deadInst is true if we didn't enter the loop, so has no uses
if (deadInst) {
inst->eraseFromParent();
}
}
問題が復帰命令がでassosciated何の用途を持っていない、ありますそれは(と私は確信していない他の定義がない)。しかし、意味的に間違ったコードにつながるので、リターン命令を削除すべきではありません。
ライブセンス解析で命令を削除する一般的な方法は大丈夫ですか?返品などの指示が削除されないようにするにはどうすればよいですか?
任意のポインタがはるかに高く評価されている:)
こんにちは。返信いただきありがとうございます。あなたはこれについてより多くの洞察を提供できますか? 'if(deadInst &&!inst-> isTerminator())'のような意味ですか?ターミネータ機能とは何ですか? – user3186023