We need: 1) support in llvm IR to represent multiple return values 2) optimizations updated to not die in the face of MRVs 3) something that generates MRVs, I'd suggest enhancing arg promotion to promote results to use them. 4) generic codegen support for MRVs including using the CallingConv.td support 5) target-specific support for them, as appropriate, such as support for the x86-64 calling conv stuff 6) enhance inline asm to have result register values returned as an extra result instead of using "=*r" constraints (Bug 2094).
1), 2) and 3) are done now.
This is all done except #6. Also, MRVs in their full generality aren't supported by all targets.
#6 is done.