2011-12-01 68 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