标签:LLVM MSSA MemorySSA llvm ud 日记 def
Introduction
LLVM MemorySSA使我们能够便捷地推断各种内存操作之间的交互。它旨在替代 MemoryDependenceAnalysis大多数(即使不是全部)用例。在较高的层次上,MemorySSA是提供一种基于SSA的内存表单,并带有def-use和use-def链,这使用户能够快速找到内存操作的may-def和may-use。注意,LLVM的MemorySSA是intra-procedure的。
关于MemorySSA的详细介绍可以在[1][2]中找到。
Code
llvm::MemorySSA *MSSA = &getAnalysis<MemorySSAWrapperPass>(F).getMSSA();
llvm::StoreInst *SI = ...;
MemoryAccess *storeMA = MSSA->getMemoryAccess(SI);
const llvm::Instruction *immediate_access_inst = nullptr;
for (const llvm::Insturction *I = getNextNonDebugInstruction(SI); I; I = getNextNonDebugInstruction(I)) {
MemoryAccess *ma = MSSA->getMemoryAccess(I);
if (ma) {
MemoryUseOrDef *ud = dyn_cast<MemoryUseOrDef>(ma);
if (ud && ud->getDefiningAccess() == storeMA) {
immediate_access_inst = ud->getMemoryInst();
break;
}
}
}
上述代码对于给定的一个llvm::StoreInst
, 找到其后续指令中最近的,操作(读/写)与StoreInst同一块内存的指令。
Reference
[1] Novillo D , Canada R H . Memory SSA- A Unified Approach for Sparsely Representing Memory Operations[J]. Proc of the Gcc Developers Summit, 2006.
[2] https://www.llvm.org/docs/MemorySSA.html
标签:LLVM,MSSA,MemorySSA,llvm,ud,日记,def 来源: https://www.cnblogs.com/bjchan9an/p/14427567.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。