Oracle® Solaris Studio 12.4: パフォーマンスアナライザ

印刷ビューの終了

更新: 2015 年 1 月
 
 

クローン関数

コンパイラには、渡される引数の一部が定数である関数の呼び出しなど、追加の最適化を実行できる関数の呼び出しを認識する機能があります。 コンパイラは、最適化できる特定の呼び出しを識別すると、クローンと呼ばれるこの関数のコピーを作成し、最適化されたコードを生成します。

注釈付きソースでは、コンパイラ解説は、クローン関数が作成されているかどうかを示します。

0.       0.       Function foo from source file clone.c cloned, 
                   creating cloned function _$c1A.foo; 
                   constant parameters propagated to clone
0.       0.570     27.    foo(100, 50, a, a+50, b);

注 -  実際の注釈付きソースの表示では、コンパイラのコメント行は折り返されません。

クローン関数名は、特定の呼び出しを識別する符号化された名前です。前述の例では、コンパイラ解説は、クローン関数の名前が _$c1A.foo であることを示します。次に示すように、この関数は関数リストに表示されます。

0.350     0.550     foo
0.340     0.570     _$c1A.foo

クローン関数はそれぞれ異なる命令セットを持っているため、注釈付き逆アセンブリリストにはクローン関数が個別に表示されます。これらはソースファイルに関連付けられていないため、命令はいずれのソース行番号とも関連付けられていません。次の例は、クローン関数の注釈付き逆アセンブリの最初の数行を示しています。

0.       0.           <Function: _$c1A.foo>
0.       0.           [?]    10e98:  save        %sp, -120, %sp
0.       0.           [?]    10e9c:  sethi       %hi(0x10c00), %i4
0.       0.           [?]    10ea0:  mov         100, %i3
0.       0.           [?]    10ea4:  st          %i3, [%i0]
0.       0.           [?]    10ea8:  ldd         [%i4 + 640], %f8