首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从LLVM的MemoryDependenceAnalysis pass中获得更好的结果?

如何从LLVM的MemoryDependenceAnalysis pass中获得更好的结果?
EN

Stack Overflow用户
提问于 2015-06-25 09:06:17
回答 1查看 608关注 0票数 5

我正在尝试在我正在处理的自定义LLVM pass中使用LLVM内置MemoryDependenceAnalysis (MDA)的结果。给定一些从内存中读取的指令(例如,一个load ),我希望MDA告诉我之前可能定义或破坏它的所有指令。如果我对MDA文档的理解是正确的,那么MDA应该能够给我提供这些信息。然而,我很难得到我所需要的精度。下面是我一直在玩弄的一个简单测试程序的相关片段:

代码语言:javascript
复制
%1 = alloca i32, align 4
%result = alloca i32, align 4
%x = alloca i32, align 4
%xp = alloca i32*, align 8
store i32 0, i32* %1
store i32 5, i32* %result, align 4, !dbg !14
store i32 7, i32* %x, align 4, !dbg !16
store i32* %x, i32** %xp, align 8, !dbg !19
%2 = load i32* %x, align 4, !dbg !20
%3 = icmp eq i32 %2, 4, !dbg !20
br i1 %3, label %4, label %7, !dbg !22, !dataware.bbuid !23 

; <label>:4                                       ; preds = %0 
%5 = load i32** %xp, align 8, !dbg !24
%6 = load i32* %5, align 4, !dbg !26
store i32 %6, i32* %result, align 4, !dbg !27
br label %8, !dbg !28, !dataware.bbuid !29

; <label>:7                                       ; preds = %0
store i32 42, i32* %result, align 4, !dbg !30
br label %8, !dataware.bbuid !32

我用来运行分析的命令:

代码语言:javascript
复制
opt-3.6 -enable-tbaa -tbaa -basicaa -libcall-aa -scev-aa -globalsmodref-aa -domtree -memdep -print-memdeps -gvn -analyze test.bc

对于一些指令,我得到了预期的结果。例如,它告诉我%5 = load i32** %xp依赖于store i32* %x, i32** %xp。但是,它并不能确定%6 = load i32* %5是否依赖于store i32 7, i32* %x。以下是输出的一个片段:

代码语言:javascript
复制
  Def in block %0 from:   store i32* %x, i32** %xp, align 8, !dbg !19
%5 = load i32** %xp, align 8, !dbg !24

  Unknown in block %4
%6 = load i32* %5, align 4, !dbg !26

后一种情况(它显然不知道如何推理)似乎应该很容易检测到,即使是次优的别名分析。我该如何调查为什么MDA的结果不是最优的?对于获得更精确的结果,你有什么建议吗?我是否可以添加一些额外的分析过程来使MDA更好地工作?我使用的是opt 3.6.0 --也许MDA在这个版本中得到了改进?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-10-19 16:27:39

我得到了和你一样的结果。您可以使用更简单的指针分析结果来推断%5和%x mayalias,进而推断%x的存储可能是从%5加载的。

opt -basicaa -aa-eval -print-all-alias-modref-info test.bc -disable-output

MayAlias: i32* %5,i32* %x

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31039583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档