LLVM是編譯器的框架系統,以C++編寫而成,用於優化以任意程序語言編寫的程序編譯時間,鏈接時間,運行時間,以及空閑時間,對開發這保持開放,並兼容已有的腳本(來自百度百科),它的全稱是Low Level Virtual Machine
LLVM的優勢
- 以下來自機翻
- LLVM使用具有嚴格定義語義的簡單低級語言。
- 它包括C和C++前端。Java、Scheme和其他語言的前端正在開發中。
- 它包括一個積極的優化器,包括標量、過程間、概要文件驅動和一些簡單的循環優化。
- 它支持編譯模型,包括鏈接時間、安裝時間、運行時和脫機優化。
- LLVM完全支持精確的垃圾收集。
- LLVM代碼生成器相對容易重定目標,並且使用了強大的目標描述語言。
- LLVM有大量的文檔,並且托管了各種各樣的項目。
- 此外,LLVM還提供了使開發更容易的工具。
- LLVM正在積極發展,並在不斷擴展、增強和改進。
- LLVM在OSI批准的“Apache許可證版本2.0”許可證下免費提供。
LLVM適合人群
1.對C和C ++程序的編譯時,鏈接時(過程間)和運行時轉換感興趣的編譯器研究人員;
2.對可移植的,與語言無關的指令集和編譯框架感興趣的虛擬機研究人員
3.對編譯器/硬件技術感興趣的架構研究員
4.對靜態分析或插樁技術感興趣的安全研究人員
5.想要快速開發編譯器原型的教師或開發人員
6.希望獲得更好性能的最終用戶開發者
LLVM架構

clang介紹
前面提到過LLVM項目的一個子項目,基於LLVM架構的C/C++/Objective-C編譯器前端,它具有以下優點。
- 編譯速度快,在部分平台上,Clang的編譯速度顯著的快過GCC(Debug模式下編譯OC速度比GGC快3倍)
- 占用內存小:Clang生成的AST所占用的內存是GCC的五分之一左右
- 模塊化設計:Clang采用基於庫的模塊化設計,易於 IDE 集成及其他用途的重用,如Xcode集成了Clang的很多命令
- 診斷信息可讀性強:在編譯過程中,Clang 創建並保留了大量詳細的元數據 (metadata),有利於調試和錯誤報告,類比Xcode編譯時生成的中間產物文件,如診斷信息。
- 設計清晰簡單,容易理解,易於擴展增強.
Clang與LLVM之間的關系
在LLVM整體架構,前端用的是clang,廣義的LLVM是指整個LLVM架構,一般狹義的LLVM指的是LLVM后端(包含代碼優化和目標代碼生成),在iOS的構建中,一般把clang作為編譯器的前端,LLVM作為后端,負責優化代碼,生成不同的平台的目標代碼。
e
工作流程:
1.目標代碼經過clang,進行詞法,語法分析,語議分析,生成出版的中間代碼
2.然后經過LLVM后端對代碼結構進行優化,最終生成目標代碼

在Xcode中新建一個OC工程,使用如下命令編譯main.c文件
- 查看工作流程
shell xxx@xxxx Test % clang -ccc-print-phases main.m
0: input, "main.m", objective-c. 輸入`main.m`文件
1: preprocessor, {0}, objective-c-cpp-output //預備編譯,宏定義的代碼替換
2: compiler, {1}, ir //編譯器編譯,生成中間代碼
3: backend, {2}, assembler //后端生成目標代碼
4: assembler, {3}, object //匯編
5: linker, {4}, image //鏈接鏡像文件(動態庫)
6: bind-arch, "x86_64", {5}, image //編譯成指定架構,這里采用的是模擬器測試 - 詞法分析測試: 代碼會被分割為一個個很小的單元,檢測語法格式,如匹配大括號是否配對,是否缺少分號結尾。
執行clang -fmodules -E -Xclang -dump-tokens main.m - 語法樹-AST: (Abstract Syntax Tree)
執行clang -fmodules -fsyntax-only -Xclang -ast-dump main.m,這里按照遞歸的方式列出了每個函數和變量的解析(翻譯)過程。
LLVM IR
- LLVM的中間代碼(IR)有以下3種表示方式,
- text:便於閱讀的文本格式,類似於匯編語言,拓展名.ll, $ clang -S -emit-llvm main.m
- memory:內存格式
- bitcode:二進制格式,拓展名.bc,
clang -c -emit-llvm main.m
LLVM和Clang在Xcode中的應用
LLVM overview

Clang overview

LLVM Optimize

LLVM Code generate overview

其他工具的擴展支持


- 可以通過
man clang來查看它的幫助命令,在Xcode點擊三角形Run的時候也可以在控制台看到構建的各個步驟.
LLVM LTO Optimize
- LTO:(link Time Optimize), 優化方式主要有以下三種
- 不同文件的inline函數優化
- 清理不需要的代碼
- 對程序全局進行優化
- 傳統的link方式,多個文件有交集

LTO優化: 相比傳統的link,主要是對
.o文件進行優化后,附加一些優化信息,再進行link

Apple內部的構建已經開始廣泛使用
- 通常比常規版本中的可執行文件快10%(官方數據提供)
- 通過文件引導優化,Profile Guide Optimize(PGO),按照配置進行優化
- 將頻繁調用且依賴性較強的函數專為內聯函數
- 虛函數的調用推測,改為直接調用
- 寄存器分配優化
- 條件分支的優化,如switch,將高概率出現的值單獨擰出來處理
- 函數布局,將類似指令,功能相關的函數放到相同的section,盡量安排在一起
- 總的來說,就是提高CPU的的緩存命中率和分支預測的成功率。
- 優化大小時減少代碼大小
LTO優化需在編譯時間和運行性能之間做權衡,優化過度會造成,在debug info的時候非常不方便
- 編譯時大量的內存開銷
- 優化不是並行運行的
- 增量構建的重復的工作
新的LTO又進行了如下改進,可以看到上面的lto.o文件被拆分了多個,避免了局部修改帶來的開銷
- 分析和內聯函數不合並對象文件
- 提升編譯速度
- 二次編譯有鏈接器緩存,避免再次重新鏈接。如Xcode中的Module Cache

開啟LTO優化
一般使用incremental增量式的LTO,優化會影響debug效率,最好不要在開發環境下啟用

如果需要在debug環境下開啟,則建議將Debug Information Level改成Line tables only

Code Size Improvements
指定LLVM/clang的優化級別
根據官方推薦,使用
-Os具有最大收益,代碼執行效率的提升和可執行文件的體積最優

設置參數
SWIFT_OPTIMIZATION_LEVEL = "-O" GCC_OPTIMIZATION_LEVEL = s

sizecommand檢測優化的結果

__TEXT具體包含的內容

更加詳細的信息

組合優化

LLVM bitcode
- 它是一種特殊的中間代碼,讓應用支持
Bitcode,將多個arm架構發布到AppStore,當用戶在下載ipa包的時候,appStore根據用戶手機的具體arm架構將ipa的的bitcode轉換成用戶手機目標平台的機器碼,減少內存。
- 編譯過程


參考鏈接
https://devstreaming-cdn.apple.com/videos/wwdc/2019/409t7ah0xy3ocqab4a/409/409_whats_new_in_clang_and_llvm.pdf?dl=1
https://devstreaming-cdn.apple.com/videos/wwdc/2016/405i2ilotov3bazyei1/405/405_whats_new_in_llvm.pdf?dl=1
https://llvm.zcopy.site/
https://gclxry.com/visual-studio-profile-guided-optimization/
https://www.jianshu.com/p/1367dad95445
https://llvm.zcopy.site/post/61090.html
https://llvm.org/
https://llvm.org/docs/
clang命令速查表
OVERVIEW: clang LLVM compiler
USAGE: clang [options] file...
OPTIONS:
-### Print (but do not run) the commands to run for this compilation
--analyzer-output <value>
靜態分析器報告輸出格式 (html|plist|plist-multi-file|plist-html|text).
--analyze 運行靜態分析儀
-arcmt-migrate-emit-errors 提交arc錯誤,盡管遷移可以解決錯誤
-arcmt-migrate-report-output <value> 報告輸出
-B <dir> 將文件`dir`隱式的添加到搜索路徑中,方便二進制查找
-CC 在預處理中包含內部宏的注釋
-cfguard 發出windows控制流所需要的保護表
-cl-denorms-are-zero OpenCL only. Allow denormals to be flushed to zero.
-cl-fast-relaxed-math OpenCL only. Sets -cl-finite-math-only and -cl-unsafe-math-optimizations, and defines __FAST_RELAXED_MATH__.
-cl-finite-math-only OpenCL only. Allow floating-point optimizations that assume arguments and results are not NaNs or +-Inf.
-cl-fp32-correctly-rounded-divide-sqrt
OpenCL only. Specify that single precision floating-point divide and sqrt used in the program source are correctly rounded.
-cl-kernel-arg-info OpenCL only. Generate kernel argument metadata.
-cl-mad-enable OpenCL only. Allow use of less precise MAD computations in the generated binary.
-cl-no-signed-zeros OpenCL only. Allow use of less precise no signed zeros computations in the generated binary.
-cl-opt-disable OpenCL only. This option disables all optimizations. By default optimizations are enabled.
-cl-single-precision-constant
OpenCL only. Treat double precision floating-point constant as single precision constant.
-cl-std=<value> OpenCL language standard to compile for.
-cl-strict-aliasing OpenCL only. This option is added for compatibility with OpenCL 1.0.
-cl-uniform-work-group-size
OpenCL only. Defines that the global work-size be a multiple of the work-group size specified to clEnqueueNDRangeKernel
-cl-unsafe-math-optimizations
OpenCL only. Allow unsafe floating-point optimizations. Also implies -cl-no-signed-zeros and -cl-mad-enable.
--config <value> Specifies configuration file
--cuda-compile-host-device
Compile CUDA code for both host and device (default). Has no effect on non-CUDA compilations.
--cuda-device-only Compile CUDA code for device only
--cuda-gpu-arch=<value> CUDA GPU architecture (e.g. sm_35). May be specified more than once.
--cuda-host-only Compile CUDA code for host only. Has no effect on non-CUDA compilations.
--cuda-include-ptx=<value>
Include PTX for the following GPU architecture (e.g. sm_35) or 'all'. May be specified more than once.
--cuda-noopt-device-debug
Enable device-side debug info generation. Disables ptxas optimizations.
--cuda-path-ignore-env Ignore environment variables to detect CUDA installation
--cuda-path=<value> CUDA installation path
-cxx-isystem <directory>
向C++系統添加目錄包括搜索路徑
-C 在預處理輸出中包含注釋
-c 只運行預處理、編譯和組裝步驟
-dD 除正常輸出外,以-E模式打印宏定義
-dependency-dot <value> 要寫入點格式標頭依賴項的文件名 -依賴文件<value>
-dI 除了正常輸出外,在-E模式下打印include指令
-dM 以-E模式而不是正常輸出打印宏定義
-D <macro>=<value> 定義宏變量
-emit-ast ***搜集輸入源文件的語法分析樹文****
-emit-llvm 對匯編程序和對象文件使用LLVM表示
-enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang<value>
Trivial automatic variable initialization to zero is only here for benchmarks, it'll eventually be removed, and I'm OK with that because I'm only using it to benchmark
-E 只運行預處理器
-faddrsig 發出地址重要性表
-faligned-allocation 啟用C++ 17對齊的分配函數
-fallow-editor-placeholders 將編輯器占位符視為有效源代碼
-fansi-escape-codes 使用ANSI轉義代碼進行診斷
-fapinotes-cache-path=<directory> 不執行任何操作;API注釋不再與模塊分開緩存
-fapinotes-modules 啟用基於模塊的外部API notes支持
-fapinotes-swift-version=<version> 指定篩選API注釋時要使用的Swift版本
-fapinotes 啟用外部API notes支持
-fapple-kext 使用蘋果的內核擴展ABI
-fapple-link-rtlib 強制鏈接clang builtins運行庫
-fapple-pragma-pack 啟用Apple gcc兼容的pragma包處理
-fapplication-extension 將代碼限制為可用於應用程序擴展的代碼
-fblocks 啟用“塊”語言功能
-fborland-extensions 接受Borland編譯器支持的非標准構造
-fbuild-session-file=<file>
***使用<file>的最后修改時間作為構建會話時間戳 ***
-fbuild-session-timestamp=<time since Epoch in seconds>
當前生成會話開始的時間
-fbuiltin-module-map ***加載clang 內置的模塊映射文件***
-fc++-static-destructors 啟用C++靜態析構函數注冊(默認)
-fcall-saved-x10 Make the x10 register call-saved (AArch64 only)
-fcall-saved-x11 Make the x11 register call-saved (AArch64 only)
-fcall-saved-x12 Make the x12 register call-saved (AArch64 only)
-fcall-saved-x13 Make the x13 register call-saved (AArch64 only)
-fcall-saved-x14 Make the x14 register call-saved (AArch64 only)
-fcall-saved-x15 Make the x15 register call-saved (AArch64 only)
-fcall-saved-x18 Make the x18 register call-saved (AArch64 only)
-fcall-saved-x8 Make the x8 register call-saved (AArch64 only)
-fcall-saved-x9 Make the x9 register call-saved (AArch64 only)
-fcf-protection=<value> 控制流程結構保護。選項:return、branch、full、none。
-fcf-protection 允許 cf-protection 在 'full' 模式
-fchar8_t 允許 C++ 內置的類型 char8_t
-fclang-abi-compat=<version>
嘗試匹配Clang<version>
-fcolor-diagnostics 在診斷中使用顏色
-fcomment-block-commands=<arg>
將<arg>中的每個逗號分隔參數視為文檔注釋塊命令
-fcomplete-member-pointers
如果成員指針基類型在Microsoft ABI下是重要的,則要求它們是完整的
-fcoroutines-ts 啟用對C++協同程序TS的支持
-fcoverage-mapping 生成覆蓋率映射以啟用代碼覆蓋率分析
-fcs-profile-generate=<directory>
生成插入指令的代碼以將上下文相關的執行計數收集到<directory>/默認值.proflow(被LLVM_PROFILE_FILE env var覆蓋)
-fcuda-approx-transcendentals
Use approximate transcendental functions
-fcuda-flush-denormals-to-zero
Flush denormal floating point values to zero in CUDA device mode.
-fcuda-short-ptr 使用32位指針訪問常量/本地/共享地址空間。
-fcxx-exceptions 啟用C++異常
-fdata-sections 將每個數據放入自己的部分(僅限ELF)
-fdebug-compilation-dir <value>
要嵌入調試信息中的編譯目錄。
-fdebug-info-for-profiling
發出額外的調試信息以使示例配置文件更准確。
-fdebug-macro 發出宏調試信息
-fdebug-prefix-map=<value>
在調試信息中重新映射文件源路徑
-fdebug-ranges-base-address
在調試范圍中使用DWARF基地址選擇項
-fdebug-types-section 將調試類型放入它們自己的部分(僅限ELF)
-fdeclspec 允許declspec作為關鍵字
-fdelayed-template-parsing
解析翻譯單元末尾的模板化函數定義
-fdelete-null-pointer-checks
將空指針的使用視為未定義的行為。
-fdiagnostics-absolute-paths
在診斷中打印絕對路徑
-fdiagnostics-hotness-threshold=<number>
如果優化備注沒有至少此配置文件計數,則阻止輸出優化備注
-fdiagnostics-parseable-fixits
以機器可解析的形式打印修復它
-fdiagnostics-print-source-range-info
以數字形式打印源范圍跨度
-fdiagnostics-show-hotness
Enable profile hotness information in diagnostic line
-fdiagnostics-show-note-include-stack
*** 顯示診斷注釋的包含堆棧 ***
-fdiagnostics-show-option
使用可映射診斷打印選項名稱
-fdiagnostics-show-template-tree
打印不同模板的模板比較樹
-fdigraphs 啟用替代令牌表示 '<:', ':>', '<%', '%>', '%:', '%:%:' (default)
-fdiscard-value-names 丟棄LLVM-IR中的值名稱
-fdollars-in-identifiers
Allow '$' in identifiers
-fdouble-square-bracket-attributes
Enable '[[]]' attributes in all C and C++ language modes
-fdwarf-exceptions Use DWARF style exceptions
-fembed-bitcode-marker 嵌入占位符LLVM IR數據作為標記
-fembed-bitcode=<option>
*** 嵌入LLVM位代碼,(用於翻譯不同平台目標代碼)*** (option: off, all, bitcode, marker)
-fembed-bitcode 嵌入LLVM-IR位碼作為數據
-femit-all-decls 提交所有聲明,即使未使用
-fc-tls 使用emutls函數訪問線程本地變量
-fenable-matrix Enable matrix data type and related builtin functions
-fexceptions 啟用對異常處理的支持
-fexperimental-isel Enables the experimental global instruction selector
-fexperimental-new-pass-manager
Enables an experimental new pass manager in LLVM.
-ffast-math *** 允許激進的、有損的浮點優化 ***
-ffine-grained-bitfield-accesses
Use separate accesses for consecutive bitfield runs with legal widths and alignments.
-ffixed-point Enable fixed point types
-ffixed-r19 Reserve register r19 (Hexagon only)
-ffixed-r9 Reserve the r9 register (ARM only)
-ffixed-x10 Reserve the 10 register (AArch64 only)
-ffixed-x11 Reserve the 11 register (AArch64 only)
-ffixed-x12 Reserve the 12 register (AArch64 only)
-ffixed-x13 Reserve the 13 register (AArch64 only)
-ffixed-x14 Reserve the 14 register (AArch64 only)
-ffixed-x15 Reserve the 15 register (AArch64 only)
-ffixed-x18 Reserve the 18 register (AArch64 only)
-ffixed-x1 Reserve the 1 register (AArch64 only)
-ffixed-x20 Reserve the 20 register (AArch64 only)
-ffixed-x21 Reserve the 21 register (AArch64 only)
-ffixed-x22 Reserve the 22 register (AArch64 only)
-ffixed-x23 Reserve the 23 register (AArch64 only)
-ffixed-x24 Reserve the 24 register (AArch64 only)
-ffixed-x25 Reserve the 25 register (AArch64 only)
-ffixed-x26 Reserve the 26 register (AArch64 only)
-ffixed-x27 Reserve the 27 register (AArch64 only)
-ffixed-x28 Reserve the 28 register (AArch64 only)
-ffixed-x2 Reserve the 2 register (AArch64 only)
-ffixed-x3 Reserve the 3 register (AArch64 only)
-ffixed-x4 Reserve the 4 register (AArch64 only)
-ffixed-x5 Reserve the 5 register (AArch64 only)
-ffixed-x6 Reserve the 6 register (AArch64 only)
-ffixed-x7 Reserve the 7 register (AArch64 only)
-ffixed-x9 Reserve the 9 register (AArch64 only)
-fforce-emit-vtables 發出更多的虛擬表來改善去虛擬化
-fforce-enable-int128 允許int128_t類型
-ffp-contract=<value> Form fused FP ops (e.g. FMAs): fast (everywhere) | on (according to FP_CONTRACT pragma, default) | off (never fuse)
-ffreestanding 斷言編譯發生在獨立環境中
-ffunction-sections 將每個函數放在自己的節中(僅限ELF)
-fgnu-keywords 不管語言標准如何,都允許GNU擴展關鍵字
-fgnu-runtime 生成與標准GNU Objective-C運行時兼容的輸出
-fgnu89-inline ***使用gnu89內聯語義***
-fgpu-rdc 生成可重定位設備代碼,也稱為獨立編譯模式。
-fimplicit-module-maps 隱式地在文件系統中搜索模塊映射文件。
-finline-functions 內聯適當函數
-finline-hint-functions 顯式或隱式)標記為內聯的內聯函數
-finstrument-function-entry-bare 僅在內聯后插入函數項,不帶插入調用的參數
-finstrument-functions Generate calls to instrument function entry and exit
-fintegrated-as Enable the integrated assembler
-fkeep-static-consts Keep static const variables even if unused
-flto-jobs=<value> Controls the backend parallelism of -flto=thin (default of 0 means the number of threads will be derived from the number of CPUs detected)
-flto=<value> 將LTO模式設置為“full”或“thin”
-flto 在“完全”模式下啟用LTO
-fmath-errno 需要數學函數通過設置errno來指示錯誤
-fmax-type-align=<value>
指定要對缺少顯式對齊的指針強制執行的最大對齊方式
-fmerge-all-constants 允許合並常量
-fmodule-file=[<name>=]<file>
指定模塊名到預編譯模塊文件的映射,或者在省略名稱的情況下加載模塊文件。
-fmodule-map-file=<file>
加載此模塊映射文件***
-fmodule-name=<name> 指定要生成的模塊的名稱***
-fmodules-cache-path=<directory>
指定模塊緩存路徑***
-fmodules-decluse 要求聲明模塊中使用的模塊 ***
-fmodules-disable-diagnostic-validation 加載模塊時禁用診斷選項驗證 ***
-fmodules-ignore-macro=<value> 生成和加載模塊時忽略給定宏的定義 ***
-fmodules-prune-after=<seconds>
指定將認為模塊文件未使用的間隔(以秒為單位) ***
-fmodules-prune-interval=<seconds>
指定嘗試修剪模塊緩存的間隔(秒) ***
-fmodules-search-all Search even non-imported modules to resolve references
-fmodules-strict-decluse
Like -fmodules-decluse 但要求所有頭都在模塊中 -fmodules-ts 啟用對C++模塊TS的支持
-fmodules-user-build-path <directory>
指定模塊用戶生成路徑
-fmodules-validate-input-files-content
Validate PCM input files based on content if mtime differs
-fmodules-validate-once-per-build-session
如果模塊在此生成會話期間已成功驗證或加載,則不要驗證模塊的輸入文件***
-fmodules-validate-system-headers
加載模塊時驗證模塊所依賴的系統頭 ***
-fmodules 啟用“模塊”語言功能 ***
-fms-compatibility-version=<value>
Dot-separated value representing the Microsoft compiler version number to report in _MSC_VER (0 = don't define it (default))
-fms-compatibility Enable full Microsoft Visual C++ compatibility
-fms-extensions 接受Microsoft編譯器支持的一些非標准構造
-fmsc-version=<value> Microsoft compiler version number to report in _MSC_VER (0 = don't define it (default))
-fnew-alignment=<align> Specifies the largest alignment guaranteed by '::operator new(size_t)'
-fno-access-control 禁用C++訪問控制 ***
-fno-addrsig 不發出地址重要性表 ***
-fno-apinotes-modules 禁用基於模塊的外部API notes支持***
-fno-apinotes 禁用外部API注解支持
-fno-assume-sane-operator-new 不要假定C++的全局運算符new不能別名指針
-fno-autolink 禁用為自動庫鏈接生成鏈接器指令
-fno-builtin-<value> 禁用特定函數的隱式內置知識
-fno-builtin 禁用函數的隱式內置知識
-fno-c++-static-destructors
Disable C++ static destructor registration
-fno-char8_t Disable C++ builtin type char8_t
-fno-common Compile common globals like normal definitions
-fno-complete-member-pointers
Do not require member pointer base types to be complete if they would be significant under the Microsoft ABI
-fno-constant-cfstrings 禁用創建CodeFoundation類型常量字符串 ****
-fno-constant-nsarray-literals
禁用從數組文本創建CodeFoundation類型常量初始值設定項“NSArray” ****
-fno-constant-nsdictionary-literals
禁用從字典文本創建CodeFoundation類型常量初始值設定項`NSDictionary`s
無法從數字文本創建CodeFoundation類型常量初始值設定項“NSNumber”
-fno-coverage-mapping 禁用代碼覆蓋率分析
-fno-crash-diagnostics 禁用自動生成預處理的源文件和腳本,以便在clang崩潰期間進行復制
-fno-debug-info-for-profiling
不要為示例探查器發出額外的調試信息。
-fno-debug-macro 不發出宏調試信息
-fno-declspec 不允許作為關鍵字
-fno-delayed-template-parsing
禁用延遲模板分析
-fno-delete-null-pointer-checks
不要將空指針的使用視為未定義的行為。
-fno-diagnostics-fixit-info
不包括診斷信息
-fno-digraphs 不允許替代令牌表示'<:', ':>', '<%', '%>', '%:', '%:%:'
-fno-discard-value-names 不要丟棄LLVM-IR中的值名
-fno-dollars-in-identifiers 在標識符中不允許使用“$”
-fno-double-square-bracket-attributes 在所有C和C++語言模式中禁用'[]]屬性
-fno-elide-constructors 禁用C++復制構造器刪除
-fno-elide-type Do not elide types when printing diagnostics
-fno-experimental-isel Disables the experimental global instruction selector
-fno-experimental-new-pass-manager
Disables an experimental new pass manager in LLVM.
-fno-fine-grained-bitfield-accesses
Use large-integer access for consecutive bitfield runs.
-fno-fixed-point Disable fixed point types
-fno-force-enable-int128
Disable support for int128_t type
-fno-gnu-inline-asm Disable GNU style inline asm
-fno-integrated-as Disable the integrated assembler
-fno-jump-tables Do not use jump tables for lowering switches
-fno-lax-vector-conversions
Disallow implicit conversions between vectors with a different number of elements or different element types
-fno-lto Disable LTO mode (default)
-fno-merge-all-constants
Disallow merging of constants
-fno-objc-infer-related-result-type
do not infer Objective-C related result type based on method family
-fno-operator-names Do not treat C++ operator name keywords as synonyms for operators
-fno-plt Do not use the PLT to make function calls
-fno-preserve-as-comments
Do not preserve comments in inline assembly
-fno-profile-generate Disable generation of profile instrumentation.
-fno-profile-instr-generate
Disable generation of profile instrumentation.
-fno-profile-instr-use Disable using instrumentation data for profile-guided optimization
-fno-register-global-dtors-with-atexit
Don't use atexit or __cxa_atexit to register global destructors
-fno-reroll-loops Turn off loop reroller
-fno-rtlib-add-rpath Do not add -rpath with architecture-specific resource directory to the linker flags
-fno-rtti-data Control emission of RTTI data
-fno-rtti Disable generation of rtti information
-fno-sanitize-address-poison-custom-array-cookie
Disable poisoning array cookies when using custom operator new[] in AddressSanitizer
-fno-sanitize-address-use-after-scope
在AddressSanitizer中禁用作用域檢測后使用
-fno-sanitize-address-use-odr-indicator
Disable ODR indicator globals
-fno-sanitize-blacklist Don't use blacklist file for sanitizers
-fno-sanitize-cfi-cross-dso
Disable control flow integrity (CFI) checks for cross-DSO calls.
-fno-sanitize-coverage=<value>
Disable specified features of coverage instrumentation for Sanitizers
-fno-sanitize-memory-track-origins
Disable origins tracking in MemorySanitizer
-fno-sanitize-memory-use-after-dtor
Disable use-after-destroy detection in MemorySanitizer
-fno-sanitize-recover=<value>
Disable recovery for specified sanitizers
-fno-sanitize-stats Disable sanitizer statistics gathering.
-fno-sanitize-thread-atomics
Disable atomic operations instrumentation in ThreadSanitizer
-fno-sanitize-thread-func-entry-exit
Disable function entry/exit instrumentation in ThreadSanitizer
-fno-sanitize-thread-memory-access
Disable memory access instrumentation in ThreadSanitizer
-fno-sanitize-trap=<value>
Disable trapping for specified sanitizers
-fno-short-wchar Force wchar_t to be an unsigned int
-fno-show-column Do not include column number on diagnostics
-fno-show-source-location
Do not include source location information with diagnostics
-fno-signed-char Char is unsigned
-fno-signed-zeros Allow optimizations that ignore the sign of floating point zeros
-fno-spell-checking Disable spell-checking
-fno-stack-check Disable stack checking
-fno-stack-protector Disable the use of stack protectors
-fno-stack-size-section Don't emit section containing metadata on function stack sizes
-fno-standalone-debug Limit debug information produced to reduce size of debug binary
-fno-strict-float-cast-overflow
Relax language rules and try to match the behavior of the target's native float-to-int conversion instructions
-fno-temp-file Directly create compilation output files. This may lead to incorrect incremental builds if the compiler crashes
-fno-threadsafe-statics Do not emit code to make initialization of local statics thread safe
-fno-trigraphs Do not process trigraph sequences
-fno-unroll-loops Turn off loop unroller
-fno-use-cxa-atexit Don't use __cxa_atexit for calling destructors
-fno-use-init-array Don't use .init_array instead of .ctors
-fobjc-arc-exceptions Use EH-safe code when synthesizing retains and releases in -fobjc-arc
-fobjc-arc Synthesize retain and release calls for Objective-C pointers
-fobjc-exceptions Enable Objective-C exceptions
-fobjc-runtime=<value> Specify the target Objective-C runtime kind and version
-fobjc-weak Enable ARC-style weak references in Objective-C
-fopenmp-simd Emit OpenMP code only for SIMD-based constructs.
-fopenmp-targets=<value>
Specify comma-separated list of triples OpenMP offloading targets to be supported
-fopenmp Parse OpenMP pragmas and generate parallel code.
-foptimization-record-file=<file>
Specify the output name of the file containing the optimization remarks. Implies -fsave-optimization-record. On Darwin platforms, this cannot be used with multiple -arch <arch> options.
-foptimization-record-passes=<regex>
Only include passes which match a specified regular expression in the generated optimization record (by default, include all passes)
-forder-file-instrumentation
Generate instrumented code to collect order file into default.profraw file (overridden by '=' form of option or LLVM_PROFILE_FILE env var)
-fpack-struct=<value> Specify the default maximum struct packing alignment
-fpascal-strings Recognize and construct Pascal-style string literals
-fpass-plugin=<dsopath> Load pass plugin from a dynamic shared object file (only with new pass manager).
-fpcc-struct-return Override the default ABI to return all structs on the stack
-fpch-validate-input-files-content
Validate PCH input files based on content if mtime differs
-fplt Use the PLT to make function calls
-fplugin=<dsopath> Load the named plugin (dynamic shared object)
-fprebuilt-module-path=<directory>
Specify the prebuilt module path
-fprofile-exclude-files=<value>
Instrument only functions from files where names don't match all the regexes separated by a semi-colon
-fprofile-filter-files=<value>
Instrument only functions from files where names match any regex separated by a semi-colon
-fprofile-generate=<directory>
Generate instrumented code to collect execution counts into <directory>/default.profraw (overridden by LLVM_PROFILE_FILE env var)
-fprofile-generate Generate instrumented code to collect execution counts into default.profraw (overridden by LLVM_PROFILE_FILE env var)
-fprofile-instr-generate=<file>
Generate instrumented code to collect execution counts into <file> (overridden by LLVM_PROFILE_FILE env var)
-fprofile-instr-generate
Generate instrumented code to collect execution counts into default.profraw file (overridden by '=' form of option or LLVM_PROFILE_FILE env var)
-fprofile-instr-use=<value>
Use instrumentation data for profile-guided optimization
-fprofile-remapping-file=<file>
Use the remappings described in <file> to match the profile data against names in the program
-fprofile-sample-accurate
Specifies that the sample profile is accurate
-fprofile-sample-use=<value>
Enable sample-based profile guided optimizations
-fprofile-use=<pathname>
Use instrumentation data for profile-guided optimization. If pathname is a directory, it reads from <pathname>/default.profdata. Otherwise, it reads from file <pathname>.
-fptrauth-auth-traps Enable traps on authentication failures
-fptrauth-calls Enable signing and authentication of all indirect calls
-fptrauth-indirect-gotos
Enable signing and authentication of indirect goto targets
-fptrauth-intrinsics Enable pointer-authentication intrinsics
-fptrauth-returns Enable signing and authentication of return addresses
-fptrauth-soft Enable software lowering of pointer authentication
-freciprocal-math Allow division operations to be reassociated
-freg-struct-return Override the default ABI to return small structs in registers
-fregister-global-dtors-with-atexit
Use atexit or __cxa_atexit to register global destructors
-frelaxed-template-template-args
Enable C++17 relaxed template template argument matching
-freroll-loops Turn on loop reroller
-frtlib-add-rpath Add -rpath with architecture-specific resource directory to the linker flags
-fsanitize-address-field-padding=<value>
Level of field padding for AddressSanitizer
-fsanitize-address-globals-dead-stripping
Enable linker dead stripping of globals in AddressSanitizer
-fsanitize-address-poison-custom-array-cookie
Enable poisoning array cookies when using custom operator new[] in AddressSanitizer
-fsanitize-address-use-after-scope
Enable use-after-scope detection in AddressSanitizer
-fsanitize-address-use-odr-indicator
Enable ODR indicator globals to avoid false ODR violation reports in partially sanitized programs at the cost of an increase in binary size
-fsanitize-blacklist=<value>
Path to blacklist file for sanitizers
-fsanitize-cfi-cross-dso
Enable control flow integrity (CFI) checks for cross-DSO calls.
-fsanitize-cfi-icall-generalize-pointers
Generalize pointers in CFI indirect call type signature checks
-fsanitize-coverage=<value>
Specify the type of coverage instrumentation for Sanitizers
-fsanitize-hwaddress-abi=<value>
Select the HWAddressSanitizer ABI to target (interceptor or platform, default interceptor)
-fsanitize-memory-track-origins=<value>
Enable origins tracking in MemorySanitizer
-fsanitize-memory-track-origins
Enable origins tracking in MemorySanitizer
-fsanitize-memory-use-after-dtor
Enable use-after-destroy detection in MemorySanitizer
-fsanitize-recover=<value>
Enable recovery for specified sanitizers
-fsanitize-stats Enable sanitizer statistics gathering.
-fsanitize-system-blacklist=<value>
Path to system blacklist file for sanitizers
-fsanitize-thread-atomics
Enable atomic operations instrumentation in ThreadSanitizer (default)
-fsanitize-thread-func-entry-exit
Enable function entry/exit instrumentation in ThreadSanitizer (default)
-fsanitize-thread-memory-access
Enable memory access instrumentation in ThreadSanitizer (default)
-fsanitize-trap=<value> Enable trapping for specified sanitizers
-fsanitize-undefined-strip-path-components=<number>
Strip (or keep only, if negative) a given number of path components when emitting check metadata.
-fsanitize=<check> Turn on runtime checks for various forms of undefined or suspicious behavior. See user manual for available checks
-fsave-optimization-record=<format>
Generate an optimization record file in a specific format
-fsave-optimization-record
Generate a YAML optimization record file
-fseh-exceptions Use SEH style exceptions
-fshort-enums Allocate to an enum type only as many bytes as it needs for the declared range of possible values
-fshort-wchar Force wchar_t to be a short unsigned int
-fshow-overloads=<value>
Which overload candidates to show when overload resolution fails: best|all; defaults to all
-fsized-deallocation Enable C++14 sized global deallocation functions
-fsjlj-exceptions Use SjLj style exceptions
-fslp-vectorize Enable the superword-level parallelism vectorization passes
-fsplit-dwarf-inlining Provide minimal debug info in the object/executable to facilitate online symbolication/stack traces in the absence of .dwo/.dwp files when using Split DWARF
-fsplit-lto-unit Enables splitting of the LTO unit.
-fstack-check Enable stack checking
-fstack-protector-all Enable stack protectors for all functions
-fstack-protector-strong
Enable stack protectors for some functions vulnerable to stack smashing. Compared to -fstack-protector, this uses a stronger heuristic that includes functions containing arrays of any size (and any type), as well as any calls to alloca or the taking of an address from a local variable
-fstack-protector Enable stack protectors for some functions vulnerable to stack smashing. This uses a loose heuristic which considers functions vulnerable if they contain a char (or 8bit integer) array or constant sized calls to alloca, which are of greater size than ssp-buffer-size (default: 8 bytes). All variable sized calls to alloca are considered vulnerable
-fstack-size-section Emit section containing metadata on function stack sizes
-fstandalone-debug Emit full debug info for all types used by the program
-fstrict-enums Enable optimizations based on the strict definition of an enum's value range
-fstrict-float-cast-overflow
Assume that overflowing float-to-int casts are undefined (default)
-fstrict-return Always treat control flow paths that fall off the end of a non-void function as unreachable
-fstrict-vtable-pointers
Enable optimizations based on the strict rules for overwriting polymorphic C++ objects
-ftarget-variant-availability-checks
Enable availability checks for the target variant platform
-fthinlto-index=<value> Perform ThinLTO importing using provided function summary index
-ftrap-function=<value> Issue call to specified function rather than a trap instruction
-ftrapv-handler=<function name>
Specify the function to be called on overflow
-ftrapv Trap on integer overflow
-ftrigraphs Process trigraph sequences
-ftrivial-auto-var-init=<value>
Initialize trivial automatic stack variables: uninitialized (default) | pattern
-funique-section-names Use unique names for text and data sections (ELF Only)
-funroll-loops Turn on loop unroller
-fuse-init-array Use .init_array instead of .ctors
-fvalidate-ast-input-files-content
Compute and store the hash of input files used to build an AST. Files with mismatching mtime's are considered valid if both contents is identical
-fveclib=<value> Use the given vector functions library
-fvectorize Enable the loop vectorization passes
-fvisibility-global-new-delete-hidden
Give global C++ operator new and delete declarations hidden visibility
-fvisibility-inlines-hidden
Give inline C++ member functions hidden visibility by default
-fvisibility-ms-compat Give global types 'default' visibility and global functions and variables 'hidden' visibility by default
-fvisibility=<value> Set the default symbol visibility for all global declarations
-fwhole-program-vtables Enables whole-program vtable optimization. Requires -flto
-fwrapv Treat signed integer overflow as two's complement
-fwritable-strings Store string literals as writable data
-fxray-always-emit-customevents
Determine whether to always emit __xray_customevent(...) calls even if the function it appears in is not always instrumented.
-fxray-always-emit-typedevents
Determine whether to always emit __xray_typedevent(...) calls even if the function it appears in is not always instrumented.
-fxray-always-instrument= <value>
DEPRECATED: Filename defining the whitelist for imbuing the 'always instrument' XRay attribute.
-fxray-attr-list= <value>
Filename defining the list of functions/types for imbuing XRay attributes.
-fxray-instruction-threshold= <value>
Sets the minimum function size to instrument with XRay
-fxray-instrumentation-bundle= <value>
Select which XRay instrumentation points to emit. Options: all, none, function, custom. Default is 'all'.
-fxray-instrument Generate XRay instrumentation sleds on function entry and exit
-fxray-link-deps Tells clang to add the link dependencies for XRay.
-fxray-modes= <value> List of modes to link in by default into XRay instrumented binaries.
-fxray-never-instrument= <value>
DEPRECATED: Filename defining the whitelist for imbuing the 'never instrument' XRay attribute.
-fzvector Enable System z vector language extension
-F <value> Add directory to framework include search path
--gcc-toolchain=<value> Use the gcc toolchain at the given directory
-gcodeview-ghash Emit type record hashes in a .debug$H section
-gcodeview Generate CodeView debug information
-gdwarf-2 Generate source-level debug information with dwarf version 2
-gdwarf-3 Generate source-level debug information with dwarf version 3
-gdwarf-4 Generate source-level debug information with dwarf version 4
-gdwarf-5 Generate source-level debug information with dwarf version 5
-gembed-source Embed source text in DWARF debug sections
-gline-directives-only Emit debug line info directives only
-gline-tables-only Emit debug line number tables only
-gmodules Generate debug info with external references to clang modules or precompiled headers
-gno-embed-source Restore the default behavior of not embedding source text in DWARF debug sections
-gsplit-dwarf=<value> Set DWARF fission mode to either 'split' or 'single'
-gz=<value> DWARF debug sections compression type
-gz DWARF debug sections compression type
-G <size> Put objects of at most <size> bytes into small data section (MIPS / Hexagon)
-g Generate source-level debug information
--help-hidden Display help for hidden options
-help Display available options
--hip-device-lib-path=<value>
HIP device library path
--hip-device-lib=<value>
HIP device library
--hip-link Link clang-offload-bundler bundles for HIP
-H Show header includes and nesting depth
-I- Restrict all prior -I flags to double-quoted inclusion and remove current directory from include path
-iapinotes-modules <directory>
Add directory to the API notes search path referenced by module name
-idirafter <value> Add directory to AFTER include search path
-iframeworkwithsysroot <directory>
Add directory to SYSTEM framework search path, absolute paths are relative to -isysroot
-iframework <value> Add directory to SYSTEM framework search path
-imacros <file> Include macros from file before parsing
-include-pch <file> Include precompiled header file
-include <file> Include file before parsing
-index-header-map Make the next included directory (-I or -F) an indexer header map
-index-ignore-system-symbols
Ignore symbols from system headers
-index-record-codegen-name
Record the codegen name for symbols
-index-store-path <value>
Enable indexing with the specified data store path
-iprefix <dir> Set the -iwithprefix/-iwithprefixbefore prefix
-iquote <directory> Add directory to QUOTE include search path
-isysroot <dir> Set the system root directory (usually /)
-isystem-after <directory>
Add directory to end of the SYSTEM include search path
-isystem <directory> Add directory to SYSTEM include search path
-ivfsoverlay <value> Overlay the virtual filesystem described by file over the real file system
-iwithprefixbefore <dir>
Set directory to include search path with prefix
-iwithprefix <dir> Set directory to SYSTEM include search path with prefix
-iwithsysroot <directory>
Add directory to SYSTEM include search path, absolute paths are relative to -isysroot
-I <dir> Add directory to include search path
--libomptarget-nvptx-path=<value>
Path to libomptarget-nvptx libraries
-L <dir> Add directory to library search path
-mabicalls Enable SVR4-style position-independent code (Mips only)
-malign-double Align doubles to two words in structs (x86 only)
-mbackchain Link stack frames through backchain on System Z
-mbranch-protection=<value>
Enforce targets of indirect branches and function returns
-mcmse Allow use of CMSE (Armv8-M Security Extensions)
-mcode-object-v3 Enable code object v3 (AMDGPU only)
-mcrc Allow use of CRC instructions (ARM/Mips only)
-mcumode CU wavefront execution mode is used (AMDGPU only)
-MD Write a depfile containing user and system headers
-meabi <value> Set EABI type, e.g. 4, 5 or gnu (default depends on triple)
-membedded-data Place constants in the .rodata section instead of the .sdata section even if they meet the -G <size> threshold (MIPS)
-mexecute-only Disallow generation of data access to code sections (ARM only)
-mextern-sdata Assume that externally defined data is in the small data if it meets the -G <size> threshold (MIPS)
-mfentry Insert calls to fentry at function entry (x86 only)
-mfix-cortex-a53-835769 Workaround Cortex-A53 erratum 835769 (AArch64 only)
-mfp32 Use 32-bit floating point registers (MIPS only)
-mfp64 Use 64-bit floating point registers (MIPS only)
-MF <file> Write depfile output from -MMD, -MD, -MM, or -M to <file>
-mgeneral-regs-only Generate code which only uses the general purpose registers (AArch64 only)
-mglobal-merge Enable merging of globals
-mgpopt Use GP relative accesses for symbols known to be in a small data section (MIPS)
-MG Add missing headers to depfile
-mhvx-length=<value> Set Hexagon Vector Length
-mhvx=<value> Enable Hexagon Vector eXtensions
-mhvx Enable Hexagon Vector eXtensions
-miamcu Use Intel MCU ABI
--migrate Run the migrator
-mincremental-linker-compatible
(integrated-as) Emit an object file which can be used with an incremental linker
-mindirect-jump=<value> Change indirect jump instructions to inhibit speculation
-mios-version-min=<value>
Set iOS deployment target
-MJ <value> Write a compilation database entry per input
-mllvm <value> Additional arguments to forward to LLVM's option processing
-mlocal-sdata Extend the -G behaviour to object local data (MIPS)
-mlong-calls Generate branches with extended addressability, usually via indirect jumps.
-mmacosx-version-min=<value>
Set Mac OS X deployment target
-mmadd4 Enable the generation of 4-operand madd.s, madd.d and related instructions.
-MMD Write a depfile containing user headers
-mmemops Enable generation of memop instructions
-mms-bitfields Set the default structure layout to be compatible with the Microsoft compiler standard
-mmsa Enable MSA ASE (MIPS only)
-mmt Enable MT ASE (MIPS only)
-MM Like -MMD, but also implies -E and writes to stdout by default
-mno-abicalls Disable SVR4-style position-independent code (Mips only)
-mno-code-object-v3 Disable code object v3 (AMDGPU only)
-mno-crc Disallow use of CRC instructions (Mips only)
-mno-cumode WGP wavefront execution mode is used (AMDGPU only)
-mno-embedded-data Do not place constants in the .rodata section instead of the .sdata if they meet the -G <size> threshold (MIPS)
-mno-execute-only Allow generation of data access to code sections (ARM only)
-mno-extern-sdata Do not assume that externally defined data is in the small data if it meets the -G <size> threshold (MIPS)
-mno-fix-cortex-a53-835769
Don't workaround Cortex-A53 erratum 835769 (AArch64 only)
-mno-global-merge Disable merging of globals
-mno-gpopt Do not use GP relative accesses for symbols known to be in a small data section (MIPS)
-mno-hvx Disable Hexagon Vector eXtensions
-mno-implicit-float Don't generate implicit floating point instructions
-mno-incremental-linker-compatible
(integrated-as) Emit an object file which cannot be used with an incremental linker
-mno-local-sdata Do not extend the -G behaviour to object local data (MIPS)
-mno-long-calls Restore the default behaviour of not generating long calls
-mno-madd4 Disable the generation of 4-operand madd.s, madd.d and related instructions.
-mno-memops Disable generation of memop instructions
-mno-movt Disallow use of movt/movw pairs (ARM only)
-mno-ms-bitfields Do not set the default structure layout to be compatible with the Microsoft compiler standard
-mno-msa Disable MSA ASE (MIPS only)
-mno-mt Disable MT ASE (MIPS only)
-mno-neg-immediates Disallow converting instructions with negative immediates to their negation or inversion.
-mno-nvj Disable generation of new-value jumps
-mno-nvs Disable generation of new-value stores
-mno-outline Disable function outlining (AArch64 only)
-mno-packets Disable generation of instruction packets
-mno-relax Disable linker relaxation
-mno-restrict-it Allow generation of deprecated IT blocks for ARMv8. It is off by default for ARMv8 Thumb mode
-mno-sram-ecc Disable SRAM ECC (AMDGPU only)
-mno-stack-arg-probe Disable stack probes which are enabled by default
-mno-tls-direct-seg-refs
Disable direct TLS access through segment registers
-mno-unaligned-access Force all memory accesses to be aligned (AArch32/AArch64 only)
-mno-wavefrontsize64 Wavefront size 32 is used
-mno-xnack Disable XNACK (AMDGPU only)
-mnocrc Disallow use of CRC instructions (ARM only)
-mnvj Enable generation of new-value jumps
-mnvs Enable generation of new-value stores
-module-dependency-dir <value>
Directory to dump module dependencies to
-module-file-info Provide information about a particular module file
-momit-leaf-frame-pointer
Omit frame pointer setup for leaf functions
-moutline Enable function outlining (AArch64 only)
-mpackets Enable generation of instruction packets
-mpie-copy-relocations Use copy relocations support for PIE builds
-mprefer-vector-width=<value>
Specifies preferred vector width for auto-vectorization. Defaults to 'none' which allows target specific decisions.
-MP Create phony target for each dependency (other than main file)
-mqdsp6-compat Enable hexagon-qdsp6 backward compatibility
-MQ <value> Specify name of main file output to quote in depfile
-mrelax-all (integrated-as) Relax all machine instructions
-mrelax Enable linker relaxation
-mrestrict-it Disallow generation of deprecated IT blocks for ARMv8. It is on by default for ARMv8 Thumb mode.
-mrtd Make StdCall calling convention the default
-msign-return-address=<value>
Select return address signing scope
-msoft-float Use software floating point
-msram-ecc Enable SRAM ECC (AMDGPU only)
-mstack-alignment=<value>
Set the stack alignment
-mstack-arg-probe Enable stack probes
-mstack-probe-size=<value>
Set the stack probe size
-mstackrealign Force realign the stack at entry to every function
-mthread-model <value> The thread model to use, e.g. posix, single (posix by default)
-mtls-direct-seg-refs Enable direct TLS access through segment registers (default)
-mtp=<value> Thread pointer access method (AArch32/AArch64 only)
-MT <value> Specify name of main file output in depfile
-munaligned-access Allow memory accesses to be unaligned (AArch32/AArch64 only)
-MV Use NMake/Jom format for the depfile
-mwavefrontsize64 Wavefront size 64 is used
-mxnack Enable XNACK (AMDGPU only)
-M Like -MD, but also implies -E and writes to stdout by default
--no-cuda-gpu-arch=<value>
Remove GPU architecture (e.g. sm_35) from the list of GPUs to compile for. 'all' resets the list to its default value.
--no-cuda-include-ptx=<value>
Do not include PTX for the following GPU architecture (e.g. sm_35) or 'all'. May be specified more than once.
--no-cuda-version-check Don't error out if the detected version of the CUDA install is too low for the requested CUDA gpu architecture.
--no-system-header-prefix=<prefix>
Treat all #include paths starting with <prefix> as not including a system header.
-nobuiltininc Disable builtin #include directories
-nostdinc++ Disable standard #include directories for the C++ standard library
-ObjC++ Treat source input files as Objective-C++ inputs
-objcmt-atomic-property Make migration to 'atomic' properties
-objcmt-migrate-all Enable migration to modern ObjC
-objcmt-migrate-annotation
Enable migration to property and method annotations
-objcmt-migrate-designated-init
Enable migration to infer NS_DESIGNATED_INITIALIZER for initializer methods
-objcmt-migrate-instancetype
Enable migration to infer instancetype for method result type
-objcmt-migrate-literals
Enable migration to modern ObjC literals
-objcmt-migrate-ns-macros
Enable migration to NS_ENUM/NS_OPTIONS macros
-objcmt-migrate-property-dot-syntax
Enable migration of setter/getter messages to property-dot syntax
-objcmt-migrate-property
Enable migration to modern ObjC property
-objcmt-migrate-protocol-conformance
Enable migration to add protocol conformance on classes
-objcmt-migrate-readonly-property
Enable migration to modern ObjC readonly property
-objcmt-migrate-readwrite-property
Enable migration to modern ObjC readwrite property
-objcmt-migrate-subscripting
Enable migration to modern ObjC subscripting
-objcmt-ns-nonatomic-iosonly
Enable migration to use NS_NONATOMIC_IOSONLY macro for setting property's 'atomic' attribute
-objcmt-returns-innerpointer-property
Enable migration to annotate property with NS_RETURNS_INNER_POINTER
-objcmt-whitelist-dir-path=<value>
Only modify files with a filename contained in the provided directory path
-ObjC Treat source input files as Objective-C inputs
-o <file> Write output to <file>
-pg Enable mcount instrumentation
-pipe Use pipes between commands, when possible
--precompile Only precompile the input
-print-effective-triple Print the effective target triple
-print-file-name=<file> Print the full library path of <file>
-print-ivar-layout Enable Objective-C Ivar layout bitmap print trace
-print-libgcc-file-name Print the library path for the currently used compiler runtime library ("libgcc.a" or "libclang_rt.builtins.*.a")
-print-prog-name=<name> Print the full program path of <name>
-print-resource-dir Print the resource directory pathname
-print-search-dirs Print the paths used for finding libraries and programs
-print-supported-cpus Print supported cpu models for the given target (if target is not specified, it will print the supported cpus for the default target)
-print-target-triple Print the normalized target triple
-pthread Support POSIX threads in generated code
--ptxas-path=<value> Path to ptxas (used for compiling CUDA code)
-P Disable linemarker output in -E mode
-Qn Do not emit metadata containing compiler name and version
-Qunused-arguments Don't emit warning for unused driver arguments
-Qy Emit metadata containing compiler name and version
-relocatable-pch Whether to build a relocatable precompiled header
-rewrite-legacy-objc Rewrite Legacy Objective-C source to C++
-rewrite-objc Rewrite Objective-C source to C++
-Rpass-analysis=<value> Report transformation analysis from optimization passes whose name matches the given POSIX regular expression
-Rpass-missed=<value> Report missed transformations by optimization passes whose name matches the given POSIX regular expression
-Rpass=<value> Report transformations performed by optimization passes whose name matches the given POSIX regular expression
-rtlib=<value> Compiler runtime library to use
-R<remark> Enable the specified remark
-save-stats=<value> Save llvm statistics.
-save-stats Save llvm statistics.
-save-temps=<value> Save intermediate compilation results.
-save-temps Save intermediate compilation results
-serialize-diagnostics <value>
Serialize compiler diagnostics to a file
-shared-libsan Dynamically link the sanitizer runtime
-static-libsan Statically link the sanitizer runtime
-std=<value> Language standard to compile for
-stdlib=<value> C++ standard library to use
--system-header-prefix=<prefix>
Treat all #include paths starting with <prefix> as including a system header.
-S Only run preprocess and compilation steps
-target-variant <value> Generate code that may run on a particular variant of the deployment target
--target=<value> Generate code for the given target
-Tbss <addr> Set starting address of BSS to <addr>
-Tdata <addr> Set starting address of DATA to <addr>
-time Time individual commands
-traditional-cpp Enable some traditional CPP emulation
-trigraphs Process trigraph sequences
-Ttext <addr> Set starting address of TEXT to <addr>
-T <script> Specify <script> as linker script
-undef undef all system defines
-unwindlib=<value> Unwind library to use
-U <macro> Undefine macro <macro>
--verify-debug-info Verify the binary representation of debug output
-verify-pch Load and verify that a pre-compiled header file is not stale
--version Print version information
-v Show commands to run and use verbose output
-Wa,<arg> Pass the comma separated arguments in <arg> to the assembler
-Wdeprecated Enable warnings for deprecated constructs and define __DEPRECATED
-Wl,<arg> Pass the comma separated arguments in <arg> to the linker
-working-directory <value>
Resolve file paths relative to the specified directory
-Wp,<arg> Pass the comma separated arguments in <arg> to the preprocessor
-W<warning> Enable the specified warning
-w Suppress all warnings
-Xanalyzer <arg> Pass <arg> to the static analyzer
-Xassembler <arg> Pass <arg> to the assembler
-Xclang <arg> Pass <arg> to the clang compiler
-Xcuda-fatbinary <arg> Pass <arg> to fatbinary invocation
-Xcuda-ptxas <arg> Pass <arg> to the ptxas assembler
-Xlinker <arg> Pass <arg> to the linker
-Xopenmp-target=<triple> <arg>
Pass <arg> to the target offloading toolchain identified by <triple>.
-Xopenmp-target <arg> Pass <arg> to the target offloading toolchain.
-Xpreprocessor <arg> Pass <arg> to the preprocessor
-x <language> Treat subsequent input files as having type <language>
-z <arg> Pass -z <arg> to the linker
