使用new pm写一个pass

范例来自LLVM Techniques, Tips, and Best Practices Clang and Middle-End Libraries

llvm ir到ir是由一个个pass处理的,从一个ir到另一个ir会改变一些东西

书里面就是说想要给指针变量添加一个noalias属性

书里面使用插件的形式,但是不知道怎么我搞不出来,所以就用嵌入源码的形式,就重新编译的话也不用多久。

头文件,我们主要是在cpp里面实现run方法,这里传的是Function,也就是针对函数的优化

cpp文件的话大概就是扫描函数的参数,然后如果是指针且没有noalias属性,我们给他加上alias属性,在后面是管分析的东西,就先不说了,主要是看怎么在源码里加。

总的来说是按照官网的步骤

头文件路径/llvm-project/llvm/Transforms/Utils/StrictOpt.h

cpp文件路径llvm-project/llvm/lib/Transforms/Utils/StrictOpt.cpp

然后cpp同一个目录下面有个CMakeLists.txx,把cpp加上

然后llvm-project/llvm/lib/Passes/PassBuilder.cpp里加上头文件

同目录下的PassRegistry.def加

前面是你命令行要输入的passs名字,后面是你写的源文件里类的名字

改完这些就和正常一样编译,

build

cd build

使用类似的命令 

cmake -G Ninja \ 
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_INSTALL_PREFIX=/data/share/llvm-install \
-DLLVM_TARGETS_TO_BUILD="RISCV;NVPTX;AMDGPU"\
-DLLVM_ENABLE_PROJECTS="clang;lld" \
-DLLVM_USE_LINKER=lld \
-DLLVM_BUILD_RUNTIME=Off \
../Ilvm

这边需要区分和默认的linux bin下面的llvm工具的关系,我们使用我们构建项目的bin下面llc查看信息会发现没有目标机器

所以我们使用opt的时候要加相关的目标

./opt -mtriple=riscv64-unknown-linux-gnu (.ll文件的位置) --passes=strictopt -S -o (要生成的.ll文件位置)

原ir

经过pass的ir

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

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

相关文章

MetaGPT前期准备与快速上手

大家好,MetaGPT 是基于大型语言模型(LLMs)的多智能体协作框架,GitHub star数量已经达到31.3k。 接下来我们聊一下快速上手 这里写目录标题 一、环境搭建1.python 环境2. MetaGpt 下载 二、MetaGPT配置1.调用 ChatGPT API 服务2.简…

手机扫一扫文档、证件表格就能打印,不用专门找扫描软件啦

现在各大品牌的手机扫一扫功能都可以满足扫描文档、扫描表格的功能,平常如果需要将纸质文件扫描成电子档,拿起手机就可以实现。文件签名后再扫描成PDF版本,相信大家都用得不少了。 今天就用华为手机的扫一扫给大家示范一下如何将文档、证件、…

设计模式—行为型模式之状态模式

设计模式—行为型模式之状态模式 状态(State)模式:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 状态模式包含以下主要角色: 环境类&am…

Kafka配置Kerberos安全认证及与Java程序集成

Background 本文主要介绍在 Kafka 中如何配置 Kerberos 认证,以及 java 使用 JAAS 来进行 Kerberos 认证连接。本文演示为单机版。 所用软件版本 查看 Kerberos 版本命令:klist -V 软件名称版本jdk1.8.0_202kafka2.12-2.2.1kerberos1.15.1 1、Kerberos …

【STM32】STM32学习笔记-串口发送和接收(27)

00. 目录 文章目录 00. 目录01. 串口简介02. 串口相关API2.1 USART_Init2.2 USART_InitTypeDef2.3 USART_Cmd2.4 USART_SendData2.5 USART_ReceiveData 03. 串口发送接线图04. USB转串口模块05. 串口发送程序示例06. 串口发送支持printf07. 串口发送支持printf_v208.09.10. 01.…

Linux网络基础及bonding实际操作

1.查看linux基础的网络配置 网关:route -n ip地址:ifconfig 或 ip a DNS服务器:cat /etc/resolv.conf 主机名:hostname 路由:route -n 网络连接状态:ss 或 netstat 2.临时修改网卡名称 3.永久修…

在全志T113-i平台上实现H.265视频解码步骤详解

H.265,也被称为HEVC(HighEfficiency Video Coding),作为H.264的继任者,提供了更好的视频压缩和更高的视频质。H.265通过引入更多先进的编码技术,如更强大的运动估计和更高效的变换编码,对比H.264进行了改进。这些改进使…

宏景eHR 多处 SQL注入漏洞复现

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR view、trainplan_tree.jsp等接口处存在SQL注入漏洞,未经过身份认证的远程攻击者可利用此漏洞执行任意SQL指令,从而窃…

Python web自动化测试框架搭建(功能接口)——通用模块

1、通用模块: config.conf: 公共配置文件,配置报告、日志、截图路径,以及邮件相关配置 [report] reportpath E:\workspace\WebAutomation\src\functiontest\Report\2017-07-18 screen_path E:\workspace\WebAutomation\src\functiontest\R…

vue上传文件加进度条,fake-progress一起使用

el-upload上传过程中加进度条,进度条el-progress配合fake-progress一起使用,效果如下: 安装 npm install fake-progress 在用到的文件里面引用 import Fakeprogress from "fake-progress"; 这个进度条主要是假的进度条&#xff…

数字信号处理 唐向宏著 pdf +课后答案 免费下载

数字信号处理——原理、实现与仿真 pdf 唐向宏著 +课后答案 杭州电子科技大学 费劲心思在网上花钱买的,共享给大家 永久链接:https://wwi.lanzoup.com/b0140pf4f 密码:aflj 里面除了有原书PDF,还有课后题答案

OpenHarmony——基于HDF驱动框架构建的Display驱动模型

概述 功能简介 LCD(Liquid Crystal Display)驱动编程,通过对显示器上电、初始化显示器驱动IC(Integrated Circuit)内部寄存器等操作,使其可以正常工作。 基于HDF(Hardware Driver Foundation…