[ixp1200] incorrect register live ranges

Cyrus Hall hallcp at cs.colorado.edu
Tue Jul 8 16:28:46 EDT 2003


The following does work correctly...

.segment 0
.local reg1
	immed[reg1, 1]
	br[label#]

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

.segment 0
done#:
	ctx_arb[kill]
.endlocal

On Tue, 2003-07-08 at 14:02, Cyrus Hall wrote:
> 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