![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
程序分析
文章平均质量分 84
十八子李啊
这个作者很懒,什么都没留下…
展开
-
源码解读---mem2reg源码(3)
这篇文章接着之前写的。。源码解读—mem2reg源码(1)源码解读—mem2reg源码(2)本文主要介绍在插入phi节点后的重命名。重命名中第一个核心函数是RenamePass这个函数,看注释:/// Recursively traverse the CFG of the function, renaming loads and/// stores to the allocas which we are promoting.////// IncomingVals indicates wha原创 2021-08-06 08:57:33 · 798 阅读 · 0 评论 -
源码解读---mem2reg源码(2)
本节内容接上。。源码解读—mem2reg源码(1)上文说到,我们已经计算出了每个alloca变量(这里指的是,LLVM给每个函数中的局部变量创建了 一个alloca指令,模拟其分配在栈上的行为。),接下来我们就要计算我们的PHI节点在哪插入的问题了。在回答这个问题之前,首先推荐大家去看下 《Engineering a Compiler》对应的章节。其实,我们可以发现,PHI节点的插入不是随意的,随意的插入可能会导致程序语义的错误以及冗余的PHI节点带来的是指令冗余开销。所以,正确的插入方式是插入到某些B原创 2021-08-03 10:56:32 · 859 阅读 · 1 评论 -
源码解读---mem2reg源码(1)
本文只是个随笔,记录一下看源码的思维过程,免得忘了。可能有很多废话,hhhh相信对于熟悉LLVM的SSA以及了解支配概念的读者来说,应该都不陌生了,这个pass无非就是将LLVM最“原汁原味”的IR转化为SSA形式的IR。首先从形式上,就简明了不少,另外,SSA形式还有特殊的用处。如果你还不太了解SSA的话,不妨上网搜搜,先大概了解下SSA的好处。这篇文章不打算谈SSA的好处,也不会从头开始谈SSA在LLVM是如何建立的。网上有很多关于LLVM中mem2reg是如何建立SSA的。包括知乎的R大,还有“原创 2021-08-01 15:02:59 · 3691 阅读 · 1 评论 -
论文解读系列--《Flow-Sensitive Pointer Analysis for Millions of Lines of Code》
1、引言前面我们介绍过,指针分析是提高现有程序分析技术精度的一个重要技术。在这篇文章之前,流敏感指针分析还没有收到非常多的关注。然而,流敏感的指针分析在分析多线程时时非常有用的。而且流敏感技术也能非常大的提高程序分析的精度。有些同学可能还不清楚流敏感是什么意思。这里简单介绍下。补充知识:流敏感分析流敏感分析是考虑了每个程序点的独有状态值,即在某条语句之前和之后,可能状态值是不一样的。比如:// int *p, *q, a, b, c1: p = &a;2: q = &b;原创 2021-07-29 14:22:09 · 2369 阅读 · 3 评论