SimplifyRODataLoads - 优化阅读笔记

// 只支持 X86
static cl::opt<bool> SimplifyRODataLoads("simplify-rodata-loads",cl::desc("通过用相应节中找到的常数替换内存操作数,简化来自只读节的加载"),cl::cat(BoltOptCategory));

测试用例:

./build4/bin/llvm-lit bolt/test/X86/rodata-simpl-loads.test -a
# bolt/test/X86/Inputs/rodata_simpl_loads.s

效果(立即数代替了地址(少了寻址过程)):
在这里插入图片描述

bool SimplifyRODataLoads::simplifyRODataLoads(BinaryFunction &BF) {// 对所以可能加载内存的操作Desc.mayLoad()// 如果是 PC 相关的指令if (MIB->hasPCRelOperand(Inst)) {// 获取内存操作数的偏移MCOperand *DispOpI = MIB->getMemOperandDisp(Inst);// 通过内存操作数获取目标符号与偏移std::tie(DisplSymbol, DisplOffset) = MIB->getTargetSymbolInfo(DispOpI->getExpr());// 通过偏移符号获取 BinaryDataBinaryData *BD = BC.getBinaryDataByName(DisplSymbol->getName());// 起始地址加偏移获取目的地址TargetAddress = BD->getAddress() + DisplOffset;}// 不然直接通过接口获取else if (!MIB->evaluateMemOperandTarget(Inst, TargetAddress))// 根据目标地址获取Sec, 只处理只读节BC.getSectionForAddress(TargetAddress);// 如果目标地址需要重定位或需要动态重定位(链接时数据可能会更改) -- 无法处理// 计算节省的动态加载的次数NumDynamicLocalLoadsFound += BB->getExecutionCount();// 最后的替换动作 -- 只支持x86MIB->replaceMemOperandWithImm(Inst, ConstantData, Offset)
}

遗留问题:

  1. arm 能否实现相同场景的优化
  2. 是否可以放到链接时做

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

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

相关文章

如何在Linux部署Docker Registry本地镜像仓库并实现无公网IP远程连接

文章目录 1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址 Docker Registry 本地镜像仓库,简单几步结合cpolar内网穿透工具实现远程pull or push (拉取和推送)…

Linux/Ubuntu/Debian基本命令:文本操作

Linux系统真的超级好用&#xff0c;免费&#xff0c;有很多开源且功能强大的软件。尤其是Ubuntu&#xff0c;真的可以拯救十年前的老电脑。 下面是用于在命令行界面&#xff08;Terminal&#xff09;中进行文本操作的键盘快捷键&#xff0c; 这些快捷方式对于高效的文本编辑非常…

为什么拥有C语言基础的人,依然学不会C++?

为什么拥有C语言基础的人&#xff0c;依然学不会C? 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C语言 的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&am…

Vue+OpenLayers7入门到实战:OpenLayers加载必应地图(BingMap)

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7入门到实战 前言 本章介绍如何使用OpenLayers7在地图上如何加载必应地图(BingMap)。 需要提前到必应开发者中心申请对应的地图访问api key才可以加载地图。 二、依赖和使用 "ol": "7.5.2"使用npm安装…

使用uni-app开发并申请微信小程序的流程

使用uni-app开发并申请微信小程序的流程 准备阶段 申请微信小程序账号&#xff1a; 登录微信公众平台&#xff08;mp.weixin.qq.com&#xff09;&#xff0c;按照指引注册并申请一个微信小程序账号。需要提供相关的企业或个人资质&#xff0c;以及未绑定过微信开放平台的邮箱…

docker引擎

目录 一、Docker引擎发展历程 二、docker引擎架构 三、docker引擎分类 四、docker引擎安装 4.1安装条件 4.2 使用rpm存储库安装 4.2.1设置存储库 4.2.2安装docker引擎 4.2.3启动docker,并设置docker开机自启动 五、卸载docker引擎 5.1.卸载 Docker 引擎、CLI、conta…

如何使用vscode创建Node.js服务并结合内网穿透实现远程访问本地服务

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

【C语言】函数与递归算法(附经典例题代码)

函数 ○ 一个函数只能完成一个功能. ○ 定义函数&#xff1a; 返回值类型 函数名 (参数列表&#xff09;{ 函数体 } ○ 定义函数的作用 &#xff1a;代码复用 模块化开发 ○ 函数是不能嵌套定义的,但能嵌套调用.…

当代计算机语言占比分析

在当今快速发展的科技领域&#xff0c;计算机语言作为程序员的工具之一&#xff0c;扮演着至关重要的角色。随着技术的不断演进&#xff0c;各种编程语言层出不穷&#xff0c;但在实际开发中&#xff0c;哪些计算机语言占据主导地位&#xff1f;本文将对当代计算机语言的占比进…

使用API有效率地管理Dynadot域名,使用API设置域名隐私保护

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

成员函数版本实现算术运算符的重载 全局函数版本实现算术运算符的重载

#include <iostream>using namespace std; class Per { private:friend const Per operator-(const Per &L,const Per &R);int a;int b; public:Per(){cout<<"无参构造"<<endl;}Per(int a,int b):a(a),b(b){cout<<"有参构造&qu…

26-1 SQL 注入攻击 - delete注入

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、注入原理: 对于后台来说,delete操作通常是将对应的id传递到后台,然后后台会删除该id对应的数据。 如果后台没有对接收到的 id 参数进行充分的验证和过滤,恶意用户可能会…

linux系统对于docker容器的监控

容器监控 容器监控原生命令操作问题 容器监控三剑客CAdvisorInfluxDBGranfana compose编排监控工具新建目录创建CIG.yml文件启动docker-compose测试 容器监控 CAdvisorInfluxDBGranfana 原生命令 操作 docker stats问题 通过docker stats命令可以很方便的看到当前宿主机上所…

CSS选择器-一文搞懂CSS选择器

CSS选择器 一、简单选择器和权值1. 通配符选择器 &#xff08;权值 - 0&#xff09;2. 标签选择器 &#xff08;权值 - 1&#xff09;3. 类选择器和伪类 &#xff08;权值 - 10 &#xff09;4. ID选择器 &#xff08;权值 - 100&#xff09;-精确制导行内样式 - 它不是选择器-权…

Cassandra 集群安装部署

文章目录 一、概述1.官方文档2. 克隆服务器3.安装说明4.安装准备4.1.安装 JDK 114.2.安装 Python4.3.下载文件 二、安装部署1.配置 Cassandra2.启动 Cassandra3.关闭Cassandra4.查看状态5.客户端连接服务器6.服务运行脚本 开源中间件 # Cassandrahttps://iothub.org.cn/docs/m…

3.2 Beautiful Soup 的使用

目录 一、Beautiful Soup 的简介 二、解析器 三、基本使用 四、节点选择器 1 选择元素 2 获取名称、属性、文本内容 五、方法选择器 1 find_all 传入 name 节点名 传入 attrs 属性 传入 text 2 find 六、CSS 选择器 1 实例 2 获取属性 3 获取文本 七、结语 一…

从政府工作报告探计算机行业发展(在医疗健康领域)

从政府工作报告探计算机行业发展 政府工作报告作为政府工作的全面总结和未来规划&#xff0c;不仅反映了国家整体的发展态势&#xff0c;也为各行各业提供了发展的指引和参考。随着信息技术的快速发展&#xff0c;计算机行业已经成为推动经济社会发展的重要引擎之一。因此&…

暴雨信息:可持续转型更需要“以人为本”

数字化正在开启新的商业模式和价值流&#xff0c;为企业与组织带来巨大收益。其中&#xff0c;“人 (People)”这一因素至关重要。 提供更好的工作与生活体验&#xff0c;应对人口老龄化、劳动力短缺等挑战。对于企业而言&#xff0c;解决这些问题既是社会责任&#xff0c;也是…

代码随想录算法训练营第五十五天| 583. 两个字符串的删除操作 、72. 编辑距离

文章目录 1.两个字符串的删除操作2.编辑距离 1.两个字符串的删除操作 给定两个单词 word1 和 word2&#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步可以删除任意一个字符串中的一个字符。 示例 1&#xff1a; 输入: word1 “sea”, word2 “eat” 输出: 2 …

山景BP1048 烧录器烧写

1.首先确保硬件连接没问题&#xff0c;烧写器不能亮红灯&#xff0c;亮红灯说明硬件没正确连接。硬件连接如下&#xff1a; 2.点击Flash Burner 3.编程目标闪存选择SDK包自带的烧写驱动器&#xff0c;闪存映像档选择编译好的bin文件。 4.点击刻录 5.看见有进度条在跑&#x…