History of register allocator and more

Guys, I have two questions. The first is mostly to Alkis, Evan and Chris. I am writing a talk about register allocators, and I wish I could know a little of the history of LLVM's RA. If you guys are fine with that, I will add it to the talk. Basically, I wish I could have information like when was it made, how long did it take to complete the first release, how much it has been changed since the first release, how many people worked in the code, did it have anything that was innovative for the time of release, etc.

Second question: I am trying to implement swaps of floating point registers, but I do not know how to do it. I am basically trying something like:

     // r1 and r2 are unsigned of either class X86::FR32RegClass
     // or X86::FR64RegClass
     unsigned Opc = X86::FXCH;
     BuildMI(mbb, mi, Opc, 1).addReg(r1);
     BuildMI(mbb, mi, Opc, 1).addReg(r2);
     BuildMI(mbb, mi, Opc, 1).addReg(r1);

This produces code like: "fxch %xmm0", that gcc does not compile. Could some generous soul shed some light on my misery?

best,

Fernando