OSDN Git Service

2009-10-13 Richard Guenther <rguenther@suse.de>
[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, 2006, 2007, 2008, 2009
4    Free Software Foundation, Inc.
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
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 "tree-pass.h"
42 #include "cselib.h"
43 #include "params.h"
44 #include "alloc-pool.h"
45 #include "target.h"
46
47 static bool cselib_record_memory;
48 static int entry_and_rtx_equal_p (const void *, const void *);
49 static hashval_t get_value_hash (const void *);
50 static struct elt_list *new_elt_list (struct elt_list *, cselib_val *);
51 static struct elt_loc_list *new_elt_loc_list (struct elt_loc_list *, rtx);
52 static void unchain_one_value (cselib_val *);
53 static void unchain_one_elt_list (struct elt_list **);
54 static void unchain_one_elt_loc_list (struct elt_loc_list **);
55 static int discard_useless_locs (void **, void *);
56 static int discard_useless_values (void **, void *);
57 static void remove_useless_values (void);
58 static unsigned int cselib_hash_rtx (rtx, int);
59 static cselib_val *new_cselib_val (unsigned int, enum machine_mode, rtx);
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 struct expand_value_data
68 {
69   bitmap regs_active;
70   cselib_expand_callback callback;
71   void *callback_arg;
72 };
73
74 static rtx cselib_expand_value_rtx_1 (rtx, struct expand_value_data *, int);
75
76 /* There are three ways in which cselib can look up an rtx:
77    - for a REG, the reg_values table (which is indexed by regno) is used
78    - for a MEM, we recursively look up its address and then follow the
79      addr_list of that value
80    - for everything else, we compute a hash value and go through the hash
81      table.  Since different rtx's can still have the same hash value,
82      this involves walking the table entries for a given value and comparing
83      the locations of the entries with the rtx we are looking up.  */
84
85 /* A table that enables us to look up elts by their value.  */
86 static htab_t cselib_hash_table;
87
88 /* This is a global so we don't have to pass this through every function.
89    It is used in new_elt_loc_list to set SETTING_INSN.  */
90 static rtx cselib_current_insn;
91
92 /* Every new unknown value gets a unique number.  */
93 static unsigned int next_unknown_value;
94
95 /* The number of registers we had when the varrays were last resized.  */
96 static unsigned int cselib_nregs;
97
98 /* Count values without known locations.  Whenever this grows too big, we
99    remove these useless values from the table.  */
100 static int n_useless_values;
101
102 /* Number of useless values before we remove them from the hash table.  */
103 #define MAX_USELESS_VALUES 32
104
105 /* This table maps from register number to values.  It does not
106    contain pointers to cselib_val structures, but rather elt_lists.
107    The purpose is to be able to refer to the same register in
108    different modes.  The first element of the list defines the mode in
109    which the register was set; if the mode is unknown or the value is
110    no longer valid in that mode, ELT will be NULL for the first
111    element.  */
112 static struct elt_list **reg_values;
113 static unsigned int reg_values_size;
114 #define REG_VALUES(i) reg_values[i]
115
116 /* The largest number of hard regs used by any entry added to the
117    REG_VALUES table.  Cleared on each cselib_clear_table() invocation.  */
118 static unsigned int max_value_regs;
119
120 /* Here the set of indices I with REG_VALUES(I) != 0 is saved.  This is used
121    in cselib_clear_table() for fast emptying.  */
122 static unsigned int *used_regs;
123 static unsigned int n_used_regs;
124
125 /* We pass this to cselib_invalidate_mem to invalidate all of
126    memory for a non-const call instruction.  */
127 static GTY(()) rtx callmem;
128
129 /* Set by discard_useless_locs if it deleted the last location of any
130    value.  */
131 static int values_became_useless;
132
133 /* Used as stop element of the containing_mem list so we can check
134    presence in the list by checking the next pointer.  */
135 static cselib_val dummy_val;
136
137 /* Used to list all values that contain memory reference.
138    May or may not contain the useless values - the list is compacted
139    each time memory is invalidated.  */
140 static cselib_val *first_containing_mem = &dummy_val;
141 static alloc_pool elt_loc_list_pool, elt_list_pool, cselib_val_pool, value_pool;
142
143 /* If nonnull, cselib will call this function before freeing useless
144    VALUEs.  A VALUE is deemed useless if its "locs" field is null.  */
145 void (*cselib_discard_hook) (cselib_val *);
146
147 /* If nonnull, cselib will call this function before recording sets or
148    even clobbering outputs of INSN.  All the recorded sets will be
149    represented in the array sets[n_sets].  new_val_min can be used to
150    tell whether values present in sets are introduced by this
151    instruction.  */
152 void (*cselib_record_sets_hook) (rtx insn, struct cselib_set *sets,
153                                  int n_sets);
154
155 #define PRESERVED_VALUE_P(RTX) \
156   (RTL_FLAG_CHECK1("PRESERVED_VALUE_P", (RTX), VALUE)->unchanging)
157 #define LONG_TERM_PRESERVED_VALUE_P(RTX) \
158   (RTL_FLAG_CHECK1("LONG_TERM_PRESERVED_VALUE_P", (RTX), VALUE)->in_struct)
159
160 \f
161
162 /* Allocate a struct elt_list and fill in its two elements with the
163    arguments.  */
164
165 static inline struct elt_list *
166 new_elt_list (struct elt_list *next, cselib_val *elt)
167 {
168   struct elt_list *el;
169   el = (struct elt_list *) pool_alloc (elt_list_pool);
170   el->next = next;
171   el->elt = elt;
172   return el;
173 }
174
175 /* Allocate a struct elt_loc_list and fill in its two elements with the
176    arguments.  */
177
178 static inline struct elt_loc_list *
179 new_elt_loc_list (struct elt_loc_list *next, rtx loc)
180 {
181   struct elt_loc_list *el;
182   el = (struct elt_loc_list *) pool_alloc (elt_loc_list_pool);
183   el->next = next;
184   el->loc = loc;
185   el->setting_insn = cselib_current_insn;
186   return el;
187 }
188
189 /* The elt_list at *PL is no longer needed.  Unchain it and free its
190    storage.  */
191
192 static inline void
193 unchain_one_elt_list (struct elt_list **pl)
194 {
195   struct elt_list *l = *pl;
196
197   *pl = l->next;
198   pool_free (elt_list_pool, l);
199 }
200
201 /* Likewise for elt_loc_lists.  */
202
203 static void
204 unchain_one_elt_loc_list (struct elt_loc_list **pl)
205 {
206   struct elt_loc_list *l = *pl;
207
208   *pl = l->next;
209   pool_free (elt_loc_list_pool, l);
210 }
211
212 /* Likewise for cselib_vals.  This also frees the addr_list associated with
213    V.  */
214
215 static void
216 unchain_one_value (cselib_val *v)
217 {
218   while (v->addr_list)
219     unchain_one_elt_list (&v->addr_list);
220
221   pool_free (cselib_val_pool, v);
222 }
223
224 /* Remove all entries from the hash table.  Also used during
225    initialization.  */
226
227 void
228 cselib_clear_table (void)
229 {
230   cselib_reset_table_with_next_value (0);
231 }
232
233 /* Remove all entries from the hash table, arranging for the next
234    value to be numbered NUM.  */
235
236 void
237 cselib_reset_table_with_next_value (unsigned int num)
238 {
239   unsigned int i;
240
241   for (i = 0; i < n_used_regs; i++)
242     REG_VALUES (used_regs[i]) = 0;
243
244   max_value_regs = 0;
245
246   n_used_regs = 0;
247
248   /* ??? Preserve constants?  */
249   htab_empty (cselib_hash_table);
250
251   n_useless_values = 0;
252
253   next_unknown_value = num;
254
255   first_containing_mem = &dummy_val;
256 }
257
258 /* Return the number of the next value that will be generated.  */
259
260 unsigned int
261 cselib_get_next_unknown_value (void)
262 {
263   return next_unknown_value;
264 }
265
266 /* The equality test for our hash table.  The first argument ENTRY is a table
267    element (i.e. a cselib_val), while the second arg X is an rtx.  We know
268    that all callers of htab_find_slot_with_hash will wrap CONST_INTs into a
269    CONST of an appropriate mode.  */
270
271 static int
272 entry_and_rtx_equal_p (const void *entry, const void *x_arg)
273 {
274   struct elt_loc_list *l;
275   const cselib_val *const v = (const cselib_val *) entry;
276   rtx x = CONST_CAST_RTX ((const_rtx)x_arg);
277   enum machine_mode mode = GET_MODE (x);
278
279   gcc_assert (!CONST_INT_P (x) && GET_CODE (x) != CONST_FIXED
280               && (mode != VOIDmode || GET_CODE (x) != CONST_DOUBLE));
281   
282   if (mode != GET_MODE (v->val_rtx))
283     return 0;
284
285   /* Unwrap X if necessary.  */
286   if (GET_CODE (x) == CONST
287       && (CONST_INT_P (XEXP (x, 0))
288           || GET_CODE (XEXP (x, 0)) == CONST_FIXED
289           || GET_CODE (XEXP (x, 0)) == CONST_DOUBLE))
290     x = XEXP (x, 0);
291
292   /* We don't guarantee that distinct rtx's have different hash values,
293      so we need to do a comparison.  */
294   for (l = v->locs; l; l = l->next)
295     if (rtx_equal_for_cselib_p (l->loc, x))
296       return 1;
297
298   return 0;
299 }
300
301 /* The hash function for our hash table.  The value is always computed with
302    cselib_hash_rtx when adding an element; this function just extracts the
303    hash value from a cselib_val structure.  */
304
305 static hashval_t
306 get_value_hash (const void *entry)
307 {
308   const cselib_val *const v = (const cselib_val *) entry;
309   return v->value;
310 }
311
312 /* Return true if X contains a VALUE rtx.  If ONLY_USELESS is set, we
313    only return true for values which point to a cselib_val whose value
314    element has been set to zero, which implies the cselib_val will be
315    removed.  */
316
317 int
318 references_value_p (const_rtx x, int only_useless)
319 {
320   const enum rtx_code code = GET_CODE (x);
321   const char *fmt = GET_RTX_FORMAT (code);
322   int i, j;
323
324   if (GET_CODE (x) == VALUE
325       && (! only_useless || CSELIB_VAL_PTR (x)->locs == 0))
326     return 1;
327
328   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
329     {
330       if (fmt[i] == 'e' && references_value_p (XEXP (x, i), only_useless))
331         return 1;
332       else if (fmt[i] == 'E')
333         for (j = 0; j < XVECLEN (x, i); j++)
334           if (references_value_p (XVECEXP (x, i, j), only_useless))
335             return 1;
336     }
337
338   return 0;
339 }
340
341 /* For all locations found in X, delete locations that reference useless
342    values (i.e. values without any location).  Called through
343    htab_traverse.  */
344
345 static int
346 discard_useless_locs (void **x, void *info ATTRIBUTE_UNUSED)
347 {
348   cselib_val *v = (cselib_val *)*x;
349   struct elt_loc_list **p = &v->locs;
350   int had_locs = v->locs != 0;
351
352   while (*p)
353     {
354       if (references_value_p ((*p)->loc, 1))
355         unchain_one_elt_loc_list (p);
356       else
357         p = &(*p)->next;
358     }
359
360   if (had_locs && v->locs == 0 && !PRESERVED_VALUE_P (v->val_rtx))
361     {
362       n_useless_values++;
363       values_became_useless = 1;
364     }
365   return 1;
366 }
367
368 /* If X is a value with no locations, remove it from the hashtable.  */
369
370 static int
371 discard_useless_values (void **x, void *info ATTRIBUTE_UNUSED)
372 {
373   cselib_val *v = (cselib_val *)*x;
374
375   if (v->locs == 0 && !PRESERVED_VALUE_P (v->val_rtx))
376     {
377       if (cselib_discard_hook)
378         cselib_discard_hook (v);
379
380       CSELIB_VAL_PTR (v->val_rtx) = NULL;
381       htab_clear_slot (cselib_hash_table, x);
382       unchain_one_value (v);
383       n_useless_values--;
384     }
385
386   return 1;
387 }
388
389 /* Clean out useless values (i.e. those which no longer have locations
390    associated with them) from the hash table.  */
391
392 static void
393 remove_useless_values (void)
394 {
395   cselib_val **p, *v;
396   /* First pass: eliminate locations that reference the value.  That in
397      turn can make more values useless.  */
398   do
399     {
400       values_became_useless = 0;
401       htab_traverse (cselib_hash_table, discard_useless_locs, 0);
402     }
403   while (values_became_useless);
404
405   /* Second pass: actually remove the values.  */
406
407   p = &first_containing_mem;
408   for (v = *p; v != &dummy_val; v = v->next_containing_mem)
409     if (v->locs)
410       {
411         *p = v;
412         p = &(*p)->next_containing_mem;
413       }
414   *p = &dummy_val;
415
416   htab_traverse (cselib_hash_table, discard_useless_values, 0);
417
418   gcc_assert (!n_useless_values);
419 }
420
421 /* Arrange for a value to not be removed from the hash table even if
422    it becomes useless.  */
423
424 void
425 cselib_preserve_value (cselib_val *v)
426 {
427   PRESERVED_VALUE_P (v->val_rtx) = 1;
428 }
429
430 /* Test whether a value is preserved.  */
431
432 bool
433 cselib_preserved_value_p (cselib_val *v)
434 {
435   return PRESERVED_VALUE_P (v->val_rtx);
436 }
437
438 /* Mark preserved values as preserved for the long term.  */
439
440 static int
441 cselib_preserve_definitely (void **slot, void *info ATTRIBUTE_UNUSED)
442 {
443   cselib_val *v = (cselib_val *)*slot;
444
445   if (PRESERVED_VALUE_P (v->val_rtx)
446       && !LONG_TERM_PRESERVED_VALUE_P (v->val_rtx))
447     LONG_TERM_PRESERVED_VALUE_P (v->val_rtx) = true;
448
449   return 1;
450 }
451
452 /* Clear the preserve marks for values not preserved for the long
453    term.  */
454
455 static int
456 cselib_clear_preserve (void **slot, void *info ATTRIBUTE_UNUSED)
457 {
458   cselib_val *v = (cselib_val *)*slot;
459
460   if (PRESERVED_VALUE_P (v->val_rtx)
461       && !LONG_TERM_PRESERVED_VALUE_P (v->val_rtx))
462     {
463       PRESERVED_VALUE_P (v->val_rtx) = false;
464       if (!v->locs)
465         n_useless_values++;
466     }
467
468   return 1;
469 }
470
471 /* Clean all non-constant expressions in the hash table, but retain
472    their values.  */
473
474 void
475 cselib_preserve_only_values (bool retain)
476 {
477   int i;
478
479   htab_traverse (cselib_hash_table,
480                  retain ? cselib_preserve_definitely : cselib_clear_preserve,
481                  NULL);
482
483   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
484     cselib_invalidate_regno (i, reg_raw_mode[i]);
485
486   cselib_invalidate_mem (callmem);
487
488   remove_useless_values ();
489
490   gcc_assert (first_containing_mem == &dummy_val);
491 }
492
493 /* Return the mode in which a register was last set.  If X is not a
494    register, return its mode.  If the mode in which the register was
495    set is not known, or the value was already clobbered, return
496    VOIDmode.  */
497
498 enum machine_mode
499 cselib_reg_set_mode (const_rtx x)
500 {
501   if (!REG_P (x))
502     return GET_MODE (x);
503
504   if (REG_VALUES (REGNO (x)) == NULL
505       || REG_VALUES (REGNO (x))->elt == NULL)
506     return VOIDmode;
507
508   return GET_MODE (REG_VALUES (REGNO (x))->elt->val_rtx);
509 }
510
511 /* Return nonzero if we can prove that X and Y contain the same value, taking
512    our gathered information into account.  */
513
514 int
515 rtx_equal_for_cselib_p (rtx x, rtx y)
516 {
517   enum rtx_code code;
518   const char *fmt;
519   int i;
520
521   if (REG_P (x) || MEM_P (x))
522     {
523       cselib_val *e = cselib_lookup (x, GET_MODE (x), 0);
524
525       if (e)
526         x = e->val_rtx;
527     }
528
529   if (REG_P (y) || MEM_P (y))
530     {
531       cselib_val *e = cselib_lookup (y, GET_MODE (y), 0);
532
533       if (e)
534         y = e->val_rtx;
535     }
536
537   if (x == y)
538     return 1;
539
540   if (GET_CODE (x) == VALUE && GET_CODE (y) == VALUE)
541     return CSELIB_VAL_PTR (x) == CSELIB_VAL_PTR (y);
542
543   if (GET_CODE (x) == VALUE)
544     {
545       cselib_val *e = CSELIB_VAL_PTR (x);
546       struct elt_loc_list *l;
547
548       for (l = e->locs; l; l = l->next)
549         {
550           rtx t = l->loc;
551
552           /* Avoid infinite recursion.  */
553           if (REG_P (t) || MEM_P (t))
554             continue;
555           else if (rtx_equal_for_cselib_p (t, y))
556             return 1;
557         }
558
559       return 0;
560     }
561
562   if (GET_CODE (y) == VALUE)
563     {
564       cselib_val *e = CSELIB_VAL_PTR (y);
565       struct elt_loc_list *l;
566
567       for (l = e->locs; l; l = l->next)
568         {
569           rtx t = l->loc;
570
571           if (REG_P (t) || MEM_P (t))
572             continue;
573           else if (rtx_equal_for_cselib_p (x, t))
574             return 1;
575         }
576
577       return 0;
578     }
579
580   if (GET_CODE (x) != GET_CODE (y) || GET_MODE (x) != GET_MODE (y))
581     return 0;
582
583   /* These won't be handled correctly by the code below.  */
584   switch (GET_CODE (x))
585     {
586     case CONST_DOUBLE:
587     case CONST_FIXED:
588     case DEBUG_EXPR:
589       return 0;
590
591     case LABEL_REF:
592       return XEXP (x, 0) == XEXP (y, 0);
593
594     default:
595       break;
596     }
597
598   code = GET_CODE (x);
599   fmt = GET_RTX_FORMAT (code);
600
601   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
602     {
603       int j;
604
605       switch (fmt[i])
606         {
607         case 'w':
608           if (XWINT (x, i) != XWINT (y, i))
609             return 0;
610           break;
611
612         case 'n':
613         case 'i':
614           if (XINT (x, i) != XINT (y, i))
615             return 0;
616           break;
617
618         case 'V':
619         case 'E':
620           /* Two vectors must have the same length.  */
621           if (XVECLEN (x, i) != XVECLEN (y, i))
622             return 0;
623
624           /* And the corresponding elements must match.  */
625           for (j = 0; j < XVECLEN (x, i); j++)
626             if (! rtx_equal_for_cselib_p (XVECEXP (x, i, j),
627                                           XVECEXP (y, i, j)))
628               return 0;
629           break;
630
631         case 'e':
632           if (i == 1
633               && targetm.commutative_p (x, UNKNOWN)
634               && rtx_equal_for_cselib_p (XEXP (x, 1), XEXP (y, 0))
635               && rtx_equal_for_cselib_p (XEXP (x, 0), XEXP (y, 1)))
636             return 1;
637           if (! rtx_equal_for_cselib_p (XEXP (x, i), XEXP (y, i)))
638             return 0;
639           break;
640
641         case 'S':
642         case 's':
643           if (strcmp (XSTR (x, i), XSTR (y, i)))
644             return 0;
645           break;
646
647         case 'u':
648           /* These are just backpointers, so they don't matter.  */
649           break;
650
651         case '0':
652         case 't':
653           break;
654
655           /* It is believed that rtx's at this level will never
656              contain anything but integers and other rtx's,
657              except for within LABEL_REFs and SYMBOL_REFs.  */
658         default:
659           gcc_unreachable ();
660         }
661     }
662   return 1;
663 }
664
665 /* Hash an rtx.  Return 0 if we couldn't hash the rtx.
666    For registers and memory locations, we look up their cselib_val structure
667    and return its VALUE element.
668    Possible reasons for return 0 are: the object is volatile, or we couldn't
669    find a register or memory location in the table and CREATE is zero.  If
670    CREATE is nonzero, table elts are created for regs and mem.
671    N.B. this hash function returns the same hash value for RTXes that
672    differ only in the order of operands, thus it is suitable for comparisons
673    that take commutativity into account.
674    If we wanted to also support associative rules, we'd have to use a different
675    strategy to avoid returning spurious 0, e.g. return ~(~0U >> 1) .
676    We used to have a MODE argument for hashing for CONST_INTs, but that
677    didn't make sense, since it caused spurious hash differences between
678     (set (reg:SI 1) (const_int))
679     (plus:SI (reg:SI 2) (reg:SI 1))
680    and
681     (plus:SI (reg:SI 2) (const_int))
682    If the mode is important in any context, it must be checked specifically
683    in a comparison anyway, since relying on hash differences is unsafe.  */
684
685 static unsigned int
686 cselib_hash_rtx (rtx x, int create)
687 {
688   cselib_val *e;
689   int i, j;
690   enum rtx_code code;
691   const char *fmt;
692   unsigned int hash = 0;
693
694   code = GET_CODE (x);
695   hash += (unsigned) code + (unsigned) GET_MODE (x);
696
697   switch (code)
698     {
699     case MEM:
700     case REG:
701       e = cselib_lookup (x, GET_MODE (x), create);
702       if (! e)
703         return 0;
704
705       return e->value;
706
707     case DEBUG_EXPR:
708       hash += ((unsigned) DEBUG_EXPR << 7) + DEBUG_TEMP_UID (XTREE (x, 0));
709       return hash ? hash : (unsigned int) DEBUG_EXPR;
710
711     case CONST_INT:
712       hash += ((unsigned) CONST_INT << 7) + INTVAL (x);
713       return hash ? hash : (unsigned int) CONST_INT;
714
715     case CONST_DOUBLE:
716       /* This is like the general case, except that it only counts
717          the integers representing the constant.  */
718       hash += (unsigned) code + (unsigned) GET_MODE (x);
719       if (GET_MODE (x) != VOIDmode)
720         hash += real_hash (CONST_DOUBLE_REAL_VALUE (x));
721       else
722         hash += ((unsigned) CONST_DOUBLE_LOW (x)
723                  + (unsigned) CONST_DOUBLE_HIGH (x));
724       return hash ? hash : (unsigned int) CONST_DOUBLE;
725
726     case CONST_FIXED:
727       hash += (unsigned int) code + (unsigned int) GET_MODE (x);
728       hash += fixed_hash (CONST_FIXED_VALUE (x));
729       return hash ? hash : (unsigned int) CONST_FIXED;
730
731     case CONST_VECTOR:
732       {
733         int units;
734         rtx elt;
735
736         units = CONST_VECTOR_NUNITS (x);
737
738         for (i = 0; i < units; ++i)
739           {
740             elt = CONST_VECTOR_ELT (x, i);
741             hash += cselib_hash_rtx (elt, 0);
742           }
743
744         return hash;
745       }
746
747       /* Assume there is only one rtx object for any given label.  */
748     case LABEL_REF:
749       /* We don't hash on the address of the CODE_LABEL to avoid bootstrap
750          differences and differences between each stage's debugging dumps.  */
751       hash += (((unsigned int) LABEL_REF << 7)
752                + CODE_LABEL_NUMBER (XEXP (x, 0)));
753       return hash ? hash : (unsigned int) LABEL_REF;
754
755     case SYMBOL_REF:
756       {
757         /* Don't hash on the symbol's address to avoid bootstrap differences.
758            Different hash values may cause expressions to be recorded in
759            different orders and thus different registers to be used in the
760            final assembler.  This also avoids differences in the dump files
761            between various stages.  */
762         unsigned int h = 0;
763         const unsigned char *p = (const unsigned char *) XSTR (x, 0);
764
765         while (*p)
766           h += (h << 7) + *p++; /* ??? revisit */
767
768         hash += ((unsigned int) SYMBOL_REF << 7) + h;
769         return hash ? hash : (unsigned int) SYMBOL_REF;
770       }
771
772     case PRE_DEC:
773     case PRE_INC:
774     case POST_DEC:
775     case POST_INC:
776     case POST_MODIFY:
777     case PRE_MODIFY:
778     case PC:
779     case CC0:
780     case CALL:
781     case UNSPEC_VOLATILE:
782       return 0;
783
784     case ASM_OPERANDS:
785       if (MEM_VOLATILE_P (x))
786         return 0;
787
788       break;
789
790     default:
791       break;
792     }
793
794   i = GET_RTX_LENGTH (code) - 1;
795   fmt = GET_RTX_FORMAT (code);
796   for (; i >= 0; i--)
797     {
798       switch (fmt[i])
799         {
800         case 'e':
801           {
802             rtx tem = XEXP (x, i);
803             unsigned int tem_hash = cselib_hash_rtx (tem, create);
804             
805             if (tem_hash == 0)
806               return 0;
807             
808             hash += tem_hash;
809           }
810           break;
811         case 'E':
812           for (j = 0; j < XVECLEN (x, i); j++)
813             {
814               unsigned int tem_hash
815                 = cselib_hash_rtx (XVECEXP (x, i, j), create);
816               
817               if (tem_hash == 0)
818                 return 0;
819               
820               hash += tem_hash;
821             }
822           break;
823
824         case 's':
825           {
826             const unsigned char *p = (const unsigned char *) XSTR (x, i);
827             
828             if (p)
829               while (*p)
830                 hash += *p++;
831             break;
832           }
833           
834         case 'i':
835           hash += XINT (x, i);
836           break;
837
838         case '0':
839         case 't':
840           /* unused */
841           break;
842           
843         default:
844           gcc_unreachable ();
845         }
846     }
847
848   return hash ? hash : 1 + (unsigned int) GET_CODE (x);
849 }
850
851 /* Create a new value structure for VALUE and initialize it.  The mode of the
852    value is MODE.  */
853
854 static inline cselib_val *
855 new_cselib_val (unsigned int value, enum machine_mode mode, rtx x)
856 {
857   cselib_val *e = (cselib_val *) pool_alloc (cselib_val_pool);
858
859   gcc_assert (value);
860
861   e->value = value;
862   /* We use an alloc pool to allocate this RTL construct because it
863      accounts for about 8% of the overall memory usage.  We know
864      precisely when we can have VALUE RTXen (when cselib is active)
865      so we don't need to put them in garbage collected memory.
866      ??? Why should a VALUE be an RTX in the first place?  */
867   e->val_rtx = (rtx) pool_alloc (value_pool);
868   memset (e->val_rtx, 0, RTX_HDR_SIZE);
869   PUT_CODE (e->val_rtx, VALUE);
870   PUT_MODE (e->val_rtx, mode);
871   CSELIB_VAL_PTR (e->val_rtx) = e;
872   e->addr_list = 0;
873   e->locs = 0;
874   e->next_containing_mem = 0;
875
876   if (dump_file && (dump_flags & TDF_DETAILS))
877     {
878       fprintf (dump_file, "cselib value %u ", value);
879       if (flag_dump_noaddr || flag_dump_unnumbered)
880         fputs ("# ", dump_file);
881       else
882         fprintf (dump_file, "%p ", (void*)e);
883       print_rtl_single (dump_file, x);
884       fputc ('\n', dump_file);
885     }
886
887   return e;
888 }
889
890 /* ADDR_ELT is a value that is used as address.  MEM_ELT is the value that
891    contains the data at this address.  X is a MEM that represents the
892    value.  Update the two value structures to represent this situation.  */
893
894 static void
895 add_mem_for_addr (cselib_val *addr_elt, cselib_val *mem_elt, rtx x)
896 {
897   struct elt_loc_list *l;
898
899   /* Avoid duplicates.  */
900   for (l = mem_elt->locs; l; l = l->next)
901     if (MEM_P (l->loc)
902         && CSELIB_VAL_PTR (XEXP (l->loc, 0)) == addr_elt)
903       return;
904
905   addr_elt->addr_list = new_elt_list (addr_elt->addr_list, mem_elt);
906   mem_elt->locs
907     = new_elt_loc_list (mem_elt->locs,
908                         replace_equiv_address_nv (x, addr_elt->val_rtx));
909   if (mem_elt->next_containing_mem == NULL)
910     {
911       mem_elt->next_containing_mem = first_containing_mem;
912       first_containing_mem = mem_elt;
913     }
914 }
915
916 /* Subroutine of cselib_lookup.  Return a value for X, which is a MEM rtx.
917    If CREATE, make a new one if we haven't seen it before.  */
918
919 static cselib_val *
920 cselib_lookup_mem (rtx x, int create)
921 {
922   enum machine_mode mode = GET_MODE (x);
923   void **slot;
924   cselib_val *addr;
925   cselib_val *mem_elt;
926   struct elt_list *l;
927
928   if (MEM_VOLATILE_P (x) || mode == BLKmode
929       || !cselib_record_memory
930       || (FLOAT_MODE_P (mode) && flag_float_store))
931     return 0;
932
933   /* Look up the value for the address.  */
934   addr = cselib_lookup (XEXP (x, 0), mode, create);
935   if (! addr)
936     return 0;
937
938   /* Find a value that describes a value of our mode at that address.  */
939   for (l = addr->addr_list; l; l = l->next)
940     if (GET_MODE (l->elt->val_rtx) == mode)
941       return l->elt;
942
943   if (! create)
944     return 0;
945
946   mem_elt = new_cselib_val (++next_unknown_value, mode, x);
947   add_mem_for_addr (addr, mem_elt, x);
948   slot = htab_find_slot_with_hash (cselib_hash_table, wrap_constant (mode, x),
949                                    mem_elt->value, INSERT);
950   *slot = mem_elt;
951   return mem_elt;
952 }
953
954 /* Search thru the possible substitutions in P.  We prefer a non reg
955    substitution because this allows us to expand the tree further.  If
956    we find, just a reg, take the lowest regno.  There may be several
957    non-reg results, we just take the first one because they will all
958    expand to the same place.  */
959
960 static rtx 
961 expand_loc (struct elt_loc_list *p, struct expand_value_data *evd,
962             int max_depth)
963 {
964   rtx reg_result = NULL;
965   unsigned int regno = UINT_MAX;
966   struct elt_loc_list *p_in = p;
967
968   for (; p; p = p -> next)
969     {
970       /* Avoid infinite recursion trying to expand a reg into a
971          the same reg.  */
972       if ((REG_P (p->loc)) 
973           && (REGNO (p->loc) < regno) 
974           && !bitmap_bit_p (evd->regs_active, REGNO (p->loc)))
975         {
976           reg_result = p->loc;
977           regno = REGNO (p->loc);
978         }
979       /* Avoid infinite recursion and do not try to expand the
980          value.  */
981       else if (GET_CODE (p->loc) == VALUE 
982                && CSELIB_VAL_PTR (p->loc)->locs == p_in)
983         continue;
984       else if (!REG_P (p->loc))
985         {
986           rtx result, note;
987           if (dump_file && (dump_flags & TDF_DETAILS))
988             {
989               print_inline_rtx (dump_file, p->loc, 0);
990               fprintf (dump_file, "\n");
991             }
992           if (GET_CODE (p->loc) == LO_SUM
993               && GET_CODE (XEXP (p->loc, 1)) == SYMBOL_REF
994               && p->setting_insn
995               && (note = find_reg_note (p->setting_insn, REG_EQUAL, NULL_RTX))
996               && XEXP (note, 0) == XEXP (p->loc, 1))
997             return XEXP (p->loc, 1);
998           result = cselib_expand_value_rtx_1 (p->loc, evd, max_depth - 1);
999           if (result)
1000             return result;
1001         }
1002         
1003     }
1004   
1005   if (regno != UINT_MAX)
1006     {
1007       rtx result;
1008       if (dump_file && (dump_flags & TDF_DETAILS))
1009         fprintf (dump_file, "r%d\n", regno);
1010
1011       result = cselib_expand_value_rtx_1 (reg_result, evd, max_depth - 1);
1012       if (result)
1013         return result;
1014     }
1015
1016   if (dump_file && (dump_flags & TDF_DETAILS))
1017     {
1018       if (reg_result)
1019         {
1020           print_inline_rtx (dump_file, reg_result, 0);
1021           fprintf (dump_file, "\n");
1022         }
1023       else 
1024         fprintf (dump_file, "NULL\n");
1025     }
1026   return reg_result;
1027 }
1028
1029
1030 /* Forward substitute and expand an expression out to its roots.
1031    This is the opposite of common subexpression.  Because local value
1032    numbering is such a weak optimization, the expanded expression is
1033    pretty much unique (not from a pointer equals point of view but
1034    from a tree shape point of view.  
1035
1036    This function returns NULL if the expansion fails.  The expansion
1037    will fail if there is no value number for one of the operands or if
1038    one of the operands has been overwritten between the current insn
1039    and the beginning of the basic block.  For instance x has no
1040    expansion in:
1041
1042    r1 <- r1 + 3
1043    x <- r1 + 8
1044
1045    REGS_ACTIVE is a scratch bitmap that should be clear when passing in.
1046    It is clear on return.  */
1047
1048 rtx
1049 cselib_expand_value_rtx (rtx orig, bitmap regs_active, int max_depth)
1050 {
1051   struct expand_value_data evd;
1052
1053   evd.regs_active = regs_active;
1054   evd.callback = NULL;
1055   evd.callback_arg = NULL;
1056
1057   return cselib_expand_value_rtx_1 (orig, &evd, max_depth);
1058 }
1059
1060 /* Same as cselib_expand_value_rtx, but using a callback to try to
1061    resolve some expressions.  The CB function should return ORIG if it
1062    can't or does not want to deal with a certain RTX.  Any other
1063    return value, including NULL, will be used as the expansion for
1064    VALUE, without any further changes.  */
1065
1066 rtx
1067 cselib_expand_value_rtx_cb (rtx orig, bitmap regs_active, int max_depth,
1068                             cselib_expand_callback cb, void *data)
1069 {
1070   struct expand_value_data evd;
1071
1072   evd.regs_active = regs_active;
1073   evd.callback = cb;
1074   evd.callback_arg = data;
1075
1076   return cselib_expand_value_rtx_1 (orig, &evd, max_depth);
1077 }
1078
1079 /* Internal implementation of cselib_expand_value_rtx and
1080    cselib_expand_value_rtx_cb.  */
1081
1082 static rtx
1083 cselib_expand_value_rtx_1 (rtx orig, struct expand_value_data *evd,
1084                            int max_depth)
1085 {
1086   rtx copy, scopy;
1087   int i, j;
1088   RTX_CODE code;
1089   const char *format_ptr;
1090   enum machine_mode mode;
1091
1092   code = GET_CODE (orig);
1093
1094   /* For the context of dse, if we end up expand into a huge tree, we
1095      will not have a useful address, so we might as well just give up
1096      quickly.  */
1097   if (max_depth <= 0)
1098     return NULL;
1099
1100   switch (code)
1101     {
1102     case REG:
1103       {
1104         struct elt_list *l = REG_VALUES (REGNO (orig));
1105
1106         if (l && l->elt == NULL)
1107           l = l->next;
1108         for (; l; l = l->next)
1109           if (GET_MODE (l->elt->val_rtx) == GET_MODE (orig))
1110             {
1111               rtx result;
1112               int regno = REGNO (orig);
1113               
1114               /* The only thing that we are not willing to do (this
1115                  is requirement of dse and if others potential uses
1116                  need this function we should add a parm to control
1117                  it) is that we will not substitute the
1118                  STACK_POINTER_REGNUM, FRAME_POINTER or the
1119                  HARD_FRAME_POINTER.
1120
1121                  These expansions confuses the code that notices that
1122                  stores into the frame go dead at the end of the
1123                  function and that the frame is not effected by calls
1124                  to subroutines.  If you allow the
1125                  STACK_POINTER_REGNUM substitution, then dse will
1126                  think that parameter pushing also goes dead which is
1127                  wrong.  If you allow the FRAME_POINTER or the
1128                  HARD_FRAME_POINTER then you lose the opportunity to
1129                  make the frame assumptions.  */
1130               if (regno == STACK_POINTER_REGNUM
1131                   || regno == FRAME_POINTER_REGNUM
1132                   || regno == HARD_FRAME_POINTER_REGNUM)
1133                 return orig;
1134
1135               bitmap_set_bit (evd->regs_active, regno);
1136
1137               if (dump_file && (dump_flags & TDF_DETAILS))
1138                 fprintf (dump_file, "expanding: r%d into: ", regno);
1139
1140               result = expand_loc (l->elt->locs, evd, max_depth);
1141               bitmap_clear_bit (evd->regs_active, regno);
1142
1143               if (result)
1144                 return result;
1145               else 
1146                 return orig;
1147             }
1148       }
1149       
1150     case CONST_INT:
1151     case CONST_DOUBLE:
1152     case CONST_VECTOR:
1153     case SYMBOL_REF:
1154     case CODE_LABEL:
1155     case PC:
1156     case CC0:
1157     case SCRATCH:
1158       /* SCRATCH must be shared because they represent distinct values.  */
1159       return orig;
1160     case CLOBBER:
1161       if (REG_P (XEXP (orig, 0)) && HARD_REGISTER_NUM_P (REGNO (XEXP (orig, 0))))
1162         return orig;
1163       break;
1164
1165     case CONST:
1166       if (shared_const_p (orig))
1167         return orig;
1168       break;
1169
1170     case SUBREG:
1171       {
1172         rtx subreg;
1173
1174         if (evd->callback)
1175           {
1176             subreg = evd->callback (orig, evd->regs_active, max_depth,
1177                                     evd->callback_arg);
1178             if (subreg != orig)
1179               return subreg;
1180           }
1181
1182         subreg = cselib_expand_value_rtx_1 (SUBREG_REG (orig), evd,
1183                                             max_depth - 1);
1184         if (!subreg)
1185           return NULL;
1186         scopy = simplify_gen_subreg (GET_MODE (orig), subreg,
1187                                      GET_MODE (SUBREG_REG (orig)),
1188                                      SUBREG_BYTE (orig));
1189         if (scopy == NULL
1190             || (GET_CODE (scopy) == SUBREG
1191                 && !REG_P (SUBREG_REG (scopy))
1192                 && !MEM_P (SUBREG_REG (scopy))))
1193           return NULL;
1194
1195         return scopy;
1196       }
1197
1198     case VALUE:
1199       {
1200         rtx result;
1201
1202         if (dump_file && (dump_flags & TDF_DETAILS))
1203           {
1204             fputs ("\nexpanding ", dump_file);
1205             print_rtl_single (dump_file, orig);
1206             fputs (" into...", dump_file);
1207           }
1208
1209         if (evd->callback)
1210           {
1211             result = evd->callback (orig, evd->regs_active, max_depth,
1212                                     evd->callback_arg);
1213
1214             if (result != orig)
1215               return result;
1216           }
1217
1218         result = expand_loc (CSELIB_VAL_PTR (orig)->locs, evd, max_depth);
1219         return result;
1220       }
1221
1222     case DEBUG_EXPR:
1223       if (evd->callback)
1224         return evd->callback (orig, evd->regs_active, max_depth,
1225                               evd->callback_arg);
1226       return orig;
1227
1228     default:
1229       break;
1230     }
1231
1232   /* Copy the various flags, fields, and other information.  We assume
1233      that all fields need copying, and then clear the fields that should
1234      not be copied.  That is the sensible default behavior, and forces
1235      us to explicitly document why we are *not* copying a flag.  */
1236   copy = shallow_copy_rtx (orig);
1237
1238   format_ptr = GET_RTX_FORMAT (code);
1239
1240   for (i = 0; i < GET_RTX_LENGTH (code); i++)
1241     switch (*format_ptr++)
1242       {
1243       case 'e':
1244         if (XEXP (orig, i) != NULL)
1245           {
1246             rtx result = cselib_expand_value_rtx_1 (XEXP (orig, i), evd,
1247                                                     max_depth - 1);
1248             if (!result)
1249               return NULL;
1250             XEXP (copy, i) = result;
1251           }
1252         break;
1253
1254       case 'E':
1255       case 'V':
1256         if (XVEC (orig, i) != NULL)
1257           {
1258             XVEC (copy, i) = rtvec_alloc (XVECLEN (orig, i));
1259             for (j = 0; j < XVECLEN (copy, i); j++)
1260               {
1261                 rtx result = cselib_expand_value_rtx_1 (XVECEXP (orig, i, j),
1262                                                         evd, max_depth - 1);
1263                 if (!result)
1264                   return NULL;
1265                 XVECEXP (copy, i, j) = result;
1266               }
1267           }
1268         break;
1269
1270       case 't':
1271       case 'w':
1272       case 'i':
1273       case 's':
1274       case 'S':
1275       case 'T':
1276       case 'u':
1277       case 'B':
1278       case '0':
1279         /* These are left unchanged.  */
1280         break;
1281
1282       default:
1283         gcc_unreachable ();
1284       }
1285
1286   mode = GET_MODE (copy);
1287   /* If an operand has been simplified into CONST_INT, which doesn't
1288      have a mode and the mode isn't derivable from whole rtx's mode,
1289      try simplify_*_operation first with mode from original's operand
1290      and as a fallback wrap CONST_INT into gen_rtx_CONST.  */
1291   scopy = copy;
1292   switch (GET_RTX_CLASS (code))
1293     {
1294     case RTX_UNARY:
1295       if (CONST_INT_P (XEXP (copy, 0))
1296           && GET_MODE (XEXP (orig, 0)) != VOIDmode)
1297         {
1298           scopy = simplify_unary_operation (code, mode, XEXP (copy, 0),
1299                                             GET_MODE (XEXP (orig, 0)));
1300           if (scopy)
1301             return scopy;
1302         }
1303       break;
1304     case RTX_COMM_ARITH:
1305     case RTX_BIN_ARITH:
1306       /* These expressions can derive operand modes from the whole rtx's mode.  */
1307       break;
1308     case RTX_TERNARY:
1309     case RTX_BITFIELD_OPS:
1310       if (CONST_INT_P (XEXP (copy, 0))
1311           && GET_MODE (XEXP (orig, 0)) != VOIDmode)
1312         {
1313           scopy = simplify_ternary_operation (code, mode,
1314                                               GET_MODE (XEXP (orig, 0)),
1315                                               XEXP (copy, 0), XEXP (copy, 1),
1316                                               XEXP (copy, 2));
1317           if (scopy)
1318             return scopy;
1319         }
1320       break;
1321     case RTX_COMPARE:
1322     case RTX_COMM_COMPARE:
1323       if (CONST_INT_P (XEXP (copy, 0))
1324           && GET_MODE (XEXP (copy, 1)) == VOIDmode
1325           && (GET_MODE (XEXP (orig, 0)) != VOIDmode
1326               || GET_MODE (XEXP (orig, 1)) != VOIDmode))
1327         {
1328           scopy = simplify_relational_operation (code, mode,
1329                                                  (GET_MODE (XEXP (orig, 0))
1330                                                   != VOIDmode)
1331                                                  ? GET_MODE (XEXP (orig, 0))
1332                                                  : GET_MODE (XEXP (orig, 1)),
1333                                                  XEXP (copy, 0),
1334                                                  XEXP (copy, 1));
1335           if (scopy)
1336             return scopy;
1337         }
1338       break;
1339     default:
1340       break;
1341     }
1342   if (scopy == NULL_RTX)
1343     {
1344       XEXP (copy, 0)
1345         = gen_rtx_CONST (GET_MODE (XEXP (orig, 0)), XEXP (copy, 0));
1346       if (dump_file && (dump_flags & TDF_DETAILS))
1347         fprintf (dump_file, "  wrapping const_int result in const to preserve mode %s\n",
1348                  GET_MODE_NAME (GET_MODE (XEXP (copy, 0))));
1349     }
1350   scopy = simplify_rtx (copy);
1351   if (scopy)
1352     {
1353       if (GET_MODE (copy) != GET_MODE (scopy))
1354         scopy = wrap_constant (GET_MODE (copy), scopy);
1355       return scopy;
1356     }
1357   return copy;
1358 }
1359
1360 /* Walk rtx X and replace all occurrences of REG and MEM subexpressions
1361    with VALUE expressions.  This way, it becomes independent of changes
1362    to registers and memory.
1363    X isn't actually modified; if modifications are needed, new rtl is
1364    allocated.  However, the return value can share rtl with X.  */
1365
1366 rtx
1367 cselib_subst_to_values (rtx x)
1368 {
1369   enum rtx_code code = GET_CODE (x);
1370   const char *fmt = GET_RTX_FORMAT (code);
1371   cselib_val *e;
1372   struct elt_list *l;
1373   rtx copy = x;
1374   int i;
1375
1376   switch (code)
1377     {
1378     case REG:
1379       l = REG_VALUES (REGNO (x));
1380       if (l && l->elt == NULL)
1381         l = l->next;
1382       for (; l; l = l->next)
1383         if (GET_MODE (l->elt->val_rtx) == GET_MODE (x))
1384           return l->elt->val_rtx;
1385
1386       gcc_unreachable ();
1387
1388     case MEM:
1389       e = cselib_lookup_mem (x, 0);
1390       if (! e)
1391         {
1392           /* This happens for autoincrements.  Assign a value that doesn't
1393              match any other.  */
1394           e = new_cselib_val (++next_unknown_value, GET_MODE (x), x);
1395         }
1396       return e->val_rtx;
1397
1398     case CONST_DOUBLE:
1399     case CONST_VECTOR:
1400     case CONST_INT:
1401     case CONST_FIXED:
1402       return x;
1403
1404     case POST_INC:
1405     case PRE_INC:
1406     case POST_DEC:
1407     case PRE_DEC:
1408     case POST_MODIFY:
1409     case PRE_MODIFY:
1410       e = new_cselib_val (++next_unknown_value, GET_MODE (x), x);
1411       return e->val_rtx;
1412
1413     default:
1414       break;
1415     }
1416
1417   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1418     {
1419       if (fmt[i] == 'e')
1420         {
1421           rtx t = cselib_subst_to_values (XEXP (x, i));
1422
1423           if (t != XEXP (x, i) && x == copy)
1424             copy = shallow_copy_rtx (x);
1425
1426           XEXP (copy, i) = t;
1427         }
1428       else if (fmt[i] == 'E')
1429         {
1430           int j, k;
1431
1432           for (j = 0; j < XVECLEN (x, i); j++)
1433             {
1434               rtx t = cselib_subst_to_values (XVECEXP (x, i, j));
1435
1436               if (t != XVECEXP (x, i, j) && XVEC (x, i) == XVEC (copy, i))
1437                 {
1438                   if (x == copy)
1439                     copy = shallow_copy_rtx (x);
1440
1441                   XVEC (copy, i) = rtvec_alloc (XVECLEN (x, i));
1442                   for (k = 0; k < j; k++)
1443                     XVECEXP (copy, i, k) = XVECEXP (x, i, k);
1444                 }
1445
1446               XVECEXP (copy, i, j) = t;
1447             }
1448         }
1449     }
1450
1451   return copy;
1452 }
1453
1454 /* Log a lookup of X to the cselib table along with the result RET.  */
1455
1456 static cselib_val *
1457 cselib_log_lookup (rtx x, cselib_val *ret)
1458 {
1459   if (dump_file && (dump_flags & TDF_DETAILS))
1460     {
1461       fputs ("cselib lookup ", dump_file);
1462       print_inline_rtx (dump_file, x, 2);
1463       fprintf (dump_file, " => %u\n", ret ? ret->value : 0);
1464     }
1465
1466   return ret;
1467 }
1468
1469 /* Look up the rtl expression X in our tables and return the value it has.
1470    If CREATE is zero, we return NULL if we don't know the value.  Otherwise,
1471    we create a new one if possible, using mode MODE if X doesn't have a mode
1472    (i.e. because it's a constant).  */
1473
1474 cselib_val *
1475 cselib_lookup (rtx x, enum machine_mode mode, int create)
1476 {
1477   void **slot;
1478   cselib_val *e;
1479   unsigned int hashval;
1480
1481   if (GET_MODE (x) != VOIDmode)
1482     mode = GET_MODE (x);
1483
1484   if (GET_CODE (x) == VALUE)
1485     return CSELIB_VAL_PTR (x);
1486
1487   if (REG_P (x))
1488     {
1489       struct elt_list *l;
1490       unsigned int i = REGNO (x);
1491
1492       l = REG_VALUES (i);
1493       if (l && l->elt == NULL)
1494         l = l->next;
1495       for (; l; l = l->next)
1496         if (mode == GET_MODE (l->elt->val_rtx))
1497           return cselib_log_lookup (x, l->elt);
1498
1499       if (! create)
1500         return cselib_log_lookup (x, 0);
1501
1502       if (i < FIRST_PSEUDO_REGISTER)
1503         {
1504           unsigned int n = hard_regno_nregs[i][mode];
1505
1506           if (n > max_value_regs)
1507             max_value_regs = n;
1508         }
1509
1510       e = new_cselib_val (++next_unknown_value, GET_MODE (x), x);
1511       e->locs = new_elt_loc_list (e->locs, x);
1512       if (REG_VALUES (i) == 0)
1513         {
1514           /* Maintain the invariant that the first entry of
1515              REG_VALUES, if present, must be the value used to set the
1516              register, or NULL.  */
1517           used_regs[n_used_regs++] = i;
1518           REG_VALUES (i) = new_elt_list (REG_VALUES (i), NULL);
1519         }
1520       REG_VALUES (i)->next = new_elt_list (REG_VALUES (i)->next, e);
1521       slot = htab_find_slot_with_hash (cselib_hash_table, x, e->value, INSERT);
1522       *slot = e;
1523       return cselib_log_lookup (x, e);
1524     }
1525
1526   if (MEM_P (x))
1527     return cselib_log_lookup (x, cselib_lookup_mem (x, create));
1528
1529   hashval = cselib_hash_rtx (x, create);
1530   /* Can't even create if hashing is not possible.  */
1531   if (! hashval)
1532     return cselib_log_lookup (x, 0);
1533
1534   slot = htab_find_slot_with_hash (cselib_hash_table, wrap_constant (mode, x),
1535                                    hashval, create ? INSERT : NO_INSERT);
1536   if (slot == 0)
1537     return cselib_log_lookup (x, 0);
1538
1539   e = (cselib_val *) *slot;
1540   if (e)
1541     return cselib_log_lookup (x, e);
1542
1543   e = new_cselib_val (hashval, mode, x);
1544
1545   /* We have to fill the slot before calling cselib_subst_to_values:
1546      the hash table is inconsistent until we do so, and
1547      cselib_subst_to_values will need to do lookups.  */
1548   *slot = (void *) e;
1549   e->locs = new_elt_loc_list (e->locs, cselib_subst_to_values (x));
1550   return cselib_log_lookup (x, e);
1551 }
1552
1553 /* Invalidate any entries in reg_values that overlap REGNO.  This is called
1554    if REGNO is changing.  MODE is the mode of the assignment to REGNO, which
1555    is used to determine how many hard registers are being changed.  If MODE
1556    is VOIDmode, then only REGNO is being changed; this is used when
1557    invalidating call clobbered registers across a call.  */
1558
1559 static void
1560 cselib_invalidate_regno (unsigned int regno, enum machine_mode mode)
1561 {
1562   unsigned int endregno;
1563   unsigned int i;
1564
1565   /* If we see pseudos after reload, something is _wrong_.  */
1566   gcc_assert (!reload_completed || regno < FIRST_PSEUDO_REGISTER
1567               || reg_renumber[regno] < 0);
1568
1569   /* Determine the range of registers that must be invalidated.  For
1570      pseudos, only REGNO is affected.  For hard regs, we must take MODE
1571      into account, and we must also invalidate lower register numbers
1572      if they contain values that overlap REGNO.  */
1573   if (regno < FIRST_PSEUDO_REGISTER)
1574     {
1575       gcc_assert (mode != VOIDmode);
1576
1577       if (regno < max_value_regs)
1578         i = 0;
1579       else
1580         i = regno - max_value_regs;
1581
1582       endregno = end_hard_regno (mode, regno);
1583     }
1584   else
1585     {
1586       i = regno;
1587       endregno = regno + 1;
1588     }
1589
1590   for (; i < endregno; i++)
1591     {
1592       struct elt_list **l = &REG_VALUES (i);
1593
1594       /* Go through all known values for this reg; if it overlaps the range
1595          we're invalidating, remove the value.  */
1596       while (*l)
1597         {
1598           cselib_val *v = (*l)->elt;
1599           struct elt_loc_list **p;
1600           unsigned int this_last = i;
1601
1602           if (i < FIRST_PSEUDO_REGISTER && v != NULL)
1603             this_last = end_hard_regno (GET_MODE (v->val_rtx), i) - 1;
1604
1605           if (this_last < regno || v == NULL)
1606             {
1607               l = &(*l)->next;
1608               continue;
1609             }
1610
1611           /* We have an overlap.  */
1612           if (*l == REG_VALUES (i))
1613             {
1614               /* Maintain the invariant that the first entry of
1615                  REG_VALUES, if present, must be the value used to set
1616                  the register, or NULL.  This is also nice because
1617                  then we won't push the same regno onto user_regs
1618                  multiple times.  */
1619               (*l)->elt = NULL;
1620               l = &(*l)->next;
1621             }
1622           else
1623             unchain_one_elt_list (l);
1624
1625           /* Now, we clear the mapping from value to reg.  It must exist, so
1626              this code will crash intentionally if it doesn't.  */
1627           for (p = &v->locs; ; p = &(*p)->next)
1628             {
1629               rtx x = (*p)->loc;
1630
1631               if (REG_P (x) && REGNO (x) == i)
1632                 {
1633                   unchain_one_elt_loc_list (p);
1634                   break;
1635                 }
1636             }
1637           if (v->locs == 0 && !PRESERVED_VALUE_P (v->val_rtx))
1638             n_useless_values++;
1639         }
1640     }
1641 }
1642 \f
1643 /* Return 1 if X has a value that can vary even between two
1644    executions of the program.  0 means X can be compared reliably
1645    against certain constants or near-constants.  */
1646
1647 static bool
1648 cselib_rtx_varies_p (const_rtx x ATTRIBUTE_UNUSED, bool from_alias ATTRIBUTE_UNUSED)
1649 {
1650   /* We actually don't need to verify very hard.  This is because
1651      if X has actually changed, we invalidate the memory anyway,
1652      so assume that all common memory addresses are
1653      invariant.  */
1654   return 0;
1655 }
1656
1657 /* Invalidate any locations in the table which are changed because of a
1658    store to MEM_RTX.  If this is called because of a non-const call
1659    instruction, MEM_RTX is (mem:BLK const0_rtx).  */
1660
1661 static void
1662 cselib_invalidate_mem (rtx mem_rtx)
1663 {
1664   cselib_val **vp, *v, *next;
1665   int num_mems = 0;
1666   rtx mem_addr;
1667
1668   mem_addr = canon_rtx (get_addr (XEXP (mem_rtx, 0)));
1669   mem_rtx = canon_rtx (mem_rtx);
1670
1671   vp = &first_containing_mem;
1672   for (v = *vp; v != &dummy_val; v = next)
1673     {
1674       bool has_mem = false;
1675       struct elt_loc_list **p = &v->locs;
1676       int had_locs = v->locs != 0;
1677
1678       while (*p)
1679         {
1680           rtx x = (*p)->loc;
1681           cselib_val *addr;
1682           struct elt_list **mem_chain;
1683
1684           /* MEMs may occur in locations only at the top level; below
1685              that every MEM or REG is substituted by its VALUE.  */
1686           if (!MEM_P (x))
1687             {
1688               p = &(*p)->next;
1689               continue;
1690             }
1691           if (num_mems < PARAM_VALUE (PARAM_MAX_CSELIB_MEMORY_LOCATIONS)
1692               && ! canon_true_dependence (mem_rtx, GET_MODE (mem_rtx), mem_addr,
1693                                           x, NULL_RTX, cselib_rtx_varies_p))
1694             {
1695               has_mem = true;
1696               num_mems++;
1697               p = &(*p)->next;
1698               continue;
1699             }
1700
1701           /* This one overlaps.  */
1702           /* We must have a mapping from this MEM's address to the
1703              value (E).  Remove that, too.  */
1704           addr = cselib_lookup (XEXP (x, 0), VOIDmode, 0);
1705           mem_chain = &addr->addr_list;
1706           for (;;)
1707             {
1708               if ((*mem_chain)->elt == v)
1709                 {
1710                   unchain_one_elt_list (mem_chain);
1711                   break;
1712                 }
1713
1714               mem_chain = &(*mem_chain)->next;
1715             }
1716
1717           unchain_one_elt_loc_list (p);
1718         }
1719
1720       if (had_locs && v->locs == 0 && !PRESERVED_VALUE_P (v->val_rtx))
1721         n_useless_values++;
1722
1723       next = v->next_containing_mem;
1724       if (has_mem)
1725         {
1726           *vp = v;
1727           vp = &(*vp)->next_containing_mem;
1728         }
1729       else
1730         v->next_containing_mem = NULL;
1731     }
1732   *vp = &dummy_val;
1733 }
1734
1735 /* Invalidate DEST, which is being assigned to or clobbered.  */
1736
1737 void
1738 cselib_invalidate_rtx (rtx dest)
1739 {
1740   while (GET_CODE (dest) == SUBREG
1741          || GET_CODE (dest) == ZERO_EXTRACT
1742          || GET_CODE (dest) == STRICT_LOW_PART)
1743     dest = XEXP (dest, 0);
1744
1745   if (REG_P (dest))
1746     cselib_invalidate_regno (REGNO (dest), GET_MODE (dest));
1747   else if (MEM_P (dest))
1748     cselib_invalidate_mem (dest);
1749
1750   /* Some machines don't define AUTO_INC_DEC, but they still use push
1751      instructions.  We need to catch that case here in order to
1752      invalidate the stack pointer correctly.  Note that invalidating
1753      the stack pointer is different from invalidating DEST.  */
1754   if (push_operand (dest, GET_MODE (dest)))
1755     cselib_invalidate_rtx (stack_pointer_rtx);
1756 }
1757
1758 /* A wrapper for cselib_invalidate_rtx to be called via note_stores.  */
1759
1760 static void
1761 cselib_invalidate_rtx_note_stores (rtx dest, const_rtx ignore ATTRIBUTE_UNUSED,
1762                                    void *data ATTRIBUTE_UNUSED)
1763 {
1764   cselib_invalidate_rtx (dest);
1765 }
1766
1767 /* Record the result of a SET instruction.  DEST is being set; the source
1768    contains the value described by SRC_ELT.  If DEST is a MEM, DEST_ADDR_ELT
1769    describes its address.  */
1770
1771 static void
1772 cselib_record_set (rtx dest, cselib_val *src_elt, cselib_val *dest_addr_elt)
1773 {
1774   int dreg = REG_P (dest) ? (int) REGNO (dest) : -1;
1775
1776   if (src_elt == 0 || side_effects_p (dest))
1777     return;
1778
1779   if (dreg >= 0)
1780     {
1781       if (dreg < FIRST_PSEUDO_REGISTER)
1782         {
1783           unsigned int n = hard_regno_nregs[dreg][GET_MODE (dest)];
1784
1785           if (n > max_value_regs)
1786             max_value_regs = n;
1787         }
1788
1789       if (REG_VALUES (dreg) == 0)
1790         {
1791           used_regs[n_used_regs++] = dreg;
1792           REG_VALUES (dreg) = new_elt_list (REG_VALUES (dreg), src_elt);
1793         }
1794       else
1795         {
1796           /* The register should have been invalidated.  */
1797           gcc_assert (REG_VALUES (dreg)->elt == 0);
1798           REG_VALUES (dreg)->elt = src_elt;
1799         }
1800
1801       if (src_elt->locs == 0 && !PRESERVED_VALUE_P (src_elt->val_rtx))
1802         n_useless_values--;
1803       src_elt->locs = new_elt_loc_list (src_elt->locs, dest);
1804     }
1805   else if (MEM_P (dest) && dest_addr_elt != 0
1806            && cselib_record_memory)
1807     {
1808       if (src_elt->locs == 0 && !PRESERVED_VALUE_P (src_elt->val_rtx))
1809         n_useless_values--;
1810       add_mem_for_addr (dest_addr_elt, src_elt, dest);
1811     }
1812 }
1813
1814 /* There is no good way to determine how many elements there can be
1815    in a PARALLEL.  Since it's fairly cheap, use a really large number.  */
1816 #define MAX_SETS (FIRST_PSEUDO_REGISTER * 2)
1817
1818 /* Record the effects of any sets in INSN.  */
1819 static void
1820 cselib_record_sets (rtx insn)
1821 {
1822   int n_sets = 0;
1823   int i;
1824   struct cselib_set sets[MAX_SETS];
1825   rtx body = PATTERN (insn);
1826   rtx cond = 0;
1827
1828   body = PATTERN (insn);
1829   if (GET_CODE (body) == COND_EXEC)
1830     {
1831       cond = COND_EXEC_TEST (body);
1832       body = COND_EXEC_CODE (body);
1833     }
1834
1835   /* Find all sets.  */
1836   if (GET_CODE (body) == SET)
1837     {
1838       sets[0].src = SET_SRC (body);
1839       sets[0].dest = SET_DEST (body);
1840       n_sets = 1;
1841     }
1842   else if (GET_CODE (body) == PARALLEL)
1843     {
1844       /* Look through the PARALLEL and record the values being
1845          set, if possible.  Also handle any CLOBBERs.  */
1846       for (i = XVECLEN (body, 0) - 1; i >= 0; --i)
1847         {
1848           rtx x = XVECEXP (body, 0, i);
1849
1850           if (GET_CODE (x) == SET)
1851             {
1852               sets[n_sets].src = SET_SRC (x);
1853               sets[n_sets].dest = SET_DEST (x);
1854               n_sets++;
1855             }
1856         }
1857     }
1858
1859   if (n_sets == 1
1860       && MEM_P (sets[0].src)
1861       && !cselib_record_memory
1862       && MEM_READONLY_P (sets[0].src))
1863     {
1864       rtx note = find_reg_equal_equiv_note (insn);
1865
1866       if (note && CONSTANT_P (XEXP (note, 0)))
1867         sets[0].src = XEXP (note, 0);
1868     }
1869
1870   /* Look up the values that are read.  Do this before invalidating the
1871      locations that are written.  */
1872   for (i = 0; i < n_sets; i++)
1873     {
1874       rtx dest = sets[i].dest;
1875
1876       /* A STRICT_LOW_PART can be ignored; we'll record the equivalence for
1877          the low part after invalidating any knowledge about larger modes.  */
1878       if (GET_CODE (sets[i].dest) == STRICT_LOW_PART)
1879         sets[i].dest = dest = XEXP (dest, 0);
1880
1881       /* We don't know how to record anything but REG or MEM.  */
1882       if (REG_P (dest)
1883           || (MEM_P (dest) && cselib_record_memory))
1884         {
1885           rtx src = sets[i].src;
1886           if (cond)
1887             src = gen_rtx_IF_THEN_ELSE (GET_MODE (dest), cond, src, dest);
1888           sets[i].src_elt = cselib_lookup (src, GET_MODE (dest), 1);
1889           if (MEM_P (dest))
1890             sets[i].dest_addr_elt = cselib_lookup (XEXP (dest, 0), Pmode, 1);
1891           else
1892             sets[i].dest_addr_elt = 0;
1893         }
1894     }
1895
1896   if (cselib_record_sets_hook)
1897     cselib_record_sets_hook (insn, sets, n_sets);
1898
1899   /* Invalidate all locations written by this insn.  Note that the elts we
1900      looked up in the previous loop aren't affected, just some of their
1901      locations may go away.  */
1902   note_stores (body, cselib_invalidate_rtx_note_stores, NULL);
1903
1904   /* If this is an asm, look for duplicate sets.  This can happen when the
1905      user uses the same value as an output multiple times.  This is valid
1906      if the outputs are not actually used thereafter.  Treat this case as
1907      if the value isn't actually set.  We do this by smashing the destination
1908      to pc_rtx, so that we won't record the value later.  */
1909   if (n_sets >= 2 && asm_noperands (body) >= 0)
1910     {
1911       for (i = 0; i < n_sets; i++)
1912         {
1913           rtx dest = sets[i].dest;
1914           if (REG_P (dest) || MEM_P (dest))
1915             {
1916               int j;
1917               for (j = i + 1; j < n_sets; j++)
1918                 if (rtx_equal_p (dest, sets[j].dest))
1919                   {
1920                     sets[i].dest = pc_rtx;
1921                     sets[j].dest = pc_rtx;
1922                   }
1923             }
1924         }
1925     }
1926
1927   /* Now enter the equivalences in our tables.  */
1928   for (i = 0; i < n_sets; i++)
1929     {
1930       rtx dest = sets[i].dest;
1931       if (REG_P (dest)
1932           || (MEM_P (dest) && cselib_record_memory))
1933         cselib_record_set (dest, sets[i].src_elt, sets[i].dest_addr_elt);
1934     }
1935 }
1936
1937 /* Record the effects of INSN.  */
1938
1939 void
1940 cselib_process_insn (rtx insn)
1941 {
1942   int i;
1943   rtx x;
1944
1945   cselib_current_insn = insn;
1946
1947   /* Forget everything at a CODE_LABEL, a volatile asm, or a setjmp.  */
1948   if (LABEL_P (insn)
1949       || (CALL_P (insn)
1950           && find_reg_note (insn, REG_SETJMP, NULL))
1951       || (NONJUMP_INSN_P (insn)
1952           && GET_CODE (PATTERN (insn)) == ASM_OPERANDS
1953           && MEM_VOLATILE_P (PATTERN (insn))))
1954     {
1955       cselib_reset_table_with_next_value (next_unknown_value);
1956       return;
1957     }
1958
1959   if (! INSN_P (insn))
1960     {
1961       cselib_current_insn = 0;
1962       return;
1963     }
1964
1965   /* If this is a call instruction, forget anything stored in a
1966      call clobbered register, or, if this is not a const call, in
1967      memory.  */
1968   if (CALL_P (insn))
1969     {
1970       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1971         if (call_used_regs[i]
1972             || (REG_VALUES (i) && REG_VALUES (i)->elt
1973                 && HARD_REGNO_CALL_PART_CLOBBERED (i, 
1974                       GET_MODE (REG_VALUES (i)->elt->val_rtx))))
1975           cselib_invalidate_regno (i, reg_raw_mode[i]);
1976
1977       /* Since it is not clear how cselib is going to be used, be
1978          conservative here and treat looping pure or const functions
1979          as if they were regular functions.  */
1980       if (RTL_LOOPING_CONST_OR_PURE_CALL_P (insn)
1981           || !(RTL_CONST_OR_PURE_CALL_P (insn)))
1982         cselib_invalidate_mem (callmem);
1983     }
1984
1985   cselib_record_sets (insn);
1986
1987 #ifdef AUTO_INC_DEC
1988   /* Clobber any registers which appear in REG_INC notes.  We
1989      could keep track of the changes to their values, but it is
1990      unlikely to help.  */
1991   for (x = REG_NOTES (insn); x; x = XEXP (x, 1))
1992     if (REG_NOTE_KIND (x) == REG_INC)
1993       cselib_invalidate_rtx (XEXP (x, 0));
1994 #endif
1995
1996   /* Look for any CLOBBERs in CALL_INSN_FUNCTION_USAGE, but only
1997      after we have processed the insn.  */
1998   if (CALL_P (insn))
1999     for (x = CALL_INSN_FUNCTION_USAGE (insn); x; x = XEXP (x, 1))
2000       if (GET_CODE (XEXP (x, 0)) == CLOBBER)
2001         cselib_invalidate_rtx (XEXP (XEXP (x, 0), 0));
2002
2003   cselib_current_insn = 0;
2004
2005   if (n_useless_values > MAX_USELESS_VALUES
2006       /* remove_useless_values is linear in the hash table size.  Avoid
2007          quadratic behavior for very large hashtables with very few
2008          useless elements.  */
2009       && (unsigned int)n_useless_values > cselib_hash_table->n_elements / 4)
2010     remove_useless_values ();
2011 }
2012
2013 /* Initialize cselib for one pass.  The caller must also call
2014    init_alias_analysis.  */
2015
2016 void
2017 cselib_init (bool record_memory)
2018 {
2019   elt_list_pool = create_alloc_pool ("elt_list", 
2020                                      sizeof (struct elt_list), 10);
2021   elt_loc_list_pool = create_alloc_pool ("elt_loc_list", 
2022                                          sizeof (struct elt_loc_list), 10);
2023   cselib_val_pool = create_alloc_pool ("cselib_val_list", 
2024                                        sizeof (cselib_val), 10);
2025   value_pool = create_alloc_pool ("value", RTX_CODE_SIZE (VALUE), 100);
2026   cselib_record_memory = record_memory;
2027
2028   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything,
2029      see canon_true_dependence.  This is only created once.  */
2030   if (! callmem)
2031     callmem = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode));
2032
2033   cselib_nregs = max_reg_num ();
2034
2035   /* We preserve reg_values to allow expensive clearing of the whole thing.
2036      Reallocate it however if it happens to be too large.  */
2037   if (!reg_values || reg_values_size < cselib_nregs
2038       || (reg_values_size > 10 && reg_values_size > cselib_nregs * 4))
2039     {
2040       if (reg_values)
2041         free (reg_values);
2042       /* Some space for newly emit instructions so we don't end up
2043          reallocating in between passes.  */
2044       reg_values_size = cselib_nregs + (63 + cselib_nregs) / 16;
2045       reg_values = XCNEWVEC (struct elt_list *, reg_values_size);
2046     }
2047   used_regs = XNEWVEC (unsigned int, cselib_nregs);
2048   n_used_regs = 0;
2049   cselib_hash_table = htab_create (31, get_value_hash,
2050                                    entry_and_rtx_equal_p, NULL);
2051 }
2052
2053 /* Called when the current user is done with cselib.  */
2054
2055 void
2056 cselib_finish (void)
2057 {
2058   cselib_discard_hook = NULL;
2059   free_alloc_pool (elt_list_pool);
2060   free_alloc_pool (elt_loc_list_pool);
2061   free_alloc_pool (cselib_val_pool);
2062   free_alloc_pool (value_pool);
2063   cselib_clear_table ();
2064   htab_delete (cselib_hash_table);
2065   free (used_regs);
2066   used_regs = 0;
2067   cselib_hash_table = 0;
2068   n_useless_values = 0;
2069   next_unknown_value = 0;
2070 }
2071
2072 /* Dump the cselib_val *X to FILE *info.  */
2073
2074 static int
2075 dump_cselib_val (void **x, void *info)
2076 {
2077   cselib_val *v = (cselib_val *)*x;
2078   FILE *out = (FILE *)info;
2079   bool need_lf = true;
2080
2081   print_inline_rtx (out, v->val_rtx, 0);
2082
2083   if (v->locs)
2084     {
2085       struct elt_loc_list *l = v->locs;
2086       if (need_lf)
2087         {
2088           fputc ('\n', out);
2089           need_lf = false;
2090         }
2091       fputs (" locs:", out);
2092       do
2093         {
2094           fprintf (out, "\n  from insn %i ",
2095                    INSN_UID (l->setting_insn));
2096           print_inline_rtx (out, l->loc, 4);
2097         }
2098       while ((l = l->next));
2099       fputc ('\n', out);
2100     }
2101   else
2102     {
2103       fputs (" no locs", out);
2104       need_lf = true;
2105     }
2106
2107   if (v->addr_list)
2108     {
2109       struct elt_list *e = v->addr_list;
2110       if (need_lf)
2111         {
2112           fputc ('\n', out);
2113           need_lf = false;
2114         }
2115       fputs (" addr list:", out);
2116       do
2117         {
2118           fputs ("\n  ", out);
2119           print_inline_rtx (out, e->elt->val_rtx, 2);
2120         }
2121       while ((e = e->next));
2122       fputc ('\n', out);
2123     }
2124   else
2125     {
2126       fputs (" no addrs", out);
2127       need_lf = true;
2128     }
2129
2130   if (v->next_containing_mem == &dummy_val)
2131     fputs (" last mem\n", out);
2132   else if (v->next_containing_mem)
2133     {
2134       fputs (" next mem ", out);
2135       print_inline_rtx (out, v->next_containing_mem->val_rtx, 2);
2136       fputc ('\n', out);
2137     }
2138   else if (need_lf)
2139     fputc ('\n', out);
2140
2141   return 1;
2142 }
2143
2144 /* Dump to OUT everything in the CSELIB table.  */
2145
2146 void
2147 dump_cselib_table (FILE *out)
2148 {
2149   fprintf (out, "cselib hash table:\n");
2150   htab_traverse (cselib_hash_table, dump_cselib_val, out);
2151   if (first_containing_mem != &dummy_val)
2152     {
2153       fputs ("first mem ", out);
2154       print_inline_rtx (out, first_containing_mem->val_rtx, 2);
2155       fputc ('\n', out);
2156     }
2157   fprintf (out, "last unknown value %i\n", next_unknown_value);
2158 }
2159
2160 #include "gt-cselib.h"