内容简介:Pass作为LLVM的一个重要的组成部分,在LLVM IR层面和LLVM Backend层面都发挥了重要的作用。很多LLVM的使用者容易将Pass理解为LLVM IR层面的analysis和transform,而忽略了Pass在LLVM Backend层面的作用。而实际上,Pass在LLVM Backend层面发挥的作用一点都不小。以后端的结构为例:Notes: 《Getting Started with LLVM Core Libraries》P134.
Pass作为LLVM的一个重要的组成部分,在LLVM IR层面和LLVM Backend层面都发挥了重要的作用。很多LLVM的使用者容易将Pass理解为LLVM IR层面的analysis和transform,而忽略了Pass在LLVM Backend层面的作用。而实际上,Pass在LLVM Backend层面发挥的作用一点都不小。以后端的结构为例:
Notes: 《Getting Started with LLVM Core Libraries》P134.
《Getting Started with LLVM Core Libraries》作者将空白框内的内容直接写为Pass,带灰色框的内容解释为由多个小Pass组成的super Pass。按照这种说法,可以将Pass理解为整个后端的主要组成部分。当然,后端也不完全是Pass,只不过从执行的流程来看,Pass参与了整个后端的主要环节。
那么,为什么后端的Pass总那么容易被忽略?
首先,要从Pass的子类及其子类的子类说起。Pass的子类主要有:
其中,我们在LLVM IR层面用的最多的是FunctionPass。而LLVM Backend中的Pass,主要是以MachineFunctionPass为父类的。而MachineFunctionPass是FunctionPass的子类,其结构如图:
这种结构上,MachineFunctionPass就是一个结构薄弱点,如果忽略了这个Pass,直接忽略了Pass在后端的运用,不像LLVM IR层面上,所有的Pass子类都有运用。
其次,造成很多人对Pass和Backend无关的另外一个原因在于源码目录。很多人关注Pass只是在lib/Analysis目录和lib/Transfrom目录,忽略了lib/Codegen目录和lib/Target目录的内容,所以产生了Pass只是LLVM IR层面上使用的错觉。
再次,对LLVM IR层面和LLVM Backend层面的Pass的调用方式不同,也导致很多使用者将二者割裂开来。LLVM IR层面,使用的是opt工具;LLVM Backend层面,使用的是llc工具。
最后,一些使用者忽略Pass在Backend应用是因为对后端的认识比较模糊,没有搞清楚后端的完整架构。默认的将Pass直接和LLVM IR层面进行了绑定。
相关内容:
小乖他爹:LLVM每日谈之十二 LLVM的源码分析之Pass相关
小乖他爹:LLVM每日谈之四十三 LLVM的utility pass
发布于 2019-06-13
以上所述就是小编给大家介绍的《LLVM每日谈之五十五 浅谈对Pass的错误认知及其原因》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Persuasive Technology
B.J. Fogg / Morgan Kaufmann / 2002-12 / USD 39.95
Can computers change what you think and do? Can they motivate you to stop smoking, persuade you to buy insurance, or convince you to join the Army? "Yes, they can," says Dr. B.J. Fogg, directo......一起来看看 《Persuasive Technology》 这本书的介绍吧!