custom lowering with multiple results

I recently found myself wanting to custom-lower an intrinsic by
replacing the intrinsic node with two new nodes such that the two
outputs of the original node (one of them is the chain) come from
different nodes after the rewrite. I haven't yet succeeded in this. I
was rather discouraged by this comment in LegalizeDAG.cpp:

      // FIXME: The handling for custom lowering with multiple results is
      // a complete mess.

If I can't do this with LowerOperation, what's the simpest alternative?