摘要: 本文主要對Arm Compiler 6編譯器的鏈接時優化進行介紹。
關鍵字:Arm Compiler 6、編譯器、LTO、鏈接時優化。
1. 鏈接時優化
鏈接時優化是指編譯器在鏈接時將不同文件的代碼放在一起進行優化,以獲得更多的優化機會。
通常情況下,編譯器僅會獨立的優化每個源文件,將源代碼轉換為目標文件。在鏈接時,鏈接器通過解析符號引用和重定位將所有的目標文件合成一個可執行文件。單獨編譯源文件時有可能會喪失一些優化機會,例如跨模塊內聯。
當啟用鏈接時優化編譯,編譯器會將每個文件轉換為LLVM位碼的中間形式。鏈接器將所有包含位碼的文件收集到一起,并發送到鏈接時優化器,這樣可以根據模塊中間依賴關系的進行優化,優化完畢之后再發回鏈接器,鏈接器再創建一個可執行文件。

2. 啟用鏈接時優化
要啟用鏈接時優化 LTO,就需要在編譯(armclang)和鏈接(armlink)時都需要啟用。
在編譯時,使用armclang選項-flto生成適合 LTO 的 ELF 文件.
在鏈接時,使用armlink選項--lto為指定的位碼文件啟用 LTO.
3. 鏈接時優化的限制
armlink ?--partial選項僅適用于ELF 文件。如果鏈接器檢測到包含位碼的文件,則會報錯。
Arm 建議僅對分散文件中不需要精確放置的代碼和數據執行鏈接時優化。
4. 鏈接時優化舉例
例1:armclang --target=arm-arm-none-eabi -march=armv8-a -flto src1.c src2.c src3.c -o output.axf
在此示例中,由于armclang自動調用armlink ,因此鏈接時優化器具有與armclang相同的優化級別。由于沒有為armclang指定優化級別,因此它是默認優化級別-O0,并且--lto_level=O0.
例2:
armclang --target=arm-arm-none-eabi -march=armv8-a -c src1.c -o src1.o
armclang --target=arm-arm-none-eabi -march=armv8-a -c -flto src2.c -o src2.o
armclang --target=arm-arm-none-eabi -march=armv8-a -c -flto src3.c -o src3.o
armlink --lto src1.o src2.o src3.o -o output.axf
在此例中,因為 armclang和 armlink是分開調用的,所以它們有獨立的優化級別。由于沒有為 armclang或 armlink指定優化級別, 因此 armclang具有默認優化級別 -O0,鏈接時優化器具有默認優化級別 --lto_level=O2。
來源:《Arm? Compiler for Embedded User Guide Version 6.18》
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
關于億道電子
億道電子技術有限公司(英文名稱:Emdoor Electronics Technology Co.,Ltd)是國內資深的研發工具軟件提供商,公司成立于 2002 年,面向中國廣大的制造業客戶提供研發、設計、管理過程中使用的各種軟件開發工具,致力于幫助客戶提高研發管理效率、縮短產品設計周期,提升產品可靠性。
20 年來,先后與 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立戰略合作伙伴關系,并作為他們在中國區的主要分銷合作伙伴服務了數千家中國本土客戶,為客戶提供從芯片級開發工具、EDA 設計工具、軟件編譯以及測試工具、結構設計工具、仿真工具、電氣設計工具、以及嵌入式 GUI 工具等等。億道電子憑借多年的經驗積累,真正的幫助客戶實現了讓研發更簡單、更可靠、更高效的目標。

歡迎關注“億道電子”公眾號
了解更多研發工具軟件知識

首頁 > 新聞資訊
