我试图运行简化CFG通行证在LLVM和运行我自己的IR变换一个删除后不可到达的基本块,但我不断收到 错误 -simplifyCFG传递LLVM
虽然删除: 8-18 *%G
使用还停留各地的防守被破坏后:商店I8 0,6-18 *%G
我很清楚的是什么意思,但不是的全部目的“简化CFGPass”删除无法访问的bas ic块为我们?为什么一定要抛出这个错误?我假设它应该能够管理所有use-def依赖关系,并删除下面无法访问的“continuation”基本块中的说明。
以下是相关的IR -
entry:
%a3 = alloca i32
store i32 %a, i32* %a3
%a4 = load i32, i32* %a3
%ifcond = icmp ne i32 %a4, 0
br i1 %ifcond, label %then, label %else
then: ; preds = %entry
%gclone1 = alloca i32
store i32 0, i32* %gclone1
ret i5 0
else: ; preds = %entry
%gclone4 = alloca i64
store i64 0, i64* %gclone4
ret i5 0
continuation: ; No predecessors!
%iftmp = phi i32 [ 32, %then ], [ 64, %else ], !range !0
%datasize = alloca i32
store i32 %iftmp, i32* %datasize
%g = alloca i8 ---------------------> Issue
store i8 0, i8* %g ---------------------> Issue
ret i5 0
}
能有人请解释为什么这个错误影响了? API是否应该处理这个问题?
当您运行转换或当您运行simplifyCFGPass是否会出现这个错误? – deLta
我运行CFG通行证(使用FPM->运行(* F)) ......我的传球简直就是一些C++代码,改变了IR,我不使用它在可选工具或类似的东西... – mal