我正在使用llvm制作ADCE优化代码:
” 删除指令I时,请确保通知我使用的指令我已被删除,以便他们不再将其称为用户。可以按照以下步骤完成: I-> dropAllReferences(); 使用迭代器从基本块中删除指令会使该迭代器无效。在删除指令之前,请确保跟踪下一个迭代器。 “
我尝试在下面写下代码,但是仍然出现错误。
else if (!isTriviallyLive(Inst) && Inst->isSafeToRemove()) {
DI = Inst->eraseFromParent();
Inst->dropAllReferences();
}
bool isTriviallyLive(Instruction *I)
{
if (I->mayHaveSideEffects() || I->mayWriteToMemory() || I->isTerminator())
return true;
return false;
}
错误:在Def被销毁后,使用仍然停留:%r7 =加载 i32,i32 *%rx,对齐4
在Def被销毁后,仍然使用:%r4 =加载i32,i32 *%rx,对齐4
在Def被销毁后仍然使用:%r1 =加载i32,i32 *%rx,对齐4
在Def被销毁后,仍然使用:%r0 =加载i32,i32 *%rx,对齐4
在Def被销毁后仍然使用:存储i32%x,i32 *%rx,对齐4
断言失败:use_empty()&&“销毁值后仍保留使用!”