我一直在研究使用 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 是否适用于具有非平凡复制/分配/等语义的类型?
编辑:问题是,如果我使用 LLVM SSA 寄存器来表示复杂类型(在本例std:string
中+=
为并避免讨厌的副本?