This is based on what's required for softening fp128 operations on 32-bit X86 assuming f32/f64/f80 are legal. So there could be some things missing.
There's an assert in the caller than checks that the node only has a single result if you return a node. This assert only exists in the softening operand case. The softening result does not do this check. Returning SDValue() bypasses the assert. The same problem came up in vector splitting for operands and the assert was modified into 2 asserts that are selected based on whether the node is strict or not. I could do the same here, but it seemed like spreading strict fp details to a place that didn't really need to know about it.