您可以考虑使用MELT对您的 GCC 扩展进行编码,其中包含一些关于您的问题的文档。MELT 文档页面有几个指向内部和外部资源的链接,并且有一些关于如何使用 MELT 来扩展 GCC 的教程。所以它也是一个路线图(几个星期的阅读)。
GCC 运行数百个“优化通道”。他们中的大多数正在将某种形式的 Gimple 转换为某种其他形式的 Gimple,而且很可能您也想这样做(我可能不建议在 RTL 级别工作)。你应该看看大卫马尔科姆的传球表。
“在哪里插入我的通行证”这个问题很难回答,并且很大程度上取决于您为什么(以及为什么)要自定义 GCC(直觉上,更倾向于 Gimple 优化而不是 RTL 优化)。运行一些相关的示例源代码-fdump-tree-all
可以帮助您了解正在发生的事情(注意转储文件的编号是没有意义的)。
无论您在扩展 GCC 时使用什么方法(例如,用 C++ 编写的 GCC 插件、为 GCC Python 插件编码的 GCC 扩展、用 MELT 编码的 GCC 扩展),这都很困难,因为您需要了解很多关于 GCC内部行为的知识。你可能需要几个星期的工作,即使是一件非常简单的事情。
FWIW,GCC内部的寄存器分配非常复杂,已经重写了好几次。您需要数年时间才能了解其详细信息(我当然对寄存器分配器一无所知)。也许您只是想在您的通行证中添加一些明确的 reg vars ....(可能在gimplification 之前,或者在一些高级 gimple 上)。
您可能会认为您的需求是为 GCC 编写一些新的后端(如果您是 GCC 新手,可能需要几个月或一年的工作),利用现有的寄存器分配器。你最好修补你自己的 GCC 而不是仅仅添加插件。然后一定要与 GCC 社区进行互动,例如更多地描述您的项目gcc@gcc.gnu.org
以及您迄今为止所做的尝试。在你工作的时候发布你的 GCC 分支(至少在github 上)(并为此预算几个月的全职工作,可能超过一年)。
为 GCC 编写一个有竞争力的寄存器分配器(设计用于许多目标处理器!)几乎是一生的工作(当然需要多年的全职工作)。