LLVM 寄存器分配
概述基本寄存器分配器是四种寄存器分配器中最简单的寄存器分配pass实现(llvm_root/livm/lib/CodeGen/RegAllocBasic.cpp)但麻雀虽小,五脏俱全,基本寄存器分配器中实现了根据溢出权重确实虚拟寄存器优先级、按优先级分配物理寄存器,以及物理寄存器不足时将虚拟寄存器溢出到内存等功能。因此,基本寄存器分配器非常适合作为自定义寄存器分配器实现参考LLVM3.0 之前的默认寄存器分配器是线性扫描分配器。与线性扫描分配器不同,基本分配器不再以线性顺序访问生存期,而是采用优先队列,以溢出权重降序访问生存期,并通过一组生存期联合(live interval union) 完成干扰检查当无法为生存期分配其寄存器类中的任何物理寄存器时,生存期就会溢出。因为基本分配器以溢出权重递减的顺序为生存期分配物理寄存器,所以生存期联合中的所有干扰生存期(物理寄存器中已有的生存期被称为干扰生存期) 都具有更高溢出权重通过llc命令行选项 -regalloc = basic 可使能基本分配器快速寄存器分配器采用本地分配策略(llvm_root/llvm/lib/CodeGen/RegAllocFast.cpp) 对每个基本块从上往下扫描,当遇到虚拟寄存器时,便为其分配物理寄存器,便为其分配物理寄存器所有物理寄存器分配在基本块级别完成,并尽量长时间地将值保存在物理寄存器中,以便根据需要重用物理寄存器在这种分配方式下,基本块之间没有活跃寄存器。在每个基本块的结束位置,所有未分配物理寄存器的虚拟寄存器都溢出到内存。此策略适用于活跃范围较短的代码。通过llc命令行选项 regalloc = false 可使能快速分配器PBQP 全称 Partitoned Boolean Quadratic Programming, 即分区布尔二次规划,这是一个二次分配问题(Quadratic Assignment Problem, QAP)PBQP 寄存器分配器的工作原理是将PBQP 图视为干扰图的扩展,进而将不规则体系结构的寄存器分配问题映射为PBQP问题,然后使用PBQP求解器求解该问题llvm_root/llvm/lib/CodeGen/RegAllocPBQP.cppPBQP图中的节点和干扰图的节点都表示虚拟机寄存器,每个节点都有一个关联的代价向量,描述了该节点的每个分配选项的代价PBQP 图中的边表示对寄存器分配问题的约束。PBQP图中的边没有类型(这一点与干扰图不同),而是与一个代价矩阵相关联,这个代价矩阵表示两个节点的成对分配代价,代价矩阵的值决定了与其关联的边对最终解决方案的影响通过llc 命令行选项 -regalloc = pbqp 可使能 PBQP分配器LLVM 3.0 之后新增了基本分配器和贪厌分配器是目前LLVM的默认分配器。因此,贪厌分配器是本节分析的重点。通过llc命令行选项-reglloc = greedy 可使能贪厌分配器和线性扫描分配器相比,贪厌分配器用一个优先级队列取代了线性扫描分配器的活跃性列表(ative list), 并按优先级访问队列的生存期,而不是像线性扫描分配器那样按先后顺序访问而且,贪厌分配器不像基本分配器那样优先为短生存期分配器,而是优先为为长生存期分配物理寄存器。有些函数中的长生存期太多,导致没有足够的物理寄存器容纳其他短生存期。但是将高溢出权重的短生存期溢出的代价太大,因此,可以从生存期联合中剔除已经分配的、低溢出权重的生存期,并将其重新放回优先队列,使用能有第二次被分配到其他寄存器的机会如果待分配的生存期无法找到可以被剔除的干扰生存期,也不会立即溢出,贪厌分配器在此处的另一个改进是在生存期溢出前增加切分步骤,将其切分为更短的生存期并放回优先级队列,这样可以增加生存期被分配到物理寄存器的可能性特别是当切分后的短生存器覆盖的是热点循环时,切分的收益更为明显。自定义寄存器分配pass可参照LLVM中基本寄存器分配pass或贪厌寄存器分配pass实现贪厌寄存器分配实现过程分析在寄存器分配之前,需要做很多准备工作,如指令序号标记、活跃性分析等。LLVM中的活跃性分析主要分为两个部分:在LiveVariable类中实现的活跃性变量分析(live variable analysis) 和 在LiveInterval 类中实现的生存期分配(live interval analyis)这些都是在寄存器分配pass之外的其他pass中完成。贪厌分配器分配pass可以进一步细分为不同步骤,包括:溢出权重计算(apill weight calculation)、生存期入队列(enqueue)、指定物理寄存器(assignment)、剔除生存期(eviction)、生存期切分(splitting)、和生存期溢出(spilling)生存期分析生存期分析不是寄存器分析过程的一部分,而是一个独立的pass。在此之前,SlotIndexes pass 已经为每条指令标记序号。通过检查变量的所有使用和定值,可以分析其生存期因此此时每一条指令都已经有序号,可以将分析得到的生存期用序号片段集合表示。例如,上图中变量x的定值在

相关新闻

Angular缓存策略实战:Cashew显式vs隐式模式深度对比

Angular缓存策略实战:Cashew显式vs隐式模式深度对比

Angular缓存策略实战:Cashew显式vs隐式模式深度对比 【免费下载链接】cashew 🐿 A flexible and straightforward library that caches HTTP requests in Angular 项目地址: https://gitcode.com/gh_mirrors/cash/cashew 在Angular应用开发中&…

2026/7/31 18:12:12 阅读更多 →
2026这6款硬核降AIGC软件全揭秘,一键让AIGC率断崖式下跌!

2026这6款硬核降AIGC软件全揭秘,一键让AIGC率断崖式下跌!

步入 2026 年,学术界已经彻底进入“AI 严查时代”。曾经只需要盯着查重率的焦虑,如今已经被更严峻的 AIGC 检测压力所取代。高校对 AI 生成内容的识别能力越来越强,检测算法不断迭代升级,审核标准也愈发严苛。仅仅降低查重率已经无…

2026/7/31 18:11:12 阅读更多 →
2026最新亲测3款实用视频下载链接提取工具,免费版真的够用吗?

2026最新亲测3款实用视频下载链接提取工具,免费版真的够用吗?

简短结论 本次亲测的三款视频下载链接提取相关工具,免费版基本可以满足轻度用户的核心需求,无需付费就能完成基础的提取转写整理工作。三款工具各有适配场景:Podcastle适合海外内容处理,知意字稿适合短视频批量转写,听…

2026/7/31 18:11:12 阅读更多 →

最新新闻

一键关闭禁用Windows11/10自动更新实用工具,免费全版本通用!!!

一键关闭禁用Windows11/10自动更新实用工具,免费全版本通用!!!

黄拖鞋自动更新关闭工具你肯定遇到过这种崩溃瞬间:正在赶deadline,系统突然弹出“正在配置更新”;或者早上开机准备开会,却对着“更新进行中,请勿关闭计算机”的屏幕干等了半小时。Windows的强制自动更新,确…

2026/7/31 18:53:28 阅读更多 →
Android Studio中Compse界面使用LayoutInspector报错

Android Studio中Compse界面使用LayoutInspector报错

最近换了电脑,然后把开发环境重新搭建了一下,基本完成后,连接设备准备看看一个UI布局的问题。我用的是Compose写的界面,当我尝试用LayoutInspector的时候居然报错失败了,界面提示:Could not download andro…

2026/7/31 18:53:28 阅读更多 →
数字孪生案例 | 浮托安装数字孪生:环境复刻、安装预演、虚实同步、VR培训全流程

数字孪生案例 | 浮托安装数字孪生:环境复刻、安装预演、虚实同步、VR培训全流程

2.5万吨,7小时。这是"海风之心"海上柔性直流换流平台的浮托安装记录——用一艘半潜驳船,载着相当于40列高铁重量的上部模块,借潮汐浮力完成海上"挺举",将模块精准对接到导管架顶部的对接腿上。整个过程不能出…

2026/7/31 18:53:28 阅读更多 →
从MOD到MP3:OpenMPT音频导出全流程教程

从MOD到MP3:OpenMPT音频导出全流程教程

从MOD到MP3:OpenMPT音频导出全流程教程 【免费下载链接】openmpt Official read-only git mirror of the OpenMPT and libopenmpt subversion repository at https://source.openmpt.org/. This repository may occasionally get rebased without further notice wh…

2026/7/31 18:53:28 阅读更多 →
FPGA中UART串口模块

FPGA中UART串口模块

本文本质为学习笔记的总结基本原理不在赘述。下面是串口读模块,用串口uart_rxd将外部输入的串行数据转换为并行数据由uart_data输出。module UART_get( input sys_clk,//系统时钟 input sys_rst_n,//系统复位,低电平有效input uart_rxd,//数据输入端口&a…

2026/7/31 18:53:28 阅读更多 →
抖音下载器终极指南:5分钟掌握免费批量下载视频音乐的完整方案

抖音下载器终极指南:5分钟掌握免费批量下载视频音乐的完整方案

抖音下载器终极指南:5分钟掌握免费批量下载视频音乐的完整方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallba…

2026/7/31 18:52:28 阅读更多 →

日新闻

物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:34 阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:34 阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:34 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻