gpt4 book ai didi

c++ - LLVM 中的别名分析

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:47:46 28 4
gpt4 key购买 nike

我正在尝试查找存储指令的指针操作数和函数参数之间的别名。这是代码,

virtual void getAnalysisUsage(AnalysisUsage &AU) const {

AU.addRequiredTransitive<AliasAnalysis>();
AU.addPreserved<AliasAnalysis>();
}

virtual bool runOnFunction(Function &F) {

AliasAnalysis &AA = getAnalysis<AliasAnalysis>();

for(Function::iterator i=F.begin();i!=F.end();++i){
for(BasicBlock::iterator j=i->begin();j!=i->end();++j)
{
if(dyn_cast<StoreInst>(j)){
const StoreInst *SI=dyn_cast<StoreInst>(j);

AliasAnalysis::Location LocA = AA.getLocation(SI);

const Value *si_v= SI->getPointerOperand();

for(Function::arg_iterator k=F.arg_begin(); k!=F.arg_end();++k)
{
Value *v=dyn_cast<Value>(k);

AliasAnalysis::Location loc=AliasAnalysis::Location(v);
AliasAnalysis::AliasResult ar=AA.alias(LocA,loc);

switch(ar)
{
case 0:errs()<< "NoAlias\n";
break;
///< No dependencies.
case 1:errs()<<"MayAlias\n"; ///< Anything goes
break;
case 2: errs()<<"PartialAlias\n";///< Pointers differ, but pointees overlap.
break;

case 3: errs()<<"MustAlias\n";
}
}
}

return true;
}
};
}

但即使存储指令的指针操作数未引用函数参数,我也会得到 MayAlias 结果。逻辑有问题吗? LLVM 源代码中是否有任何文件包含执行类似操作的代码。谢谢:)

最佳答案

AA 组的默认别名分析方法是 basicaa,它总是返回“may alias”。尝试指定 AA 方法(--globalsmodref-aa、-scev-aa、..)而不是让 opt 使用默认值。

像这样:opt -globalsmodref-aa -your_pass ...

关于c++ - LLVM 中的别名分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9602792/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com