博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
llvm
阅读量:2725 次
发布时间:2019-05-13

本文共 1951 字,大约阅读时间需要 6 分钟。

LLVM

llvm 是一个模块化的开源编译器框架,最早的时候是Illinois 大学的一个研究项目,早先的主要负责人是Chris Lattner。

llvm 有一个表达形式很好的IR语言(intermediate representation),高度模块化的结构,因此它可以作为多种语言的后端,提供与编程语言无关的优化和针对多种CPU的目标代码生成功能。

其借鉴了 GCC 等传统编译器的分段设计方式,引入了高度模块化的设计。

在这里插入图片描述
正是由于贯穿编译过程的统一的IR表示,llvm 支持快速开发编程语言,添加各种前后端来完成编译器的构建。
在这里插入图片描述

Low Level Virtual Machine

A set of reusable libraries that collect of compiler technology components
Program analyzer and optimizator
Machine code generator
Clang: C based language front-end such as C, C++
Just-In-Time compiler

Implemented in C++ with well-defined interfaces: Easy to add, remove, and change funcitionality

Open source, and BSD licensed

Website:

Clang

  • clang
  • clang-format
  • clang-check
  • clang-rename
  • clang-refactor

scan_build, scan_view

在这里插入图片描述

进阶工具

  • opt
  • llc
  • lli
  • llvm-config
  • llvm-diff
  • llvm-mc
  • llvm-bcanalyzer
  • llvm-opt-report
  • bugpoint
  • llvm-stress
  • llvm-tblgen
  • llvm-mcmarkup
  • clang-offload-bundler
  • obj2yaml / yaml2obj
  • llvm-rtdyld
  • llvm-cfi-verify
  • verify-uselistorder

opt foo.ll -O1 -view-cfg

优化 opt 选项
Constant Propagation -constprop
Function Inlining -inline
Dead Code Elimination -dce
Common Sub-expression Elimination -early-cse
Loop Unrolling -loop-unroll

IR 操作

  • llvm-link
  • llvm-as
  • llvm-dis
  • llvm-extract
  • llvm-split
  • llvm-cat
  • llvm-modextract
  • llvm-lto
  • llvm-lto2

Debug Info 相关

  • llvm-dwp
  • llvm-dwarfdump
  • llvm-dsymutil

LLVM IR

  • Low level assembly like language
  • RISC-like three address code
  • Target independence
  • Infinite virtual register set
  • Static Single Assignment form
  • LLVM IR is strongly typed
IR Format
  • in-memory: binary in-memory format, used during compilation process
  • bitcode: binary on-disk format, suitable for fast loading
  • assembly: human-readable format

三种类型是等价的。bitcode file 的后缀名是 .bc;assembly file 的后缀名是 .ll

IR Generation
  • Assembly

llvm-dis: LLVM IR assembly code, llvm .bc => .ll

llc: native assembly code, llvm .bc => .s

clang -emit-llvm -S filename.c -o out.llopt -S xx.bc -o out.llllvm-dis xxx.bc -o -out.ll
  • Bitcode
clang -emit-llvm -c filename.c -o out.bcopt xx.ll -o out.bcllvm-as xx.ll -o out.bc

转载地址:http://fnstd.baihongyu.com/

你可能感兴趣的文章
FreeMarker 快速入门
查看>>
115个Java面试题和答案——终极列表
查看>>
Java 常用List集合使用场景分析
查看>>
跟我学Java多线程——ThreadPoolExecutor(线程池)
查看>>
Spring Data JPA入门
查看>>
Spring4 事务管理
查看>>
Java工程师成神之路
查看>>
网络七层协议的形象说明
查看>>
Web系统大规模并发——电商秒杀与抢购
查看>>
架构师入门笔记九 初识IO NIO AIO
查看>>
sql语句大全
查看>>
plsql本机不安装数据库连接远程数据库
查看>>
Linux运维常见面试题汇总
查看>>
maven的两个命令
查看>>
Oracle数据导入导出图解(图文并茂)
查看>>
CentOS下添加用户并且让用户获得root权限
查看>>
Centos7.0下安装jdk和tomcat以及环境配置
查看>>
Linux下的关闭防火墙
查看>>
ajax跨域问题(三种解决方案)
查看>>
每隔一秒自动执行函数(JavaScript)
查看>>