
CPU0
「已注销」
这个作者很懒,什么都没留下…
展开
-
三.为CPU0体系结构创建LLVM后端(2)
本文上接:为CPU0体系结构创建LLVM后端(1) LLVM的目标描述文件:.td “混合和匹配”方法允许目标作者选择对其体系结构有意义的内容,并允许跨不同目标重用大量代码。这带来了另一个挑战:每个共享组件都需要能够以通用的方式推断出目标特定的属性。例如,共享寄存器分配器需要知道每个目标的寄存器文件,以及指令与其寄存器操作数之间存在的约束。LLVM对此的解决方案是为每个目标提供一...原创 2019-07-14 20:30:12 · 602 阅读 · 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后端(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后端(1)
一.CPU0简短介绍 1.Cpu0是一个32位架构。它有16个通用寄存器(R0,…、协处理器寄存器(如Mips)和其他特殊寄存器。其结构如图1所示。 图一:Cpu0处理器的架构框图 2.CPU0架构寄存器介绍: 3.CPU0指令集如下图: ...原创 2019-07-13 10:17:08 · 690 阅读 · 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 评论 -
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 评论