LLVM中的ADCE因使用Def后卡住而崩溃

时间:2019-04-30 04:42:49

标签: llvm-clang

我正在使用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()&&“销毁值后仍保留使用!”

0 个答案:

没有答案