美文网首页LLVM
llvm学习日记八:IR层优化

llvm学习日记八:IR层优化

作者: 鸣人的大哥 | 来源:发表于2019-11-15 10:47 被阅读0次

参考书:《Getting Started with LLVM Core Libraries》

一、优化参数:

  • -O0 : 不优化,用于代码调试
  • -O1 :介于 O0 和 O2之间
  • -O2 :中等优化
  • -Os :类似于 O2 ,体积更小
  • -Oz :类似于 Os , 体积最小
  • -O3 :类似于 O2 ,代码体积大于 O2,但是运行速度更快
  • -O4 :类似于 O3 ,增加了链接时优化。

其他优化参数:

  • -std-compile-opts : 标准编译时优化
  • -std-link-opts : 标准链接时优化

二、PASS 依赖

  • Optimizations are usually composed of analysis and transform passes.
    优化主要由分析类pass和转化类pass组成
  • 显示依赖:
    pass manager 全局管理pass类,如果一个pass依赖其他pass,pass manager 会先静默加载其他的pass,然后在运行这个pass
  • 隐式依赖:
    一些转化和分析类pass依赖某些特定用法的IR代码,比如一个pass被指定只能在某个pass之后工作,这就诞生了隐式依赖。

这一段不好理解,我看了书中这一段很多次才有点理解
显示依赖就是强依赖,这些依赖必须满足,否则报错;
隐式依赖就是弱依赖,不满足会跳过正常执行。

三、PASS API

pass类是实现优化的主要类,但是这个pass类并不是直接使用,而是靠它的子类实现,下面是一些公共的子类:

  • ModulePass : 这是一个最普遍的pass,它允许你立即分析某个module,而无需任何特定的函数顺序。要使用它需要写一个子类继承ModulePass,必须要重写函数runOnModule()

  • FunctionPass : 这是一个用的最多的pass类型,允许一次处理一个函数,而不需要特定的顺序,它禁止修改其他函数、函数删除、全局量量的删除。使用它要重写runOnFunction()

  • BasicBlockPass :他处理基础块,类似于FunctionPass,它禁止修改其他BasicBlock,BasicBloc删除。使用时要重写runOnBasicBlock()

重写的入口函数:runOnModule、runOnFunction、runOnBasicBlock返回一个bool值,false表示操作的基本单元(module、function、basicblock)未改变,true表示改变

相关文章

  • llvm学习日记八:IR层优化

    参考书:《Getting Started with LLVM Core Libraries》 一、优化参数: -O...

  • 代码混淆

    LLVM编译过程: 预处理,词法分析,token,语法分析,AST,代码生成,LLVM IR,优化,生成,汇编代码...

  • LLVM

    Mac安装llvm 软链接相应工具(未列出的可以自己去找一下): C转LLVM IR LLVM IR转bitcod...

  • llvm cookbook 1.7 优化ir

    本文介绍如何使用opt工具优化llvm ir。 使用之前编写的代码 multiply.c 执行命令 生成 mult...

  • llvm学习日记六:LLVM IR 在内存中的模块

    参考书:《Getting Started with LLVM Core Libraries》 LLVM IR 内存...

  • LLVM IR

    LLVM Intermediate Representation,链接 LLVM 前端和后端的桥梁,与编程语言和运...

  • Impala中 LLVM 的交叉编译、调用过程

    [TOC] 本文主要介绍通过gen_ir_descriptions.py引入的 LLVM IR 函数(交叉编译)。...

  • 教你使用swift写编译器玩具(4)

    前言 本章对应官方教程第4章,本章介绍如何为中间代码(LLVM IR)添加优化以及添加JIT编译器支持。 教程如下...

  • LLVM IR介绍

    官方链接 标识符 LLVM的标识符有两类:全局标识符和局部标识符。全局标识符以符号@开头,局部标识符由符号%开头。...

  • LLVM官方教程Kaleidoscope 3

    参考 Kaleidoscope: Code generation to LLVM IR 1. 前言 在之前的文章中...

网友评论

    本文标题:llvm学习日记八:IR层优化

    本文链接:https://www.haomeiwen.com/subject/igorictx.html