如何查看llvm转换过程所做的更改

如何查看llvm转换过程所做的更改,llvm,llvm-gcc,llvm-clang,llvm-3.0,llvm-ir,Llvm,Llvm Gcc,Llvm Clang,Llvm 3.0,Llvm Ir,如何在c程序中查看转换过程(如死代码消除)所做的更改。例如,如果我在终端上运行以下命令,它将创建一个.bc文件,通过该文件我可以查看IR。但是如何在c程序中看到-dce所做的更改。 命令:$opt-in.bc-o-out.bc-dce您无法看到在IR中所做的更改反映在您的C代码中-没有转换回来。(LLVM以前有一个C后端,但是(1)它不再受支持,(2)它只保留程序的语义,而不是其形式) 您可以使用调试信息进行编译,并在DCE之后从LLVM端查询该信息,以尝试推断该过程如何影响源代码 或者,如果能

如何在c程序中查看转换过程(如死代码消除)所做的更改。例如,如果我在终端上运行以下命令,它将创建一个.bc文件,通过该文件我可以查看IR。但是如何在c程序中看到-dce所做的更改。
命令:$opt-in.bc-o-out.bc-dce

您无法看到在IR中所做的更改反映在您的C代码中-没有转换回来。(LLVM以前有一个C后端,但是(1)它不再受支持,(2)它只保留程序的语义,而不是其形式)

您可以使用调试信息进行编译,并在DCE之后从LLVM端查询该信息,以尝试推断该过程如何影响源代码


或者,如果能够直接在源代码上进行转换对您来说很重要,那么您应该使用类似于Clang的东西-但是您必须自己在那里实现很多逻辑,并且您不能享受LLVM的优化过程。

我想您看不到c程序中的更改


LLVM转换通过LLVM IR上的工作。因此,您可以生成与c程序对应的LLVM IR(.ll格式)。当获得pass的.bc文件输出时,可以将.bc文件转换为.ll格式。然后您可以比较这两个.ll文件,您可以看到通过过程所做的更改(如:dce)。

如果您正在应用dce过程并希望识别通过过程所做的修改,我建议使用llvm nm。llvm nm允许您查看位代码文件中的符号,包括函数和数据对象。通过比较原始位码文件和优化版本的llvm nm输出,您可以识别DCE过程中删除的函数

我想做一个示例过程,用于提取循环信息,如循环感应变量名称及其边界。因此,应该如何开始编写过程,因为循环中有很多文件,如LoopPass、LoopInfo、LoopExtractor等,我刚刚开始思考如何使用函数,哪个函数或哪个文件对我有用。我已经浏览了这个链接:@user2167322要获得最佳结果,请在stackoverflow上提出一个新问题,看看是否有人可以帮助您。