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

(3)llvm ir转换过程

(1)DAG Lowering

        输入的IR转换成SelectionDAG的过程被称作lowering

就是把llvm ir转成这种

(2)DAG legalization

        "DAG legalization"(有向无环图合法化)是编译器后端,特别是在LLVM中处理SelectionDAG的一个阶段。它主要发生在将中间表示(IR)转换为具体机器指令之前的指令选择过程中。DAG合法化的目标是确保SelectionDAG中的所有节点都能直接映射到目标硬件平台支持的操作上,即保证DAG中的每个操作都是“合法”的,能够被硬件直接执行。

  (3)  指令选择

(4)Scheduling and Formation

重排指令

(5)SSA-based Machine Code Optimization

基于SSA的优化

(6)寄存器分配

寄存器分配的输入是一个SSA(Static Single Assignment)形式的中间表示(IR),这种表示确保每个变量只被赋值一次。此外,输入的IR已经经过了指令选择阶段,这意味着高级IR指令已经转换为更接近目标机器指令的形式,但这些指令目前还关联到虚拟寄存器,而不是实际的物理寄存器。

(7)post-allocation passes

(8)Prologue/Epilogue Code Insertion

在LLVM后端中,Prologue/Epilogue Code Insertion(序言/尾声代码插入)是指在函数的入口和出口处插入一些额外的代码,用于进行函数调用的准备和清理工作。这些代码用于保存和恢复寄存器、设置栈帧、处理参数传递等。

(9)peephole optimization

在LLVM后端中,Peephole Optimization(孔眼优化)是一种局部优化技术,它通过识别和替换一系列连续的指令序列,来改进代码的效率和质量。

(10)assembly printing

在LLVM后端中,Assembly Printing(汇编代码打印)是指将LLVM中间表示(IR)转换为目标机器的汇编代码的过程。

LLVM中的汇编代码是目标机器特定的低级指令序列,用于直接在目标机器上执行。通过汇编代码打印,LLVM后端可以将LLVM IR转换为目标机器的汇编代码,并将其输出为文本形式,以便查看和调试。

SSA形式的llvm ir可以用控制流图表示

然后控制流图里面的每一个部分可以用DAG表示

相关文章:

  • GIT中对子仓库的使用方法介绍
  • 软件测试入门(全面认识软件测试)
  • LeetCode24.两两交换链表中的节点
  • 【LNMP】云导航项目部署及环境搭建(复杂)
  • [HTML]Web前端开发技术30(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
  • 【Django开发】0到1开发美多shop项目:用户登录模块开发。全md文档笔记(附代码 文档)
  • Python 高级语法:一切皆对象
  • 【Flink精讲】Flink任务调度机制
  • ElasticSearch语法
  • 【计算机网络】深度学习使用应用层的HTTP协议
  • 设计模式: 策略模式
  • 猫毛过敏却想养猫时?如何缓解猫毛过敏?宠物空气净化器推荐
  • Linux——缓冲区封装系统文件操作
  • 3.WEB渗透测试-前置基础知识-快速搭建渗透环境(上)
  • 手写commonJS里面的require函数
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • vue.js框架原理浅析
  • 如何在GitHub上创建个人博客
  • 微信小程序设置上一页数据
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #HarmonyOS:基础语法
  • (03)光刻——半导体电路的绘制
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (一)插入排序
  • (一)基于IDEA的JAVA基础1
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)可以带来幸福的一本书
  • (转)详解PHP处理密码的几种方式
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .net web项目 调用webService
  • .NET4.0并行计算技术基础(1)
  • .Net7 环境安装配置
  • .netcore如何运行环境安装到Linux服务器
  • .Net程序帮助文档制作
  • .NET命名规范和开发约定
  • @Data注解的作用
  • [20190113]四校联考
  • [acwing周赛复盘] 第 69 场周赛20220917
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [C++]AVL树怎么转
  • [C++核心编程](四):类和对象——封装
  • [CentOs7]iptables防火墙安装与设置
  • [EWS]查找 文件夹
  • [go 反射] 进阶
  • [HeMIM]Cl,[AeMIM]Br,[CeEIM]Cl,([HO-PECH-MIM]Cl,[HOOC-PECH-MIM]Cl改性酚醛树脂