コンパイラは、通常以上の最適化が可能な関数への呼び出しを見分けることができます。このような呼び出しの一例として、渡される引数の一部が定数である関数への呼び出しがあります。コンパイラは、最適化できる特定の呼び出しを見つけると、クローンと呼ばれるこの関数のコピーを作成して、最適化コードを生成します。
注釈付きソースでは、コンパイラのコメントは、クローン生成関数が作成されたかどうかを示します。
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 |