【问题标题】:Clang compiler stagesClang 编译器阶段
【发布时间】:2016-07-19 09:52:13
【问题描述】:

Clang Compiler 是基于 LLVM 基础架构构建的,Clang 前端获取 C/C++ 源代码并生成 LLVM-IR,使用 Optimizer 和代码生成的工作由谁来完成?

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

【问题讨论】:

    标签: clang llvm


    【解决方案1】:

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

    一个是前端:它只是进行解析、构建抽象语法树 (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
    

    【讨论】:

    • 预处理器是前端阶段的一部分吗?
    • @osgx 是的,与 AST 相关的一切都是前端阶段的一部分。
    • 驱动程序从前端获取 AST。它也不发射红外线。所有这些都是在 clang -cc1 中完成的。驱动程序只是“规范化”各种选项、路径并处理调用工具作为链接器。
    • AFAIS main 可以转到 cc1_main 或运行 Drivercc1_main 所做的一切只是处理一个动作,即FrontendAction,而驱动程序创建多个动作,例如PrecompileJobActionCompileJobActionBackendJobActionAssembleJobActionLinkJobAction 等。我明白我的回答并不准确,但目的是提供更高级的概述,而不是深入了解具体的实施细节。 @AntonKorobeynikov 如果您能提供更详细的回复,我将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    相关资源
    最近更新 更多