2011-12-01 44 views
2

有没有一种方法可以在llvm中使用静态分析,我可以找出一个变量是否是其他变量的特定函数?例如:在cuda程序中,我想查找给定的变量tid,它是否存储全局线程ID或不是?LLVM:找出变量是否是其他变量的函数

int tid = blockIdx.x * blockDim.x + threadId.x; 

编辑:我想,既然我可以写一通,其分析程序,并查看是否有任何分歧或数组访问基于此全局ID单独,而不是像块标识或局部的threadId其他值。我试图找出更改cuda程序的gridDim,blockDim不会更改程序输出的情况,例如向量添加,我可以使用gridDim 128,blockDim 4或gridDim 8,blockDim 64。不受影响。 Iam在llvm中这样做是因为我试图使用一个名为ocelot的编译框架,它将cuda转换为x86。

回答

2

我能找到的最接近的是memdeps pass,但这主要是关于内存上的其他操作,它不一定对应于通常意义上的“变量”操作 - 它们可能在寄存器中。这似乎是一个合理的标准依赖分析问题,但是,也许您可​​以根据需要修改此通行证。 alias analysis遍也可能有帮助,尽管不存在阻止变量彼此混淆的操作(例如,副本,算术)。

顺便说一句,你的问题是相当不明确的。这通常是一种分析(例如别名分析),它会使源语言(例如cuda)更有意义,而不是目标语言(例如LLVM)。

+0

谢谢,但我不明白它是如何指定的。任何澄清是必需的?我需要在字节码级应用通行证。 – excray

+0

在这种情况下,提供您希望能够分析的示例LLVM源代码(如LLVM ASM)可能会更有帮助。 “发现”也是模糊的......你想用这种分析做什么?为什么它必须在字节码级别?这个作业有没有机会? – Gian