上一篇是分析方舟编译器的准备阶段,这一篇开始正式开扒。
吃饭的时候看到了一篇非常好的博客↓
https://www.zhihu.com/column/c_1187372958643941376
答主ID:小菜叔叔开方舟
看着那么多代码属实不知道从哪里下手,但是看了这个知乎er的专栏感觉有思路了不少(虽然这个大大写的也比较随性,可读性不太连贯)。
简单讲讲程序通过编译器的过程。首先是编译器的前端,包括但不限于词法、句法的分析;然后是后端,包括指令的生成和优化。过一遍这几个“PHASE”后优化过的代码就是方舟编译器的结果。图片来自知乎答主ID:小乖他爹
phase是方舟编译器里的一个独创概念,原意是阶段,时期,段落,这里应该理解为过程步骤的意思。MAPLE IR 就是由一个个的PHASE组成的优化模块。
翻看编译器源码,src/maple_phase源码目录中phase.h、phase_impl.h和phase_manager.h三个类都只有头文件,其他两个都有比较具体的代码。phase中有ModulePhase和MeFuncPhase两个大类,很多小类,包含很多优化模型和方法。
module_phases.def & me_phases.def 这两个文件里记录了所有优化方法,用于管理需要注册的phase方法。
以下摘自小乖他爹的博客《方舟编译器学习笔记12 方舟编译器的phase》↓↓
PhaseManager负责phase的创建、管理和运行。
ModulePhase和MeFuncPhase都有对应的Manager类,分别是ModulePhaseManager和MeFuncPhaseManager。
ModulePhaseManager和MeFuncPhaseManager都是PhaseManager类的子类。
ModulePhaseManager的具体代码在
src/maple_ipa/include/module_phase_manager.h
和src/maple_ipa/src/module_phase_manager.cpp
MeFuncPhaseManager的具体代码在
src/maple_me/include/me_phase_manager.h
和src/maple_me/src/me_phase_manager.cpp。
phase的Manager类主要是通过InterleavedManager来创建、管理和运行。
InterleavedManager的源码在src/maple_ipa/include/interleaved_manager.h和src/maple_ipa/src/interleaved_manager.cpp。
所以,总结一下就是InterleavedManager负责phase manager的创建、管理和运行;PhaseManager负责phase的创建、管理和运行。这是一个三级管理机制。
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
这就是三个类与子类之间的关系。蓝色直线带箭头是子类对父类的继承关系;红色折线带箭头是管理关系,箭头指向被管理者(在代码里体现的就是对其具体的对象的调用)。
下一篇继续分析phase类,因为phase体系是基于MAPLE IR进行优化和转换工作的一个模块,跟我的学习重点息息相关。

软件工程作业-方舟学习笔记01-认识phase相关推荐

  1. 软件工程作业-方舟学习笔记07-方舟构建方法

    这一篇比较一下SSA构建方法与传统编译器的区别和优化,先来看一组比较实例: 一般方法 SSA方法 a=b+c: a1=b1+c1: a=a+b: a2=a1+b1: b=a+c: b2=a2+c1: ...

  2. JavaWeb-综合案例(用户信息)-学习笔记01【列表查询】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb-综合案例(用户信息)-学习笔记01[列表查询] JavaWeb-综合案例(用户信息)-学习笔记02[登录功能] JavaWeb-综合案 ...

  3. Tomcat学习笔记01【Web相关概念、Tomcat基本操作】

    Java后端 学习路线 笔记汇总表[黑马程序员] Tomcat学习笔记01[Web相关概念.Tomcat基本操作][day01] Tomcat学习笔记02[Tomcat部署项目][day01] 目录 ...

  4. Bootstrap学习笔记01【快速入门、栅格布局】

    Java后端 学习路线 笔记汇总表[黑马程序员] Bootstrap学习笔记01[快速入门.栅格布局][day01] Bootstrap学习笔记02[全局CSS样式.组件和插件.案例_黑马旅游网][d ...

  5. HTML/CSS学习笔记01【概念介绍、基本标签】

    w3cschool菜鸟教程.CHM(腾讯微云):https://share.weiyun.com/c1FaX6ZD HTML/CSS学习笔记01[概念介绍.基本标签.表单标签][day01] HTML ...

  6. MySQL学习笔记01【数据库概念、MySQL安装与使用】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  7. RN学习笔记01:概述、特点与环境搭建

    RN学习笔记01:概述.特点与环境搭建 一.RN概述 React Native(简称RN)是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的JS框架 Reac ...

  8. 2021第一学期学习笔记01

    2021第一学期学习笔记01 摘要 一.知识点 1.1 追溯 1.2 区块链 二.项目报告 三.本地服务器 四.环境配置 4.1 JDK 展望 摘要 本周的学习情况主要是进行基础理论的学习,查找有关于 ...

  9. 智能语音:好玩的语音控制是怎么实现的?学习笔记01

    智能语音:好玩的语音控制是怎么实现的?学习笔记01 智能音箱的技术架构 智能音箱主要涉及拾音.前端信号处理.语音识别.自然语言处理和语音合成等技术,现在一些产品甚至提供了声纹识别技术. 当然,智能音箱 ...

最新文章

  1. Warning in install.packages : package ‘RGtk2’ is not available for this version of R
  2. About Firefox
  3. css中实现字符超出宽度自动换行和英语字符不断行的解决方法
  4. 十年Java路,和大家来谈谈系统架构
  5. nagios mysql 监控_nagios监控mysql
  6. 暑期训练日志----2018.8.26
  7. Tips for vcpkg
  8. 华为高管揭秘公司不上市的原因;微信回应「花钱就能查到聊天记录」;马斯克删除「超苹果只要几个月」评论 | 极客头条...
  9. Arts 第六周(4/22 ~ 4/28)
  10. centos7 mysql安装_CentOS7安装MySQL(详解)
  11. 附合导线计算软件_再也不盲目跑杆了,一次性搞懂水准测量+导线测量!
  12. SpringBoot+Vue项目网上家电商城
  13. 百度地图点聚合仿链家定位点多级聚合,且滑动、刷新加载定位点
  14. mt6771(Helio P60)套片开发资料下载,mt6771处理器性能
  15. 程序员的希波克拉底誓言
  16. 静下心来学习MVC之基本概念
  17. C语言路漫漫,其修远兮
  18. iOS开发证书不受信任
  19. 计算机鼠标由传感器来监视,2020年人教版九年级物理全册:16.4“变阻器”过关检测练习题D卷...
  20. Linux下Nginx+Resin负载均衡,session问题解决实例

热门文章

  1. php为什么没有npm,在phpstorm的terminal中输入npm显示不是内部或外部命令
  2. export命令详解
  3. 2020.11.20 文献14阅读《我国水电站地下厂房的发展》
  4. php file_put_contents 换行追加,PHP中file_put_contents追加和换行的实现方法
  5. Git分布式版本控制和远程库创建运用、git常用指令【尚硅谷笔记】
  6. Vue3 —— 使用Vite配置环境变量
  7. 免抵退税≠留抵退税 免抵退税部分还需交附加税吗
  8. 【luogu P3803】【模板】多项式乘法(NTT)
  9. python3 编写更改密码程序
  10. 《管道的故事》精髓:用一次性的提桶收入,创建可持续性管道,让管道收入帮你实现财务自由。