[LTO] patch: new CALL_EXPR abstractions in builtins.c

Paolo Bonzini paolo.bonzini@lu.unisi.ch
Wed Jun 28 09:02:00 GMT 2006


 >> If I run into some
>> intractable problem with having a tree_exp node with a variably-sized
>> operand array, my backup plan is to store the first few operands in the
>> node and use a TREE_VEC for the overflow; I ran some experiments on
>> some large C programs that indicated that calls with 2 arguments or
>> less account for around 70% of all CALL_EXPRs, so it makes sense to
>> optimize at least the most common cases.
> 
> Its disappointing the way that we now have to speculatively construct
> trees (representing the CALL_EXPRs) to test whether a built-in function
> can be folded.  One of the recent pushes with tree-level optimizers has
> been to move towards APIs that allow us to fold/simplify them without
> having to explicitly construct them first, and thereby leak memory to
> the garbage collector.

I agree with Sandra.  Assuming she doesn't have to rely on backup plans 
(*), which would be quite a pity, the heaviness of TREE_LISTs (24 bytes) 
more than offsets the problem of having to construct a CALL_EXPR.

sizeof (tree_list) == 24
sizeof (tree_exp) == 32 + number of operands

CALL_EXPR has 3 arguments now, so its size is 44 bytes.  I'd expect that 
she needs space for the number of operands, which would grow CALL_EXPRs 
to 48 bytes.

So, allocating a CALL_EXPR with 3 arguments will cost 56 bytes; 
allocating two TREE_LISTs for the argument lists is 48 bytes.
The break even point is quite low: for three arguments (which is the 
case for memcmp, memcpy, and so on) we are already at 60 bytes vs. 72.

Also, following Steven B.'s line of reasoning, this could be also quite 
an interesting memory savings for languages like Fortran or C++ where 
bigger argument lists are quite common.

(*) some grepping for fold_.*CALL_EXPR, build.*CALL_EXPR, and 
TREE_CODE_LENGTH suggests that CALL_EXPR are rarely expected to have 
three arguments, and that switching from TREE_CODE_LENGTH to TREE_LENGTH 
would not be hard.

Paolo



More information about the Gcc-patches mailing list