llvm每日谈之五十五浅谈对pass的错误认知及其原因

snsn1984 snsn1984     2022-12-12     158

关键词:

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每日谈之四 Pass初探

小乖他爹:LLVM每日谈之八 PASS例子分析

小乖他爹:LLVM每日谈之十二 LLVM的源码分析之Pass相关

小乖他爹:LLVM每日谈之十三 使用LLVM自带的PASS

小乖他爹:LLVM每日谈之四十二 一个添加pass的实例

小乖他爹:LLVM每日谈之四十三 LLVM的utility pass

发布于 2019-06-13

llvm每日谈之五十七tablegen(代码片段)

TableGen官方文档TableGen后端官方文档TableGen是LLVM的一个工具,其可执行文件的名字为llvm-tblgen。通常在build目录下的bin目录里。TableGen主要是帮助开发者开发和维护特定领域的信息记录,方便开发者更好的构建这些信息记录&... 查看详情

llvm每日谈之五十四新建后端的第二步校正(registerset)(代码片段)

新建后端的七大步骤,在前文《LLVM后端文档解析》中进行过介绍。我们在《创建一个LLVM新后端的第一步中文档与代码的差异》和《TargetRegistration的更正》中,已经列出了现有文档中第一步“CreateasubclassoftheTargetMachineclasst... 查看详情

llvm每日谈之五十三targetregistration的更正(代码片段)

前文:创建一个LLVM新后端的第一步中文档与代码的差异 主要是为新后端实现了一个TargetMachine,这是新建后端七个步骤的第一步。在这个步骤之后,还有一个隐含的内容,那就是将这个Target注册,好让其它的L... 查看详情

浅谈对ajax的认知

 Ajax的发展史和它的巨大影响力相比,它的历史简短得多,2005年2月,AdaptivePath公司的JesseJamesGarrett最早提出这个概念,它出现在Garrett的文章"Ajax:AnewapproachtoWebApplications"中,这篇文章描述了混合使用XHTML,CSS,javascript,DOM,XMLHttpRequst进行We... 查看详情

llvm每日谈之十九llvm的第一本系统的书<gettingstartedwithllvmcorelibraries>

作者:史宁宁(snsn1984)LLVM最终有了一本系统的书了——《GettingStartedwithLLVMCoreLibraries》。这本书号称是LLVM的第一本书,可是据说日本早就有两本日文的关于LLVM的书,这个了解的不多。只是能够肯定的是,这本书是英文表述的... 查看详情

python实例浅谈之五python守护进程和脚本单例运行(代码片段)

一、简介守护进程最重要的特性是后台运行;它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符、控制终端、会话和进程组、工作目录以及文件创建掩码等;它可以在系统启动时从启动脚本/etc/rc.d... 查看详情

游戏制作大致流程粗谈之五

这一次的文章来介绍一下游戏制作非常重要的工具之一游戏引擎游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的... 查看详情

每日一题为了工作20200426第五十五题

//hadoop+spark二次排序代码packagecom.swust.hadoop;importorg.apache.spark.SparkConf;importorg.apache.spark.api.java.JavaPairRDD;importorg.apache.spark.api.java.JavaRDD;importorg.apache.spark.api.java.JavaSparkContext;importorg.apache.spark.api.java.function.Function;importorg.apache.spark.api.j... 查看详情

浅谈对软件工程的认识与理解

经过一年半对与电脑的学习与认知,我对自己学习的软件工程专业有了更深的理解与认知,软件开发是一个把用户需要转化为软件需求,把软件需求转化为软件设计,用软件代码来实现软件设计,对软件代码进行测试,并签署确... 查看详情

llvm 的 Hello pass 示例的编译错误

】llvm的Hellopass示例的编译错误【英文标题】:CompileerrorfortheHellopassexampleofllvm【发布时间】:2010-08-1216:04:50【问题描述】:我正在尝试"WritinganLLVMPass"网页中的Hellopass示例。我按照说明编译(使用gcc-4.2)Hello.cpp,但出现编译错误... 查看详情

浅谈对controlleradvice注解的理解(代码片段)

  该注解顾名思义增强器,对注解了Controller类的增强,@ControllerAdvice的实现:/***Specializationof@linkComponent@Componentforclassesthatdeclare*@linkExceptionHandler@ExceptionHandler,@linkInitBinder@InitBinder,or*@link 查看详情

浅谈对nan的理解

1.NaN:NotaNumber不是一个数字2.NaN与其他数值进行比较的结果总是不相等的,包括它自身在内3.判断是否是NaN,方法一 :is.NaN(变量);                方法二 :Number.is 查看详情

浅谈对html的基础认识

一、web标准web标准是网页制作的标准,它不是一个标准,是一系列标准,大部分的标准由W3C制定,还有一部分标准由ECMA制定。web标准由结构(html,xhtml),表现(css),行为(js)三个方面构成W3C—万维网联盟(结构标准和表现标... 查看详情

vs2010/mfc编程入门之五十(图形图像:gdi对象之画笔cpen)

上一节中鸡啄米讲了CDC类及其屏幕绘图函数,本节的主要内容是GDI对象之画笔CPen。       GDI对象       在MFC中,CGdiObject类是GDI对象的基类,通过查阅MSDN我们可以看到,CGdiObject... 查看详情

(转载)vs2010/mfc编程入门之五十(图形图像:gdi对象之画笔cpen)

 上一节中鸡啄米讲了CDC类及其屏幕绘图函数,本节的主要内容是GDI对象之画笔CPen。       GDI对象       在MFC中,CGdiObject类是GDI对象的基类,通过查阅MSDN我们可以看到,CGdiOb... 查看详情

再谈对软件工程的认知与理解

再谈对软件工程的认知与理解一、对软件工程的理解(我们学到了什么)网上的定义为:按照工程学的管理方式,有组织、有计划的,在一定的质量基础、时间限度和成本范围内,实现功能明确的软件系统。通过本次学习,我们... 查看详情

浅谈对ionic项目的理解

在思考怎么将客户端app连接到服务器的时候,就在想ionic项目的本质是什么,一开始因为ionicserve这一命令,我以为它自己就是个服务器,但是后来一细想又感觉不是这样,不然客户端又该怎么和服务端进行交互呢?而ionic本质正... 查看详情

通信算法之五十三:算法英文

   查看详情