loops - 从函数/模块中提取 llvm 位码中的循环
问题描述
是否可以从 llvm 位码中提取函数或模块内的循环?
我正在将 LLVM 迁移LoopPass
到独立的位码读取器/写入器应用程序。迁移的主要原因是调试 opt pass 的困难,但也有其他原因。我搜索了 Function/Module/BasicBlock 的 API,但找不到任何接近的东西。
由于 LoopPass 确实做到了这一点,我很确定这是可能的,对吧?我的意思是这样的:
Function f;
for (auto loop = f.getLoops().begin(); loop != f.getLoops().end(); loop++)
{
// process loop here
}
解决方案
您想要的称为LoopInfo,您可以通过支配树创建它:
DominatorTree dt(function);
LoopInfo li(dt);
for(Instruction * foo : bar) {
Loop * l = li.getLoopFor(foo->getParent());
推荐阅读
- solidity - “路径”参数必须是字符串类型。收到未定义。未能验证 1 份合同
- reactjs - 对象作为 React 子对象无效(找到:带有键 {en, nl} 的对象)。如果您打算渲染一组孩子,请改用数组
- python - 重新启动 jupyterhub 服务是否会清除 jupyterhub_config.py 文件中设置的环境变量?
- javascript - Material-UI 选项卡未在页面渲染上显示组件报告
- node.js - NodeJS request.files 返回 null
- javascript - TypeError:event.bind 不是函数
- reactjs - 如何在没有状态值更新的情况下停止 React 重新渲染?
- javascript - Devextreme DxDropDownButton 在我重新加载应用程序的网页后消失
- java - Kafka 自定义反序列化器
- python-3.x - 我正在尝试使用 python 列出/复制具有模式的文件,例如 name_123.jpg 从 1 个文件夹到其他文件夹