如何在函数转换过程中转换函数后更新分析过程并从中获取分析结果



想知道在修改函数后,如何在转换过程中更新和获得分析结果。我不想回到管道中,对所有函数进行分析。它效率低下。

例如:编写一个pass来修改函数中的一些ir,然后从分析pass中获得结果并再次进行转换。

效率低下有很多方面。一个教我编程的人说(引用记忆(";不要为同一事物维护两个数据结构并并行转换它们;当一个错误引入分歧时,修复该错误往往需要花费大量时间;。当然,这是开发人员的时间,而不是CPU的时间。

LLVM的通行证管理器在通行证需要时按需运行分析通行证,每个通行证通过从其run()返回合适的值来报告其保留的分析。然后,通行证管理器可以重新运行分析,如果没有什么需要,则可以不重新运行。一个或几个分析允许通行证修改其数据结构,我记不清了,但我认为要么是LoopInfo,要么是Dominator。如果你在任何其他分析通行证中测量出显著的不足,我相信类似的补丁会受到欢迎。

在lib/Transforms目录中有许多使用此功能的代码示例,搜索AM.getResult并查看周围的函数。

这取决于分析。它们中的一些具有API,允许您更新它们的分析以响应转换所做的更改。在LLVM中,我们通常会查看实际的传递管道,并查找在转换前后需要的分析不保留分析的情况,然后教它这样做。你应该查看你想要保留哪些分析,以及它们在API中为IR更新提供了什么。最坏的情况是,您可能还必须将其添加到分析中。

最新更新