Gab*_*ern 10 llvm clang llvm-gcc
我正在研究一个我用LLVM 2.6和llvm-gcc前端编译的项目.我正在尝试使用LLVM 3.1和clang来测试它.当我这样做时,我得到以下关于-O5优化级别的错误消息:
error: invalid value '5' in '-O5'
Run Code Online (Sandbox Code Playgroud)
但是,LLVM 2.6和llvm-gcc在-O5标志上运行良好.我看到了关于Clang优化级别的以下文档:
-O0 -O1 -O2 -Os -O3 -O4
Specify which optimization level to use. -O0 means "no optimization": this level compiles the
fastest and generates the most debuggable code. -O2 is a moderate level of optimization which
enables most optimizations. -Os is like -O2 with extra optimizations to reduce code size. -O3
is like -O2, except that it enables optimizations that take longer to perform or that may
generate larger code (in an attempt to make the program run faster). On supported platforms, -O4
enables link-time optimization; object files are stored in the LLVM bitcode file format and whole
program optimization is done at link time. -O1 is somewhere between -O0 and -O2.
Run Code Online (Sandbox Code Playgroud)
所以我试图找出-O5我正在使用的Makefile中首先做的是什么(我没有写Makefile).这是改变了以及用于LLVM的东西吗?或者它仍然是一个有用的功能,我只需要以其他方式激活它.
另外,如果它正在运行,我正在运行的命令是错误的,基本上是:
/bin/clang -g -c -mcmodel=medium -fstrict-aliasing -Wstrict-aliasing -O5 -emit-llvm -fkeep-inline-functions -fno-stack-protector -c -o foo.bc foo.cpp
Run Code Online (Sandbox Code Playgroud)
另外,如果它很重要,我在Linux(Ubuntu 10.04)x86_64系统上运行.
osg*_*sgx 13
Gcc将-Onn> = 4 视为-O3:
-O标志将接受0-9中的任何数字,但只实现0到3,我认为任何人都没有计划在任何时候很快实现4到9.人们使用这个-O9成语的事实有点令人不安,因为它暗示他们想要gcc可能提供的所有可想象的优化,即使它使编译需要数周才能获得.
不应该使用更大的级别,你只有低质量的Makefile.
因此,指定-O9有点"但这一个去了十一!" - 类型废话
因此,当使用gcc编译器时,您具有-O:的有效变体-O0, -O1, -O2, -O3.但是驱动程序会将任何-On静态转换为-O3.
LLVM(驱动程序的clang和llvm-gcc变体)仅支持最高级别-O4(与之-O4相同-O3 -flto).所以你不应该在没有测试的情况下使用-O4,因为lto较慢并且可能会破坏你的程序.
| 归档时间: |
|
| 查看次数: |
18021 次 |
| 最近记录: |