I find the current documentation of poison rather confusing, mainly because its use of "undefined behavior" doesn't seem to align with our usual interpretation (of immediate UB). Especially the sentence "any instruction that has a dependence on a poison value has undefined behavior" is very confusing.
Clarify poison semantics by:
- Replacing the introductory paragraph with the standard rationale for having poison value.
- Spelling out that an instruction depending on poison returns poison.
- Spelling out how we go from a poison value to immediate undefined behavior and give the two examples we currently use in ValueTracking.
- Spelling out that side effects depending on poison are UB.
(Context: Discussion in D62939 on when exactly poison turns into UB.)
IMHO this is great, regardless of the poison discussion. Thanks for adding it.