原则是GCC制度的内在表现之一。可以通过-fdump-*编译器参数转储GIMPLE或任何其他内部表示。但是,是否有任何方法来编译抛出的GIMPLE或任何其他表示?GCC似乎没有“双头”。我想做的是转储、分析、修改,然后重新编译转储GIMPLE来执行各种代码工具。
PS我知道GCC插件,我也知道LLVM/Clang,所以请试着回答确切的问题,不要提出其他的解决方案。谢谢!
发布于 2014-02-09 15:05:44
这个项目叫做GIMPLE有限元 (前端)。第一次尝试从未达到可用状态。它在GSoC'16年间重新启动,并入gcc-8,此后一直在不断改进。它是用-fgimple启用的。
目的是帮助编写测试用例。它是,而不是,它是llvm提供的一个完整的转储/重新加载工具。使用-fdump-*获得的转储(在-fdump-tree-all-gimple中有一个-gimple修饰符,以获得与FE读取匹配的语法)是很好的,可以让您知道发生了什么,但是它们没有包含足够的信息来重建内部结构。FE读取的方言只允许您指定GIMPLE可以编码的一小部分信息。
同样,对于gcc的另一种内部表现形式,也存在着部分的RTL前端。
LTO提供了一个更完整的转储/重新加载。使用-flto -c编译文件时,gcc将GIMPLE的字节码表示形式保存在.o文件的一个部分中,当作为链接器调用该字节码时,该字节码可以再次读取。这种表示几乎是完整的(我认为调试信息存在一些问题)。然而,它并不意味着像文本转储那样容易阅读,而且编译器的每一个次要版本都会改变格式。此外,您只能在管道中的一个预定义点转储/重新加载,而不能在任意传递之后转储/重新加载。
发布于 2020-06-21 03:48:11
我们正面临着同样的问题。与其在字符串级别上“转储/重新加载”GIMPLE文件并对其进行操作,我建议只编写一个gcc插件并在那里操作GIMPLE数据结构。
https://stackoverflow.com/questions/21660563
复制相似问题