この記事は、インテル® デベロッパー・ゾーンに掲載されている「Diagnostic 15414: loop was not vectorized: nothing to vectorize since xxxx body became empty after optimizations」(https://software.intel.com/en-us/articles/cdiag15414) の日本語参考訳です。
このベクトル診断メッセージは、インテル® C++ コンパイラー 15.0 以降で生成されます。
原因:
この診断メッセージは、ループ本体が空であると出力されます。次の例では、演算 a = b + 1 はループ外に移動して一度だけ行うことができます。これはループ内の唯一の操作であるため、ループ外に移動するとループ本体は空になります。
例:
int foo(int a, int b, int n){ int i; for(i = 0; i < n; i++) a = b + 1; return a; }
$ icl 15414.c /c /O2 /Qopt-report:2 /Qopt-report-phase:vec
以下の診断メッセージは、インテル® C++ コンパイラー for Windows* 19.1.0.166 (ビルド 20191121) で生成しました。
インテル(R) Advisor はベクトル化を支援するため、ソースコードで最適化レポートメッセージを表示します。
詳細は、"https://software.intel.com/en-us/intel-advisor-xe" を参照してください。
インテル(R) 64 対応インテル(R) C++ コンパイラー (インテル(R) 64 対応アプリケーション用) バージョン 19.1.0.166 ビルド 20191121
コンパイラー・オプション: /c /O2 /Qopt-report:2 /Qopt-report-phase:vec
ループ本体が空になったためベクトル化が行われず、レポートには何も表示されません。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。