LLVM
文章平均质量分 92
Enorsee
编译技术学习者
展开
-
LLVM里的寄存器分配 - 线性扫描算法(二)
1 背景介绍在上一篇博文 LLVM 里的寄存器分配 - 准备工作(一) 里,我主要整理了 LLVM 在做寄存器分配前所做的准备工作,介绍了 LLVM 是在怎样的 MIR 上做的寄存器分配。接下来,就需要讲讲 LLVM 是如何做寄存器分配了。虽然我学习的第一个寄存器分配算法是图着色算法,但由于目前的 LLVM 版本里使用的寄存器分配器均是线性扫描算法的变种(事实上 LLVM3.0 版本以前的寄存原创 2019-01-11 10:23:20 · 7081 阅读 · 1 评论 -
LLVM里的寄存器分配 - 准备工作(一)
1 背景介绍本文档是基于 LLVM 的寄存器分配系列科研笔记第一篇,以一个 C 语言程序为主干介绍 LLVM 在寄存器分配前做的一些主要工作,分析在寄存器分配前期可能的写操作来源,并记录了我在研究 LLVM 后端中 SSA 形式的中间表示时的一些想法(私货)。2 进入寄存器分配我们以下述 C 语言源码为例开始本文的说明:int foo(int a, int b, int原创 2019-01-11 10:22:36 · 5130 阅读 · 2 评论 -
LLVM里的寄存器分配 - basic分配器(三)
1 背景介绍本系列的前两篇博文分别介绍了 LLVM 在做寄存器分配前的准备工作和线性扫描算法的理论基础,有了这些背景知识后,就可以开始进入 LLVM 中真实的寄存器分配器了。在 LLVM3.0 中,新提出了两个寄存器分配器:basic/greedy 分配器,它们的核心算法都是线性扫描算法的变种。其中,greedy 分配器是新版本 LLVM 默认的寄存器分配器,而 basic 分配器可以理解为一原创 2019-01-11 10:24:03 · 2562 阅读 · 0 评论 -
LLVM Spiller 关键代码剖析
LLVM Spillerspill 函数void InlineSpiller::spill(LiveRangeEdit &edit) { ++NumSpilledRanges; Edit = &edit; assert(!TargetRegisterInfo::isStackSlot(edit.getReg()) && "Trying to spill a stack sl原创 2019-01-11 10:22:01 · 1258 阅读 · 0 评论