当前位置: 首页 > news >正文

LLVM系列:1.设计思想和LLVM IR简介

文章目录

      • 背景介绍
      • 内容简介
      • LLVM库的集合以及模块化设计
        • LLVM优化器的模块化设计
        • LLVM代码生成器的模块化设计
      • LLVM IR
        • LLVM编译流程
        • LLVM IR的设计思想
        • LLVM的形式
        • LLVM IR的结构组成
        • 指令格式和变量
        • 示例
      • 参考文献:

背景介绍

LLVM项目于2000年创立于伊利诺斯州大学,原本是一个为了静态及动态编程语言而生的现代的,基于静态单赋值(SSA)编译技术的研究项目。现在已经成长为一个包含许多子项目的大型项目,提供了一系列具有良好定义接口的可重用库。

LLVM采用C++语言实现,其最关键的部分是其提供的LLVM核心库。这些库提供开发者opt工具,与目标机器无关的优化器,以及对多种目标架构的代码生成支持。这些库围绕着LLVM中间表示(Intermediate Representation,IR)进行构建,几乎能够所有的高层级编程语言都能够映射成为LLVM IR。因此,要使用LLVM的优化器和代码生成技术,需要首先编写一个能够将高级语言转化生成LLVM IR的编译器前端。

内容简介

本文简单的总结了 LLVM essentials这本书的第一章内容,主要包括:

  1. LLVM库的集合以及模块化设计。
  2. 熟悉了解LLVM IR。
  3. 大致了解LLVM工具并在命令行中使用他们。

LLVM库的集合以及模块化设计

LLVM优化器的模块化设计

LLVM的优化器opt,优化器中定义了很多pass。在编译器的优化过程中,“pass” 是指一系列特定的优化步骤或阶段,这些步骤会逐一处理编译器生成的中间表示(例如,抽象语法树、中间代码),以改进程序的性能和效率。每个优化 pass 都有一个具体的任务,它可以执行一种或多种代码变换,以减少计算或内存消耗,提高程序的速度或减少代码大小等。

这些 pass按顺序运行,每个 pass 都在前一个 pass 的基础上进一步优化代码。每个pass都是由c++编写的一个类,该类原始继承自LLVM的Pass类。每个pass能够被编译成动态链接库xxx.o,随后被组合归档整理成为一个静态链接库xxx.a,该静态库包含opt工具中的所有pass,并且他们彼此之间是低耦合的,这些pass会显式地声明彼此之间的dependency(包括glue dependency,chain dependency,data flow dependency等)。

之所以称优化器是模块化设计的,是因为这种设计可以让开发者通过显示地声

http://www.lryc.cn/news/152403.html

相关文章:

  • mysql中间件Atlas
  • ChatGPT 实现动态地图可视化展示
  • Vue.js安装步骤和注意事项
  • IDEA中Run/Debug Configurations添加VM options和Program arguments
  • 信息技术03--初/高中--简答题(73道知识简答)
  • Matlab之统计一维数组直方图 bin 计数函数histcounts
  • TDengine函数大全-时间和日期函数
  • 算法笔记——路径问题
  • Arcface部署应用实战
  • MySQL InnoDB 是怎么使用 B+ 树存数据的?
  • 手撕红黑树
  • 举例说明自然语言处理(NLP)技术
  • 淘宝详情API接口在各种应用中的作用性
  • java用正则方法验证文件名是否合法
  • 【learnopengl】Assimp构建与编译
  • 小兔鲜商02
  • 一键替换工程文件和场景中的UI对象字体
  • 微信小程序编辑器代码格式缩进设置
  • Android Aidl跨进程通讯(二)--异常捕获处理
  • Android中OkHttp源码阅读二(责任链模式)
  • 2023年03月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 顺序表链表OJ题(1)——【LeetCode】
  • flex:1
  • iOS练手项目知识点汇总
  • 【Linux】Libevent相关小知识总结
  • 【Spring Security】UserDetailsService 接口介绍
  • Mybatis学习|日志工厂、分页
  • Vivado 添加FPGA开发板的Boards file的添加
  • vmstat
  • LinuxShell变量