(3)llvm ir转换过程

news2024/11/15 13:49:52

(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表示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1464441.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React18源码: reconciler执行流程

reconciler执行流程 1 )概述 此处先归纳一下react-reconciler包的主要作用,将主要功能分为4个方面: 输入:暴露api函数(如:scheduleUpdateOnFiber), 供给其他包(如react包&#xff0…

《数字通信世界》杂志社数字通信世界杂志社2024年第1期目录

技术研究 基于B/S架构的海量空间数据并行上传方法研究 刘春伟; 1-348 城市轨道交通工程建设安全数据融合路径及方法 刘魁刚;张瑜;毕鹏;赵智涛;王春勇; 4-6 信息化背景下智慧社区的建设研究 崔宏尧;刘敏智;于志宏;李杰;殷秀莉; 7-9 基于数字孪生技术的工业机器人…

通俗易懂理解G-GhostNet轻量级神经网络模型

一、参考资料 原始论文:[1] IJCV22 | 已开源 | 华为GhostNet再升级,全系列硬件上最优极简AI网络 二、G-GhostNet相关介绍 G-GhostNet 又称为 GhostNetV1 的升级版,是针对GPU优化的轻量级神经网络。 1. 摘要 GhostNetV1 作为近年来最流行…

力扣随笔之通过删除字母匹配到字典里最长单词(中等524)

思路:根据题意有两个问题待解决 1、s字符串中是否可以通过删减得到该英语词语 2、如何找到长度最长且字母序最小的字符串 针对第二个问题可以对词典dictionary进行预处理:根据长度降序和字母序升序来排序 针对第一个问题可以初始化两个指针i,…

Leetcode日记 889. 根据前序和后序遍历构造二叉树

Leetcode日记 889. 根据前序和后序遍历构造二叉树 给定两个整数数组,preorder 和 postorder ,其中 preorder 是一个具有 无重复 值的二叉树的前序遍历,postorder 是同一棵树的后序遍历,重构并返回二叉树。 如果存在多个答案&#…

设计模式之委派模式

文章目录 前言正文一、生活中的例子二、Java代码实现2.1 类设计2.2 代码实现2.2.1 Employee2.2.2 ArchitectureDesignEmployer2.2.3 BackEmployer2.2.4 FrontEmployer2.2.5 Leader2.2.6 EmployeeStrongPointEnum2.2.7 Boss 2.3 测试2.3.1 Client2.3.2 测试结果 三、委派模式的优…

Hackme 1

信息收集 Nmap部分 存活扫描: └─# nmap -sn 192.168.10.1/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-02-20 15:00 CST Nmap scan report for 192.168.10.1 (192.168.10.1) Host is up (0.00012s latency). MAC Address: 00:50:56:C0:00:08 (VMwar…

【vue js】将数组元素,按照2个一组,重组为2维数组

实现效果: 要实现上述,2张图片为一个走马灯的内容,而后端传回的数据是一个数组。我采用的是将数据重组为2维数组的方法。 因为没有强制要求展示顺序,我采用将首尾组合的方式组成一个数组元素; 首先判断原始数据长度的…

onnx 1.16 doc学习笔记四:python API-If和Scan

onnx作为一个通用格式,很少有中文教程,因此开一篇文章对onnx 1.16文档进行翻译与进一步解释, onnx 1.16官方文档:https://onnx.ai/onnx/intro/index.html](https://onnx.ai/onnx/intro/index.html), 如果觉得有收获&am…

$attrs

一、概念 vue官网定义如下: 包含了父作用域中不作为 prop 被识别 (且获取) 的 attribute 绑定 (class 和 style 除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过v-bind="$attrs"传入内部组件——在创建…

【高德地图】Android高德地图控件交互详细介绍

📖第5章 与地图控件交互 ✅控件交互🧊缩放按钮🧊指南针🧊定位按钮🧊地图Logo ✅手势交互🧊缩放手势🧊滑动手势🧊旋转手势🧊倾斜手势🧊指定屏幕中心点的手势操…

无线传感器网络简单介绍

(本文为简单介绍,内容来源自网络) 无线传感器网络(Wireless Sensor Networks)是一种创新的传感器网络架构,具有广泛的应用前景和潜力。与传统的有限传感器网络不同,无线传感器网络克服了节点数…

在苹果电脑MAC上安装Windows10(双系统安装的详细图文步骤教程)

在苹果电脑MAC上安装Windows10(双系统安装的详细图文步骤教程) 一、准备工作准备项1:U盘作为系统安装盘准备项2:您需要安装的系统镜像 二、启动转换助理步骤1:找到启动转换助理步骤2:启动转换助理步骤3&…

基于springboot+vue的安康旅游网站(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

【Java EE初阶二十】http的简单理解(一)

1. 初识http HTTP 最新的版本应该是 HTTP/3.0,目前大规模使用的版本 HTTP/1.1; 下面来简单说明一下使用 HTTP 协议的场景: 1、浏览器打开网站 (基本上) 2、手机 APP 访问对应的服务器 (大概率) 前面的 TCP与UDP 和http不同,HTTP 的报文格式&a…

基于Embedding召回和DSSM双塔模型

文章目录 基于Embedding召回介绍基于Embedding召回算法分类I2I召回U2I召回 DSSM模型DSSM双塔模型层次 基于Embedding召回介绍 基于embedding的召回是从内容文本信息和用户查询的角度出发,利用预训练的词向量模型或深度学习模型,将文本信息转换成向量进行…

【PyQt】15-让控件支持拖拽工作

文章目录 前言一、控件的拖拽-setAcceptDrops()1.1 代码1.2 运行结果 总结 前言 允许控件的拖拽操作,后续可以升级为拖拽图片之类的。hasHtml()、hasUrls()、hasImage() 一、控件的拖拽-setAcceptDrops() 比如把A放到B,需要两步 B—setAcceptDrops(Tru…

Hudi程序导致集群RPC偏高问题分析

1、背景 Hudi程序中upsert操作频繁,过多的删除和回滚操作,导致集群RPC持续偏高 2、描述 hudi采用的是mvcc设计,提供了清理工具cleaner来把旧版本的文件分片删除,默认开启了清理功能,可以防止文件系统的存储空间和文件数量的无限…

【自然语言处理】:实验5,司法阅读理解

清华大学驭风计划课程链接 学堂在线 - 精品在线课程学习平台 (xuetangx.com) 代码和报告均为本人自己实现(实验满分),只展示主要任务实验结果,如果需要详细的实验报告或者代码可以私聊博主 有任何疑问或者问题,也欢…

配置redis-cell 控流插件

1.下载绑定资源也可以到git上下载 https://gitee.com/dianjinshi/springboot-nginx.git 2.创建文件夹 mkdir redis-cell 3.上传到linux上并进入文件夹解压 4.拷贝 docker cp libredis_cell.so redis:/usr/local/etc/redis 5.重启redis docker restart redis 6.进入redis…