LLVM非本地内存依赖性分析

时间:2016-06-18 12:52:21

标签: c++ llvm

我正在编写一个需要分析内存依赖性的LLVM传递。传递需要找到一个内存读取每个可以定义此内存的指令。例如:

int foo(){
   int x = 123;

   if(getchar()){
        x = 321;
   }

   return x;
}

在这种情况下,pass在返回时从内存加载x时需要找到x的两个定义。我在传递中使用了以下代码。

MemoryDependenceAnalysis &MDA = getAnalysis<MemoryDependenceAnalysis>();

if (isa<LoadInst>(i)) {
    MemDepResult d = MDA.getDependency(&i);

    if (d.isNonLocal()) {
        SmallVector<NonLocalDepResult, 4> result;
        MDA.getNonLocalPointerDependency(&i, result);

        for (SmallVectorImpl<NonLocalDepResult>::iterator it=result.begin() ; it < result.end(); it++ ) {
            MemDepResult dd = it->getResult();

            if (dd.isUnknown())
                errs() << "Unknown\n"; //result always unknown
            }
        }
    }
}

MDA.getDependency()为我提供了一个本地(在同一个基本块中)的依赖关系的正确结果。但是getNonLocalPointerDependency()总是返回空指针。

如何让LLVM找到可以定义加载指令内存的每个商店?

0 个答案:

没有答案