如何识别 LLVM 位码中的循环

How do I identify a loop in LLVM bitcode?

本文关键字:循环 LLVM 何识别 识别      更新时间:2023-10-16

我有一个LLVM位码文件,我正在对它运行循环传递。每次我到达一个循环("runOnLoop"(时,我都会提取有关循环体的几条信息(即主体中的指令数(并打印出来。但是,我需要一种方法将此信息与特定循环相关联 - 换句话说,我需要打印从中提取信息的循环的"名称"。

我不确定"名称"是什么意思,但一种方法是打印与环路锁存块或类似内容相关的调试信息(行号/列(。

另一种方法是使用元数据来唯一标识每个循环,并将提取的信息与该标识符相关联。

我也有类似的需求,所以我为此创建了一个通行证。请注意,此方法对编译器优化很敏感,并且在发生这种情况时不会保留 ID(例如,如果包含循环的函数是内联的(。为获得最佳结果(更接近源(,请在使用 -O0 编译的 IR 上使用它。此外,当您完成信息收集后,可以应用优化。

但是,对于简单的事情,我会选择第一种方法。