我想確定從我的通過某些加載指令相應的Alloca指令(可以在其他以前的塊)。鏈可以是這樣的:TargetLoad(var) -> other stores/loads that use var (or dependencies on var) -> alloca(var).
,鏈接在幾個基本塊上。你知道我該怎麼做?llvm alloca依賴關係
我試圖使用DependenceAnalysis和MemoryDependenceAnalysis中的方法,但結果不正確。例如,MemoryDependenceAnalysis::getDependency
應該選擇「Def」選項,但只適用於商店,不適用於裝載。當我試圖使用MemoryDependenceAnalysis::getNonLocalPointerDependency
或MemoryDependenceAnalysis::getPointerDependencyFrom
時,我也有段錯誤。當我嘗試使用MemDepResult :: getDef()檢查結果時,加載指令的結果是相同的指令!所以它取決於它本身,因爲它使用了一個先前在代碼中定義的變量,這很奇怪。
使交叉點識別target_load_instructions和所有分配的變量所使用的所有變量之間的公共部分的替代方法不是一個選項。因爲有可能是這樣的:alloca(a) ... c=a*b+4 .... load(c)
。
DependenceAnalysis :: depends()對我的傳球似乎也不好。下一行代碼僅供參考:if(DA.depends(allocaInstrArray[i],loadInstrArray[j],true))
始終爲false。在幾種情況下應該是這樣。我認爲我沒有正確使用它。
但是,我做了可能depends()對Alloca不起作用的假設。所以我檢查了保存在數組中的所有Load指令之間的依賴關係。一些結果不是基於加載的變量,因爲他們應該這樣做。例如:LOAD %3 = load i32* %c, align 4 IS DEPENDENT ON %1 = load i32* %j, align 4
。正如你所看到的,一個是加載c,一個是加載j。在我的Test.cpp目標代碼中,j和c之間沒有依賴關係。也許依賴不是基於使用的變量/內存位置?
謝謝你的任何建議!