Attached is the second patch to speed up cse_reg_info maintenance.
A collection of cse_reg_info instances forms a mapping from a register
number to a quantity number among other things. Since this mapping is
from an integer to a struct, you might guess that it is implemented as
an array indexed by a register number, but that's not the case.
Instead, CSE has a fixed-sized hash table which maps a register number
to a linked list of cse_reg_info entries with the same hash key. If
you are looking for information associated with a register, you have
to go through one of these collision chains.
This patch simplifies all this by implementing the collection as a
single big array of cse_reg_info called cse_reg_info_table indexed by
a register number. For example, if you are looking for a quantity
number associated with (reg:xx 37), you would say
cse_reg_info_table[37].reg_qty
It's probably reasonable to assume that the set of registers numbers
is compact. I expect most dead code to be eliminated at tree level.
Also, most constants should be propagated at tree level, so we
shouldn't have many pseudo registers that are created but gone due to
DCE, constant propagation, etc. This property should even improve the
locality.