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

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.kler.cn/a/578097.html

相关文章:

  • 100天精通Python(爬虫篇)——第115天:爬虫在线小工具_Curl转python爬虫代码工具(快速构建初始爬虫代码)
  • Laya中runtime的用法
  • 机器学习之强化学习
  • Locker 是 Godot 的一个开源插件,它提供了一种快速且可扩展的方式来使用不同的策略保存和加载数据,并且具有开箱即用的 JSON 和加密功能。
  • 【Windows下Gitbook快速入门使用】
  • 【GPT入门】第5课 思维链的提出与案例
  • 2. 电脑主机上配置机器人环境(具身智能机器人套件)
  • MQ 消息发送可靠性保证 —— 整合 Spring Retry 重试框架 + 补偿发送方案
  • 【网络协议详解】——路由策略技术(学习笔记)
  • Apache Kafka 在生产环境中的管理与优化:从理论到实践
  • manus本地部署使用体验
  • 使用 Java 执行 SQL 语句和存储过程
  • [含文档+PPT+源码等]精品基于Python实现的校园小助手小程序的设计与实现
  • Java面试第九山!《SpringBoot框架》
  • Golang:实时消息交互系统
  • 物联网中 对设备监测和设备控制
  • C语言学习笔记-进阶(7)字符串函数3
  • 树莓派学习(一)——3B+环境配置与多用户管理及编程实践
  • SQL注入的原理及详细运用
  • 在 Docker 中搭建GBase 8s主备集群环境