【问题标题】:Alias Analysis in LLVMLLVM 中的别名分析
【发布时间】:2012-03-07 13:55:20
【问题描述】:

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

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 源代码中是否有任何文件包含执行类似操作的代码。谢谢:)

【问题讨论】:

    标签: c++ compiler-construction llvm


    【解决方案1】:

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

    类似这样:opt -globalsmodref-aa -your_pass ...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多