Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
llvm alloca依赖项_Llvm - Fatal编程技术网

llvm alloca依赖项

llvm alloca依赖项,llvm,Llvm,我试图从pass中确定某些加载指令对应的Alloca指令(可以在前面的其他块中)。链可以是这样的:TargetLoad(var)->使用var(或对var的依赖关系)->alloca(var)的其他存储/加载。,链接到几个基本块上。你知道我怎么做吗 我尝试使用依赖性分析和记忆依赖性分析的方法,但结果不正确。例如,MemoryDependenceAnalysis::getDependency应该适合使用选项“Def”,但只适用于存储,不适用于加载。在尝试使用MemoryDependenceAnal

我试图从pass中确定某些加载指令对应的Alloca指令(可以在前面的其他块中)。链可以是这样的:
TargetLoad(var)->使用var(或对var的依赖关系)->alloca(var)的其他存储/加载。
,链接到几个基本块上。你知道我怎么做吗

我尝试使用依赖性分析和记忆依赖性分析的方法,但结果不正确。例如,
MemoryDependenceAnalysis::getDependency
应该适合使用选项“Def”,但只适用于存储,不适用于加载。在尝试使用
MemoryDependenceAnalysis::getNonLocalPointerDependency
MemoryDependenceAnalysis::getPointerDependencyFrom
时,我还有一个segfault。当我尝试使用MemDepResult::getDef()检查结果时,加载指令的结果是相同的指令!这取决于它本身,这很奇怪,因为它使用的是一个先前在代码中定义的变量

在目标\u加载\u指令使用的所有变量和所有分配的变量之间进行交集以识别公共部分的替代方案不是一个选项。因为可能会有类似于:
alloca(a)。。。c=a*b+4。。。。加载(c)

看起来DependenceAnalysis::dependens()也不适合我的通行证。下一行代码仅供参考:
if(DA.dependens(allocainstraray[i],loadinstraray[j],true))
始终为false。在某些情况下,这应该是正确的。我想我没有正确地使用它

但是,我假设depends()对Alloca不起作用。所以我检查了保存在数组中的所有加载指令之间的依赖关系。有些结果并不像它们应该的那样基于加载的变量。例如:
LOAD%3=LOAD i32*%c,align 4依赖于%1=LOAD i32*%j,align 4
。如你所见,一个加载c,一个加载j。在我的Test.cpp目标代码中,j和c之间没有依赖关系。可能相关性不是基于所使用的变量/内存位置


谢谢你的建议

首先,使用ICMP指令的
getOperator(0)
getOperator(1)
。如果存在
isa
有效,则将其强制转换为
LoadInst
getPointerOperand()
将获取值*,该值是搜索的实际变量。 其次,在加载指令和
Alloca
指令之间执行相同的过程
GetOperator(0)
加载时应用会给出相应的
Alloca
指令。 最后,通过检查依赖关系将两个结果链接在一起