2017-12-14 14 views
2

LLVM-O0の最適化を使用してCコードをコンパイルしました。LLVM IRをより高い最適化レベルに変換します

-O0 LLVM IRコードを-O3LLVM「Cコードなし」に変換するにはどうすればよいですか?

私は以下試してみました:

clang -O3 -S -emit-llvm O0.ll -o O3.ll 

opt -O3 -S O0.ll -o O3.ll 

が、出力はまだ -O0レベルです。

ありがとうございます。

+0

'opt'は、あなたが期待していることをすべきです。サンプルを投稿できますか?彼らは同じですか? –

+1

[Clangが自動的に自分の関数に属性を追加するのはなぜですか?](https://stackoverflow.com/questions/47504219/why-is-clang-automatically-adding-attributes-to-my-functions) –

答えて

0

変更がいつ起こったのか分かりません(LLVM 3.9.0以降と思われます)。ただし、ビットコード関数をコンパイルすると、optnone属性でアノテートされ、さらに最適化が実行されません。

関連するSOのディスカッションhereをご覧ください。提案された何

はこれを行うことです:LLVM 3.8.0およびそれ以前については

clang -emit-llvm -O1 -mllvm -disable-llvm-optzns -disable-llvm-passes foo.c -o foo.bc 

を(と思う)あなたがすでにやっている何十分です。

そのビットコード(なし)を取得すると、すでに行っているようにoptを使用できます。

+0

知的好奇心今私はすべての 'optnone'属性を削除するための変換を書こうと思っていますが、それはかなり終わるとは思いません。 – jvstech

+0

haha​​、ええ、しかし、私は、理由のために 'optnone'があるというケースについてはわかりません。 – compor

関連する問題