[hellogcc] Re: [hellogcc] Re: [hellogcc2011] 我的幻灯片

  • From: Liu <proljc@xxxxxxxxx>
  • To: hellogcc@xxxxxxxxxxxxx
  • Date: Sun, 18 Sep 2011 14:39:04 +0800

2011/9/18 asmwarrior <asmwarrior@xxxxxxxxx>:
> On 2011-9-18 11:48, Mingjie Xing wrote:
>>
>> 欢迎提出建议:-)
>
> page 7:
>
> 把结构设计的复杂些:比如tree,使其不容易被导出,导入
>
> 这个实在是阻碍更多的人来学习GCC。。。
这个是GCC的演进,gcc每一个补丁都有Changelog,你可以追溯每一步的修改,明白每一次的修改是为什么而做的,each single
time! 何来障碍更多人的学习GCC了?而且,这么做是现实世界的需求,GCC只是为了满足现实的需求。
如果一个tree就无法理解了,那么gimple也许勉强可以理解,恐怕high gimple和low
gimple就难理解为什么那样做了,LLVM虽然只有一个IR,但是跟high/low
gimple有异曲同工之妙,有时间我会着急小型交流会讨论。
顺便说下gimple的事情吧,gimple上面的N多算法,不在于gimple本身的难度,也不在于算法本身的难度,而在于pass之间交互的难度,算法实现的难度。就拿自动向量化来说吧,好像分成了十几个pass,每一个pass分析不同的数据,最终的tansform倒是相对简单,可是就是那analyze的算法实现很难理解,算法本身,随便看看paper就OK了,可是到了实际应用中,能不能在一个可接受的时间内,分析出来一个相对可以接受的效果(事实上,很多循环根本就分析不出来),这个就很难了。要不然也不至于IBM有个专业的team专门做自动向量化。
那么继续说学习历程,RTL是什么?恐怕连这个基本的问题都很难搞清楚了。RTL pass比gimple
pass要难掌握的多,况且RTL涉及N多automata算法。后端(general的,不是port)各个pass之间的潜规则没有两年很难摸清楚,为什么这么设计?为什么会影响到另一个pass?为什么一个看起来简单的东西实现的超级负责,而一个听起来牛逼哄哄的功能只需要两行代码?为什么不能随心所欲的分配寄存器?
GCC的设计和实现都非常的好,至于你每个单独的port都可以非常简单,而通用部分的算法你根本无需理解。但是,想把port做好,理解乃至修改通用算法又是必须的。某些肥猪瘤的compiler恐怕就是要手工的实现一些算法,again
and again, for every port.
如果你想学习GCC,渔夫的插件是我知道的最好的入门途径,没有之一。他的插件在我的工作中起了非常重要的作用,是我理解gcc的重要工具,没有之一。
如果你需要结构清晰,设计现代(好理解),代码clean的compiler,LLVM是最好的选择,没有之一。当然,如果您看不上LLVM,那就只有GCC可选了。如果你希望跟我们一起学习GCC,那么欢迎参与hellogcc的各种学习、讨论和交流。大家一起学习,共同提高。
>
>

Other related posts:

  • » [hellogcc] Re: [hellogcc] Re: [hellogcc2011] 我的幻灯片 - Liu