LLVM IR 理解
LLVM IR表示
LLVM IR有三个不同的形式:
内存中编译中间语言(IR)
保存在硬盘上的 bitcode(.bc 文件,适合快速被一个 JIT 编译器加载)
一个可读性的汇编语言表示(.ll 文件)。
LLVM为高效编译转换和分析,提供一个强大的中间表示。LLVM 的三种不同的形式都是等价的。以下是三种表示的转化方式。

LLVM 语言在轻量、底层、同时富有表现力,类型化,易于扩展。LLVM IR 语言目标是成为一种"通用中间语言",通过足够低层次,使高级语言可以清晰的映射。通过提供类型信息,LLVM IR 语言可作为优化的目标:
例如,通过指针分析,可以证明,一个 C 自动变量,从不当前函数之外访问,允许被提升到一个简单的 SSA 值,而不是一个堆变量。
LLVM接口构建IR代码
LLVM提供很多API,用于操作IR。使用这些接口,直接在内存中生成IR,直接运行,输出结果。(开发一种新的编程语言,完成词法语法解析后,利用LLVM 接口生成有效的中间代码,很快编译到目标平台上。)
LLVM IR 结构:

llvm是编译器后端,前端词语法分析,要生成机器代码。首先定义一个虚拟机,生成字节代码,将代码转化成对应系统结构。编译过程中,加入了流程控制,让开发者介入。
开发一种新的编程语言,在词法,语法解析完成后,生成中间代码,然后优化,最后编译成目标机器码。llvm 中间代码,效率高,可读性好。按照语法规则,利用llvm操作IR接口,生成等价的IR。如何编译成目标代码呢?llvm不仅仅是虚拟机,实现了模块化的优化策略和多种后端,后面都交给llvm。
总之:开发一种新编程语言,需要完成词法和语法解析,根据接口,生成可用的IR。
LLVM IR编译归纳图

LLVM IR 理解相关推荐

  1. LLVM IR 语法

    译者序     目前几乎没有关于LLVM IR(中间语言)的中文资料,因此本人在看英文手册的同时尝试翻译.限于水平和时间,本文只翻译了一小部分英文手册,如果发现理解有冲突之处,请以原文为准.     ...

  2. 简单了解LLVM IR基本语法

    可以转载,请注明出处! 以下内容是参照官方文档,对一些代码样例做出的解释,想要彻底掌握IR的语法规则,还是需要仔细熟读IR的官方文档.这里只是对IR的入门介绍,等上道之后,建议再去看官方文档,因为工作 ...

  3. LLVM每日谈之四十五 LLVM IR TUTORIAL

    今年的LLVM欧洲开发者会议上,在Tutorials环节,Vince Bridgers (Intel Corporation), Felipe de Azevedo Piovezan (Intel C ...

  4. LLVM IR入门指南(4)——类型系统

    我们知道,汇编语言是弱类型的,我们操作汇编语言的时候,实际上考虑的是一些二进制串.但是,LLVM IR却是强类型的,在LLVM IR中所有变量都必须有类型.这是因为,我们在使用高级语言编程的时候,往往 ...

  5. LLVM IR学习记录(1) GetElementPtr指令

    GetElementPtr指令是一条指针计算语句,本身并不进行任何数据的访问或修改,只进行指针的计算.使用语法如下: <result> = getelementptr <ty> ...

  6. 使用clang将C/C++代码编译成LLVM的中间代码(LLVM ir bitcode),并反汇编LLVM bitcode

    test.c文件内容如下: #include<stdio.h> int main(void){printf("hello world!\n");return 0; } ...

  7. 手写token解析器、语法解析器、LLVM IR生成器(GO语言)

    最近开始尝试用go写点东西,正好在看LLVM的资料,就写了点相关的内容 - 前端解析器+中间代码生成(本地代码的汇编.执行则靠LLVM工具链完成) https://github.com/daibinh ...

  8. 【从零开始学深度学习编译器】十五,MLIR Toy Tutorials学习笔记之Lowering到LLVM IR

    0x0. 前言 在上一节中,我们将Toy Dialect的部分Operation Lowering到Affine Dialect,MemRef Dialect和Standard Dialect,而to ...

  9. Address of Label and Indirect Branches in LLVM IR

    Sunday, January 3, 2010 Address of Label and Indirect Branches in LLVM IR The GCC Compiler supports ...

最新文章

  1. 【ML】【GM】【转】图模型(graphical model, GM)的表示
  2. matlab 绘制方格网格(二维)
  3. linux 线程--内核线程、用户线程实现方法
  4. Visual Studio2008安装后更换调试器的问题
  5. linux下运行lua,linux下配置Lua运行环境
  6. 基于交换机的PC端网络通信
  7. python列表切片图解_Python列表切片操作实例总结
  8. 高级排序之快速排序(分割与整合)
  9. 2017马哥python高级实战班 培训推荐
  10. 计算机组装与维修的前言,计算机组装与维修论文大纲模板 计算机组装与维修论文提纲如何写...
  11. HTML语言利用函数求中位数,Excel2013中通过if函数及median函数求得一组数据的中位数...
  12. Python自动化测试进阶系列——自动发邮件功能
  13. 网络聊天室(基于多进程TCP)
  14. 爬虫需谨慎,你不知道的爬虫与反爬虫套路!
  15. 【案例】10个视觉系优秀网页设计让你打破灵感的僵局
  16. android fbe分析,(原创)Android FBE加密源码分析(二)
  17. 3D游戏开发所需的数学基础——点和矢量
  18. 6.824-lab1
  19. 树莓派PCA9685的舵机MG996R二度自由云台操控代码,搭配mqtt进行远程操控
  20. 使用echarts实现地图展示

热门文章

  1. 2022-2028年中国柴油行业市场研究及前瞻分析报告
  2. 2022-2028年中国石化行业节能减排投资分析及前景预测报告
  3. Centos7常用命令
  4. 【VB】学生信息管理系统1——系统设计怎样开始?
  5. CUDA error: device-side assert triggered Assertion t 」= 0 t n classes failed
  6. 显卡不够时,如何训练大型网络
  7. BERT大火却不懂Transformer?读这一篇就够了 重点 命名实体识别
  8. LeetCode简单题之交替位二进制数
  9. OneFlow 概念清单
  10. 操作系统常用词典(二)