We already have this fold:
fadd float poison, 1.0 --> poison
...via ConstantFolding, so this makes the behavior consistent if the other operand(s) are non-constant.
The fold for undef was added before poison existed as a value/type in IR.
This came up in D102673 / D103169 because we're trying to sort out the more complicated handling for constrained math ops.
We should have the handling for the regular instructions done first, so we can build on that (or diverge as needed).