无法擦除 LLVM 指令
Not able to erase LLVM instruction
我有以下 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)
但是当我在此指令上调用 eraseFromParent() 时,它抛出以下错误:
Basic Block in function 'main' does not have terminator!
如何正确删除它?
我猜,是因为你的BasicBlock以invoke
指令结束,所以它作为BB的终结者。所以当你删除它时,你的 BB 会丢失它的终止符,这是一个错误,因为每个 BasicBlock 都应该以终止符指令结束。
作为解决方案,可以在删除invoke
后添加ret
指令。
我有以下 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)
但是当我在此指令上调用 eraseFromParent() 时,它抛出以下错误:
Basic Block in function 'main' does not have terminator!
如何正确删除它?
我猜,是因为你的BasicBlock以invoke
指令结束,所以它作为BB的终结者。所以当你删除它时,你的 BB 会丢失它的终止符,这是一个错误,因为每个 BasicBlock 都应该以终止符指令结束。
作为解决方案,可以在删除invoke
后添加ret
指令。