【问题标题】:How to analyse GCC Internal Representation like GIMPLE, RTL如何分析 GCC 内部表示,如 GIMPLE、RTL
【发布时间】:2015-10-18 11:02:18
【问题描述】:

我使用命令-fdump-tree-all-fdump-rtl-all 生成了转储输出文件,并且得到了很多转储文件。我读过 GIMPLE 中的代码是伪 C 语法,而 RTL 转储文件级别太低而无法理解。有什么方法可以理解 GIMPLE 和 RTL 转储文件?任何可以将其转换为 C 代码或有用的软件?有什么教程可以学习理解吗?谢谢

【问题讨论】:

    标签: gcc dump gimple


    【解决方案1】:

    最好的方法(对我来说)是转储一些示例并自己理解发出的代码。这并不难,与原始代码有一些变化(比如循环转换为 if 和 goto),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 ...
    • 我也可以推荐使用此文档gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc.pdf 和此gcc.gnu.org/onlinedocs/gccint.pdf 并使用 -da -dp 用于所有输出 -fdump-tree-all-raw-lineno 用于字符串编号,并查看所有步骤转换/优化。这里简单解释一下cse.iitb.ac.in/~uday/courses/cs715-09/gcc-rtl.pdf
    猜你喜欢
    • 2018-12-23
    • 1970-01-01
    • 2014-03-06
    • 2012-02-24
    • 2019-11-27
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    相关资源
    最近更新 更多