Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何分析GCC内部表示,如GIMPLE、RTL_Gcc_Dump_Gimple - Fatal编程技术网

如何分析GCC内部表示,如GIMPLE、RTL

如何分析GCC内部表示,如GIMPLE、RTL,gcc,dump,gimple,Gcc,Dump,Gimple,我使用命令-fdump tree all和-fdump rtl all生成了转储输出文件,得到了很多转储文件。我读到GIMPLE中的代码是伪C语法,RTL转储文件的级别太低,无法理解。有没有办法理解GIMPLE和RTL转储文件?有没有软件可以把它转换成C代码或其他有用的东西?有什么教程可以学习理解吗?谢谢对我来说,最好的方法是转储一些示例并自己理解发出的代码。这并不困难,对原始代码有一些更改(比如使用goto在if中转换周期),gcc中有很多过程,我的建议是转储您需要的内容。就我而言,我经常使用

我使用命令
-fdump tree all
-fdump rtl all
生成了转储输出文件,得到了很多转储文件。我读到GIMPLE中的代码是伪C语法,RTL转储文件的级别太低,无法理解。有没有办法理解GIMPLE和RTL转储文件?有没有软件可以把它转换成C代码或其他有用的东西?有什么教程可以学习理解吗?谢谢

对我来说,最好的方法是转储一些示例并自己理解发出的代码。这并不困难,对原始代码有一些更改(比如使用goto在if中转换周期),gcc中有很多过程,我的建议是转储您需要的内容。就我而言,我经常使用以下命令:

-fdump-tree-lower    
-fdump-tree-cfg     
-fdump-tree-ssa 
-fdump-tree-optimized (it's the last pass before going into rtl passes)  

rtl几乎是不可压缩的,需要对这种方言有很好的理解

谢谢。要寻找的关键区别是什么?人们可以从中获得什么意义?是数据流吗?我能从每个过程中得到gcc解析的数据吗?很抱歉,当时几乎所有转储都是(由gcc)在控制流图描述中发出的,因为它更容易理解,更容易理解,数据流和cfg,甚至调用图,都在每个过程中使用和提供信息,当然,转换也会发生。然而,数据流在ssa pass中可以更好地看到,正如我前面提到的,我建议您使用grep管道执行man gcc,搜索文本可以是“-fdump”,因为还有其他一组过程,如IPA、IPO…我还建议使用此文档和此,并对所有输出使用-da-dp-fdump tree所有原始行编号作为字符串编号,并查看转换/优化的所有步骤。这里有一个简单的解释