0

我一直在研究使用 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+=为并避免讨厌的副本?

4

1 回答 1

1

SSA 表示单一静态分配。这是一种处理应用于寄存器的值语义的方法。每个对象都是一个机器指令的结果。

LLVM 提供了一个通用的“移动”指令,这很有用,因为在整个架构范围内有许多指令可以移动 8、32、N 个字节。它还提供结构化数据类型和数组,因为将这些东西提升到寄存器很有用,并且它们可用于表示古怪的高级机器构造。目的不是为 OOP 建模。

于 2012-06-09T13:56:41.287 回答