谁能给我讲讲gcc的寄存器分配的算法,看了3天了还不是很明白

发布于 2022-09-18 17:40:39 字数 378 浏览 8 评论 0

看了几天了,还不是很明白。
粗略的看了下,个人的理解是
local-alloc.c用于分配一个block中的register,
global.c用于一个function中的register allocation,
好像有个什么pseudo register,对于每个pseudo register都要分配一个hard register.
很疑惑,为什么需要local-alloc.c,global.c难道不能完成所有的register allocation工作吗
用bit表示一个hard register,386有53个寄存器,所以需要2个32位整数才能表示
除此之外,就是一团浆糊了.
有牛牛讲讲吗,global.c中是用的鲸书中讲的图着色的方法吗,谢谢了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

诺曦 2022-09-25 17:40:39

local-alloc.c用于分配一个block中的register,但是出口处变量活跃怎么办?所以,global.c用于global的register allocation。
pseudo register是RTL里面的,对于每个pseudo register都要分配一个hard register就是寄存器分配。
为什么需要local-alloc.c?历史原因?global.c难道不能完成所有的register allocation工作吗?可以,没什么不可以的,你去做么?现在好像有个开发分支就是针对global.c的。
global.c中是用的图着色的方法

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文