无法擦除LLVM指令

无法擦除LLVM指令,llvm,llvm-ir,Llvm,Llvm Ir,我有以下LLVM代码段 invoke.cont22: ; preds = %invoke.cont14 %coerce.dive34 = getelementptr %"class.thrust::iterator_adaptor.33"* %coerce.dive33, i32 0, i32 0 %8 = load i32** %coerce.dive34 %coerce.dive39 = getelementp

我有以下LLVM代码段

invoke.cont22:                                    ; preds = %invoke.cont14
  %coerce.dive34 = getelementptr %"class.thrust::iterator_adaptor.33"* %coerce.dive33, i32 0, i32 0
  %8 = load i32** %coerce.dive34
  %coerce.dive39 = getelementptr %"class.thrust::iterator_adaptor.33"* %coerce.dive38, i32 0, i32 0
  %9 = load i32** %coerce.dive39
  %coerce.dive44 = getelementptr %"class.thrust::iterator_adaptor.33"* %coerce.dive43, i32 0, i32 0
  %10 = load i32** %coerce.dive44
  %coerce.dive45 = getelementptr %struct.my_functor* %agg.tmp29, i32 0, i32 0
  %11 = load i32* %coerce.dive45
  %call47 = invoke i32* @_ZN6thrust9transformINS_6detail15normal_iteratorINS_10device_ptrIiEEEES5_10my_functorEET0_T_S8_S7_T1_(i32* %8, i32* %9, i32* %10, i32 %11)
          to label %invoke.cont46 unwind label %lpad
我想从中抹去

%call47 = invoke i32* @_ZN6thrust9transformINS_6detail15normal_iteratorINS_10device_ptrIiEEEES5_10my_functorEET0_T_S8_S7_T1_(i32* %8, i32* %9, i32* %10, i32 %11)
但当我在此指令上调用橡皮擦FromParent()时,它抛出以下错误:

函数“main”中的基本块没有终止符


如何正确地删除它?

我想,这是因为基本块以
invoke
指令结尾,所以它充当BB的终止符。所以当你移除它时,你的BB会丢失它的终止符,这是一个错误,因为每个BasicBlock都应该以终止符指令结束


作为解决方案,您可以在删除
invoke

Correct之后添加
ret
指令。另外,作为一种快速破解,您可以使用
不可检查的
指令,它也是一个终止符。