The nopoison IR attribute indicates that the value it associated with cannot be poison, so it will be safe for us to perform more optimizations to it.
For example, consider the following code[1]:
t = x + 1; if (t == y) { w = x + 1; foo(w); }
if we determine that y cannot be poison, then we can apply the GVN optimization to the code above.
[1] 2016 LLVM Developers’ Meeting: N. Lopes “Undefined Behavior: Long Live Poison!"
clang-format: please reformat the code