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

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.待补充

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

相关文章:

LLVM Cpu0 新后端 系列课程总结

想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章: LLVM 后端实践笔记 代码在这里(还没来得及准备,先用网盘暂存一下): 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…...

【云原生】Kubernetes----RBAC用户资源权限

目录 引言 一、Kubernetes安全机制概述 二、认证机制 (一)认证方式 1.HTTPS证书认证 1.1 证书颁发 1.2 config文件 1.3 认证类型 1.4 Service Account 1.4.1 作用 1.4.2 包含内容 1.4.3 与Secret的关系 2.Bearer Tokens 3.基本认证 三、鉴…...

ORA-01652 表空间不够解决方案

前章:出现表空间不足不要手动强制删除对应数据文件存储目录下的DBF文件,需要用SQL语句进行数据文件的DROP,否则会导致ORA-01033报错,因为我没有开启数据库的归档所以不能通过RECOVER的形式找回数据文件最后只能重装本地ORACLE。 …...

亚马逊 AWS 视频转码功能、AWS Elemental MediaConvert 中创建和管理转码作业

上传的视频需要转码成不同的编码, 可以直接在 AWS Elemental MediaConvert 中创建和管理转码作业 AWS Elemental MediaConvert 中创建和管理转码作业 /*** 视频转码* return bool* author wzb* data 2024/5/30*/function videoTranscode(&$data){$fileId $data[id] ?? …...

RocketMQ可视化界面安装

RocketMQ可视化界面安装 **起因:**访问rocketmq-externals项目的git地址,下载了源码,在目录中并没有找到rocketmq-console文件夹。 git下面文档提示rocketMQ的仪表板转移到了新的项目中,点击仪表板到新项目地址; 下载…...

【ffmpeg】本地格式转换 mp4转wav||裁剪mp4

个人感受:太爽了!!!(可能用惯了转换网站和无良的转换软件) ———— 使用FFmpeg把mp4文件转换为WAV文件 - 简书 (jianshu.com) FFMPEG 视频分割和合并 - 简书 (jianshu.com) ———— 示例 ffmpeg -i …...

基于Django+MySQL的智慧校园系统

此项目基于Django MySQL HTML CSS JS jQuery bootstrap实现的功能有 学生管理部门管理代办清单管理校园论坛校园医疗服务校园看点校园生活助手常用功能入口 1. 一些注意点 1. 页面body会自动有一些边界距&#xff0c;处理方法&#xff1a; <head><style>b…...

Linux基础指令(一)

前言 Linux基础指令主要学习&#xff1a;对目录、文件、压缩包、匹配查找&#xff0c;权限等操作 第一次接触ubuntu需要知道的基本知识 sudo passwd root 先给root用户设置密码 su root 切换到root用户 su zhangsan …...

三极管十大品牌

三极管十大品牌-三极管品牌-晶体三极管哪个品牌好-Maigoo品牌榜...

需求记录(共享元素)

MainActivity1 列表展示&#xff0c;使用共享元素完成页面间的切换 package com.example.animactivity;import android.annotation.SuppressLint; import android.app.ActivityOptions; import android.content.Intent; import android.os.Build; import android.os.Bundle; i…...

.Net 使用 MongoDB

安装nuget包 MongoDB.Driver 简单代码 using MongoDB.Bson; using MongoDB.Driver; using System.Buffers; using System.Collections.Concurrent; using System.Diagnostics;namespace ConsoleApp4 {internal class Program{static void Main(string[] args){var client = ne…...

【TensorFlow深度学习】值函数估计:蒙特卡洛方法与TD学习

值函数估计&#xff1a;蒙特卡洛方法与TD学习 值函数估计&#xff1a;蒙特卡洛方法与TD学习的深度探索蒙特卡洛方法时序差分学习(TD)Python代码示例结论 值函数估计&#xff1a;蒙特卡洛方法与TD学习的深度探索 在强化学习的奇妙世界里&#xff0c;值函数估计扮演着至关重要的…...

成功解决ModuleNotFoundError: No module named ‘cv2’

成功解决ModuleNotFoundError: No module named ‘cv2’ &#x1f308; 欢迎莅临我的个人主页&#x1f448;这里是我深耕Python编程、机器学习和自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;并乐于分享知识与经验的小天地&#xff01;&#x1f387; &#x1f393;…...

中国蚁剑 安装教程 2024年5月

2024/5/11 中国蚁剑 安装教程 一、下载中国蚁剑的加载器和核心源码&#xff08;两个都要用到&#xff09; github官方下载地址&#xff1a;https://github.com/AntSwordProject/ 参考文档&#xff1a;antSword/README_CN.md at master AntSwordProject/antSword GitHub 核…...

Golang-分离式加载器(传参)AES加密

目录 enc.go 生成: dec.go --执行dec.go...--上线 cs生成个c语言的shellcode. enc.go go run .\enc.go shellcode 生成: --key为公钥. --code为AES加密后的数据, ----此脚本每次运行key和code都会变化. package mainimport ("bytes""crypto/aes"&…...

速览三版HTTP的改进策略

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是互联网通信的基础协议&#xff0c;自从其第一个版本推出以来&#xff0c;经历了多个版本的改进&#xff0c;每个版本都针对之前的不足进行了优化和增强。以下是HTTP/1.1、HTTP/2和HTTP/3的主要改进总结&#xff1a; …...

window.open(“.html“,“_blank“) 执行是下载,并没有打开新窗口显示html

window.open() 方法在浏览器中打开一个新窗口或者新标签页。如果你的 .html 文件被下载而不是在新窗口中打开&#xff0c;那可能是因为服务器的响应头设置了 Content-Disposition: attachment&#xff0c;这会导致浏览器把响应的内容作为一个文件下载。 如果你有权限修改服务器…...

【QT5.14.2】编译MQTT库example的时候报No such file or directory

【QT5.14.2】编译MQTT库example的时候报No such file or directory 前几天导师让跑一下MQTT库&#xff0c;用的5.14.2版本的QT&#xff0c;于是就上网搜了一个教程&#xff1a;https://www.bilibili.com/video/BV1dH4y1e7hG/?spm_id_from333.337.search-card.all.click&v…...

【数据结构】前缀树(字典树)汇总

基础 {“a”,“abc”,“bac”,“bbc”,“ca” }的字典树如下图&#xff1a; 最主用的应用&#xff1a;一&#xff0c;字符串编码。二&#xff0c;位运算。 字符串编码 相比利用哈希映射编码&#xff0c;优点如下&#xff1a; 依次查询长度为n的字符串s的前缀时间复杂度是O(…...

Linux:基础开发工具

文章目录 Linux 软件包管理器 yum什么是软件包关于rzsz查看软件包安装软件卸载软件安装扩展源 Linux 编辑器 vimvim的基本概念正常/普通/命令模式(Normal mode)插入模式(Insert mode)底行模式(last line mode) vim的基本操作[命令模式]切换至[插入模式][插入模式]切换至[命令模…...

如何解决3D视频无法在普通设备播放的难题?VR-Reversal让转换更简单

如何解决3D视频无法在普通设备播放的难题&#xff1f;VR-Reversal让转换更简单 【免费下载链接】VR-reversal VR-Reversal - Player for conversion of 3D video to 2D with optional saving of head tracking data and rendering out of 2D copies. 项目地址: https://gitco…...

WebGLInput:重构Unity WebGL输入体验的革命性方案

WebGLInput&#xff1a;重构Unity WebGL输入体验的革命性方案 【免费下载链接】WebGLInput IME for Unity WebGL 项目地址: https://gitcode.com/gh_mirrors/we/WebGLInput 在Unity WebGL开发中&#xff0c;输入法支持一直是开发者面临的核心挑战之一。WebGLInput项目通…...

说一下@RequestBody和@ResponseBody的区别?

面试 RequestBody&#xff1a;将请求的json数据转换为java对象。 ResponseBody&#xff1a;将返回值的java对象转换为json数据。...

别再纠结模型了!用Python+Simulink快速搭建四旋翼无人机仿真(附完整代码)

用PythonSimulink快速搭建四旋翼无人机仿真实战指南 四旋翼无人机开发中最令人头疼的环节&#xff0c;往往不是控制算法设计&#xff0c;而是如何快速搭建一个可靠的仿真环境。我曾见过不少团队在模型选择上耗费数周时间&#xff0c;最终却陷入理论完美主义陷阱——他们反复纠结…...

Win11Debloat终极指南:5分钟让你的Windows系统焕然一新

Win11Debloat终极指南&#xff1a;5分钟让你的Windows系统焕然一新 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本&#xff0c;用于从Windows中移除预装的无用软件&#xff0c;禁用遥测&#xff0c;从Windows搜索中移除Bing&#xff0c;以及执行各种其他更改以简化和…...

如何用QuickRecorder解决macOS录屏痛点:高效专业的从入门到精通实践指南

如何用QuickRecorder解决macOS录屏痛点&#xff1a;高效专业的从入门到精通实践指南 【免费下载链接】QuickRecorder A lightweight screen recorder based on ScreenCapture Kit for macOS / 基于 ScreenCapture Kit 的轻量化多功能 macOS 录屏工具 项目地址: https://gitco…...

避免Java Stream重复消费:高效过滤Map的策略

本文旨在解决Java Stream在多过滤场景中常见的IllegalStatexception&#xff0c;即流被重复消耗的问题。我们将深入讨论Java Stream的单次使用特性&#xff0c;通过将外部过滤条件转换为集合&#xff0c;优化Map的过滤操作&#xff0c;提供高效、符合最佳实践的解决方案&#x…...

Nginx反向代理实战:不改代码轻松解决前后端跨域问题(附完整配置模板)

Nginx反向代理实战&#xff1a;不改代码轻松解决前后端跨域问题&#xff08;附完整配置模板&#xff09; 前后端分离架构已成为现代Web开发的主流模式&#xff0c;但随之而来的跨域问题却让不少开发者头疼。想象一下这样的场景&#xff1a;你的前端运行在https://frontend.com&…...

brpc并发编程模型性能对比:基准测试结果

brpc并发编程模型性能对比&#xff1a;基准测试结果 【免费下载链接】brpc brpc is an Industrial-grade RPC framework using C Language, which is often used in high performance system such as Search, Storage, Machine learning, Advertisement, Recommendation etc. &…...

告别枯燥刷怪!用Python+大漠插件实现《功夫》游戏后台自动挂机(附完整源码)

用Python与大漠插件打造《功夫》游戏智能挂机系统 在角色扮演类游戏中&#xff0c;重复性的任务往往成为玩家体验的瓶颈。以经典游戏《功夫》为例&#xff0c;"考古"任务需要不断接取、放弃任务直至找到特定地点&#xff0c;再完成打怪流程。这种机械操作不仅耗时耗力…...