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

GCC RISCV 后端 -- 控制流(Control Flow)的一些理解

        C/C++源代码经过 GCC 解析(Parse)及转换后,通过 GIMPLE IR 予以表示(Representation)。其中,一个C/C++源文件,通过 宏处理后,形成一个 转译单元(Translation Unit),在 GCC 内部,通过下面结构予以表示:

        Symbol Table 

                -- Global Variables

                -- Call Graph

                        -- Functions

                                -- Control Flow Graph

                                        -- Basic Blocks

                                                -- instructions

                                                        -- defintions and uses

        上述表达,可以清楚地看到程序的控制流走向。在最末端的指令层级(Instructions),GIMPLE IR 指令 或 RTL IR 指令,一般表达为三地址模式的操作(3 - Addresses operations),即

 Op result, src0, src1

        那么,对于不同的指令,抽象来看,都会有其 定义的值/变量(Definitions),以及有其 使用的值或变量(Uses),如上面的,result 为 其定义(defintion),src0, src1为其使用(use)。

        在 GIMPLE IR 和 RTL IR 中,会通过 指令的编号来作为其使用(use)的引用。

        那么,通过对指令的定义及使用的分析,逐步往上,扩展到 基础块(Basic Block),控制流图(Control Flow Graph)等,实现程序的数据流分析(Data-Flow Analysis)。

        例如,将GIMPLE IR 转换成 SSA(Static Single Assignment)的模式,使得每个值对应唯一的变量,这样就简化了数据流的分析。然后,基于SSA,就可以实现 constant propagation 等优化。

        又例如,Domination Tree 的构建,Live-variable 等。都是基于上述的框架,通过分析指令的定义与使用,得出数据流(Data-Flow / Value-Flow)的信息。

http://www.dtcms.com/a/105519.html

相关文章:

  • 【渗透测试】Vulnhub靶机-FSoft Challenges VM: 1-详细通关教程
  • IROS 2025将于杭州举办,开启中国机器人发展与国际交流新契机
  • 第2.6节 iOS生成全量和增量报告
  • 前沿技术有哪些改变生活
  • 最新企业ERP进销存管理系统源码 基于PHP+MySQL 含完整图文部署教程
  • java 启动jar将日志每天输入
  • HDMI接口设计
  • TCP-IP模型
  • 深度学习——深入解读各种卷积的应用场景优劣势与实现细节
  • 如何应对Google Play卡审的问题?
  • 丝杆,同步带,链条选型(我要自学网)
  • 【辩证地看问题,和讲逻辑之间有冲突吗? 关键字摘抄】
  • Linux 2021韩顺平网课笔记:shell编程
  • Windows Docker基于Python制作镜像并上传全过程梳理(含docker hub账号注册),纯小白适用
  • 前端优化之缓存策略
  • react 路由管理自定义路由组件(React动态生成路由)仿Vue-router写法
  • AcWing 1140. 最短网络(最小生成树问题)
  • 【MySQL基础】用户自定义函数(UDF)入门
  • 矩阵对角线元素的和 - 简单
  • 科技快讯 | 全球首个通用智能人“通通”2.0正式发布;X 平台被曝遭遇严重数据泄露;智谱发布Agent产品AutoGLM沉思 可以像人类一样
  • leetcode刷题日记——接雨水
  • 4.1学习总结 拼图小游戏+集合进阶
  • Oracle迁移达梦遇中断?试试SQLark的断点续迁功能!
  • 代码随想录算法训练营第三十四天 | 62.不同路径 63.不同路径II 343.整数拆分
  • Springboot集成Dubbo和Zookeeper框架搭建
  • 基于 Vue + Django + MySQL 实现个人博客/CMS系统
  • 基于单片机的音乐播放器系统设计
  • FPGA学习-基于 DE2-115 板的 Verilog 分秒计数器设计与按键功能实现
  • 第一章 EDA技术概述
  • NLP高频面试题(三十)——LLama系列模型介绍,包括LLama LLama2和LLama3