LLVM每日谈之十二 LLVM的源码分析之Pass相关
作者:snsn1984
题记:在学习LLVM的过程中,要想学的更加深入,掌握更多的技能,LLVM的源码是必须要读的,但是在这么多的源码中,从哪里下手?很容易让人找不到头脑,本文这里就先拿出几个Pass相关的源码文件进行分析。
1.Pass.h
源码中的位置:llvm源码/include/llvm/Pass.h
网络上位置: http://llvm.org/docs/doxygen/html/Pass_8h_source.html
2.Pass.cpp
源码中的位置:llvm源码/lib/VMCore/Pass.cpp
网络上的位置:http://llvm.org/docs/doxygen/html/Pass_8cpp_source.html
此文件主要是对Pass.h中声明的几个类的实现。除此之外,还有对RegisterAGBase、PassRegistrationListener、AnalysisUsage这三个类的实现。而这三个类的声明并不在刚才介绍的Pass.h之中,而是另有别的头文件,此处先不做介绍。
3.PassSupport.h
源码中的位置:llvm源码/include/llvm/PassSupport.h
此头文件被包含在Pass.h这个头文件之中,所以如果文件已经包含了Pass.h,其实就也可以访问PassSupport.h。这个文件中主要是PassInfo、RegisterPass、RegisterAGBase、RegisterAnalysisGroup、PassRegistrationListener这几个类的声明。
PassInfo类的每一个对象都对应着一个实际存在的Pass,并且保存着这个Pass的信息。
RegisterPass这个类是一个模板类,这个模板类的类型就是Pass的名字。它是PassInfo的子类,主要用来注册Pass。完成注册之后,在PassManager管理的内部数据库里才能找到这个Pass。需要注意的是,这个模板类的使用必须是在全局范围之内的。可以从最简单的Pass例子--Hello(http://llvm.org/docs/doxygen/html/Hello_8cpp_source.html)中去看这个模板类的使用方法。
RegisterAGBase是RegisterAnalysisGroup类的基类,而RegisterAGBase类又是PassInfo类的子类。其中RegisterAGBase类名字中的AG就是AnalysisGroup的缩写,这种命名方式在LLVM的源码中被大量的应用,比如MetaData在一些类的名字里就被缩写为MD。RegisterAnalysisGroup这个类的作用主要是将一个Pass注册成为一个分析组的成员,当然在进行此操作之前,这个Pass必须被首先注册Pass成功。一个Pass可以被注册到多个分析组中。同一个Pass在多个分析组中,依然是根据这个Pass的名字进行标识的。
PassRegistrationListener这个类主要负责在运行时时候Pass的注册与否,并且会在Pass被load和remove的时候,去调用回调函数。
4. PassAnalysisSupport.h
源码中的位置:llvm源码/include/llvm/PassAnalysisSupport.h
网络上的位置:http://llvm.org/docs/doxygen/html/PassAnalysisSupport_8h_source.html
此头文件被包含在Pass.h这个头文件的尾部,所以如果文件已经包含了Pass.h,其实就也可以访问PassAnalysisSupport.h。这个头文件之中,主要是AnalysisUsage和AlysisResolver两个类的声明以及Pass类的部分函数的实现。
其中,AnalysisUsage主要负责表示分析出来的使用信息。
AlysisResolver是一个Pass对象用来从Pass Manager获取所有的分析信息的简单接口。
另外,Pass类的函数getAnalysisIfAvailable()、getAnalysis()、getAnalysisID()这三个常用的函数,也都是在这个头文件中使用的。Pass之间的交互,是会经常用到这样的函数的。
--------------------------------------------------------------------------转载请注明出处---------------------------------------------------------------------------------------------
转载于:https://www.cnblogs.com/ainima/archive/2013/03/18/6331980.html
LLVM每日谈之十二 LLVM的源码分析之Pass相关相关推荐
- LLVM每日谈之四十五 LLVM IR TUTORIAL
今年的LLVM欧洲开发者会议上,在Tutorials环节,Vince Bridgers (Intel Corporation), Felipe de Azevedo Piovezan (Intel C ...
- LLVM每日谈之三十四 LLVM IR生成和转换的几条指令
本文将罗列几条关于LLVM IR生成和转换的几条指令,并没有技术含量可言,只是让刚接触LLVM IR的同学,有一个检索和参考作用.文中min.c作为输入. min.c int min(int a , ...
- Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树
Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树 文章目录 Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树 0x00 摘要 0x01 背景概念 1.1 词向量 ...
- C#调用obs studio 二次开发 源码分析 编译
C#二次开发obs studio obs studio二次开发视频教程,录制.推流.调整分辨率.调整位置.画面回调.推流回调等功能 obs二次开发还是比较繁琐的,我在学习的时候也是很痛苦,有需要的朋友 ...
- Linux驱动学习--HDMI开发(二)HDMI驱动源码分析(RK平台)
目录 一.引言 二.驱动框架 ------> dts节点 ------> HDMI DDC 驱动 ------> HDMI HDCP驱动 ------> HDMI CEC驱动 ...
- Java源码详解二:HashMap源码分析--openjdk java 11源码
文章目录 HashMap.java介绍 1.HashMap的get和put操作平均时间复杂度和最坏时间复杂度 2.为什么链表长度超过8才转换为红黑树 3.红黑树中的节点如何排序 本系列是Java详解, ...
- 聊聊高并发(四十)解析java.util.concurrent各个组件(十六) ThreadPoolExecutor源码分析
ThreadPoolExecutor是Executor执行框架最重要的一个实现类,提供了线程池管理和任务管理是两个最基本的能力.这篇通过分析ThreadPoolExecutor的源码来看看如何设计和实 ...
- 人脸检测(十)--强分类器源码分析
原文: http://blog.csdn.net/beerbuddys/article/details/40712957 下面的内容很长,倒杯水(有茶或者咖啡更好),带上耳机,准备就绪再往下看.下面我 ...
- 流量回放repeater的原理分析二:repeater源码分析
前言 在上文中我们分析了sandbox-jvm(以下简称sandbox)的核心源码,了解了sandbox实现类增强的原理.并且了解了sandbox的模块化加载能力,repeater作为一个独立的模块, ...
最新文章
- 休斯顿大学研究人员构建具有神经功能的软体机器人
- 10行代码实现目标检测
- 退出系统并跳转到登录界面 JS代码
- 警告:攻击者利用 SonarQube 漏洞盗取国内多个机构的大量源码!
- 前端进阶之 let、const、var
- tensorflow 风格迁移
- JZOJ 4786. 【NOIP2016提高A组模拟9.17】小a的强迫症
- 124. Binary Tree Maximum Path Sum 二叉树中的最大路径和
- HTML网页使用CDN的jquery.qrcode.min.js生成页面二维码(直接可以复制使用)
- python 哪些项目_哪些Python开源项目比较好
- 自然语言处理与中文分词的难点总结--学习笔记
- 不同系统可以用一个数据库服务器吗,同一个数据库 不同服务器吗
- anaconda+python3.7安装keras_win10 python3.7 Anaconda3 安装tensorflow+Keras
- poj 1269 题解
- STM32与FPGA Cyclone IV芯片fsmc通信
- Mysql 之 缓存更新策略
- Udp数据接收和发送代码
- 仿京东淘宝商品详情页中视频和图片的轮播功能
- 京东智臻链首推电子营业执照区块链应用场景落地!
- 协整检验——进出口与经济增长
热门文章
- json转成类对象转成xml全过程
- Redis 3.0.1 安装和配置
- html5 的百度地图连接
- 九度 1209:最小邮票数(多重背包)
- ReadDirectoryChangesW 函数
- Firefox 5 公开测试下载
- PAZU 是4Fang 为配合“四方在线”软件于2004年开发的WEB打印控件,适用于各种WEB软件项目的打印。...
- Cisco路由器故障诊断技术(3)
- python对象引用计数器_在Python中借助计数器对象对项目进行计数
- 在Python中有效使用JSON的4个技巧