It seems the only reason we have PHI_ARG_IMM_USE_NODE (and a struct
ssa_use_operand_d) in a phi node argument (struct phi_arg_d) is *just*
so we can iterate over the uses and hand back use_operand_p.

I'm talking, in particular, about:

 struct phi_arg_d GTY(())
 {
  /* imm_use MUST be the first element in struct because we do some
     pointer arithmetic with it.  See phi_arg_index_from_use.  */
  struct ssa_use_operand_d imm_use;
  
}

It's not actually usfeul as an immediate use, since it doesn't actually
point to an immediate use, and because you can get the argument itself
from PHI_ARG_DEF.

This wastes like 20-30 bytes per phi argument on 64 bit platforms. 

If use_operand_p were a structure, or we returned a structure in the
iterator instead of the pointer, we could do without it, because we
could make them up on the fly.

Unless you have a good reason not to do this, i'd rather change the
iterators to return structures (The first thing almost *everyone* does
is call USE_FROM_PTR anyway :P), and remove the imm_use member of phi
arg.

This should save us a noticeable amount of memory.

--Dan



Reply via email to