Difference between stack pointer and frame address during codegeneration

Vladimir Makarov vmakarov@redhat.com
Wed Mar 2 15:04:00 GMT 2005


Øyvind Harboe wrote:

>Is there an existing technique to figure out the difference between 
>the frame address and the stack pointer during code generation of
>arbitary instructions?
>  
>
You can get the current offset through INITIAL_ELIMINATION_OFFSET.  But 
this offset is not final until reload pass is finished.  The offset can 
become bigger on reload pass becase some pseudo-registers will be put 
into memory (stack).  In general case even frame to hard frame pointer 
offset (or offset between other virtual registers) is not final until 
reload is finished because some pseudo-registers can get call saved 
hard-registers and these hard registers can be saved/restored on stack 
during prologue/epilogue.

Elimination itself can require additional hard register allocation 
because not all displacements are permitted for many architectures.

Therefore reload make elimination in a loop untill the process is 
stabilized (no new hard-registers or stack memory is needed).

>This is kinda related to frame pointer -> stack pointer elimination, but
>available during code generation.
>
>I'm not quite sure, but I think frame ointer to stack pointer
>elimination can fail. If this is the case, is it because the difference
>between frame pointer and stack pointer is not a constant or some other
>reason?
>  
>
One reason why elimination is not done is because of alloca (stack 
pointer is changed by unknown value during function execution).  There 
are other more complicated reasons too.

>I'm just curious and would like to read more.
>
>  
>




More information about the Gcc mailing list