LLVM初探


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編譯器前端,它具有以下優點。

  1. 編譯速度快,在部分平台上,Clang的編譯速度顯著的快過GCC(Debug模式下編譯OC速度比GGC快3倍)
  2. 占用內存小:Clang生成的AST所占用的內存是GCC的五分之一左右
  3. 模塊化設計:Clang采用基於庫的模塊化設計,易於 IDE 集成及其他用途的重用,如Xcode集成了Clang的很多命令
  4. 診斷信息可讀性強:在編譯過程中,Clang 創建並保留了大量詳細的元數據 (metadata),有利於調試和錯誤報告,類比Xcode編譯時生成的中間產物文件,如診斷信息。
  5. 設計清晰簡單,容易理解,易於擴展增強.

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
    


  • size command檢測優化的結果

  • __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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM