美文网首页
llvm cookbook 1.1 模块化设计示例

llvm cookbook 1.1 模块化设计示例

作者: peteyuan | 来源:发表于2018-11-08 19:51 被阅读28次

llvm被设计成一系列库的集合。什么意思?就是每个模块都可以拿出来单独使用。
本文用llvm优化器opt命令行工具来展示它的模块化用法。

编写文件 testfile.ll

define i32 @test1(i32 %A) {
  %B = add i32 %A, 0
  ret i32 %B
}

define internal i32 @test(i32 %X, i32 %dead) {
  ret i32 %X
}

define i32 @caller() {
  %A = call i32 @test(i32 123, i32 456)
  ret i32 %A
}

在任意目录执行如下命令

opt -S -instcombine testfile.ll -o output1.ll

输出文件 output1.ll内容如下

; ModuleID = 'testfile.ll'
source_filename = "testfile.ll"

define i32 @test1(i32 %A) {
  ret i32 %A
}

define internal i32 @test(i32 %X, i32 %dead) {
  ret i32 %X
}

define i32 @caller() {
  %A = call i32 @test(i32 123, i32 456)
  ret i32 %A
}

可以看到函数 test1 中的指令被合并了,这就是instcombine的作用。

再次执行命令:

opt -S -deadargelim testfile.ll -o output2.ll

输出output2.ll如下:

; ModuleID = 'testfile.ll'
source_filename = "testfile.ll"

define i32 @test1(i32 %A) {
  %B = add i32 %A, 0
  ret i32 %B
}

define internal i32 @test(i32 %X) {
  ret i32 %X
}

define i32 @caller() {
  %A = call i32 @test(i32 123)
  ret i32 %A
}

这一次,指令没有合并,但test函数中没有用到的参数被删除了,就是 deadargelim的作用。


llvm优化器的各pass相互不知道依赖关系,这个关系主要靠 PassManager来管理。

除了优化器,还有代码生产器中的各模块也可以独立使用,包括

  • instruction selection
  • register allocation
  • scheduling
  • code layout optimization
  • assembly emission

相关文章

  • llvm cookbook 1.1 模块化设计示例

    llvm被设计成一系列库的集合。什么意思?就是每个模块都可以拿出来单独使用。本文用llvm优化器opt命令行工具来...

  • 个人计划(过年前)

    读完《人类简史》 读完《C程序设计语言》 好好工作 加油↖(ω)↗ 过年后:《LLVM Cookbook》《程序员...

  • LLVM架构-编译原理

    什么是LLVM LLVM项目是模块化、可重用的编译器以及工具链技术的集合 The LLVM Project is ...

  • LLVM

    是模块化、可重用的编译器以及工具链技术的集合 广义的LLVM:整个LLVM架构狭义的LLVM:LLVM后端(代码优...

  • LLVM 学习

    关于LLVM 官网地址 https://llvm.org/ LLVM 项目是模块化,可重用的编译器以及工具链技术的...

  • iOS逆向-day10:LLVM 编译器

    一、LLVM的简单介绍 1.1、什么是LLVM官网:https://llvm.org/LLVM官网解释:The L...

  • LLVM 初步了解

    什么是LLVM 官网:https://llvm.org/ LLVM项目是模块化、可重用的编译器以及工具链技术的集合...

  • 逆向 - init

    book 汇编语言 LLVM CookBook 密码学 攻防实战 OS X 与 iOS 内核 iOS 应用安全 黑...

  • 基于LLVM开发属于自己Xcode的Clang插件

    开发的插件效果如下 简介 本开发是基于LLVM,那么我们先来简单了解一下LLVM: LLVM项目是模块化、可重用的...

  • 软考-高内聚低耦合(下)

    答案 1.1 - 1.1:B2.1 - 3.4:B A D C3.1 - 3.1:A 知识点分析 《模块化设计》模...

网友评论

      本文标题:llvm cookbook 1.1 模块化设计示例

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