搜索最近的GCC GIMPLE语法

搜索最近的GCC GIMPLE语法,gcc,grammar,xtext,gcc5,gimple,Gcc,Grammar,Xtext,Gcc5,Gimple,在最后一年的项目中,我正在学习编译器技术,目前我正在尝试使用GCC中间表示(raw GIMPLE),并使用GCC-5.4从不同的源文件(C、Cpp和Java)获取控制流图 到目前为止,我可以使用-fdump tree all graph raw生成*.004t.gimple和*.011t.cfg原始文件,但后来我想进一步了解gimple语言,所以我搜索了它的语法,我发现: (没有语法!!!) (也没有语法!!!) 因此,该语言似乎在不断变化,并且有多种格式(高级GIMPLE,低级

在最后一年的项目中,我正在学习编译器技术,目前我正在尝试使用GCC中间表示(raw GIMPLE),并使用GCC-5.4从不同的源文件(C、Cpp和Java)获取控制流图

到目前为止,我可以使用
-fdump tree all graph raw
生成
*.004t.gimple
*.011t.cfg
原始文件,但后来我想进一步了解gimple语言,所以我搜索了它的语法,我发现:

  • (没有语法!!!)
  • (也没有语法!!!)
因此,该语言似乎在不断变化,并且有多种格式(高级GIMPLE低级GIMPLESSA GIMPLE)而且语法似乎在不同版本之间不断变化,但我找不到最新版本的GIMPLE语法,特别是在GCC-5.4中使用的GIMPLE语法,我无法理解不同的格式

有关语法的问题:

  • 在哪里可以找到GCC-5.4和更新版本中使用的GIMPLE语法
  • 它是怎么写的?(以BNF或EBNF或…)
  • GCC如何实现这种语法来生成、解析和理解 Gimple它生成的文件,然后将它们转换为RTL
  • 我可以写一小部分GIMPLE语法吗 在我生成的
    *.004t.gimple
    文件示例的Xtext
关于格式的问题:

  • 3种Gimple格式之间有什么区别?(我似乎不知道 在wiki中查找每一项的详细文档)
  • 原始文件
    *.c.004t.gimple
    *.c.011t.cfg
    ?(高或低,…)
  • 哪一个更好地表示来自原始源的控制流 没有优化的代码

谢谢,

看起来你刚刚开始学习GIMPLE,甚至没有阅读上面发布的文档。我正在深入研究GCC一段时间,我将尝试回答您的问题

  • 无论如何,您需要阅读这里的
    gccint
    文档:它有助于回答一些问题并提供有关GIMPLE的一些信息,这是唯一一个至少以某种方式描述GIMPLE的文档。最好的描述来源,它是悲伤的,但它是。请看这里,本文档基于
    gccint
    ,由以下内容组成:

  • 没有像C语言那样清晰地描述“GIMPLE语法”,只需查看源代码,也许是互联网上一些糟糕的示例

  • 我认为它是由树邻接语法(TAG)生成的,基于麦吉尔大学(mcgilluniversity)的McCAT编译器项目[SIMPLE]使用的简单IL

  • GCC如何实现和理解?再次,您需要查看GCC的深度,
    gimple.h
    basic block.h
    tree pass.h
    ,例如,所有这些都位于
    $src/GCC/
    中。部分功能在章节
    GIMPLE
    中的
    gccint
    中介绍。引用
    gccint
    并不准确,它包含一些过时的函数和引用,您必须记住这一点(例如,对于每个\u BB,2013年已弃用)

  • 关于Xtext,我从未使用过它,我也不明白自己是否需要编写一些GIMPLE,这是一种中间语言
    IL
    ,您可以创建一个插件来优化代码流,但我看不到单独使用GIMPLE的必要性

  • 关于格式

  • 有一种GIMPLE格式,但它可以有两种形式
    GIMPLE HIGH
    只是GIMPLE没有完全降下,而是在通过前由IL组成
    pass\u lower\u cf
    High GIMPLE
    包含一些容器语句,如词法范围(由
    GIMPLE\u BIND
    表示)和嵌套表达式(例如
    GIMPLE\u TRY
    Low GIMPLE
    直接在
    IL
    EH
    区域树中公开控制和异常表达式的所有隐式跳转(
    EH
    表示
    异常处理
    )。还有
    RAW
    表示法,据我所知,它是一种波兰符号,比通常的表示法更有用,例如,您可以使用
    -fdump tree all RAW
    获得它

  • *.c.004t.gimple
    -这是gimple出现的第一步,
    *.c.011t.cfg
    -首次尝试控制流图(
    cfg
    )。GIMPLE lower的内部名称为“
    lower
    ”,您可以在第节的
    GIMPLE low.c
    中看到它们

    const pass_data pass_data_lower_cf =
    {
      GIMPLE_PASS, /* type */
      "lower", /* name */
      OPTGROUP_NONE, /* optinfo_flags */
      TV_NONE, /* tv_id */
      PROP_gimple_any, /* properties_required */
      PROP_gimple_lcf, /* properties_provided */
      0, /* properties_destroyed */
      0, /* todo_flags_start */
      0, /* todo_flags_finish */
    };
    
    您可以使用搜索功能查找此通行证
    *.c.007t.lower

  • 答案在上面,我想,我使用的是原始表示法,在我看来,它更具信息性

  • 虽然不多,但我希望它能帮助您进行GCC探索,并为我糟糕的“英语”感到抱歉。

    在哪里可以找到GIMPLE语法。。。我不认为存在这样的定义。Uday Khedeker在第33页给出了一个非常简单的概述。GCC如何实现这个语法来生成、解析和理解它生成的Gimple文件。。。GCC通常不会将gimple输出到文件(您可以要求转储,例如,
    -fdump tree all
    ,当然,但这是针对编译器黑客的,操作不需要);gimple结构由语言前端(和gimplifier)生成,它们保存在内存中并在内存中进行处理,rtl随后由该语言前端生成。最近添加了GIMPLE前端(在7.2,IIRC中),但这并不完整(同样,它的目的是为com编写单元测试