About

hi~ Github: https://github.com/Yuuoniy Mail: linmq006@gmail.com ...

LLVM 入门教程之 Pass 编写

前言 本篇文章作为 Pass 编写的入门,主要介绍以下内容: 示例 Pass 编写 Pass 编译构建和运行 Pass 不同子类 Pass 注册 Pass 间依赖 示例 首先我们先结合一个小示例,尝试编写 Pass,之后再详细介绍涉及的内容。 #include "llvm/Pass.h" //添加头文件#include "llvm/IR/Function.h"#include "llvm/Support/raw_ostream.h"#include "llvm/IR/LegacyPassManager.h"#include "llvm/Transforms/IPO/PassManagerBuilder.h"using namespace llvm; //添加 llvm 命名空间 namespace { // 定义匿名命名空间 struct SkeletonPass : public FunctionPass { // 定义 SkeletonPass 继承 FunctionPass static char ID; // // ID 标识 SkeletonPass() : FunctionPass(ID) {} virtual bool runOnFunction(Function &F) { //// 重载 runOnFunction 函数,接受Function类型参数 errs() << "I saw a function called " << F....

LLVM 入门教程之基本介绍

前言 本篇文章作为LLVM入门教程,包括以下内容: LLVM 的安装 LLVM 源码结构 LLVM 工具介绍 Clang 基本使用 LLVM IR 基本内容 Pass 介绍 安装 目前 LLVM 的最新版本为 10.0.0,我尝试通过预编译和源码编译两种安装方式安装了 LLVM+Clang。下面介绍这两种方式。 预编译源码安装 直接去官网下载解压即可,或者去镜像网站 下载,根据系统选择压缩包进行下载,此处我选择的是 clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz 。 源码编译安装 首先下载相关源码,可以从 github llvm-project 选择自己需要的源码下载,也可以从上面的镜像网站下载。这里我从镜像网站下载了llvm 和 clang 源码( clang-10.0.0.src.tar.xz 、llvm-10.0.0.src.tar.xz ) 然后将源码进行解压,保持其目录与 llvm-project 目录一致,即 目录结构图: llvm-project - llvm - clang - build 然后进入llvm-project 目录编译,如果没有 cmake 可以直接通过 apt 安装一下。 $ cd llvm-project $ mkdir build && cd build $ cmake -G "Unix Makefiles" -DLLVM_ENABLE_PROJECTS="clang" \ -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" \ -DBUILD_SHARED_LIBS=On ....