LLVM每日谈之五十五 浅谈对Pass的错误认知及其原因

本文详细阐述了LLVM Pass不仅限于LLVM IR层面的analysis和transform,它在LLVM Backend中扮演着关键角色。通过分析Pass的结构、源码目录以及调用方式,揭示了人们常常忽视后端Pass的原因,并指出对后端架构理解不足是误区的根源。文中提到MachineFunctionPass作为关键连接,强调了Pass在后端优化的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pass作为LLVM的一个重要的组成部分,在LLVM IR层面和LLVM Backend层面都发挥了重要的作用。很多LLVM的使用者容易将Pass理解为LLVM IR层面的analysis和transform,而忽略了Pass在LLVM Backend层面的作用。而实际上,Pass在LLVM Backend层面发挥的作用一点都不小。以后端的结构为例:

Notes: 《Getting Started with LLVM Core Libraries》P134.

《Getting Started with LLVM Core Libraries》作者将空白框内的内容直接写为Pass,带灰色框的内容解释为由多个小Pass组成的super Pass。按照这种说法,可以将Pass理解为整个后端的主要组成部分。当然,后端也不完全是Pass,只不过从执行的流程来看,Pass参与了整个后端的主要环节。

那么,为什么后端的Pass总那么容易被忽略?

首先,要从Pass的子类及其子类的子类说起。Pass的子类主要有:

其中,我们在LLVM IR层面用的最多的是FunctionPass。而LLVM Backend中的Pass,主要是以MachineFunctionPass为父类的。而MachineFunctionPass是FunctionPass的子类,其结构如图

要创建一个LLVM工程,可以按照以下步骤进行: 1. 安装LLVM:首先需要安装LLVM,可以从官网(https://llvm.org/releases/)下载预编译的二进制文件或者源代码,根据操作系统和编译器版本进行选择。如果使用二进制文件,则需要将安装目录添加到系统路径中。 2. 创建工程:使用LLVM的CMake构建系统可以创建一个LLVM工程。首先创建一个目录用于存放工程文件,然后在该目录下创建一个CMakeLists.txt文件,其中包含以下内容: ``` cmake_minimum_required(VERSION 3.4.3) project(MyLLVMProject) find_package(LLVM REQUIRED CONFIG) add_definitions(${LLVM_DEFINITIONS}) include_directories(${LLVM_INCLUDE_DIRS}) add_executable(my-llvm-program main.cpp) llvm_map_components_to_libnames(llvm_libs support core irreader) target_link_libraries(my-llvm-program ${llvm_libs}) ``` 其中,`project`命令用于指定工程名称,`find_package`命令用于查找LLVM的配置信息,`add_definitions`命令用于添加LLVM的编译选项,`include_directories`命令用于包含LLVM的头文件,`add_executable`命令用于定义可执行文件,`llvm_map_components_to_libnames`命令用于将LLVM组件映射到对应的库文件,`target_link_libraries`命令用于链接LLVM库文件。 3. 编写代码:在工程目录下创建一个main.cpp文件,编写LLVM代码。 4. 编译工程:使用CMake命令生成Makefile文件,然后使用make命令进行编译。 ``` mkdir build cd build cmake .. make ``` 5. 运行程序:编译完成后,在控制台中输入`./my-llvm-program`命令即可运行LLVM程序。 以上就是创建一个LLVM工程的基本步骤。需要注意的是,LLVM的使用需要熟悉其API和IR的相关知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值