Clang 编译器阶段

Bha*_*waj 5 llvm clang

Clang Compiler 是基于 LLVM 基础架构构建的,Clang 前端采用 C/C++ 源代码并生成 LLVM-IR,谁来使用优化器和代码生成?

由于优化器传递库要按顺序放置和调用以生成优化代码,那么指定的顺序在哪里,也是谁生成的目标代码?这是 Clang 前端程序的一部分还是有任何其他程序可以进行这种优化和生成?

Ale*_*sov 2

clang可以这么说,实际上有两个s。

一种是前端:它只进行解析、构建抽象语法树(AST)并应用各种语义检查。它还可以做一些静态分析和其他有用的事情。可以使用选项访问前端-cc1,例如:clang -cc1 -ast-dump

第二个是驱动程序:它从前端获取 AST 并发出 LLVM IR,同时应用一些优化,然后进行所有其他魔法,例如构建目标文件并将各种组件链接在一起。这是当调用clang main.c或类似命令时通常会发生的情况。

请考虑查看两个 clang 提供的帮助:

clang -help
clang -help-hidden
clang -cc1 -help
clang -cc1 -help-hidden
Run Code Online (Sandbox Code Playgroud)

  • 驱动程序*不*从前端获取 AST。它也不发射红外线。所有这些都是在 clang -cc1 内完成的。驱动程序只是“标准化”各种选项、路径并处理作为链接器的调用工具。 (4认同)