【问题标题】:Comparison between 3-address instructions and 2-addresses instructions三地址指令与二地址指令的比较
【发布时间】:2013-09-09 06:42:48
【问题描述】:

我看到3地址指令和2地址指令都用作前端和后端之间的IR,因为它们非常相似,它们各自的优点和缺点是什么?

【问题讨论】:

    标签: compiler-construction compiler-optimization


    【解决方案1】:

    三地址是一种显示SSA主要原则的形式,即中间体始终是不可变的。 (如果你总是为一个新的中间人分配一个新的虚拟寄存器)。

    当然,基于机器的分配器也可以轻松转换并与其他形式一起使用。三地址代码只是对 SSA 进行建模和解释的一种易于概括的简单方法。

    【讨论】:

      【解决方案2】:

      我觉得2地址和3地址指令集是天壤之别。有很多因素可以决定使用哪个。

      • 代码复杂度与代码大小。更少的操作数意味着每条单独的指令更容易表示和实现。更多的操作数意味着更多的功能可以用一条指令来表示。举个对比例子:
      +---------------------------------------------------------
      | C instruction  | 2 address | 3 address   | 4 address   |
      +----------------+-----------+-------------+-------------+
      | r = x;         | mov r,x   | mov r,x     | mov r,x     |
      +----------------+-----------+-------------+-------------+
      | r = x + y;     | mov r,x   | add r,x,y   | add r,x,y,0 |
      |                | add r,y   |             |             |
      +----------------+-----------+-------------+-------------+
      | r = x + y + z; | mov r,x   | add q,x,y   | add r,x,y,z |
      |                | add r,y   | add r,q,z   |             |
      |                | add r,z   |             |             |
      +----------------+-----------+-------------+-------------+
      
      • 易于优化。如前所述,具有 3 个以上地址计数的指令集允许 SSA 实现和分析,这大大简化了许多编译时优化。

      • 易于翻译成目标代码。这取决于您将 IR 翻译成什么。将 4 个地址代码翻译成基于堆栈的语言会很麻烦。将 2 地址代码转换为通用 CISC 架构(如 x86 程序集)可能会导致代码效率非常低。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-25
        • 1970-01-01
        • 2020-04-29
        相关资源
        最近更新 更多