問題タブ [lto]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gcc - gcc中間表現でツリーを保存するには? 出来ますか?
ツリー (具体的にはツリーの種類) をバイナリ形式でファイルに保存したいのですが、このツリーを他のコンパイル ユニットにロードする必要があります。例えば:
私は2つの機能を持つmain.cを持っています:
構造体の型 ( myTypeStruct ) を保存し、test.c を含む別のコンパイル ユニットに次のようにロードします。
gcc プラグインを使用して、型をロードし、その型の変数を作成して、test.c を次のように変換します。
ツリーは tree_node へのポインターであり、tree_node は構造の結合であることを知っています。問題は、ツリーがそれと関係を持ち、一連の理解できない構造を持っていることです。特定の型の変数を作成するときに、どのデータにツリーが必要かを知る必要があります。
PD: LTO がそのようなことを行う方法についてのドキュメントが不十分です。PD2: 私の英語でごめんなさい
c++ - LTO の最適化による悪影響と最適な解決策の発見
セクションに分割されたフラッシュメモリを備えたMCUがあります(いつものように)。リンカは、.struct_init、.struct_init_const、.struct_not_init セクションを、フラッシュ メモリ section20 に属するアドレスに配置します。リンカー スクリプトにハードコードされています。
次のテスト コードを検討してください: test.h
test.cpp
main.cpp
param1_ 変数の初期化により、フラッシュからデータがフェッチされることを確認したいと思います。フラッシュセクション20のデータは、ブートローダーを使用して変更できるため(メインファームウェアが実行されていない瞬間)。
問題は、LTO(およびその他の最適化)がフラッシュからのフェッチを破棄し、初期化のためにリンク時に既知であるため、既知の値を単に置き換えることができるかということです。どのアプローチが良いですか?LTO が値を代用できる場合、初期化は避けるべきですか? volatile が役立つことはわかっていますが、この状況で本当に必要なのでしょうか?
コード例は、データへのアクセスと初期化のさまざまなアプローチを示しています。コンパイラは何も置き換えることができないため、not_init バージョンが最適なようです。しかし、いくつかのデフォルト パラメータを用意しておくことをお勧めします。そのため、使用できる場合は init バージョンを使用することをお勧めします。
どのようなアプローチを選択する必要がありますか?
現在、GCC 4.9.3 を使用していますが、これは C/C++ コンパイラに関する一般的な質問です。
c++ - Mingw x64 Windows: lto オブジェクトを処理するために必要なプラグイン
プロジェクトを 64 ビット mingw (x86_64-5.1.0-posix-seh-rt_v4-rev0) でコンパイルしようとすると、次のメッセージが表示されました。
ソースファイルごとに。それでも、32 ビットの mingw(i686-5.1.0-posix-dwarf-rt_v4-rev0) でコンパイルすると、何も問題ありません。
私のフラグは次のとおりです。
-fuse-linker-plugin と -fno-use-linker-plugin を追加しようとしましたが、役に立ちませんでした。私のOSは64ビットのWindows 10です。問題があればCLionとCMakeを使用しますが、そうすべきではありません。どうすれば修正できますか?
c++ - binutils と LTO を使用した gcc
binutils-2.25.1 を /usr/local/binutils-2.25.1 にインストールし、次のように構成しました
そして、/usr/local/binutils-2.25.1 のリンカldを使用する LTO サポート付きのRPM パッケージ - gcc をビルドしたいと考えています。
私は試します:
このパッケージをインストールした後、私は試します:
そして得る:
ただし、/ usr/local/binutils-2.25.1 のldにはプラグイン サポートがあります。
また、/usr/local/gcc-4.9.3 の gcc-{ar,nm,ranlib} には --plugin サポートがあります
あなたの助けが必要です、みんな
UPD私はなんとか問題を解決しました。交換したばかり
と
また、追加されました
%インストール開始へ
gcc-4.9.3/lto-plugin/configureスクリプトが正しく書かれていません!!!
c++ - リンク時の最適化が有効になっているとリンクが失敗する
私は (大規模な) wxWidgets プロジェクトを持っています。これは、より高い最適化レベルでもスムーズにコンパイルされます。
ここで、このプロジェクトの設定で、ビルド オブジェクトのプログラム全体の最適化 (/GL) とリンク時コード生成 (/LTCG) を有効にしました。これにより、未解決の外部参照が発生します。再度リンクした外部 wxWidgets ライブラリの関数が見つかりません。
これは Visual Studio の LTO の既知のバグですか? それを回避する方法、またはこれを引き起こす可能性のあるアイデアはありますか?
ありがとう!
plugins - LLVM LTO Pass プラグインの可能性は?
「外部」(.so/.dylib) LLVM プラグイン (モジュール) パスを LTO 時間にスケジュールすることが現在可能かどうか疑問に思っていましたか? これが必要な理由は、モジュール間の最適化を追加したいからです。
このトピックも見つけました。LLVM でカスタムのインターモジュラー パスを作成するには? しかし、別のツールは私にとって選択肢ではありません。
ありがとう