11

私は、LLVM 2.6 と llvm-gcc フロントエンドでコンパイルしていたプロジェクトに取り組んでいます。LLVM 3.1 と clang でコンパイルをテストしようとしています。これを行ったときに、-O5 最適化レベルに関する次のエラー メッセージが表示されました。

error: invalid value '5' in '-O5'

ただし、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.

だから私は-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

また、重要な場合に備えて、Linux (Ubuntu 10.04) x86_64 システムで実行しています。

4

2 に答える 2

14

Gcc は-On、n >= 4 の any を次のよう-O3に扱います。

-O フラグは 0 から 9 までの任意の数値を受け入れますが、実装されているのは 0 から 3 だけです。4 から 9 までをすぐに実装する計画がある人はいないと思います。人々がこの -O9 イディオムを使用するという事実は、少し気がかりです。なぜなら、gcc が提供できる可能性のある考えられるすべての最適化を望んでいることを意味するからです。

それ以上のレベルは使用しないでください。Makefile の品質が低いだけです。

したがって、-O9 を指定することは、「しかし、これは 11 になります!」タイプのナンセンスです。

したがって、gcc コンパイラを使用すると、 -O: の有効なバリアントがあります-O0, -O1, -O2, -O3。ただし、ドライバーは -On を暗黙のうちに -O3 に変換します。

LLVM (ドライバの clang と llvm-gcc バリアントの両方) は-O4(-O4は とまったく同じ-O3 -flto) までのレベルのみをサポートします。したがって、テストなしで -O4 を使用しないでください。lto は遅く、プログラムを壊す可能性があるからです。

于 2012-04-24T21:23:46.590 に答える
2

llvm-gcc がエラーとして認識しなかったのに、clang が認識したのは、Makefile のミスである可能性があります。

于 2012-04-24T21:14:52.680 に答える