首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将基于图形的机器IR转换为序列化的机器代码?

将基于图形的机器IR转换为序列化的机器代码?
EN

Stack Overflow用户
提问于 2014-05-09 08:41:30
回答 1查看 71关注 0票数 1

我假设在汇编器发出代码之前,编译器后端将有一个步骤将基于图的机器码IR转换为序列化的机器码。

但是这一步叫什么呢?我认为这一步可能是微不足道的,但为了提高性能,在这一步中,似乎有必要重新排列MC基本块,让一些分支失效,而不是跳来跳去。但我在这方面发现的信息很少。

我找到了术语“跟踪调度”和“分支折叠”。它们似乎是有某种关系的。

EN

回答 1

Stack Overflow用户

发布于 2014-05-13 10:45:28

一般的术语是指令调度。LLVM的back-end documentation将线性化步骤称为“调度和形成”。

调度阶段从选择阶段取得目标指令的DAG并分配顺序。调度器可以根据机器的各种约束来选择顺序(即最小寄存器压力的顺序或尝试覆盖指令延迟)。一旦建立了订单,DAG就会转换为MachineInstrs列表,并销毁SelectionDAG。

请注意,此阶段在逻辑上独立于指令选择阶段,但在代码中与其紧密相关,因为它在SelectionDAG上操作。

正如文档所说,选择的顺序通常是为了性能的某个方面。除了寄存器压力和指令等待时间之外,不同类型的指令(例如,整数和浮点数学)可被交织以保持所有处理器的功能单元被利用,或者指令/块可被重新排序以在优化代码大小时移除分支或允许使用更紧凑的“短跳”指令。不幸的是,对于编译器编写者(和用户)来说,指令选择、指令调度和寄存器分配以复杂的方式交互,因此生成“最佳”代码即使对于小段代码也是不可行的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23554949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档