Register allocation on IR

I'm wondering if there are any tools available to help with register allocation directly on the LLVM IR. I'm looking for something like "reg2mem" but that will also allocate registers to all SSA values, and that will attempt to both coalesce non-conflicting memory and minimize the amount of copying due to PHI nodes.

Currently I've started working with LiveValues and a reverse post-order traversal to linearly allocate registers, but I'm wondering if there are more suitable tools that would be immediately useful for this problem.