gpt4 book ai didi

c++ - SSA 形式在多大程度上允许具有非平凡复制的类型?

转载 作者:行者123 更新时间:2023-11-28 08:02:48 24 4
gpt4 key购买 nike

我一直在研究使用 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),这里通过手动使其成为SSA来表示,LLVM是否可以自动翻译在一般情况下,这会变成底层程序集中的变异 += 调用并避免令人讨厌的拷贝?

最佳答案

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

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

关于c++ - SSA 形式在多大程度上允许具有非平凡复制的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10961506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com