[hellogcc] Re: [hellogcc] Re: 关于LLVM后端移植

  • From: Triple Yang <triple.yang@xxxxxxxxx>
  • To: hellogcc@xxxxxxxxxxxxx
  • Date: Sun, 8 Jul 2012 15:53:58 +0800

2012/7/7 ???f任 (Wei-Ren Chen) <chenwj@xxxxxxxxxxxxxxxxx>:
>> 欢迎大家对内容正确性、以及写作风格提建议。
>
>   我 wiki 上的?热菡?自由取用。:)
>   
> http://people.cs.nctu.edu.tw/~chenwj/dokuwiki/doku.php?id=llvm#code_generator
>

谢谢啦,你的wiki上内容蛮丰富的。

>   comment below,
>
>   1. LLVM 文?n???f已??不是新??了。
>
>   [LLVMdev] New backend
>   http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-July/051512.html
>
>   ?P於 WritingAnLLVMBackend.html 你可以再加上底下?a充:
>
>   http://llvm.org/devmtg/2012-04-12/Slides/Workshops/Anton_Korobeynikov.pdf
>

OK.

>   2. "寄存器分配" 这个词的字面意义令人误解
>
>   我不是很?_定?@???~??造成何?N?`解。我猜你是想表?_寄存器分配不光是?⒅??Υ嬖?
>   寄存器,也有可能?Υ??却妫?????? ?????g器有些熟悉的人?碚f,寄存器分配自然??
>   ?可娴郊拇嫫骰蚴??却妫?我不?X得??有什?N?`解。??是我猜?e你的意思? :)
>

我指的是"寄存器分配"这个词的字面意义可能会让新手们忽略某些方面,因为我最初入手
的时候就在它的意义上产生了些许困惑。

我个人的感觉是“寄存器分配”有广义与狭义的区分。广义的寄存器分配包括任何寄存器
和存储器的分派过程。狭义的寄存器分配仅指对函数语句(statements)涉及的值进行
存储位置的指派。当谈及一个寄存器分配算法时,通常指的是狭义的寄存器分配过程。

从这个意义上说,调用约定是广义寄存器分配过程的组成部分,同时,调用约定对狭义
寄存器分配过程的初始条件作出了约束。

>   3. 在函数定义或调用时,参数传递以及值返回虽然也与寄存器“分配”的意义类似,
>      但是作为 calling convention 在 TargetLowering 的派生类中实现。
>
>   ?@是下一步 Prologue/Epilogue Insertion 所要做的事??? 如果是的??,我?X得?a
>   上去???????x起?肀容^?B??。
>

prologue和epilogue分别主要涉及到两个方面的内容:
(1)函数调用帧的建立以及与caller相关的现场信息保存。
(2)函数调用帧的撤销以及与caller相关的现场信息回复。
prologue和epilogue与 “参数传递以及值返回” 应该是分开的,尽管两者对应的指令序列
是相邻的。

原因有两点:
一、实现actual args传递的代码是在caller中,在call指令之后,才会执行callee的prologue.
     在为callee生成代码时,用到的formal args是假定它们处于约定的存储位置。
二、在函数的实现体中,可能有多个return语句给函数传递返回值。运行时根据情况只会执
    行其中的一个,接下来即执行该函数的epilogue.

>
> ?f任
>
> --
> Wei-Ren Chen (???f任)
> Computer Systems Lab, Institute of Information Science,
> Academia Sinica, Taiwan (R.O.C.)
> Tel:886-2-2788-3799 #1667
> Homepage: http://people.cs.nctu.edu.tw/~chenwj
>



-- 
杨勇勇 (Yang Yongyong)

Other related posts: