IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    浅谈重命名

    春秋十二月发表于 2023-09-06 15:35:00
    love 0
    周知cpu为方便乱序执行,内部会使用重命名寄存器技术消除数据依赖(war和waw)。编译器在如下场景也会用到重命名

    ​1. 静态单赋值。过程内的每个变量唯一定义一次,原有相同的则会重命名,包括phi结点的定值
    ​2. bb表调度。为消除反相关依赖即war,可以重命名读操作使用或写操作定义的值,这样能调度产生总时钟周期更少的指令序列,但可能增加寄存器压力导致溢出而新增了长延迟操作(内存加载/存储)并迫使另一轮调度
    ​3. ebb表调度。对于某一ebb的一条路径p,p存在过早退出路径pe,p和pe的公共前缀是基本块b,当调度p时,如果某个操作i向后移动到b,且i定义的值杀死了pe上的同名值,那么需要重命名i的定值。若i的定值被重命名,且其在p的出口处是活跃的,则调度器需要在出口处复制回原来的名字
    ​4. trace表调度。踪迹不同于ebb路径,它允许中间存在多个前驱即入口的基本块,而后者不能。当调度存在多入口的块b的某踪迹t时,t上的某操作i可能前向移动跨越b(t外的代码路径需作补偿),若i杀死了一个活跃范围跨越b的值,则需要重命名i的定值;同理,若i向后移动跨越b且杀死了t上的某值,则需重命名i的定值,这时t外的代码路径补偿可以使用同一名字


    春秋十二月 2023-09-06 23:35 发表评论


沪ICP备19023445号-2号
友情链接