コンパイラには、渡される引数の一部が定数である関数の呼び出しなど、追加の最適化を実行できる関数の呼び出しを認識する機能があります。 コンパイラは、最適化できる特定の呼び出しを識別すると、クローンと呼ばれるこの関数のコピーを作成し、最適化されたコードを生成します。
注釈付きソースでは、コンパイラ解説は、クローン関数が作成されているかどうかを示します。
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