Teach getGuaranteedNonPoisonOps() and thus programUndefinedIfPoison() that branching on poison is undefined behavior.
LangRef for `br` and `switch`:
> If ‘cond’ is poison or undef, this instruction has undefined behavior.
> If ‘value’ is poison or undef, this instruction has undefined behavior.
Ran into this while attempting to fix https://bugs.llvm.org/show_bug.cgi?id=46943,The primary effects of this change are:
* Strengthen transferal of nowrap flags from IR to SCEV (now works for non-latch branches)
* Strengthen isGuaranteedNotToBeUndefOrPoison, see e.g. where this would be helpful to detect whether there is an existing UB-on-poison use of the postinc IV,the (Aggressive)InstCombine changes
and branches are the most important use when it comes to loops* Strengthen noundef deduction in Attributor.