以上の諸条件を満たすと、コンパイラはどのルーチンをインライン展開すればプログラムのパフォーマンスに最も寄与するかを調べて選び出します。プロファイルに基づく最適化(-prof_use)を使用するかどうかによって、コンパイラが使用するヒューリスティックは異なります。 -ip または -ipoでプロファイルに基づく最適化を使用する場合、 コンパイラは次の手法を使用します。
プログラムに対して収集されたプロファイル情報を基に、デフォルトの手法では、最も頻繁に実行される呼び出しサイトに重点がおかれます。
デフォルトでは、コンパイラは230以上の中間文では、関数のインライン化は行いません。この値は次のオプション、-Qoption,c,-ip_ninl_max_stats=new_valueを使用して変更できます。注: inline または __inlineのようにユーザに宣言される関数には、より高い制限があります。
デフォルト・ヒューリスティックは、直接再帰( direct recursion )を検出すると停止します。
デフォルト・ヒューリスティックを使用すると、インライン化の最低条件を満たしている非常に小さな関数は必ずインライン化します。
Itanium® ベース・アプリケーションのデフォルト値: ip_ninl_min_stats=15.
IA-32 アプリケーションのデフォルト値: ip_ninl_min_stats = 7この上限は、-Qoption,c,-ip_ninl_min_stats=new valueオプションを使用して変更できます。
-ip または -ipo でプロファイルに基づく最適化を使用しない場合、コンパイラは次のような効果の低いインライン手法を使用します。
インライン展開で最終のプログラムのサイズが増えない場合、関数をインライン化。
inline または __inline キーワードで宣言された場合、関数をインライン化。