Zdenek Dvorak wrote:
> Hello,
> 
> during expansion of expressions, gimplification creates a lot of temporary
> variables.  VAR_DECLs are fairly large (88 bytes on i686), and
> additionally an annotation (44 bytes on i686) are allocated for each of
> them (some of them even get names, for additional ~50 bytes of memory
> each).  This is quite wasteful.

Indeed; this is something I've been hoping we could fix for some time.

> Basic observation is that these temporaries have exactly one definition.
> It is therefore possible to generate directly SSA_NAMEs for them,
> setting SSA_NAME_VAR to NULL (and be careful to never rewrite them out
> of ssa).  Theoretically, it should need only a few changes to gimplification,
> into- and out-of-ssa, and expand, and everything should work.  Unfortunately,
> lot of SSA passes looks on SSA_NAME_VAR.  This seems wrong to me, but
> changing all the places would be very hard.
> 
> However, if we instead put a really minimal DECL node (we allocate only
> one per type, and consisting just of struct tree_common -- 16 bytes) as
> a SSA_NAME_VAR, things are much easier to get working.

I think we should do the complete patch.  I know it's going to be
tedious to fix the uses of SSA_NAME_VAR, but I think that would be much
cleaner, and will also avoid problems where we have a DECL (GVAR_DECL)
that is missing fields that other parts of the compiler might expect a
DECL to have.

-- 
Mark Mitchell
CodeSourcery
[EMAIL PROTECTED]
(650) 331-3385 x713

Reply via email to