IR(中间表示)的目的是什么

Sye*_*hah 4 compiler-construction assembly

源代码可以直接转换为机器代码(100000)。那为什么我们需要将其转换为IR(Intermediate Representation)汇编语言呢?

如果我不能直接转换成机器语言,有什么优点和缺点?

Pet*_*des 5

那为什么我们需要将其转换为IR(Intermediate Representation)汇编语言呢?

你不知道。

IR 的文本表示形式是为了调试编译器内部而存在的。(编译器通常会通过一些内部表示(通常是某种形式的SSA )进行转换,同时将程序逻辑优化为高效的 asm,然后是机器代码。)请参阅禁用 GCC 中的所有优化选项


特别是对于 LLVM,IR 作为一种平台中立的类似 asm 的语言非常有用,对于 JIT 编译很有用。您的便携式应用程序可以生成 LLVM-IR,并将其提供给 LLVM,以获得针对其运行的任何平台的优化机器代码。

或者对于新语言的提前编译器,这意味着您不必为每个可能的平台编写直接从源代码到机器代码的优化编译器。因此,您可以获得多个目标的可移植性,最重要的是,您可以获得一个优化的后端,而只需编写一个发出简单的未优化的 LLVM-IR 的前端。

编写优化编译器很困难,但如果您希望任何人在实际工作中使用它,那么至少稍微优化的机器代码基本上是必要的。请参阅为什么 C 编译器这么少?


TL:博士;IR 使得一个优化后端可以用于不同语言的多个前端。