register-allocation

    0热度

    1回答

    我正在为llvm生成具有定制RISCV后端的代码。当我没有优化编译(-O0)时,程序是可用的。当我使用优化编译(-O2)时,没有任何临时寄存器(保存的调用者)在调用后重新加载。经过优化的代码看起来似乎具有良好的寄存器分配,但它可以执行诸如使用类初始化程序的地址加载临时寄存器,然后多次调用初始化程序而不重新加载寄存器的操作。 load t1 %(foo) jal t1 ... jal t1

    0热度

    1回答

    我遇到了“注册重新加载”这个词,但我在网上找不到任何东西,只是它与注册溢出有关。我想我知道什么是溢出(当编译器有更多的活动值比它有可用的寄存器,因此它必须将它们中的一些存储在内存中),但什么是重新加载?

    1热度

    1回答

    我在阅读Briggs94对图着色寄存器分配的改进。 我只是想知道什么样的程序会有钻石干涉图吗?这是针对四个生存范围w,x,y,z:w干扰x,x干扰z,z干扰y,并且y干扰w。没有其他干扰了。 由于w和z都会干扰x和y,因此在时间轴上必须存在活动范围x和y之间的空洞。 w和z都会穿过这个洞,导致w干扰z,矛盾。 (这里的链接到纸上:http://citeseerx.ist.psu.edu/viewd

    1热度

    2回答

    我知道两个变量,比如a1和a2出现在Fortran中的Equivalence(a1,a2)语句中,然后它们占据相同的内存空间。所以说这发生在一个过程中,其中a1和a2是该过程中的局部变量。 这意味着你不仅可以在内存中拥有a1和a2的副本吗?因为其中一个值将被覆盖。你可以将a1保留在内存位置,并将a2保存在整个过程的注册表中,这样会好吗? 我的问题基本上是:你可以在整个过程中注册a1吗? 我会说是的

    0热度

    2回答

    是否有可能使cuda使用在函数外声明的单线程作用域变量(寄存器或本地内存)? 我的大部分设备功能需要使用相同的变量。 我不想将与变量相同的变量作为参数传递给我的所有设备函数,我想在函数之外声明变量。 这可能吗? 我的计算能力是1.2。 编辑:一个例子: __device__ __local__ int id; __device__ __local__ int variable1 = 3; __

    0热度

    2回答

    我正在写一个新的寄存器分配阶段在llvm上。我按照这里的说明http://llvm.org/docs/WritingAnLLVMPass.html#the-machinefunctionpass-class。 通行证不显示在llc --help中。我改变了贪婪的分配算法,以“greedier”这个名字进行注册并构建。即使这似乎并没有反映在llc。 任何人都可以帮忙吗?

    4热度

    3回答

    当谈到寄存器分配时,编译文本(例如Cooper编写的Engineering a Compiler)经常提到存储在寄存器中的值需要是“安全的” - 否则它们应该存储在内存中。 是什么让一个值不安全的保存在寄存器中? 编辑:从书中语境: “在内存到内存模式,分配器必须确定哪些值可以安全地在寄存器中,也就是说,它的值是明确保留” 我能找到的信息最多的是 “寄存器升级使用指针值的数据流分析来确定何时可以安

    3热度

    1回答

    我正在完成本科课程的完成项目,包括寄存器分配算法的实验分析。对于这个任务,我正在使用LLVM项目中的一组工具。 不过,我看了LLVM项目的文档和尚未找到一个办法把拼图拼在一起。到目前为止,我知道: 由于传递工作使他们参与LLVM,并知道我必须实现MachineFunctionPass pass。 我按照一些建议,看看Basic Allocator代码,但不能太多了解。 我打算实现的分配器是基于图着

    1热度

    1回答

    我的问题是,我应该用什么算法来实现该工程按照以下Python示例功能 translate: >>> translate('aa', 'a') [('S', -1)] >>> translate('a', 'aa') [('R', 0, 'x'), ('S', 1), ('W', 0, 'x')] >>> translate('abc', bca') [('R', 0, 'x'), ('R

    1热度

    1回答

    我写了一个简单的虚拟机,它有指令来操纵堆栈,将堆栈值存储到寄存器,将堆栈值装入堆栈,将值从寄存器移动到寄存器并设置寄存器值...我试图写一个非常简单的编译成这个VM字节码的语言,我还没有做过任何指令从地址到地址跳转,但我觉得VM有足够的字节码来存储变量值。 虚拟机有7个寄存器:a,b,x,y,z,j和i。但是,如果我有12个包含简单整数的变量,我将如何将它们存储在寄存器中? 我以前就读过这篇文章,