[ixp1200] incorrect register live ranges

Cyrus Hall hallcp at cs.colorado.edu
Tue Jul 8 16:02:15 EDT 2003


I'm an experiencing what feels like register mis-allocation by uca.  I
allocate several registers, branch to another segment, allocate several
more, and the newly allocated virtual registers end up being allocated
in the same physical registers as the virts allocated in before the
branch.  I'm using an unconditional branch (br) to jump to the second
segment (.segment 1) - same to come back to segment 0.

IE:
.segment 0
.local reg1
	immed[reg1, 1]
	br[label#]
done#:
	ctx_arb[kill]
.endlocal

.segment 1
label#:
.local reg2
	immed[reg2, 2]    //ends up overwriting reg1
	br[done#]
.endlocal

Does the compiler not calculate virtual live ranges across segments?  Or
is this a silly .local\.endlocal problem, and the compiler doesn't
follow the live range on a branch outside a .local section?

thanks,
Cy




More information about the ixp1200 mailing list