首页 > 编程语言 >LLVM中四种寄存器分配算法及开启选项

LLVM中四种寄存器分配算法及开启选项

时间:2024-08-08 19:52:23浏览次数:16  
标签:pbqp LLVM Register 算法 寄存器 test Allocator

在LLVM编译器中,一共有四种寄存器分配算法:Basic Register Allocator、Fast Register Allocator、PBQP Register Allocator、Greedy Register Allocator。

Fast Register Allocator

这种分配器是局部的,作用于各个基本块,它尽量地将值保持在寄存器中并重用它们。

Basic Register Allocator

核心算法是线性扫描算法的变种,而 basic 分配器可以理解为一个简化版的 greedy 分配器。

PBQP Register Allocator

这种方法将寄存器分配映射为分区布尔二次规划(PBQP: Partitioned Boolean Quadratic Programming)问题。一个PBQP解决方法用于将这个问题的结果映射回寄存器

Greedy Register Allocator

核心算法是线性扫描算法的变种,并且Greedy是新版本 LLVM 默认的寄存器分配器,如果编译选项没有额外设置,在-O2以上会使用greedy,在其他情况会使用fast

开启选项:

-regalloc=<regalloc_name>选项。可选的<regalloc_name>有:pbqp,greedy,basic,和fast。

示例:

clang   -regalloc=greedy test.c  -o test

但是要注意的是,如果用clang -regalloc=pbqp时,会报错说不存在pbqp寄存器分配算法,所以要使用pbqp算法可以采用下面的方法

clang -S  -emit-llvm test.c  -o test.ll
llc -filetype=obj  -regalloc=pbqp test.ll  -o test.o
clang test.o -o test_pbqp

另外,图着色法也是我们熟知的一种寄存器分配算法,但是LLVM 至始至终就没有考虑过图着色法。虽然图着色生成的代码质量很高,关注的是尽量减少溢出,但是对于大型程序中,由于寄存器有限,大量溢出是不可避免的,所以llvm认为关注如何高效地溢出如何尽量减少溢出更有意义。

标签:pbqp,LLVM,Register,算法,寄存器,test,Allocator
From: https://blog.csdn.net/qq_44083568/article/details/141035178

相关文章

  • 算法小总结-图论
    拓扑排序[HNOI2015]菜肴制作////Createdbyfxzon2024/8/3.//#include<bits/stdc++.h>usingnamespacestd;intans[1008611];#defineintlonglongboolTopSort(vector<vector<int>>&G,intn,vector<int>&inDegree){......
  • 代码随想录算法训练营第64天 | 图论:Floyd 算法+A * 算法
    97.小明逛公园https://kamacoder.com/problempage.php?pid=1155Floyd算法精讲https://www.programmercarl.com/kamacoder/0097.小明逛公园.html#floyd-算法精讲Floyd算法精讲问题总结:双向道路;路径规划;多个起点到多个终点核心思想:动态规划确定dp数组和下标含义:grid......
  • 揭秘人工智能三大基石:数据、算法与算力的深度融合
    在科技日新月异的今天,人工智能(AI)作为引领未来科技浪潮的核心力量,正以前所未有的速度改变着我们的生活、工作乃至整个社会的面貌。人工智能的快速发展并非偶然,而是建立在三大坚实基石之上:数据、算法与计算能力。这三者相辅相成,共同构筑了人工智能技术的基石,推动了AI技术的不断突破......
  • 2024-8-7 算法学习
    P6136【模板】普通平衡树(数据加强版)题意:1,插入一个数;2,删除一个数3,查询一个数的排名4,查询第x个数5,查询x的前驱和后继重点在于分裂split和合并merge操作:1:分裂为X[0,x],Y[x+1,n],后rt=merge(X,x,Y)2:分裂为X[0,x-1],Y[x,x],Z[x+1,n]后Y=merge(Y.l,Y.r),后rt=merge(X,Y,Z);3......
  • paxos算法详解
    1分布式一致性:共识算法对于一个分布式系统来说,保障集群中所有节点的数据完全相同(即一致性)是很重要的,随着多节点的引入,这影响的是整个分布式系统对外服务的表象一致性。也就是说,一个分布式系统想要做到完全的一致性,需要对外表现为顺序一致性,即各个节点上的操作顺序都一致。而在......
  • 【Python机器学习】利用AdaBoost元算法提高分类性能——基于单层决策树构建弱分类器
    单层决策树(也称决策树桩)是一种简单的决策树。它基于单个特征来做决策,由于这棵树只有一次分裂过程,因此它实际上就是一个树桩。在构造AdaBoost代码时,首先通过一个简单数据集来确保在算法上一切就绪:fromnumpyimport*defloadSimpData():datMat=matrix([[1.0,2.1],......
  • 机器学习算法之一 线性回归
    1.线性预测函数定义左侧为真实值,右侧为预测值与误差的和,其中为权重矩阵。2.目标函数的推导2.1高斯分布函数误差符合独立同分布假设,服从均值为0的高斯分布:将线性函数带入,得:......
  • 文心一言 VS 讯飞星火 VS chatgpt (320)-- 算法导论22.3 12题
    十二、证明:我们可以在无向图G上使用深度优先搜索来获得图G的连通分量,并且深度优先森林所包含的树的棵数与G的连通分量数量相同。更准确地说,请给出如何修改深度优先搜索来让其给每个结点赋予一个介于1和k之间的整数值v.cc,这里k是G的连通分量数,使得u.cc=v.cc当且仅当结点u和结......
  • 文心一言 VS 讯飞星火 VS chatgpt (319)-- 算法导论22.3 11题
    十一、请解释有向图的一个结点u怎样才能成为深度优先树中的唯一结点,即使结点u同时有入边和出边。如果要写代码,请用go语言。文心一言:在一个有向图中,如果结点u在深度优先搜索(DFS)的过程中成为深度优先树(DFS树)中的唯一结点,这通常意呀着在DFS遍历的某个特定时刻,从u出发能够探索......
  • 清晰易懂二分查找算法 你确定不看吗?
    @目录前言简介一、二分查找算法的原理是什么?1.确定搜索范围:2.计算中间位置:3.比较中间元素:4.调整搜索范围:5.重复迭代:二、二分查找算法的优缺点是什么?优点:缺点:三、java实现二分查找案例总结前言请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、提示:以下是本篇文......