OSDN Git Service

PR tree-optimization/20773
[pf3gnuchains/gcc-fork.git] / gcc / cselib.c
1 /* Common subexpression elimination library for GNU compiler.
2    Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING.  If not, write to the Free
19 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
20 02110-1301, USA.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "tm.h"
26
27 #include "rtl.h"
28 #include "tm_p.h"
29 #include "regs.h"
30 #include "hard-reg-set.h"
31 #include "flags.h"
32 #include "real.h"
33 #include "insn-config.h"
34 #include "recog.h"
35 #include "function.h"
36 #include "emit-rtl.h"
37 #include "toplev.h"
38 #include "output.h"
39 #include "ggc.h"
40 #include "hashtab.h"
41 #include "cselib.h"
42 #include "params.h"
43 #include "alloc-pool.h"
44 #include "target.h"
45
46 static bool cselib_record_memory;
47 static int entry_and_rtx_equal_p (const void *, const void *);
48 static hashval_t get_value_hash (const void *);
49 static struct elt_list *new_elt_list (struct elt_list *, cselib_val *);
50 static struct elt_loc_list *new_elt_loc_list (struct elt_loc_list *, rtx);
51 static void unchain_one_value (cselib_val *);
52 static void unchain_one_elt_list (struct elt_list **);
53 static void unchain_one_elt_loc_list (struct elt_loc_list **);
54 static int discard_useless_locs (void **, void *);
55 static int discard_useless_values (void **, void *);
56 static void remove_useless_values (void);
57 static rtx wrap_constant (enum machine_mode, rtx);
58 static unsigned int cselib_hash_rtx (rtx, int);
59 static cselib_val *new_cselib_val (unsigned int, enum machine_mode);
60 static void add_mem_for_addr (cselib_val *, cselib_val *, rtx);
61 static cselib_val *cselib_lookup_mem (rtx, int);
62 static void cselib_invalidate_regno (unsigned int, enum machine_mode);
63 static void cselib_invalidate_mem (rtx);
64 static void cselib_record_set (rtx, cselib_val *, cselib_val *);
65 static void cselib_record_sets (rtx);
66
67 /* There are three ways in which cselib can look up an rtx:
68    - for a REG, the reg_values table (which is indexed by regno) is used
69    - for a MEM, we recursively look up its address and then follow the
70      addr_list of that value
71    - for everything else, we compute a hash value and go through the hash
72      table.  Since different rtx's can still have the same hash value,
73      this involves walking the table entries for a given value and comparing
74      the locations of the entries with the rtx we are looking up.  */
75
76 /* A table that enables us to look up elts by their value.  */
77 static htab_t hash_table;
78
79 /* This is a global so we don't have to pass this through every function.
80    It is used in new_elt_loc_list to set SETTING_INSN.  */
81 static rtx cselib_current_insn;
82 static bool cselib_current_insn_in_libcall;
83
84 /* Every new unknown value gets a unique number.  */
85 static unsigned int next_unknown_value;
86
87 /* The number of registers we had when the varrays were last resized.  */
88 static unsigned int cselib_nregs;
89
90 /* Count values without known locations.  Whenever this grows too big, we
91    remove these useless values from the table.  */
92 static int n_useless_values;
93
94 /* Number of useless values before we remove them from the hash table.  */
95 #define MAX_USELESS_VALUES 32
96
97 /* This table maps from register number to values.  It does not
98    contain pointers to cselib_val structures, but rather elt_lists.
99    The purpose is to be able to refer to the same register in
100    different modes.  The first element of the list defines the mode in
101    which the register was set; if the mode is unknown or the value is
102    no longer valid in that mode, ELT will be NULL for the first
103    element.  */
104 static struct elt_list **reg_values;
105 static unsigned int reg_values_size;
106 #define REG_VALUES(i) reg_values[i]
107
108 /* The largest number of hard regs used by any entry added to the
109    REG_VALUES table.  Cleared on each cselib_clear_table() invocation.  */
110 static unsigned int max_value_regs;
111
112 /* Here the set of indices I with REG_VALUES(I) != 0 is saved.  This is used
113    in cselib_clear_table() for fast emptying.  */
114 static unsigned int *used_regs;
115 static unsigned int n_used_regs;
116
117 /* We pass this to cselib_invalidate_mem to invalidate all of
118    memory for a non-const call instruction.  */
119 static GTY(()) rtx callmem;
120
121 /* Set by discard_useless_locs if it deleted the last location of any
122    value.  */
123 static int values_became_useless;
124
125 /* Used as stop element of the containing_mem list so we can check
126    presence in the list by checking the next pointer.  */
127 static cselib_val dummy_val;
128
129 /* Used to list all values that contain memory reference.
130    May or may not contain the useless values - the list is compacted
131    each time memory is invalidated.  */
132 static cselib_val *first_containing_mem = &dummy_val;
133 static alloc_pool elt_loc_list_pool, elt_list_pool, cselib_val_pool, value_pool;
134 \f
135
136 /* Allocate a struct elt_list and fill in its two elements with the
137    arguments.  */
138
139 static inline struct elt_list *
140 new_elt_list (struct elt_list *next, cselib_val *elt)
141 {
142   struct elt_list *el;
143   el = pool_alloc (elt_list_pool);
144   el->next = next;
145   el->elt = elt;
146   return el;
147 }
148
149 /* Allocate a struct elt_loc_list and fill in its two elements with the
150    arguments.  */
151
152 static inline struct elt_loc_list *
153 new_elt_loc_list (struct elt_loc_list *next, rtx loc)
154 {
155   struct elt_loc_list *el;
156   el = pool_alloc (elt_loc_list_pool);
157   el->next = next;
158   el->loc = loc;
159   el->setting_insn = cselib_current_insn;
160   el->in_libcall = cselib_current_insn_in_libcall;
161   return el;
162 }
163
164 /* The elt_list at *PL is no longer needed.  Unchain it and free its
165    storage.  */
166
167 static inline void
168 unchain_one_elt_list (struct elt_list **pl)
169 {
170   struct elt_list *l = *pl;
171
172   *pl = l->next;
173   pool_free (elt_list_pool, l);
174 }
175
176 /* Likewise for elt_loc_lists.  */
177
178 static void
179 unchain_one_elt_loc_list (struct elt_loc_list **pl)
180 {
181   struct elt_loc_list *l = *pl;
182
183   *pl = l->next;
184   pool_free (elt_loc_list_pool, l);
185 }
186
187 /* Likewise for cselib_vals.  This also frees the addr_list associated with
188    V.  */
189
190 static void
191 unchain_one_value (cselib_val *v)
192 {
193   while (v->addr_list)
194     unchain_one_elt_list (&v->addr_list);
195
196   pool_free (cselib_val_pool, v);
197 }
198
199 /* Remove all entries from the hash table.  Also used during
200    initialization.  If CLEAR_ALL isn't set, then only clear the entries
201    which are known to have been used.  */
202
203 void
204 cselib_clear_table (void)
205 {
206   unsigned int i;
207
208   for (i = 0; i < n_used_regs; i++)
209     REG_VALUES (used_regs[i]) = 0;
210
211   max_value_regs = 0;
212
213   n_used_regs = 0;
214
215   htab_empty (hash_table);
216
217   n_useless_values = 0;
218
219   next_unknown_value = 0;
220
221   first_containing_mem = &dummy_val;
222 }
223
224 /* The equality test for our hash table.  The first argument ENTRY is a table
225    element (i.e. a cselib_val), while the second arg X is an rtx.  We know
226    that all callers of htab_find_slot_with_hash will wrap CONST_INTs into a
227    CONST of an appropriate mode.  */
228
229 static int
230 entry_and_rtx_equal_p (const void *entry, const void *x_arg)
231 {
232   struct elt_loc_list *l;
233   const cselib_val *v = (const cselib_val *) entry;
234   rtx x = (rtx) x_arg;
235   enum machine_mode mode = GET_MODE (x);
236
237   gcc_assert (GET_CODE (x) != CONST_INT
238               && (mode != VOIDmode || GET_CODE (x) != CONST_DOUBLE));
239   
240   if (mode != GET_MODE (v->u.val_rtx))
241     return 0;
242
243   /* Unwrap X if necessary.  */
244   if (GET_CODE (x) == CONST
245       && (GET_CODE (XEXP (x, 0)) == CONST_INT
246           || GET_CODE (XEXP (x, 0)) == CONST_DOUBLE))
247     x = XEXP (x, 0);
248
249   /* We don't guarantee that distinct rtx's have different hash values,
250      so we need to do a comparison.  */
251   for (l = v->locs; l; l = l->next)
252     if (rtx_equal_for_cselib_p (l->loc, x))
253       return 1;
254
255   return 0;
256 }
257
258 /* The hash function for our hash table.  The value is always computed with
259    cselib_hash_rtx when adding an element; this function just extracts the
260    hash value from a cselib_val structure.  */
261
262 static hashval_t
263 get_value_hash (const void *entry)
264 {
265   const cselib_val *v = (const cselib_val *) entry;
266   return v->value;
267 }
268
269 /* Return true if X contains a VALUE rtx.  If ONLY_USELESS is set, we
270    only return true for values which point to a cselib_val whose value
271    element has been set to zero, which implies the cselib_val will be
272    removed.  */
273
274 int
275 references_value_p (rtx x, int only_useless)
276 {
277   enum rtx_code code = GET_CODE (x);
278   const char *fmt = GET_RTX_FORMAT (code);
279   int i, j;
280
281   if (GET_CODE (x) == VALUE
282       && (! only_useless || CSELIB_VAL_PTR (x)->locs == 0))
283     return 1;
284
285   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
286     {
287       if (fmt[i] == 'e' && references_value_p (XEXP (x, i), only_useless))
288         return 1;
289       else if (fmt[i] == 'E')
290         for (j = 0; j < XVECLEN (x, i); j++)
291           if (references_value_p (XVECEXP (x, i, j), only_useless))
292             return 1;
293     }
294
295   return 0;
296 }
297
298 /* For all locations found in X, delete locations that reference useless
299    values (i.e. values without any location).  Called through
300    htab_traverse.  */
301
302 static int
303 discard_useless_locs (void **x, void *info ATTRIBUTE_UNUSED)
304 {
305   cselib_val *v = (cselib_val *)*x;
306   struct elt_loc_list **p = &v->locs;
307   int had_locs = v->locs != 0;
308
309   while (*p)
310     {
311       if (references_value_p ((*p)->loc, 1))
312         unchain_one_elt_loc_list (p);
313       else
314         p = &(*p)->next;
315     }
316
317   if (had_locs && v->locs == 0)
318     {
319       n_useless_values++;
320       values_became_useless = 1;
321     }
322   return 1;
323 }
324
325 /* If X is a value with no locations, remove it from the hashtable.  */
326
327 static int
328 discard_useless_values (void **x, void *info ATTRIBUTE_UNUSED)
329 {
330   cselib_val *v = (cselib_val *)*x;
331
332   if (v->locs == 0)
333     {
334       CSELIB_VAL_PTR (v->u.val_rtx) = NULL;
335       htab_clear_slot (hash_table, x);
336       unchain_one_value (v);
337       n_useless_values--;
338     }
339
340   return 1;
341 }
342
343 /* Clean out useless values (i.e. those which no longer have locations
344    associated with them) from the hash table.  */
345
346 static void
347 remove_useless_values (void)
348 {
349   cselib_val **p, *v;
350   /* First pass: eliminate locations that reference the value.  That in
351      turn can make more values useless.  */
352   do
353     {
354       values_became_useless = 0;
355       htab_traverse (hash_table, discard_useless_locs, 0);
356     }
357   while (values_became_useless);
358
359   /* Second pass: actually remove the values.  */
360
361   p = &first_containing_mem;
362   for (v = *p; v != &dummy_val; v = v->next_containing_mem)
363     if (v->locs)
364       {
365         *p = v;
366         p = &(*p)->next_containing_mem;
367       }
368   *p = &dummy_val;
369
370   htab_traverse (hash_table, discard_useless_values, 0);
371
372   gcc_assert (!n_useless_values);
373 }
374
375 /* Return the mode in which a register was last set.  If X is not a
376    register, return its mode.  If the mode in which the register was
377    set is not known, or the value was already clobbered, return
378    VOIDmode.  */
379
380 enum machine_mode
381 cselib_reg_set_mode (rtx x)
382 {
383   if (!REG_P (x))
384     return GET_MODE (x);
385
386   if (REG_VALUES (REGNO (x)) == NULL
387       || REG_VALUES (REGNO (x))->elt == NULL)
388     return VOIDmode;
389
390   return GET_MODE (REG_VALUES (REGNO (x))->elt->u.val_rtx);
391 }
392
393 /* Return nonzero if we can prove that X and Y contain the same value, taking
394    our gathered information into account.  */
395
396 int
397 rtx_equal_for_cselib_p (rtx x, rtx y)
398 {
399   enum rtx_code code;
400   const char *fmt;
401   int i;
402
403   if (REG_P (x) || MEM_P (x))
404     {
405       cselib_val *e = cselib_lookup (x, GET_MODE (x), 0);
406
407       if (e)
408         x = e->u.val_rtx;
409     }
410
411   if (REG_P (y) || MEM_P (y))
412     {
413       cselib_val *e = cselib_lookup (y, GET_MODE (y), 0);
414
415       if (e)
416         y = e->u.val_rtx;
417     }
418
419   if (x == y)
420     return 1;
421
422   if (GET_CODE (x) == VALUE && GET_CODE (y) == VALUE)
423     return CSELIB_VAL_PTR (x) == CSELIB_VAL_PTR (y);
424
425   if (GET_CODE (x) == VALUE)
426     {
427       cselib_val *e = CSELIB_VAL_PTR (x);
428       struct elt_loc_list *l;
429
430       for (l = e->locs; l; l = l->next)
431         {
432           rtx t = l->loc;
433
434           /* Avoid infinite recursion.  */
435           if (REG_P (t) || MEM_P (t))
436             continue;
437           else if (rtx_equal_for_cselib_p (t, y))
438             return 1;
439         }
440
441       return 0;
442     }
443
444   if (GET_CODE (y) == VALUE)
445     {
446       cselib_val *e = CSELIB_VAL_PTR (y);
447       struct elt_loc_list *l;
448
449       for (l = e->locs; l; l = l->next)
450         {
451           rtx t = l->loc;
452
453           if (REG_P (t) || MEM_P (t))
454             continue;
455           else if (rtx_equal_for_cselib_p (x, t))
456             return 1;
457         }
458
459       return 0;
460     }
461
462   if (GET_CODE (x) != GET_CODE (y) || GET_MODE (x) != GET_MODE (y))
463     return 0;
464
465   /* This won't be handled correctly by the code below.  */
466   if (GET_CODE (x) == LABEL_REF)
467     return XEXP (x, 0) == XEXP (y, 0);
468
469   code = GET_CODE (x);
470   fmt = GET_RTX_FORMAT (code);
471
472   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
473     {
474       int j;
475
476       switch (fmt[i])
477         {
478         case 'w':
479           if (XWINT (x, i) != XWINT (y, i))
480             return 0;
481           break;
482
483         case 'n':
484         case 'i':
485           if (XINT (x, i) != XINT (y, i))
486             return 0;
487           break;
488
489         case 'V':
490         case 'E':
491           /* Two vectors must have the same length.  */
492           if (XVECLEN (x, i) != XVECLEN (y, i))
493             return 0;
494
495           /* And the corresponding elements must match.  */
496           for (j = 0; j < XVECLEN (x, i); j++)
497             if (! rtx_equal_for_cselib_p (XVECEXP (x, i, j),
498                                           XVECEXP (y, i, j)))
499               return 0;
500           break;
501
502         case 'e':
503           if (i == 1
504               && targetm.commutative_p (x, UNKNOWN)
505               && rtx_equal_for_cselib_p (XEXP (x, 1), XEXP (y, 0))
506               && rtx_equal_for_cselib_p (XEXP (x, 0), XEXP (y, 1)))
507             return 1;
508           if (! rtx_equal_for_cselib_p (XEXP (x, i), XEXP (y, i)))
509             return 0;
510           break;
511
512         case 'S':
513         case 's':
514           if (strcmp (XSTR (x, i), XSTR (y, i)))
515             return 0;
516           break;
517
518         case 'u':
519           /* These are just backpointers, so they don't matter.  */
520           break;
521
522         case '0':
523         case 't':
524           break;
525
526           /* It is believed that rtx's at this level will never
527              contain anything but integers and other rtx's,
528              except for within LABEL_REFs and SYMBOL_REFs.  */
529         default:
530           gcc_unreachable ();
531         }
532     }
533   return 1;
534 }
535
536 /* We need to pass down the mode of constants through the hash table
537    functions.  For that purpose, wrap them in a CONST of the appropriate
538    mode.  */
539 static rtx
540 wrap_constant (enum machine_mode mode, rtx x)
541 {
542   if (GET_CODE (x) != CONST_INT
543       && (GET_CODE (x) != CONST_DOUBLE || GET_MODE (x) != VOIDmode))
544     return x;
545   gcc_assert (mode != VOIDmode);
546   return gen_rtx_CONST (mode, x);
547 }
548
549 /* Hash an rtx.  Return 0 if we couldn't hash the rtx.
550    For registers and memory locations, we look up their cselib_val structure
551    and return its VALUE element.
552    Possible reasons for return 0 are: the object is volatile, or we couldn't
553    find a register or memory location in the table and CREATE is zero.  If
554    CREATE is nonzero, table elts are created for regs and mem.
555    N.B. this hash function returns the same hash value for RTXes that
556    differ only in the order of operands, thus it is suitable for comparisons
557    that take commutativity into account.
558    If we wanted to also support associative rules, we'd have to use a different
559    strategy to avoid returning spurious 0, e.g. return ~(~0U >> 1) .
560    We used to have a MODE argument for hashing for CONST_INTs, but that
561    didn't make sense, since it caused spurious hash differences between
562     (set (reg:SI 1) (const_int))
563     (plus:SI (reg:SI 2) (reg:SI 1))
564    and
565     (plus:SI (reg:SI 2) (const_int))
566    If the mode is important in any context, it must be checked specifically
567    in a comparison anyway, since relying on hash differences is unsafe.  */
568
569 static unsigned int
570 cselib_hash_rtx (rtx x, int create)
571 {
572   cselib_val *e;
573   int i, j;
574   enum rtx_code code;
575   const char *fmt;
576   unsigned int hash = 0;
577
578   code = GET_CODE (x);
579   hash += (unsigned) code + (unsigned) GET_MODE (x);
580
581   switch (code)
582     {
583     case MEM:
584     case REG:
585       e = cselib_lookup (x, GET_MODE (x), create);
586       if (! e)
587         return 0;
588
589       return e->value;
590
591     case CONST_INT:
592       hash += ((unsigned) CONST_INT << 7) + INTVAL (x);
593       return hash ? hash : (unsigned int) CONST_INT;
594
595     case CONST_DOUBLE:
596       /* This is like the general case, except that it only counts
597          the integers representing the constant.  */
598       hash += (unsigned) code + (unsigned) GET_MODE (x);
599       if (GET_MODE (x) != VOIDmode)
600         hash += real_hash (CONST_DOUBLE_REAL_VALUE (x));
601       else
602         hash += ((unsigned) CONST_DOUBLE_LOW (x)
603                  + (unsigned) CONST_DOUBLE_HIGH (x));
604       return hash ? hash : (unsigned int) CONST_DOUBLE;
605
606     case CONST_VECTOR:
607       {
608         int units;
609         rtx elt;
610
611         units = CONST_VECTOR_NUNITS (x);
612
613         for (i = 0; i < units; ++i)
614           {
615             elt = CONST_VECTOR_ELT (x, i);
616             hash += cselib_hash_rtx (elt, 0);
617           }
618
619         return hash;
620       }
621
622       /* Assume there is only one rtx object for any given label.  */
623     case LABEL_REF:
624       hash
625         += ((unsigned) LABEL_REF << 7) + (unsigned long) XEXP (x, 0);
626       return hash ? hash : (unsigned int) LABEL_REF;
627
628     case SYMBOL_REF:
629       hash
630         += ((unsigned) SYMBOL_REF << 7) + (unsigned long) XSTR (x, 0);
631       return hash ? hash : (unsigned int) SYMBOL_REF;
632
633     case PRE_DEC:
634     case PRE_INC:
635     case POST_DEC:
636     case POST_INC:
637     case POST_MODIFY:
638     case PRE_MODIFY:
639     case PC:
640     case CC0:
641     case CALL:
642     case UNSPEC_VOLATILE:
643       return 0;
644
645     case ASM_OPERANDS:
646       if (MEM_VOLATILE_P (x))
647         return 0;
648
649       break;
650
651     default:
652       break;
653     }
654
655   i = GET_RTX_LENGTH (code) - 1;
656   fmt = GET_RTX_FORMAT (code);
657   for (; i >= 0; i--)
658     {
659       switch (fmt[i])
660         {
661         case 'e':
662           {
663             rtx tem = XEXP (x, i);
664             unsigned int tem_hash = cselib_hash_rtx (tem, create);
665             
666             if (tem_hash == 0)
667               return 0;
668             
669             hash += tem_hash;
670           }
671           break;
672         case 'E':
673           for (j = 0; j < XVECLEN (x, i); j++)
674             {
675               unsigned int tem_hash
676                 = cselib_hash_rtx (XVECEXP (x, i, j), create);
677               
678               if (tem_hash == 0)
679                 return 0;
680               
681               hash += tem_hash;
682             }
683           break;
684
685         case 's':
686           {
687             const unsigned char *p = (const unsigned char *) XSTR (x, i);
688             
689             if (p)
690               while (*p)
691                 hash += *p++;
692             break;
693           }
694           
695         case 'i':
696           hash += XINT (x, i);
697           break;
698
699         case '0':
700         case 't':
701           /* unused */
702           break;
703           
704         default:
705           gcc_unreachable ();
706         }
707     }
708
709   return hash ? hash : 1 + (unsigned int) GET_CODE (x);
710 }
711
712 /* Create a new value structure for VALUE and initialize it.  The mode of the
713    value is MODE.  */
714
715 static inline cselib_val *
716 new_cselib_val (unsigned int value, enum machine_mode mode)
717 {
718   cselib_val *e = pool_alloc (cselib_val_pool);
719
720   gcc_assert (value);
721
722   e->value = value;
723   /* We use an alloc pool to allocate this RTL construct because it
724      accounts for about 8% of the overall memory usage.  We know
725      precisely when we can have VALUE RTXen (when cselib is active)
726      so we don't need to put them in garbage collected memory.
727      ??? Why should a VALUE be an RTX in the first place?  */
728   e->u.val_rtx = pool_alloc (value_pool);
729   memset (e->u.val_rtx, 0, RTX_HDR_SIZE);
730   PUT_CODE (e->u.val_rtx, VALUE);
731   PUT_MODE (e->u.val_rtx, mode);
732   CSELIB_VAL_PTR (e->u.val_rtx) = e;
733   e->addr_list = 0;
734   e->locs = 0;
735   e->next_containing_mem = 0;
736   return e;
737 }
738
739 /* ADDR_ELT is a value that is used as address.  MEM_ELT is the value that
740    contains the data at this address.  X is a MEM that represents the
741    value.  Update the two value structures to represent this situation.  */
742
743 static void
744 add_mem_for_addr (cselib_val *addr_elt, cselib_val *mem_elt, rtx x)
745 {
746   struct elt_loc_list *l;
747
748   /* Avoid duplicates.  */
749   for (l = mem_elt->locs; l; l = l->next)
750     if (MEM_P (l->loc)
751         && CSELIB_VAL_PTR (XEXP (l->loc, 0)) == addr_elt)
752       return;
753
754   addr_elt->addr_list = new_elt_list (addr_elt->addr_list, mem_elt);
755   mem_elt->locs
756     = new_elt_loc_list (mem_elt->locs,
757                         replace_equiv_address_nv (x, addr_elt->u.val_rtx));
758   if (mem_elt->next_containing_mem == NULL)
759     {
760       mem_elt->next_containing_mem = first_containing_mem;
761       first_containing_mem = mem_elt;
762     }
763 }
764
765 /* Subroutine of cselib_lookup.  Return a value for X, which is a MEM rtx.
766    If CREATE, make a new one if we haven't seen it before.  */
767
768 static cselib_val *
769 cselib_lookup_mem (rtx x, int create)
770 {
771   enum machine_mode mode = GET_MODE (x);
772   void **slot;
773   cselib_val *addr;
774   cselib_val *mem_elt;
775   struct elt_list *l;
776
777   if (MEM_VOLATILE_P (x) || mode == BLKmode
778       || !cselib_record_memory
779       || (FLOAT_MODE_P (mode) && flag_float_store))
780     return 0;
781
782   /* Look up the value for the address.  */
783   addr = cselib_lookup (XEXP (x, 0), mode, create);
784   if (! addr)
785     return 0;
786
787   /* Find a value that describes a value of our mode at that address.  */
788   for (l = addr->addr_list; l; l = l->next)
789     if (GET_MODE (l->elt->u.val_rtx) == mode)
790       return l->elt;
791
792   if (! create)
793     return 0;
794
795   mem_elt = new_cselib_val (++next_unknown_value, mode);
796   add_mem_for_addr (addr, mem_elt, x);
797   slot = htab_find_slot_with_hash (hash_table, wrap_constant (mode, x),
798                                    mem_elt->value, INSERT);
799   *slot = mem_elt;
800   return mem_elt;
801 }
802
803 /* Walk rtx X and replace all occurrences of REG and MEM subexpressions
804    with VALUE expressions.  This way, it becomes independent of changes
805    to registers and memory.
806    X isn't actually modified; if modifications are needed, new rtl is
807    allocated.  However, the return value can share rtl with X.  */
808
809 rtx
810 cselib_subst_to_values (rtx x)
811 {
812   enum rtx_code code = GET_CODE (x);
813   const char *fmt = GET_RTX_FORMAT (code);
814   cselib_val *e;
815   struct elt_list *l;
816   rtx copy = x;
817   int i;
818
819   switch (code)
820     {
821     case REG:
822       l = REG_VALUES (REGNO (x));
823       if (l && l->elt == NULL)
824         l = l->next;
825       for (; l; l = l->next)
826         if (GET_MODE (l->elt->u.val_rtx) == GET_MODE (x))
827           return l->elt->u.val_rtx;
828
829       gcc_unreachable ();
830
831     case MEM:
832       e = cselib_lookup_mem (x, 0);
833       if (! e)
834         {
835           /* This happens for autoincrements.  Assign a value that doesn't
836              match any other.  */
837           e = new_cselib_val (++next_unknown_value, GET_MODE (x));
838         }
839       return e->u.val_rtx;
840
841     case CONST_DOUBLE:
842     case CONST_VECTOR:
843     case CONST_INT:
844       return x;
845
846     case POST_INC:
847     case PRE_INC:
848     case POST_DEC:
849     case PRE_DEC:
850     case POST_MODIFY:
851     case PRE_MODIFY:
852       e = new_cselib_val (++next_unknown_value, GET_MODE (x));
853       return e->u.val_rtx;
854
855     default:
856       break;
857     }
858
859   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
860     {
861       if (fmt[i] == 'e')
862         {
863           rtx t = cselib_subst_to_values (XEXP (x, i));
864
865           if (t != XEXP (x, i) && x == copy)
866             copy = shallow_copy_rtx (x);
867
868           XEXP (copy, i) = t;
869         }
870       else if (fmt[i] == 'E')
871         {
872           int j, k;
873
874           for (j = 0; j < XVECLEN (x, i); j++)
875             {
876               rtx t = cselib_subst_to_values (XVECEXP (x, i, j));
877
878               if (t != XVECEXP (x, i, j) && XVEC (x, i) == XVEC (copy, i))
879                 {
880                   if (x == copy)
881                     copy = shallow_copy_rtx (x);
882
883                   XVEC (copy, i) = rtvec_alloc (XVECLEN (x, i));
884                   for (k = 0; k < j; k++)
885                     XVECEXP (copy, i, k) = XVECEXP (x, i, k);
886                 }
887
888               XVECEXP (copy, i, j) = t;
889             }
890         }
891     }
892
893   return copy;
894 }
895
896 /* Look up the rtl expression X in our tables and return the value it has.
897    If CREATE is zero, we return NULL if we don't know the value.  Otherwise,
898    we create a new one if possible, using mode MODE if X doesn't have a mode
899    (i.e. because it's a constant).  */
900
901 cselib_val *
902 cselib_lookup (rtx x, enum machine_mode mode, int create)
903 {
904   void **slot;
905   cselib_val *e;
906   unsigned int hashval;
907
908   if (GET_MODE (x) != VOIDmode)
909     mode = GET_MODE (x);
910
911   if (GET_CODE (x) == VALUE)
912     return CSELIB_VAL_PTR (x);
913
914   if (REG_P (x))
915     {
916       struct elt_list *l;
917       unsigned int i = REGNO (x);
918
919       l = REG_VALUES (i);
920       if (l && l->elt == NULL)
921         l = l->next;
922       for (; l; l = l->next)
923         if (mode == GET_MODE (l->elt->u.val_rtx))
924           return l->elt;
925
926       if (! create)
927         return 0;
928
929       if (i < FIRST_PSEUDO_REGISTER)
930         {
931           unsigned int n = hard_regno_nregs[i][mode];
932
933           if (n > max_value_regs)
934             max_value_regs = n;
935         }
936
937       e = new_cselib_val (++next_unknown_value, GET_MODE (x));
938       e->locs = new_elt_loc_list (e->locs, x);
939       if (REG_VALUES (i) == 0)
940         {
941           /* Maintain the invariant that the first entry of
942              REG_VALUES, if present, must be the value used to set the
943              register, or NULL.  */
944           used_regs[n_used_regs++] = i;
945           REG_VALUES (i) = new_elt_list (REG_VALUES (i), NULL);
946         }
947       REG_VALUES (i)->next = new_elt_list (REG_VALUES (i)->next, e);
948       slot = htab_find_slot_with_hash (hash_table, x, e->value, INSERT);
949       *slot = e;
950       return e;
951     }
952
953   if (MEM_P (x))
954     return cselib_lookup_mem (x, create);
955
956   hashval = cselib_hash_rtx (x, create);
957   /* Can't even create if hashing is not possible.  */
958   if (! hashval)
959     return 0;
960
961   slot = htab_find_slot_with_hash (hash_table, wrap_constant (mode, x),
962                                    hashval, create ? INSERT : NO_INSERT);
963   if (slot == 0)
964     return 0;
965
966   e = (cselib_val *) *slot;
967   if (e)
968     return e;
969
970   e = new_cselib_val (hashval, mode);
971
972   /* We have to fill the slot before calling cselib_subst_to_values:
973      the hash table is inconsistent until we do so, and
974      cselib_subst_to_values will need to do lookups.  */
975   *slot = (void *) e;
976   e->locs = new_elt_loc_list (e->locs, cselib_subst_to_values (x));
977   return e;
978 }
979
980 /* Invalidate any entries in reg_values that overlap REGNO.  This is called
981    if REGNO is changing.  MODE is the mode of the assignment to REGNO, which
982    is used to determine how many hard registers are being changed.  If MODE
983    is VOIDmode, then only REGNO is being changed; this is used when
984    invalidating call clobbered registers across a call.  */
985
986 static void
987 cselib_invalidate_regno (unsigned int regno, enum machine_mode mode)
988 {
989   unsigned int endregno;
990   unsigned int i;
991
992   /* If we see pseudos after reload, something is _wrong_.  */
993   gcc_assert (!reload_completed || regno < FIRST_PSEUDO_REGISTER
994               || reg_renumber[regno] < 0);
995
996   /* Determine the range of registers that must be invalidated.  For
997      pseudos, only REGNO is affected.  For hard regs, we must take MODE
998      into account, and we must also invalidate lower register numbers
999      if they contain values that overlap REGNO.  */
1000   if (regno < FIRST_PSEUDO_REGISTER)
1001     {
1002       gcc_assert (mode != VOIDmode);
1003
1004       if (regno < max_value_regs)
1005         i = 0;
1006       else
1007         i = regno - max_value_regs;
1008
1009       endregno = regno + hard_regno_nregs[regno][mode];
1010     }
1011   else
1012     {
1013       i = regno;
1014       endregno = regno + 1;
1015     }
1016
1017   for (; i < endregno; i++)
1018     {
1019       struct elt_list **l = &REG_VALUES (i);
1020
1021       /* Go through all known values for this reg; if it overlaps the range
1022          we're invalidating, remove the value.  */
1023       while (*l)
1024         {
1025           cselib_val *v = (*l)->elt;
1026           struct elt_loc_list **p;
1027           unsigned int this_last = i;
1028
1029           if (i < FIRST_PSEUDO_REGISTER && v != NULL)
1030             this_last += hard_regno_nregs[i][GET_MODE (v->u.val_rtx)] - 1;
1031
1032           if (this_last < regno || v == NULL)
1033             {
1034               l = &(*l)->next;
1035               continue;
1036             }
1037
1038           /* We have an overlap.  */
1039           if (*l == REG_VALUES (i))
1040             {
1041               /* Maintain the invariant that the first entry of
1042                  REG_VALUES, if present, must be the value used to set
1043                  the register, or NULL.  This is also nice because
1044                  then we won't push the same regno onto user_regs
1045                  multiple times.  */
1046               (*l)->elt = NULL;
1047               l = &(*l)->next;
1048             }
1049           else
1050             unchain_one_elt_list (l);
1051
1052           /* Now, we clear the mapping from value to reg.  It must exist, so
1053              this code will crash intentionally if it doesn't.  */
1054           for (p = &v->locs; ; p = &(*p)->next)
1055             {
1056               rtx x = (*p)->loc;
1057
1058               if (REG_P (x) && REGNO (x) == i)
1059                 {
1060                   unchain_one_elt_loc_list (p);
1061                   break;
1062                 }
1063             }
1064           if (v->locs == 0)
1065             n_useless_values++;
1066         }
1067     }
1068 }
1069 \f
1070 /* Return 1 if X has a value that can vary even between two
1071    executions of the program.  0 means X can be compared reliably
1072    against certain constants or near-constants.  */
1073
1074 static int
1075 cselib_rtx_varies_p (rtx x ATTRIBUTE_UNUSED, int from_alias ATTRIBUTE_UNUSED)
1076 {
1077   /* We actually don't need to verify very hard.  This is because
1078      if X has actually changed, we invalidate the memory anyway,
1079      so assume that all common memory addresses are
1080      invariant.  */
1081   return 0;
1082 }
1083
1084 /* Invalidate any locations in the table which are changed because of a
1085    store to MEM_RTX.  If this is called because of a non-const call
1086    instruction, MEM_RTX is (mem:BLK const0_rtx).  */
1087
1088 static void
1089 cselib_invalidate_mem (rtx mem_rtx)
1090 {
1091   cselib_val **vp, *v, *next;
1092   int num_mems = 0;
1093   rtx mem_addr;
1094
1095   mem_addr = canon_rtx (get_addr (XEXP (mem_rtx, 0)));
1096   mem_rtx = canon_rtx (mem_rtx);
1097
1098   vp = &first_containing_mem;
1099   for (v = *vp; v != &dummy_val; v = next)
1100     {
1101       bool has_mem = false;
1102       struct elt_loc_list **p = &v->locs;
1103       int had_locs = v->locs != 0;
1104
1105       while (*p)
1106         {
1107           rtx x = (*p)->loc;
1108           cselib_val *addr;
1109           struct elt_list **mem_chain;
1110
1111           /* MEMs may occur in locations only at the top level; below
1112              that every MEM or REG is substituted by its VALUE.  */
1113           if (!MEM_P (x))
1114             {
1115               p = &(*p)->next;
1116               continue;
1117             }
1118           if (num_mems < PARAM_VALUE (PARAM_MAX_CSELIB_MEMORY_LOCATIONS)
1119               && ! canon_true_dependence (mem_rtx, GET_MODE (mem_rtx), mem_addr,
1120                                           x, cselib_rtx_varies_p))
1121             {
1122               has_mem = true;
1123               num_mems++;
1124               p = &(*p)->next;
1125               continue;
1126             }
1127
1128           /* This one overlaps.  */
1129           /* We must have a mapping from this MEM's address to the
1130              value (E).  Remove that, too.  */
1131           addr = cselib_lookup (XEXP (x, 0), VOIDmode, 0);
1132           mem_chain = &addr->addr_list;
1133           for (;;)
1134             {
1135               if ((*mem_chain)->elt == v)
1136                 {
1137                   unchain_one_elt_list (mem_chain);
1138                   break;
1139                 }
1140
1141               mem_chain = &(*mem_chain)->next;
1142             }
1143
1144           unchain_one_elt_loc_list (p);
1145         }
1146
1147       if (had_locs && v->locs == 0)
1148         n_useless_values++;
1149
1150       next = v->next_containing_mem;
1151       if (has_mem)
1152         {
1153           *vp = v;
1154           vp = &(*vp)->next_containing_mem;
1155         }
1156       else
1157         v->next_containing_mem = NULL;
1158     }
1159   *vp = &dummy_val;
1160 }
1161
1162 /* Invalidate DEST, which is being assigned to or clobbered.  */
1163
1164 void
1165 cselib_invalidate_rtx (rtx dest)
1166 {
1167   while (GET_CODE (dest) == SUBREG
1168          || GET_CODE (dest) == ZERO_EXTRACT
1169          || GET_CODE (dest) == STRICT_LOW_PART)
1170     dest = XEXP (dest, 0);
1171
1172   if (REG_P (dest))
1173     cselib_invalidate_regno (REGNO (dest), GET_MODE (dest));
1174   else if (MEM_P (dest))
1175     cselib_invalidate_mem (dest);
1176
1177   /* Some machines don't define AUTO_INC_DEC, but they still use push
1178      instructions.  We need to catch that case here in order to
1179      invalidate the stack pointer correctly.  Note that invalidating
1180      the stack pointer is different from invalidating DEST.  */
1181   if (push_operand (dest, GET_MODE (dest)))
1182     cselib_invalidate_rtx (stack_pointer_rtx);
1183 }
1184
1185 /* A wrapper for cselib_invalidate_rtx to be called via note_stores.  */
1186
1187 static void
1188 cselib_invalidate_rtx_note_stores (rtx dest, rtx ignore ATTRIBUTE_UNUSED,
1189                                    void *data ATTRIBUTE_UNUSED)
1190 {
1191   cselib_invalidate_rtx (dest);
1192 }
1193
1194 /* Record the result of a SET instruction.  DEST is being set; the source
1195    contains the value described by SRC_ELT.  If DEST is a MEM, DEST_ADDR_ELT
1196    describes its address.  */
1197
1198 static void
1199 cselib_record_set (rtx dest, cselib_val *src_elt, cselib_val *dest_addr_elt)
1200 {
1201   int dreg = REG_P (dest) ? (int) REGNO (dest) : -1;
1202
1203   if (src_elt == 0 || side_effects_p (dest))
1204     return;
1205
1206   if (dreg >= 0)
1207     {
1208       if (dreg < FIRST_PSEUDO_REGISTER)
1209         {
1210           unsigned int n = hard_regno_nregs[dreg][GET_MODE (dest)];
1211
1212           if (n > max_value_regs)
1213             max_value_regs = n;
1214         }
1215
1216       if (REG_VALUES (dreg) == 0)
1217         {
1218           used_regs[n_used_regs++] = dreg;
1219           REG_VALUES (dreg) = new_elt_list (REG_VALUES (dreg), src_elt);
1220         }
1221       else
1222         {
1223           /* The register should have been invalidated.  */
1224           gcc_assert (REG_VALUES (dreg)->elt == 0);
1225           REG_VALUES (dreg)->elt = src_elt;
1226         }
1227
1228       if (src_elt->locs == 0)
1229         n_useless_values--;
1230       src_elt->locs = new_elt_loc_list (src_elt->locs, dest);
1231     }
1232   else if (MEM_P (dest) && dest_addr_elt != 0
1233            && cselib_record_memory)
1234     {
1235       if (src_elt->locs == 0)
1236         n_useless_values--;
1237       add_mem_for_addr (dest_addr_elt, src_elt, dest);
1238     }
1239 }
1240
1241 /* Describe a single set that is part of an insn.  */
1242 struct set
1243 {
1244   rtx src;
1245   rtx dest;
1246   cselib_val *src_elt;
1247   cselib_val *dest_addr_elt;
1248 };
1249
1250 /* There is no good way to determine how many elements there can be
1251    in a PARALLEL.  Since it's fairly cheap, use a really large number.  */
1252 #define MAX_SETS (FIRST_PSEUDO_REGISTER * 2)
1253
1254 /* Record the effects of any sets in INSN.  */
1255 static void
1256 cselib_record_sets (rtx insn)
1257 {
1258   int n_sets = 0;
1259   int i;
1260   struct set sets[MAX_SETS];
1261   rtx body = PATTERN (insn);
1262   rtx cond = 0;
1263
1264   body = PATTERN (insn);
1265   if (GET_CODE (body) == COND_EXEC)
1266     {
1267       cond = COND_EXEC_TEST (body);
1268       body = COND_EXEC_CODE (body);
1269     }
1270
1271   /* Find all sets.  */
1272   if (GET_CODE (body) == SET)
1273     {
1274       sets[0].src = SET_SRC (body);
1275       sets[0].dest = SET_DEST (body);
1276       n_sets = 1;
1277     }
1278   else if (GET_CODE (body) == PARALLEL)
1279     {
1280       /* Look through the PARALLEL and record the values being
1281          set, if possible.  Also handle any CLOBBERs.  */
1282       for (i = XVECLEN (body, 0) - 1; i >= 0; --i)
1283         {
1284           rtx x = XVECEXP (body, 0, i);
1285
1286           if (GET_CODE (x) == SET)
1287             {
1288               sets[n_sets].src = SET_SRC (x);
1289               sets[n_sets].dest = SET_DEST (x);
1290               n_sets++;
1291             }
1292         }
1293     }
1294
1295   /* Look up the values that are read.  Do this before invalidating the
1296      locations that are written.  */
1297   for (i = 0; i < n_sets; i++)
1298     {
1299       rtx dest = sets[i].dest;
1300
1301       /* A STRICT_LOW_PART can be ignored; we'll record the equivalence for
1302          the low part after invalidating any knowledge about larger modes.  */
1303       if (GET_CODE (sets[i].dest) == STRICT_LOW_PART)
1304         sets[i].dest = dest = XEXP (dest, 0);
1305
1306       /* We don't know how to record anything but REG or MEM.  */
1307       if (REG_P (dest)
1308           || (MEM_P (dest) && cselib_record_memory))
1309         {
1310           rtx src = sets[i].src;
1311           if (cond)
1312             src = gen_rtx_IF_THEN_ELSE (GET_MODE (src), cond, src, dest);
1313           sets[i].src_elt = cselib_lookup (src, GET_MODE (dest), 1);
1314           if (MEM_P (dest))
1315             sets[i].dest_addr_elt = cselib_lookup (XEXP (dest, 0), Pmode, 1);
1316           else
1317             sets[i].dest_addr_elt = 0;
1318         }
1319     }
1320
1321   /* Invalidate all locations written by this insn.  Note that the elts we
1322      looked up in the previous loop aren't affected, just some of their
1323      locations may go away.  */
1324   note_stores (body, cselib_invalidate_rtx_note_stores, NULL);
1325
1326   /* If this is an asm, look for duplicate sets.  This can happen when the
1327      user uses the same value as an output multiple times.  This is valid
1328      if the outputs are not actually used thereafter.  Treat this case as
1329      if the value isn't actually set.  We do this by smashing the destination
1330      to pc_rtx, so that we won't record the value later.  */
1331   if (n_sets >= 2 && asm_noperands (body) >= 0)
1332     {
1333       for (i = 0; i < n_sets; i++)
1334         {
1335           rtx dest = sets[i].dest;
1336           if (REG_P (dest) || MEM_P (dest))
1337             {
1338               int j;
1339               for (j = i + 1; j < n_sets; j++)
1340                 if (rtx_equal_p (dest, sets[j].dest))
1341                   {
1342                     sets[i].dest = pc_rtx;
1343                     sets[j].dest = pc_rtx;
1344                   }
1345             }
1346         }
1347     }
1348
1349   /* Now enter the equivalences in our tables.  */
1350   for (i = 0; i < n_sets; i++)
1351     {
1352       rtx dest = sets[i].dest;
1353       if (REG_P (dest)
1354           || (MEM_P (dest) && cselib_record_memory))
1355         cselib_record_set (dest, sets[i].src_elt, sets[i].dest_addr_elt);
1356     }
1357 }
1358
1359 /* Record the effects of INSN.  */
1360
1361 void
1362 cselib_process_insn (rtx insn)
1363 {
1364   int i;
1365   rtx x;
1366
1367   if (find_reg_note (insn, REG_LIBCALL, NULL))
1368     cselib_current_insn_in_libcall = true;
1369   cselib_current_insn = insn;
1370
1371   /* Forget everything at a CODE_LABEL, a volatile asm, or a setjmp.  */
1372   if (LABEL_P (insn)
1373       || (CALL_P (insn)
1374           && find_reg_note (insn, REG_SETJMP, NULL))
1375       || (NONJUMP_INSN_P (insn)
1376           && GET_CODE (PATTERN (insn)) == ASM_OPERANDS
1377           && MEM_VOLATILE_P (PATTERN (insn))))
1378     {
1379       if (find_reg_note (insn, REG_RETVAL, NULL))
1380         cselib_current_insn_in_libcall = false;
1381       cselib_clear_table ();
1382       return;
1383     }
1384
1385   if (! INSN_P (insn))
1386     {
1387       if (find_reg_note (insn, REG_RETVAL, NULL))
1388         cselib_current_insn_in_libcall = false;
1389       cselib_current_insn = 0;
1390       return;
1391     }
1392
1393   /* If this is a call instruction, forget anything stored in a
1394      call clobbered register, or, if this is not a const call, in
1395      memory.  */
1396   if (CALL_P (insn))
1397     {
1398       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1399         if (call_used_regs[i]
1400             || (REG_VALUES (i) && REG_VALUES (i)->elt
1401                 && HARD_REGNO_CALL_PART_CLOBBERED (i, 
1402                       GET_MODE (REG_VALUES (i)->elt->u.val_rtx))))
1403           cselib_invalidate_regno (i, reg_raw_mode[i]);
1404
1405       if (! CONST_OR_PURE_CALL_P (insn))
1406         cselib_invalidate_mem (callmem);
1407     }
1408
1409   cselib_record_sets (insn);
1410
1411 #ifdef AUTO_INC_DEC
1412   /* Clobber any registers which appear in REG_INC notes.  We
1413      could keep track of the changes to their values, but it is
1414      unlikely to help.  */
1415   for (x = REG_NOTES (insn); x; x = XEXP (x, 1))
1416     if (REG_NOTE_KIND (x) == REG_INC)
1417       cselib_invalidate_rtx (XEXP (x, 0));
1418 #endif
1419
1420   /* Look for any CLOBBERs in CALL_INSN_FUNCTION_USAGE, but only
1421      after we have processed the insn.  */
1422   if (CALL_P (insn))
1423     for (x = CALL_INSN_FUNCTION_USAGE (insn); x; x = XEXP (x, 1))
1424       if (GET_CODE (XEXP (x, 0)) == CLOBBER)
1425         cselib_invalidate_rtx (XEXP (XEXP (x, 0), 0));
1426
1427   if (find_reg_note (insn, REG_RETVAL, NULL))
1428     cselib_current_insn_in_libcall = false;
1429   cselib_current_insn = 0;
1430
1431   if (n_useless_values > MAX_USELESS_VALUES)
1432     remove_useless_values ();
1433 }
1434
1435 /* Initialize cselib for one pass.  The caller must also call
1436    init_alias_analysis.  */
1437
1438 void
1439 cselib_init (bool record_memory)
1440 {
1441   elt_list_pool = create_alloc_pool ("elt_list", 
1442                                      sizeof (struct elt_list), 10);
1443   elt_loc_list_pool = create_alloc_pool ("elt_loc_list", 
1444                                          sizeof (struct elt_loc_list), 10);
1445   cselib_val_pool = create_alloc_pool ("cselib_val_list", 
1446                                        sizeof (cselib_val), 10);
1447   value_pool = create_alloc_pool ("value", 
1448                                   RTX_SIZE (VALUE), 100);
1449   cselib_record_memory = record_memory;
1450   /* This is only created once.  */
1451   if (! callmem)
1452     callmem = gen_rtx_MEM (BLKmode, const0_rtx);
1453
1454   cselib_nregs = max_reg_num ();
1455
1456   /* We preserve reg_values to allow expensive clearing of the whole thing.
1457      Reallocate it however if it happens to be too large.  */
1458   if (!reg_values || reg_values_size < cselib_nregs
1459       || (reg_values_size > 10 && reg_values_size > cselib_nregs * 4))
1460     {
1461       if (reg_values)
1462         free (reg_values);
1463       /* Some space for newly emit instructions so we don't end up
1464          reallocating in between passes.  */
1465       reg_values_size = cselib_nregs + (63 + cselib_nregs) / 16;
1466       reg_values = xcalloc (reg_values_size, sizeof (reg_values));
1467     }
1468   used_regs = xmalloc (sizeof (*used_regs) * cselib_nregs);
1469   n_used_regs = 0;
1470   hash_table = htab_create (31, get_value_hash, entry_and_rtx_equal_p, NULL);
1471   cselib_current_insn_in_libcall = false;
1472 }
1473
1474 /* Called when the current user is done with cselib.  */
1475
1476 void
1477 cselib_finish (void)
1478 {
1479   free_alloc_pool (elt_list_pool);
1480   free_alloc_pool (elt_loc_list_pool);
1481   free_alloc_pool (cselib_val_pool);
1482   free_alloc_pool (value_pool);
1483   cselib_clear_table ();
1484   htab_delete (hash_table);
1485   free (used_regs);
1486   used_regs = 0;
1487   hash_table = 0;
1488   n_useless_values = 0;
1489   next_unknown_value = 0;
1490 }
1491
1492 #include "gt-cselib.h"