0
我一直在研究使用SSA指定的IR代碼,特別是在這種形式下生成LLVM IR。然而,當我提出一個具有非平凡複製語義的類型時,我對此是否有效感到困惑。例如,SSA表格在多大程度上允許使用非平凡複製的類型?
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自動轉化爲在一個突變+=
呼叫此底層彙編在一般情況下,避免討厭的副本?
您是否試圖查看LLVM是否可以對此進行優化? – rubenvb
@rubenvb:我沒有LLVM編譯器。 – Puppy
我不確定我是否理解這個問題?你問是否用單賦值變量編寫C++代碼是否有效?或者LLVM使用SSA後LLVM代碼是否有效?請注意,在LLVM中,寄存器是單一賦值,而不是內存位置。 – sepp2k