
LLVM
「已注销」
这个作者很懒,什么都没留下…
展开
-
一.LLVM基础库初探
LLVM和Clang被精心组织成如下库:1.libLLVMCore:它包含了与LLVM IR相关的逻辑:IR构造(数据布局,指令,基础块和函数)和IR验证器。它还提供了pass管理器。2.libLLVMAnalysis:将多个IR分析步骤进行分组,如别名分析、依赖关系分析、常数折叠、循环信息、内存依赖关系分析和指令简化。3.libLLVMCodeGen:这实现了与目标无关的代码生...原创 2019-06-06 15:18:33 · 1339 阅读 · 0 评论 -
Kaleidoscope: Code generation to LLVM IR
3.1 Chapter 3 Introduction 欢迎来到“用LLVM实现语言”教程的第3章。本章将向您展示如何将第2章中构建的抽象语法树转换为LLVM IR。这将教会您一点关于LLVM如何工作的知识,并演示如何使用它。构建lexer和解析器要比生成LLVM IR代码复杂得多。 请注意:本章及以后的代码需要LLVM 3.7或更高版本。LLVM 3.6和befor...原创 2019-08-01 20:06:35 · 421 阅读 · 0 评论 -
Kaleidoscope: Adding JIT and Optimizer Support
4.1 Chapter 4 Introduction 欢迎来到“用LLVM实现语言”教程的第4章。第1-3章描述了一种简单语言的实现,并添加了对生成LLVM IR的支持。本章描述了两种新技术:向语言添加优化器支持和添加JIT编译器支持。这些新增内容将演示如何为万花筒语言获得良好、高效的代码。4.2 Trivial Constant Folding 我们对第3章...原创 2019-08-05 11:25:35 · 618 阅读 · 1 评论 -
二.为CPU0体系结构创建LLVM后端(1)
一.CPU0简短介绍1.Cpu0是一个32位架构。它有16个通用寄存器(R0,…、协处理器寄存器(如Mips)和其他特殊寄存器。其结构如图1所示。 图一:Cpu0处理器的架构框图2.CPU0架构寄存器介绍:3.CPU0指令集如下图:...原创 2019-07-13 10:17:08 · 690 阅读 · 0 评论 -
五.为CPU0体系结构创建LLVM后端(4)
1.DAG(Directed Acyclic Graph)许多重要的局部优化技术都是从将基本块转换为DAG[15]开始的。例如,基本的代码块,对应的DAG如图9所示。 如果b不在块退出时活动,那么我们可以执行“common expression remove”,如下表所示。删除b后,从底部到顶部遍历DAGs(按深度优先顺序搜索...原创 2019-07-18 09:50:43 · 470 阅读 · 0 评论 -
四.为CPU0体系结构创建LLVM后端(3)
1.SSA表单 SSA表单表示每个变量只分配一次。LLVM IR是一个SSA表单,它具有无界的虚拟寄存器(每个变量只分配一次,并保存在不同的虚拟寄存器中)。因此,代码生成序列中所使用的优化步骤,包括指令选择、调度、形成和寄存器分配等阶段,不会失去任何优化机会。例如,如果使用有限的虚拟寄存器而不是无限制的代码, %a = add nsw i32 1...原创 2019-07-15 16:56:28 · 291 阅读 · 0 评论 -
三.为CPU0体系结构创建LLVM后端(2)
本文上接:为CPU0体系结构创建LLVM后端(1)LLVM的目标描述文件:.td “混合和匹配”方法允许目标作者选择对其体系结构有意义的内容,并允许跨不同目标重用大量代码。这带来了另一个挑战:每个共享组件都需要能够以通用的方式推断出目标特定的属性。例如,共享寄存器分配器需要知道每个目标的寄存器文件,以及指令与其寄存器操作数之间存在的约束。LLVM对此的解决方案是为每个目标提供一...原创 2019-07-14 20:30:12 · 602 阅读 · 0 评论 -
LLVM Chapter 3: Tools and Design and build your first LLVM project
前言 在熟悉LLVM的编译以后,我们将从以下几个方面对LLVM进行深入的探究:LLVM核心库基本设计原则 编译器驱动程序如何工作 LLVM驱动程序的交互 独立组件的应用 了解LLVM基本库 介绍LLVM中的C++实践 编写第一个LLVM项目1.LLVM基本设计原则LLVM设计的一个核心方面是IR(SSA:单静态赋值),具有如下两个特征: ...原创 2019-09-05 21:41:00 · 450 阅读 · 0 评论