在llvm ir pass中访问用户变量名

时间:2014-08-10 17:39:54

标签: compiler-construction llvm

我对llvm完全是新手。我想通过在其上写一个llvm传递来计算对用户定义变量的访问次数。

我需要知道如何获取源文件中的所有变量,而不是llvm ir生成的临时变量。我知道我可以遍历所有指令,看看它是否是一个加载存储指令[或者可以从内存中写入或读取的指令]。但我怎么知道哪些变量是用户定义的,哪些是临时变量?

1 个答案:

答案 0 :(得分:2)

您需要解决的关键是使用模块中嵌入的the source-level debug information

如果您想解决未优化代码的问题,您可能应该检查所有alloca指令,并且对于与变量关联的每条指令(通过llvm.dbg.declare),跟踪所有商店并加载到那个记忆中。

在优化的代码上,事情变得越来越麻烦 - 不仅因为现在你需要考虑llvm.dbg.value,而且因为访问该变量主要是间接的,所以你必须做更多的事情而不仅仅是检查值的使用位置。