Gcc 如何确定编译的哪个阶段?

Gcc 如何确定编译的哪个阶段?,gcc,gcc-plugins,Gcc,Gcc Plugins,我已经尝试了plugin.def列表中定义的所有register_回调。现在我需要确定在编译的哪个阶段使用哪个插件。以下是我的问题: 1) 我可以知道与生成RTL树相关的源代码吗 2) 有没有可能让我的插件在GIMPLE或RTL阶段之间进行拦截? 谢谢 谢谢你可以考虑编码你的GCC扩展,其中有一些关于你的问题的文档。该页面有几个指向内部和外部资源的链接,还有一些关于如何使用MELT扩展GCC的教程。因此,这也是一个路线图(几周的阅读) GCC运行数百次“优化”。他们中的大多数人正在将某种形式的框

我已经尝试了plugin.def列表中定义的所有register_回调。现在我需要确定在编译的哪个阶段使用哪个插件。以下是我的问题:

1) 我可以知道与生成RTL树相关的源代码吗 2) 有没有可能让我的插件在GIMPLE或RTL阶段之间进行拦截? 谢谢
谢谢

你可以考虑编码你的GCC扩展,其中有一些关于你的问题的文档。该页面有几个指向内部和外部资源的链接,还有一些关于如何使用MELT扩展GCC的教程。因此,这也是一个路线图(几周的阅读)

GCC运行数百次“优化”。他们中的大多数人正在将某种形式的框架转换为另一种形式的框架,而且很可能您也希望这样做(我可能不建议在RTL级别工作)。你应该看看大卫·马尔科姆的

“在哪里插入我的通行证”这个问题很难回答,这在很大程度上取决于为什么(以及为什么)要定制GCC(直觉上,喜欢Gimple优化而不是RTL优化)。使用
-fdump tree all
运行一些相关的示例源代码可以帮助您了解发生了什么(注意转储文件的编号没有意义)

不管您使用扩展GCC的方法(例如,用C++编写的GCC插件,GCC Python插件编码的GCC扩展,以及在GLAST中编码的GCC扩展),这是困难的,因为您需要了解GCC内部行为。你可能需要几周的工作,即使是一件很简单的事情

寄存器分配在GCC内部非常复杂,并且已经被重写了好几次。您需要几年的时间来理解它的细节(当然我对寄存器分配器一无所知)。也许你只是想在你的通行证上加一些。。。。(可能在框架化之前,或在一些高级框架上)

<>你可以考虑你的需求,为GCC写一些新的后端(如果你是GCC新手,可能几个月,或者一年的工作),利用现有的登记分配器。您最好修补自己的GCC,而不是仅仅添加插件。然后确保与GCC社区互动,例如,在
gcc@gcc.gnu.org
以及到目前为止您已经尝试过的内容。在你工作的时候发布你的GCC fork(至少在上)(并为此预算几个月的全职工作,可能超过一年)


为GCC编写竞争性寄存器分配器(设计用于许多目标处理器!)几乎是一辈子的工作(当然需要多年的全职工作)。

您打算在GCC定制中做什么样的修改?请编辑您的问题,并非常具体和具体!我很想投票结束你的问题,因为你的问题太宽泛了。请改进它,并解释你真正想要做什么…插件应该启用寄存器分配,以允许16位寄存器操作。这是插件的迫切目标。谢谢请编辑您的问题,不要评论。为什么您不能信任(复杂而高效的)GCC寄存器分配器?为什么需要增强或替换寄存器分配器?你需要多年的努力才能理解它(我当然不理解)。您不能只保留一些寄存器(使用
asm
notation)吗?请详细说明您的需要。您只需保留一些寄存器(例如,在几周内编写插件插入)或重新编码寄存器分配器(这是一个10年的全职项目),谢谢您的回复。我从
-fdump tree all
中获得了
转储文件,但是当我打开它们看一看时,我被吓了一跳,因为里面的代码无法解读。我的问题是,研究转储文件有用吗?如果有用,是否有学习它们的来源?因为我第一眼就看不懂它们,我只知道源文件中的一些代码,但不知道这些不同转储文件的隐含含义是什么,但看起来彼此相似…请编辑您的问题,解释您真正想做的事情。。。不要添加评论…感谢您对我的问题的及时回答和承诺。我能收到你的电子邮件以便我们能进行更多的讨论吗?因为我非常需要在这个领域有经验的人的指导。谢谢你猜,在C++中构建插件和GCC熔体相比需要多长时间?我的电子邮件是公开的。WRT熔体显然是有偏见的,但我相信更快的学习熔化和使用它比编码一个C++插件