如何解决SplitEdge之后的LLVM区域
我有以下CFG。
此CFG的区域为
。[0] entry => if.end12
[1] if.else => if.end
我正在进行的优化过程要求if.then
块为LLVM区域。因此,我使用了SplitEdge函数(在BasicBlockUtils中)来分割边缘if.then -> if.end12
。现在我有以下CFG,
但是我的地区仍然是
[0] entry => if.end12
[1] if.else => if.end
if.then=>if.then.split
不是区域。有人可以解释为什么这不是LLVM区域吗?这是单入口单出口控制流程。为什么不是地区?
以下方法给我分割if.then -> if.end12
后在函数上运行时出现运行时错误,
regioninfo &RI = getAnalysis<regioninfoPass>().getregioninfo();
DominatorTree &DT = getAnalysis<DominatorTreeWrapperPass>().getDomTree();
DominanceFrontier &DF = getAnalysis<DominanceFrontierWrapperPass>().getDominanceFrontier();
PostDominatorTree &PDT = getAnalysis<PostDominatorTreeWrapperPass>().getPostDomTree();
DT.recalculate(F);
PDT.recalculate(F);
RI.recalculate(F,&DT,&PDT,&DF);
LLVM版本11.0.0中的运行时错误
0. Program arguments: /home/workspace/llvm_install/bin/opt -load /home/workspace/llvm-project/build/lib/LLVMCFMerger.so -cfmerger -view-cfg-only
1. Running pass 'Function Pass Manager' on module '<stdin>'.
2. Running pass on function '@foo'
#0 0x000056094798307a llvm::sys::printstacktrace(llvm::raw_ostream&) (/home/workspace/llvm_install/bin/opt+0x299407a)
#1 0x0000560947980df4 llvm::sys::RunSignalHandlers() (/home/workspace/llvm_install/bin/opt+0x2991df4)
#2 0x0000560947980f43 SignalHandler(int) (/home/workspace/llvm_install/bin/opt+0x2991f43)
#3 0x00007fc487be33c0 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x153c0)
#4 0x0000560946b7a6a0 llvm::regioninfoBase<llvm::RegionTraits<llvm::Function> >::isRegion(llvm::BasicBlock*,llvm::BasicBlock*) const
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。