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.