LLVM笔记 - LLVM中的指令选择

💡 原文英文,约300词,阅读约需1分钟。
📝

内容提要

LLVM中的指令选择方法包括FastISel、SelectionDAGISel和GlobalISel。FastISel用于O0优化级别,快速将LLVM IR转换为机器指令;SelectionDAGISel则需将LLVM IR降级为DAG,经过合法化和组合后选择指令。实现时需继承相应类并重写虚函数。

🎯

关键要点

  • LLVM中的指令选择方法包括FastISel、SelectionDAGISel和GlobalISel。
  • FastISel用于O0优化级别,快速将LLVM IR转换为机器指令。
  • SelectionDAGISel需要将LLVM IR降级为DAG,并经过合法化和组合后选择指令。
  • 实现FastISel时需继承相应类并重写虚函数fastSelectInstruction。
  • SelectionDAGISel的实现需继承SelectionDAGISel类,重写选择入口Select()和多个selectXXX虚函数。
  • 指令选择过程包括类型合法化、向量合法化和DAG合法化等步骤。
  • GlobalISel的实现尚待完成,标记为TODO。

延伸问答

LLVM中的指令选择方法有哪些?

LLVM中的指令选择方法包括FastISel、SelectionDAGISel和GlobalISel。

FastISel的主要用途是什么?

FastISel用于O0优化级别,快速将LLVM IR转换为机器指令。

SelectionDAGISel的实现步骤是什么?

SelectionDAGISel需将LLVM IR降级为DAG,并经过合法化和组合后选择指令。

如何实现FastISel?

实现FastISel时需继承相应类并重写虚函数fastSelectInstruction。

SelectionDAGISel需要重写哪些虚函数?

SelectionDAGISel需重写选择入口Select()和多个selectXXX虚函数。

GlobalISel的状态如何?

GlobalISel的实现尚待完成,标记为TODO。

➡️

继续阅读