Register objects question

Jim Wilson wilson@specifixinc.com
Tue Mar 30 06:13:00 GMT 2004


Jared Buttles wrote:
> I'm looking to create some rtl statements that reference registers, but 
> it is my understanding that registers, as objects, are unique and stored 
> in the regno_reg_rtx[] array. If that is the case, then why does 
> regno_reg_rtx[] return a different rtl address than that used (as is 
> evident when I print the rtl list)? How do I access the register object 
> actually being used in the rtl? Am I fundamentally misunderstanding the 
> storage of these things?

pseudo-regs are unique.  Hard regs are not.  This is a function of how 
register allocation works.  We allocate pseudos to hard regs by 
modifying the unique pseudo-reg rtx in place.  Since multiple pseudos 
with non-overlapping lifetimes can be allocated to the same hard reg, 
clearly, hard regs can not be unique.  Since they can't be unique, gcc 
doesn't even try to save hard reg values.  We often generate new rtx for 
a hard reg rather than trying to reuse old rtx values.

regno_reg_rtx really only works for pseudos.  If you have found a pseudo 
reg that differs from regno_reg_rtx, then you have probably found a bug.
-- 
Jim Wilson, GNU Tools Support, http://www.SpecifixInc.com



More information about the Gcc mailing list