在llvm中有没有办法使用静态分析,我可以找出一个变量是否是其他变量的特定函数?
例如:在cuda程序中,我想知道给定变量tid
,它是否存储了全局线程ID?
int tid = blockIdx.x * blockDim.x + threadId.x;
编辑:我想知道我是否可以编写一个分析程序的传递,看看是否有任何分歧或数组访问仅基于此全局ID而不是基于其他值,如blockID或本地threadId。我试图找出更改cuda程序的gridDim的情况,blockDim不会改变程序输出,例如矢量添加,我可以将gridDim设为128,blockDim设为4或gridDim设为8,blockDim设为64。输出不受影响。我在llvm中这样做,因为我正在尝试使用一个名为ocelot的编译框架,它将cuda转换为x86。
答案 0 :(得分:2)
我能找到的最接近的是memdeps传递,但这主要是关于内存上的其他操作,它不一定对应于通常意义上的“变量”操作 - 它们可能在寄存器中。然而,它似乎是一个合理的标准依赖性分析问题,所以也许您可以根据需要修改此传递。 alias analysis次传递也可能有用,但不存在阻止变量相互混叠的操作(例如,副本,算术)。
顺便提一下,您的问题相当不明确。这通常是一种分析(例如别名分析),它在源语言(例如cuda)中更有意义,而不是在目标语言(例如LLVM)中。