私は、SSA を使用して指定された IR コードを調べてきました。特に、この形式で LLVM IR を生成しています。ただし、自明ではないコピー セマンティクスを持つ型が提示された場合に、これが効果的かどうかについては混乱しています。例えば、
void f() {
std::string s = "Too long for you, short string optimization!";
std::string s1 = s + " Also, goodbye SSA.";
some_other_function(s1);
}
この SSA 形式では、少なくとも最も明白なレベルでは、(C++ の場合でも) 厄介なコピーの混乱が生じます。LLVM などのオプティマイザーは、実際にこのケースを正確に最適化できますか? SSA は、重要なコピー/代入/etc セマンティクスを持つ型でも使用できますか?
編集:問題は、LLVM SSA レジスタを使用して複雑な型 (この場合は) を表す場合、ここでは手動で SSA を作成することによって表される場合、LLVM はこれを一般的なケースで基になるアセンブリの変更呼び出しにstd:string
自動的に変換できるかということです。+=
厄介なコピーを避けますか?