RISCV 工具链数据报第四期:
第一/二期数据勘误,以及 Berkeley 缩减静态 codesize TR 解读
在本期数据报中,我们将对 RISCV 指令集上 GCC 和 LLVM-Clang 编译器
(以下简称 Clang)的 codesize 对比,以及 RISCV 指令集和 ARM 指令集在
GCC 编译器上的 codesize 对比,使用更加严谨的优化编译选项进行再次报
告,并将结合 ARM 官方公开的 ARM Compiler 优化数据来分析 RISCV 的潜
在优化空间。本期报告还将解读来自 Berkeley CS 系的技术报告《Reduce
Static Code Size and Improve RISC-V Compression》。
关于优化选项使用的说明,请参考第三期数据报第一部分。
关于本期数据报所使用的编译器的构建/下载方式、源代码版本/下载链
接,测试方法,请参考第一、二期数据报的相关详细说明。
一、RISCV32 和 RISCV64 指令集下,对 GCC 和 Clang,以-O2 为基准,开启
codesize 优化后的 codesize 缩减程度评估。(对应第一期数据报 Part2)
在-O 类型的选项中,GCC 提供了-Os 来优化 codesize,而 Clang 提供了
两个选项:-Os 和-Oz,来优化 codesize。-Oz 比-Os 更为激进。选项说明具
体见表 1 和相关参考链接。
表 1 GCC 和 LLVM-Clang 的-O 类型 codesize 优化选项
-Os
Optimize for size. -Os enables all -O2 optimizations except those that often increase
code size:
-falign-functions -falign-jumps -falign-labels -falign-loops -fprefetch-loop-
arrays -freorder-blocks-algorithm=stc
-Os Like -O2 with extra optimizations to reduce code size.
-Oz Like -Os (and thus -O2), but reduces code size further.
图一显示了 RISCV32 下,GCC 工具链上的-Os 相对于-O2 的 codesize 比
例,平均情况下,开启-Os 后 codesize 是-O2 的 84.07%。
评论0
最新资源