OSDN Git Service

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