LLVM Cpu0 新后端 系列课程总结

 想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章:

LLVM 后端实践笔记

代码在这里(还没来得及准备,先用网盘暂存一下):

链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?pwd=vd6s 提取码: vd6s 

系列课程告一段落,这里对这个系列课程做个总结。

1.文件对应的功能

Cpu0后端各个文件的功能

文件

功能

Cpu0AsmParser.cpp

汇编器

Cpu0Disassembler.cpp

反汇编器

Cpu0ABIInfo.cpp/.h

Cpu0ABIInfo.cpp定义ABI的信息,提供了O32、S32和未知三种ABI规范。

Cpu0AsmBackend.cpp/.h

定义后端的一些功能,包括重定位等等

Cpu0BaseInfo.h

一些flag信息的定义

Cpu0ELFObjectWriter.cpp

用来完成最终的 ELF 文件格式的写入任务

Cpu0ELFStreamer.cpp/.h

定义了一个cpu0架构的elf文件输出流类

Cpu0FixupKinds.h

重定位相关的Fixups结构的定义

Cpu0InstPrinter.cpp/.h

将Cpu0的MCInst(Machine Code Instruction)转换成可读的Cpu0汇编指令

Cpu0MCAsmInfo.cpp/.h

定义了一些汇编文件格式通用的东西

Cpu0MCCodeEmitter.cpp/.h

负责汇编指令最后发射

Cpu0MCExpr.cpp/.h

定义一些汇编阶段的符号、表达式等

Cpu0MCTargetDesc.cpp/.h

Cpu0MCTargetDesc里边包括了对Cpu0架构的详细描述,包括对td文件生成的相应的inc文件的引用,以及对Cpu0各个工具的注册

Cpu0TargetStreamer.cpp/.h

定义了一个cpu0架构的后端输出流类

Cpu0TargetInfo.cpp/.h

Cpu0TargetMachine就是为了定义Cpu0 Target供外部文件引用的

Cpu0.h

Cpu0后端全局函数的入口

Cpu0.td

Cpu0后端入口的td文件,include了其余的td文件

Cpu0AnalyzeImmediate.cpp/.h

分析一些带立即数的指令,framelowering的辅助函数

Cpu0AsmPrinter.cpp/.h

将LLVM的机器代码(Machine Code)转换成Cpu0汇编代码

Cpu0CallingConv.td

Cpu0架构的Calling Convention

Cpu0DelaySlotFiller.cpp

延迟槽插入的后端PASS

Cpu0DelUselessJMP.cpp

JMP优化的后端PASS

Cpu0FrameLowering.cpp/.h

栈桢处理相关的,包括prologue和epilogue。

Cpu0InstrFormats.td

定一个Cpu0Inst这个指令父类,以及Cpu0架构的各种指令形式

Cpu0InstrInfo.cpp/.h

对于Cpu0GenInstrInfo类的使用,td文件能定义的功能有限,还需要使用cpp文件进一步扩展。

Cpu0InstrInfo.td

定义了各种指令,以及各种匹配模式

Cpu0ISelDAGToDAG.cpp/.h

指令选择的一些接口

Cpu0ISelLowering.cpp/.h

LLVM IR转换为DAG。

Cpu0MachineFunctionInfo.cpp/.h

Cpu0架构Machine Function一些通用接口的定义

Cpu0MCInstLower.cpp/.h

将 MI 指令 lower 到 MCInst 指令的工作

Cpu0RegisterInfo.cpp/.h

对于Cpu0GenRegisterInfo类的使用,td文件能定义的功能有限,还需要使用cpp文件进一步扩展。

Cpu0RegisterInfo.td

定义了各种寄存器,以及寄存器集合

Cpu0Schedule.td

定义了指令调度策略

Cpu0SEFrameLowering.cpp/.h

栈桢处理相关的,包括prologue和epilogue。

Cpu0SEInstrInfo.cpp/.h

对于Cpu0GenInstrInfo类的使用,td文件能定义的功能有限,还需要使用cpp文件进一步扩展。

Cpu0SEISelDAGToDAG.cpp/.h

指令选择的一些接口

Cpu0SEISelLowering.cpp/.h

LLVM IR转换为DAG。

Cpu0SERegisterInfo.cpp/.h

对于Cpu0GenRegisterInfo类的使用,td文件能定义的功能有限,还需要使用cpp文件进一步扩展。

Cpu0Subtarget.cpp/.h

Cpu0架构Subtarget的定义

Cpu0TargetMachine.cpp/.h

Cpu0架构Target Machine接口的定义

Cpu0TargetObjectFile.cpp/.h

定义cpu0架构目标文件的一些配置

2.后端流程

3.待补充

之后想到了什么会继续补充

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

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

相关文章

测试与开发

目录 按照测试目标分类 界面测试 功能测试 性能测试 可靠性测试 安全性测试 易用性测试 按照执行方式分类: 测试方法 白盒测试 语句覆盖 条件覆盖 判定条件覆盖 条件组合覆盖 路径覆盖 黑盒测试 灰盒测试 按照测试阶段分类 单元测试 集成测试 …

【iOS】界面推出的方法

【iOS】界面推出的方法 在学习过程中我们发现在iOS中有两种界面推出的方法:push 和 present这两种方法都可以用来推出一个新的界面 但是这两者是存在区别的 push 方法是通过 UINavigationController 进行导航,新的视图控制器会被压入导航栈中,可以跨级…

写给大数据开发,如何去掌握数据分析

这篇文章源于自己一个大数据开发,天天要做分析的事情,发现数据分析实在高大上很多,写代码和做汇报可真比不了。。。。 文章目录 1. 引言2. 数据分析的重要性2.1 技能对比2.2 业务理解的差距 3. 提升数据分析能力的方向4. 数据分析的系统过程4…

前端 JS 经典:Promise 详解

1. Promise 由来 在以前我们实现异步是用的回调函数,当一个异步请求需要依赖上一个异步请求返回的结果的时候,就会形成如下这种的调用结构。 请求1(function (结果1) {请求2(function (结果2) {请求3(function(结果3)) {请求4(function(结果4) {})}});…

Windows下载安装RabbitMQ客户端(2024最新篇)

文章目录 RabbitMQ认知RabbitMQ下载RabbitMQ安装 更多相关内容可查看 RabbitMQ认知 定义:RabbitMQ是一个消息中间件,它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递…

免费!GPT-4o发布,实时语音视频丝滑交互

We’re announcing GPT-4o, our new flagship model that can reason across audio, vision, and text in real time. 5月14日凌晨,OpenAI召开了春季发布会,发布会上公布了新一代旗舰型生成式人工智能大模型【GPT-4o】,并表示该模型对所有免费…

JDBC简介以及快速入门

这些都是JDBC提供的API 简介 每一个数据库的底层细节都不一样 不可能用一套代码操作所有数据库 我们通过JDBC可以操作所有的数据库 JDBC是一套接口 我们自己定义了实现类 定义实现类 然后就能用Java操作自己的数据库了 MySQL对于JDBC的实现类 就是驱动 快速入门 创建新的项…

vscode copilot git commit 生成效果太差,用其他模型替换

问题 众所周知,copilot git commit 就像在随机生成 git commit 这种较为复杂的内容还是交给大模型做比较合适 方法 刚好,gitlens 最近开发了 AI commit的功能,其提供配置url api可以实现自定义模型 gitlens 只有3种模型可用&#xff1a…

【Python】在【数据挖掘】与【机器学习】中的应用:从基础到【AI大模型】

目录 💗一、Python在数据挖掘中的应用💕 💖1.1 数据预处理💞 💖1.2 特征工程💕 💗二、Python在机器学习中的应用💕 💖2.1 监督学习💞 💖2.2…

树二叉树

树 ​ 树是 n(n≥0)个结点的有限集。当 n 0时,称为空树。在任意一颗非空树中应满足: (1)有且仅有一个特定的称为根的结点。 (2)当 n > 1时,其余结点可分为 m&…

基于小波的多元信号降噪-基于马氏距离和EDF统计(MATLAB R2018a)

马氏距离是度量学习中一种常用的距离指标,通常被用作评定数据样本间的相似度,可以应对高维线性分布数据中各维度间非独立同分布的问题,计算方法如下。 (1)计算样本向量的平均值。 (2)计算样本向…

Golang的协程调度器GMP

目录 GMP 含义 设计策略 全局队列 P的本地队列 GMP模型以及场景过程 场景一 场景2 场景三 场景四 场景五 场景六 GMP 含义 协程调度器,它包含了运行协程的资源,如果线程想运行协程,必须先获取P,P中还包含了可运行的G…

零基础直接上手java跨平台桌面程序,使用javafx(二)可视化开发Scene Builder

我们只做实用的东西,不学习任何理论,如果你想学习理论,请去买几大本书,慢慢学去。 NetBeans有可视化工具,但是IntelliJ IDEA对于javafx,默认是没有可视化工具的。习惯用vs的朋友觉得,写界面还要是有一个布局…

永久免费的iPhone,iPad,Mac,iWatch锁屏,桌面壁纸样机生成器NO.105

使用这个壁纸样机生成器,生成iPhone,iPad,Mac,iWatch锁屏,桌面壁纸,展示你的壁纸作品,一眼就看出壁纸好不好看,适不适合 资源来源于网络,免费分享仅供学习和测试使用&am…

归并排序的递归与非递归实现

递归实现 归并排序有点类似于二叉树的后序遍历,是一种基于分治思想的排序算法。具体过程如下: 但要注意,在归并时要额外开辟一个与原数组同等大小的空间用来存储每次归并排序后的值,然后再拷贝到原数组中。 代码实现&#xff1a…

【十大排序算法】归并排序

归并排序,如同秋日落叶,分散而细碎, 然而风吹叶动,自然而有序, 彼此相遇,轻轻合拢, 最终成就,秩序之谧。 文章目录 一、归并排序二、发展历史三、处理流程四、算法实现五、算法特性…

树莓派4B_OpenCv学习笔记5:读取窗口鼠标状态坐标_TrackBar滑动条控件的使用

今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1: 今日学习:读取窗口鼠标状态坐标_TrackBar滑动条控件的使…

redis 05 复制 ,哨兵

01.redis的复制功能,使用命令slaveof 2. 2.1 2.2 3. 3.1 3.1.1 3.1.2 3.1.3 4 4.1 4.2 例子 5.1 这里是从客户端发出的指令 5.2 套接字就是socket 这里是和redis事件相关的知识 5.3 ping一下

idea编码问题:需要 <标识符> 非法的类型 、需要为 class、interface 或 enum 问题解决

目录 问题现象 问题解决 问题现象 今天在idea 使用中遇到的一个编码的问题就是&#xff0c;出现了这个&#xff1a; Error:(357, 28) java: /home/luya...........anageService.java:357: 需要 <标识符> Error:(357, 41) java: /home/luya............anageService.ja…

Cinema 4D 2024 软件安装教程、附安装包下载

Cinema 4D 2024 Cinema 4D&#xff08;C4D&#xff09;是一款由Maxon开发的三维建模、动画和渲染软件&#xff0c;广泛用于电影制作、广告、游戏开发、视觉效果等领域。Cinema 4D允许用户创建复杂的三维模型&#xff0c;包括角色、场景、物体等。它提供了多种建模工具&#x…