簡體   English   中英

LLVM中的毒性值和未定義值

[英]The poison value and undefined value in LLVM

LLVM引入了“毒葯價值”的概念,我從未明白這一點。 例如,對於聲明

%add = add nsw i32 %x, 1

如果%x+1嚴格大於最大的i32整數,則將任意值分配給%add。 如果聲稱上面的語句,即%add = add nsw i32 %x, 1 ,可以在語義上描述為:

if (%x+1) overflows then %add = undef else %add = add i32 %x,1

是的,它們應該在語義上等同。 在查看可能導致未定義值的LLVM IR指令時,考慮C / C ++是很有用的。

根據C / C ++標准,有符號整數溢出會導致未定義的行為,而Clang通過將未定義的行為映射到有毒值來進行近似。

Chris Lattner撰寫了一系列博客文章,描述了如何在LLVM中處理未定義的行為以及如何將其用於優化。

更新:有一個新的建議刪除undef只使用毒葯。 你可以在2016 LLVM開發者大會上在線找到關於這個提案的討論:N。Lopes“未定義的行為:長期毒葯!”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM