【问题标题】:What x86 32 bit peepholes does GCC perform?GCC 执行哪些 x86 32 位窥视孔?
【发布时间】:2015-10-22 17:10:42
【问题描述】:

我一直在浏览 GCC 源代码,但一直不知道如何提取这些源代码。谁能提供有关如何提取这些窥视孔的列表或信息(程序集重写优化)?

GCC 代码:https://github.com/gcc-mirror/gcc

编辑:为了澄清,“窥视孔”被定义为一种查找和替换模式,带有一些相关的边条件,以使重写有效(通常只是一些寄存器/标志活动信息)。

【问题讨论】:

标签: gcc x86 compiler-optimization


【解决方案1】:

查看各种*.md 文件并搜索define_peephole

例如:gcc/config/i386/i386.md 包含(以及许多其他内容):

;; For HI, SI and DI modes, or $-1,reg is smaller than mov $-1,reg.
(define_peephole2
  [(set (match_operand:SWI248 0 "register_operand")
    (const_int -1))]
  "(optimize_insn_for_size_p () || TARGET_MOVE_M1_VIA_OR)
   && GENERAL_REGNO_P (REGNO (operands[0]))
   && peep2_regno_dead_p (0, FLAGS_REG)"
  [(parallel [(set (match_dup 0) (const_int -1))
          (clobber (reg:CC FLAGS_REG))])]
{
  if (<MODE_SIZE> < GET_MODE_SIZE (SImode))
    operands[0] = gen_lowpart (SImode, operands[0]);
})

相关文档在 GCC 内部手册中

https://gcc.gnu.org/onlinedocs/gccint/Peephole-Definitions.html#Peephole-Definitions

【讨论】:

    【解决方案2】:

    这里太宽泛了,实在是离题了。

    您可以查看我的documentation 页面MELT;它有几个有用的参考资料(特别是Indian GCC resource center),而且我写的大多数幻灯片都包含参考资料和教程材料......

    大部分 GCC 优化发生在(目标和源中立的)中间层,而不是后端。

    peephole optimization 在这些日子里(确切地说)意义不大,而且 GCC 的大部分优化能力都不是来自它。

    【讨论】:

    • 我看不出这太宽泛了,事实上这似乎是一个非常具体的要求。
    • @Daryl:它太宽泛了,因为有很多东西,比如识别一对匹配的移位或一起作为旋转,用乘法替换一个常数等。虽然很多其中一些是跨平台的,并且发生在中间端。 IDK 什么是窥视孔。也许在 x86 上用 LEA 替换 shift+add?
    • > "IDK 什么是窥视孔" 带有一些附带条件的查找和替换模式?也许我低估了 GCC 的代码有多混乱。我希望有某种方法可以提取约 30-100 种此类模式的列表。
    猜你喜欢
    • 1970-01-01
    • 2013-09-22
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 2012-01-20
    • 2011-11-04
    • 1970-01-01
    相关资源
    最近更新 更多