4
Clang編譯器基於LLVM基礎架構構建,Clang前端採用C/C++源代碼並生成LLVM-IR,誰使用Optimizer和代碼生成工作?Clang編譯器階段
由於優化器通庫是按照生成優化代碼的順序進行戰略性佈局和調用的,因此指定的順序在哪裏以及誰會生成目標代碼?這是Clang前端程序的一部分,還是有其他的程序可以實現這種優化和生成?
Clang編譯器基於LLVM基礎架構構建,Clang前端採用C/C++源代碼並生成LLVM-IR,誰使用Optimizer和代碼生成工作?Clang編譯器階段
由於優化器通庫是按照生成優化代碼的順序進行戰略性佈局和調用的,因此指定的順序在哪裏以及誰會生成目標代碼?這是Clang前端程序的一部分,還是有其他的程序可以實現這種優化和生成?
實際上有兩個clang
s,可以這麼說。
一個是前端:它只是解析,構建抽象語法樹(AST),並應用各種語義檢查。它也可以做一些靜態分析和其他有用的事情。人們可以通過訪問前端-cc1
選項,如:clang -cc1 -ast-dump
第二個是司機:它從前端AST併發出LLVM IR同時應用一些優化,然後讓其他所有的魔法如建築目標文件並將各種組件鏈接在一起。這是通常在撥打clang main.c
或類似命令時發生的情況。
請考慮看着雙方紅clangs提供了幫助:
clang -help
clang -help-hidden
clang -cc1 -help
clang -cc1 -help-hidden
是前端階段的預處理器的一部分? – osgx
@osgx是的,與AST相關的一切都是前端舞臺的一部分。 – AlexDenisov
驅動程序*不會從前端獲取AST。它也不會發射IR。所有這些都在clang -cc1中完成。驅動程序只是「標準化」各種選項,路徑並處理調用工具作爲鏈接器。 –