[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