当前位置: 首页 > news >正文

GCC RISCV 后端 -- GCC Passes 注释

        在前面文章提到,当GCC 前端完成对C源代码解析完成后,就会使用 处理过程(Passes)机制,通过一系列的处理过程,将 GENERIC  IR 表示的C程序 转步转换成 目标机器的汇编语言。过程描述如下图所示:

         此处所示的处理过程管理者(pass_manager)的构造函数。其调用的时机如下:

#0  gcc::pass_manager::pass_manager (this=0x7161cd0, ctxt=0x7161cb0) at <gcc-project>/gcc/passes.cc:1579
#1  0x0000000001bd7ecd in general_init (argv0=0x7fffffffd9c7 "cc1", init_signals=true, original_argv=...) at <gcc-project>/gcc/toplev.cc:1154
#2  0x0000000001bd9ed9 in toplev::main (this=0x7fffffffd3d2, argc=19, argv=0x7fffffffd518) at <gcc-project>/gcc/toplev.cc:2284
#3  0x0000000004482c61 in main (argc=19, argv=0x7fffffffd518) at <gcc-project>/gcc/main.cc:39

        即在编译器cc1初始化的过程中,将处理过程及其管理者给初始化了。

        处理过程的定义文件 是 <gcc-project>/gcc/passes.def,经过处理后,生成 pass-instances.def 文件,然后在 pass_manager 构造函数中 include 进去。如下:

        这样就把所有在pass-instances.def定义的处理过程包含在 pass_manager 里面。

        1. pass_manager 包含了 所有处理过程的指针。

        2. pass_manager 通过 pass_lists 包含了 5个 pass_list,每个 pass_list 包含对应类型的处理过程。

        3. pass_manger 的每一个 pass_list 包含其对应类型的 处理过程(pass)。如下:

被处理后,在 pass-instances.def 文件中对应如下,增加的同处理过程的序号。

        all_lowering_passes pass_list 包含上图 NEXT_PASS 中的处理过程(Pass)。

        另外 处理过程中有个 sub 栏位,作为 其子处理过程列表。

        总结来说,经过初始化后,所有处理过程的实体会以单向列表的形式,分类地有层级地存放在 pass_manager 里面。


http://www.mrgr.cn/news/93441.html

相关文章:

  • Tomcat之 配置https协议即SSL证书
  • Ubuntu 安装docker docker-compose
  • ubuntu 20.04下ZEDmini安装使用
  • 4.2 使用说明:手册写作利器VNote的使用
  • 【AIGC系列】6:HunyuanVideo视频生成模型部署和代码分析
  • nuxt2 打包优化使用“compression-webpack-plugin”插件
  • java中小型公司面试预习资料(一):基础篇
  • “深入浅出”系列之Linux篇:(13)socket编程实战+TCP粘包解决方案
  • 数据可视化大屏产品设计方案(附Axure源文件预览)
  • DeepSeek私有化部署5:openEuler 24.03-LTS-SP1安装docker
  • 每日一题----------枚举的注意事项和细节
  • Windows编译环境搭建(MSYS2\MinGW\cmake)
  • “深入浅出”系列之Linux篇:(10)基于C++实现分布式网络通信RPC框架
  • nodejs使用WebSocket实现聊天效果
  • 阿里云MaxCompute面试题汇总及参考答案
  • Linux基本操作指令1
  • zsh+Oh My Zsh+Powerlevel10k:打造简洁高效的终端环境
  • 为AI聊天工具添加一个知识系统 之138 设计重审 之2 文章学 引言之2 附加符号学附属诠释学附随工程学(联系)
  • 【芯片设计】处理器芯片大厂前端设计工程师面试记录·20250307
  • Spring实战spring-ai运行