Live intervals and aliasing registers problem

I'm having trouble with overlapping intervals for vector registers. How are intervals for registers that both alias to the same larger register intended to be handled?

To demonstrate this problem you can use a minor addition to the Sparc register description.

Add this to the SparcRegisterInfo.td at line 68:

// Rtest
class Rtest<bits<5> num, string n, list<Register> aliases> : SparcReg<n> {
   let Num = num;
   let Aliases = aliases;
}

def ALIASING : Rtest<0, "Rtest0", [I0, I1]>, DwarfRegNum<0>;

Then attempt to build the attached llvm file using 'llvm-as < vecinterval.ll | llc -debug -march=sparc vecinterval -f -o vecinterval.s'

I get the following error:
********** COMPUTING LIVE INTERVALS **********
********** Function: _Z3fooff
entry:
                 livein register: I0 killed +[0,2:0)
                 livein register: Rtest0 killed +[0,2:0)
                 livein register: I1 killed +[0,6:0)
                 livein register: Rtest0 killed +[0,2:1)
lib/CodeGen/LiveInterval.cpp:189: failed assertion `B->end <= Start && "Cannot overlap two LiveRanges with differing ValID's" " (did you def the same reg twice in a MachineInstr?)"'
Abort trap

vecinterval.ll (417 Bytes)