![](/img/trans.png)
[英]invalid value '' in '-std=' when switch from GCC 4.2 to LLVM 2.0
[英]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.