re PR c++/69826 (problem with cilkplus pragma and preprocessor variable)
[platform/upstream/gcc.git] / gcc / cselib.c
1 /* Common subexpression elimination library for GNU compiler.
2    Copyright (C) 1987-2016 Free Software Foundation, Inc.
3
4 This file is part of GCC.
5
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
9 version.
10
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3.  If not see
18 <http://www.gnu.org/licenses/>.  */
19
20 #include "config.h"
21 #include "system.h"
22 #include "coretypes.h"
23 #include "backend.h"
24 #include "target.h"
25 #include "rtl.h"
26 #include "tree.h"
27 #include "df.h"
28 #include "tm_p.h"
29 #include "regs.h"
30 #include "emit-rtl.h"
31 #include "dumpfile.h"
32 #include "cselib.h"
33 #include "params.h"
34
35 /* A list of cselib_val structures.  */
36 struct elt_list
37 {
38   struct elt_list *next;
39   cselib_val *elt;
40 };
41
42 static bool cselib_record_memory;
43 static bool cselib_preserve_constants;
44 static bool cselib_any_perm_equivs;
45 static inline void promote_debug_loc (struct elt_loc_list *l);
46 static struct elt_list *new_elt_list (struct elt_list *, cselib_val *);
47 static void new_elt_loc_list (cselib_val *, rtx);
48 static void unchain_one_value (cselib_val *);
49 static void unchain_one_elt_list (struct elt_list **);
50 static void unchain_one_elt_loc_list (struct elt_loc_list **);
51 static void remove_useless_values (void);
52 static int rtx_equal_for_cselib_1 (rtx, rtx, machine_mode);
53 static unsigned int cselib_hash_rtx (rtx, int, machine_mode);
54 static cselib_val *new_cselib_val (unsigned int, machine_mode, rtx);
55 static void add_mem_for_addr (cselib_val *, cselib_val *, rtx);
56 static cselib_val *cselib_lookup_mem (rtx, int);
57 static void cselib_invalidate_regno (unsigned int, machine_mode);
58 static void cselib_invalidate_mem (rtx);
59 static void cselib_record_set (rtx, cselib_val *, cselib_val *);
60 static void cselib_record_sets (rtx_insn *);
61
62 struct expand_value_data
63 {
64   bitmap regs_active;
65   cselib_expand_callback callback;
66   void *callback_arg;
67   bool dummy;
68 };
69
70 static rtx cselib_expand_value_rtx_1 (rtx, struct expand_value_data *, int);
71
72 /* There are three ways in which cselib can look up an rtx:
73    - for a REG, the reg_values table (which is indexed by regno) is used
74    - for a MEM, we recursively look up its address and then follow the
75      addr_list of that value
76    - for everything else, we compute a hash value and go through the hash
77      table.  Since different rtx's can still have the same hash value,
78      this involves walking the table entries for a given value and comparing
79      the locations of the entries with the rtx we are looking up.  */
80
81 struct cselib_hasher : nofree_ptr_hash <cselib_val>
82 {
83   struct key {
84     /* The rtx value and its mode (needed separately for constant
85        integers).  */
86     machine_mode mode;
87     rtx x;
88     /* The mode of the contaning MEM, if any, otherwise VOIDmode.  */
89     machine_mode memmode;
90   };
91   typedef key *compare_type;
92   static inline hashval_t hash (const cselib_val *);
93   static inline bool equal (const cselib_val *, const key *);
94 };
95
96 /* The hash function for our hash table.  The value is always computed with
97    cselib_hash_rtx when adding an element; this function just extracts the
98    hash value from a cselib_val structure.  */
99
100 inline hashval_t
101 cselib_hasher::hash (const cselib_val *v)
102 {
103   return v->hash;
104 }
105
106 /* The equality test for our hash table.  The first argument V is a table
107    element (i.e. a cselib_val), while the second arg X is an rtx.  We know
108    that all callers of htab_find_slot_with_hash will wrap CONST_INTs into a
109    CONST of an appropriate mode.  */
110
111 inline bool
112 cselib_hasher::equal (const cselib_val *v, const key *x_arg)
113 {
114   struct elt_loc_list *l;
115   rtx x = x_arg->x;
116   machine_mode mode = x_arg->mode;
117   machine_mode memmode = x_arg->memmode;
118
119   if (mode != GET_MODE (v->val_rtx))
120     return false;
121
122   if (GET_CODE (x) == VALUE)
123     return x == v->val_rtx;
124
125   /* We don't guarantee that distinct rtx's have different hash values,
126      so we need to do a comparison.  */
127   for (l = v->locs; l; l = l->next)
128     if (rtx_equal_for_cselib_1 (l->loc, x, memmode))
129       {
130         promote_debug_loc (l);
131         return true;
132       }
133
134   return false;
135 }
136
137 /* A table that enables us to look up elts by their value.  */
138 static hash_table<cselib_hasher> *cselib_hash_table;
139
140 /* A table to hold preserved values.  */
141 static hash_table<cselib_hasher> *cselib_preserved_hash_table;
142
143 /* This is a global so we don't have to pass this through every function.
144    It is used in new_elt_loc_list to set SETTING_INSN.  */
145 static rtx_insn *cselib_current_insn;
146
147 /* The unique id that the next create value will take.  */
148 static unsigned int next_uid;
149
150 /* The number of registers we had when the varrays were last resized.  */
151 static unsigned int cselib_nregs;
152
153 /* Count values without known locations, or with only locations that
154    wouldn't have been known except for debug insns.  Whenever this
155    grows too big, we remove these useless values from the table.
156
157    Counting values with only debug values is a bit tricky.  We don't
158    want to increment n_useless_values when we create a value for a
159    debug insn, for this would get n_useless_values out of sync, but we
160    want increment it if all locs in the list that were ever referenced
161    in nondebug insns are removed from the list.
162
163    In the general case, once we do that, we'd have to stop accepting
164    nondebug expressions in the loc list, to avoid having two values
165    equivalent that, without debug insns, would have been made into
166    separate values.  However, because debug insns never introduce
167    equivalences themselves (no assignments), the only means for
168    growing loc lists is through nondebug assignments.  If the locs
169    also happen to be referenced in debug insns, it will work just fine.
170
171    A consequence of this is that there's at most one debug-only loc in
172    each loc list.  If we keep it in the first entry, testing whether
173    we have a debug-only loc list takes O(1).
174
175    Furthermore, since any additional entry in a loc list containing a
176    debug loc would have to come from an assignment (nondebug) that
177    references both the initial debug loc and the newly-equivalent loc,
178    the initial debug loc would be promoted to a nondebug loc, and the
179    loc list would not contain debug locs any more.
180
181    So the only case we have to be careful with in order to keep
182    n_useless_values in sync between debug and nondebug compilations is
183    to avoid incrementing n_useless_values when removing the single loc
184    from a value that turns out to not appear outside debug values.  We
185    increment n_useless_debug_values instead, and leave such values
186    alone until, for other reasons, we garbage-collect useless
187    values.  */
188 static int n_useless_values;
189 static int n_useless_debug_values;
190
191 /* Count values whose locs have been taken exclusively from debug
192    insns for the entire life of the value.  */
193 static int n_debug_values;
194
195 /* Number of useless values before we remove them from the hash table.  */
196 #define MAX_USELESS_VALUES 32
197
198 /* This table maps from register number to values.  It does not
199    contain pointers to cselib_val structures, but rather elt_lists.
200    The purpose is to be able to refer to the same register in
201    different modes.  The first element of the list defines the mode in
202    which the register was set; if the mode is unknown or the value is
203    no longer valid in that mode, ELT will be NULL for the first
204    element.  */
205 static struct elt_list **reg_values;
206 static unsigned int reg_values_size;
207 #define REG_VALUES(i) reg_values[i]
208
209 /* The largest number of hard regs used by any entry added to the
210    REG_VALUES table.  Cleared on each cselib_clear_table() invocation.  */
211 static unsigned int max_value_regs;
212
213 /* Here the set of indices I with REG_VALUES(I) != 0 is saved.  This is used
214    in cselib_clear_table() for fast emptying.  */
215 static unsigned int *used_regs;
216 static unsigned int n_used_regs;
217
218 /* We pass this to cselib_invalidate_mem to invalidate all of
219    memory for a non-const call instruction.  */
220 static GTY(()) rtx callmem;
221
222 /* Set by discard_useless_locs if it deleted the last location of any
223    value.  */
224 static int values_became_useless;
225
226 /* Used as stop element of the containing_mem list so we can check
227    presence in the list by checking the next pointer.  */
228 static cselib_val dummy_val;
229
230 /* If non-NULL, value of the eliminated arg_pointer_rtx or frame_pointer_rtx
231    that is constant through the whole function and should never be
232    eliminated.  */
233 static cselib_val *cfa_base_preserved_val;
234 static unsigned int cfa_base_preserved_regno = INVALID_REGNUM;
235
236 /* Used to list all values that contain memory reference.
237    May or may not contain the useless values - the list is compacted
238    each time memory is invalidated.  */
239 static cselib_val *first_containing_mem = &dummy_val;
240
241 static object_allocator<elt_list> elt_list_pool ("elt_list");
242 static object_allocator<elt_loc_list> elt_loc_list_pool ("elt_loc_list");
243 static object_allocator<cselib_val> cselib_val_pool ("cselib_val_list");
244
245 static pool_allocator value_pool ("value", RTX_CODE_SIZE (VALUE));
246
247 /* If nonnull, cselib will call this function before freeing useless
248    VALUEs.  A VALUE is deemed useless if its "locs" field is null.  */
249 void (*cselib_discard_hook) (cselib_val *);
250
251 /* If nonnull, cselib will call this function before recording sets or
252    even clobbering outputs of INSN.  All the recorded sets will be
253    represented in the array sets[n_sets].  new_val_min can be used to
254    tell whether values present in sets are introduced by this
255    instruction.  */
256 void (*cselib_record_sets_hook) (rtx_insn *insn, struct cselib_set *sets,
257                                  int n_sets);
258
259 #define PRESERVED_VALUE_P(RTX) \
260   (RTL_FLAG_CHECK1 ("PRESERVED_VALUE_P", (RTX), VALUE)->unchanging)
261
262 #define SP_BASED_VALUE_P(RTX) \
263   (RTL_FLAG_CHECK1 ("SP_BASED_VALUE_P", (RTX), VALUE)->jump)
264
265 \f
266
267 /* Allocate a struct elt_list and fill in its two elements with the
268    arguments.  */
269
270 static inline struct elt_list *
271 new_elt_list (struct elt_list *next, cselib_val *elt)
272 {
273   elt_list *el = elt_list_pool.allocate ();
274   el->next = next;
275   el->elt = elt;
276   return el;
277 }
278
279 /* Allocate a struct elt_loc_list with LOC and prepend it to VAL's loc
280    list.  */
281
282 static inline void
283 new_elt_loc_list (cselib_val *val, rtx loc)
284 {
285   struct elt_loc_list *el, *next = val->locs;
286
287   gcc_checking_assert (!next || !next->setting_insn
288                        || !DEBUG_INSN_P (next->setting_insn)
289                        || cselib_current_insn == next->setting_insn);
290
291   /* If we're creating the first loc in a debug insn context, we've
292      just created a debug value.  Count it.  */
293   if (!next && cselib_current_insn && DEBUG_INSN_P (cselib_current_insn))
294     n_debug_values++;
295
296   val = canonical_cselib_val (val);
297   next = val->locs;
298
299   if (GET_CODE (loc) == VALUE)
300     {
301       loc = canonical_cselib_val (CSELIB_VAL_PTR (loc))->val_rtx;
302
303       gcc_checking_assert (PRESERVED_VALUE_P (loc)
304                            == PRESERVED_VALUE_P (val->val_rtx));
305
306       if (val->val_rtx == loc)
307         return;
308       else if (val->uid > CSELIB_VAL_PTR (loc)->uid)
309         {
310           /* Reverse the insertion.  */
311           new_elt_loc_list (CSELIB_VAL_PTR (loc), val->val_rtx);
312           return;
313         }
314
315       gcc_checking_assert (val->uid < CSELIB_VAL_PTR (loc)->uid);
316
317       if (CSELIB_VAL_PTR (loc)->locs)
318         {
319           /* Bring all locs from LOC to VAL.  */
320           for (el = CSELIB_VAL_PTR (loc)->locs; el->next; el = el->next)
321             {
322               /* Adjust values that have LOC as canonical so that VAL
323                  becomes their canonical.  */
324               if (el->loc && GET_CODE (el->loc) == VALUE)
325                 {
326                   gcc_checking_assert (CSELIB_VAL_PTR (el->loc)->locs->loc
327                                        == loc);
328                   CSELIB_VAL_PTR (el->loc)->locs->loc = val->val_rtx;
329                 }
330             }
331           el->next = val->locs;
332           next = val->locs = CSELIB_VAL_PTR (loc)->locs;
333         }
334
335       if (CSELIB_VAL_PTR (loc)->addr_list)
336         {
337           /* Bring in addr_list into canonical node.  */
338           struct elt_list *last = CSELIB_VAL_PTR (loc)->addr_list;
339           while (last->next)
340             last = last->next;
341           last->next = val->addr_list;
342           val->addr_list = CSELIB_VAL_PTR (loc)->addr_list;
343           CSELIB_VAL_PTR (loc)->addr_list = NULL;
344         }
345
346       if (CSELIB_VAL_PTR (loc)->next_containing_mem != NULL
347           && val->next_containing_mem == NULL)
348         {
349           /* Add VAL to the containing_mem list after LOC.  LOC will
350              be removed when we notice it doesn't contain any
351              MEMs.  */
352           val->next_containing_mem = CSELIB_VAL_PTR (loc)->next_containing_mem;
353           CSELIB_VAL_PTR (loc)->next_containing_mem = val;
354         }
355
356       /* Chain LOC back to VAL.  */
357       el = elt_loc_list_pool.allocate ();
358       el->loc = val->val_rtx;
359       el->setting_insn = cselib_current_insn;
360       el->next = NULL;
361       CSELIB_VAL_PTR (loc)->locs = el;
362     }
363
364   el = elt_loc_list_pool.allocate ();
365   el->loc = loc;
366   el->setting_insn = cselib_current_insn;
367   el->next = next;
368   val->locs = el;
369 }
370
371 /* Promote loc L to a nondebug cselib_current_insn if L is marked as
372    originating from a debug insn, maintaining the debug values
373    count.  */
374
375 static inline void
376 promote_debug_loc (struct elt_loc_list *l)
377 {
378   if (l && l->setting_insn && DEBUG_INSN_P (l->setting_insn)
379       && (!cselib_current_insn || !DEBUG_INSN_P (cselib_current_insn)))
380     {
381       n_debug_values--;
382       l->setting_insn = cselib_current_insn;
383       if (cselib_preserve_constants && l->next)
384         {
385           gcc_assert (l->next->setting_insn
386                       && DEBUG_INSN_P (l->next->setting_insn)
387                       && !l->next->next);
388           l->next->setting_insn = cselib_current_insn;
389         }
390       else
391         gcc_assert (!l->next);
392     }
393 }
394
395 /* The elt_list at *PL is no longer needed.  Unchain it and free its
396    storage.  */
397
398 static inline void
399 unchain_one_elt_list (struct elt_list **pl)
400 {
401   struct elt_list *l = *pl;
402
403   *pl = l->next;
404   elt_list_pool.remove (l);
405 }
406
407 /* Likewise for elt_loc_lists.  */
408
409 static void
410 unchain_one_elt_loc_list (struct elt_loc_list **pl)
411 {
412   struct elt_loc_list *l = *pl;
413
414   *pl = l->next;
415   elt_loc_list_pool.remove (l);
416 }
417
418 /* Likewise for cselib_vals.  This also frees the addr_list associated with
419    V.  */
420
421 static void
422 unchain_one_value (cselib_val *v)
423 {
424   while (v->addr_list)
425     unchain_one_elt_list (&v->addr_list);
426
427   cselib_val_pool.remove (v);
428 }
429
430 /* Remove all entries from the hash table.  Also used during
431    initialization.  */
432
433 void
434 cselib_clear_table (void)
435 {
436   cselib_reset_table (1);
437 }
438
439 /* Return TRUE if V is a constant, a function invariant or a VALUE
440    equivalence; FALSE otherwise.  */
441
442 static bool
443 invariant_or_equiv_p (cselib_val *v)
444 {
445   struct elt_loc_list *l;
446
447   if (v == cfa_base_preserved_val)
448     return true;
449
450   /* Keep VALUE equivalences around.  */
451   for (l = v->locs; l; l = l->next)
452     if (GET_CODE (l->loc) == VALUE)
453       return true;
454
455   if (v->locs != NULL
456       && v->locs->next == NULL)
457     {
458       if (CONSTANT_P (v->locs->loc)
459           && (GET_CODE (v->locs->loc) != CONST
460               || !references_value_p (v->locs->loc, 0)))
461         return true;
462       /* Although a debug expr may be bound to different expressions,
463          we can preserve it as if it was constant, to get unification
464          and proper merging within var-tracking.  */
465       if (GET_CODE (v->locs->loc) == DEBUG_EXPR
466           || GET_CODE (v->locs->loc) == DEBUG_IMPLICIT_PTR
467           || GET_CODE (v->locs->loc) == ENTRY_VALUE
468           || GET_CODE (v->locs->loc) == DEBUG_PARAMETER_REF)
469         return true;
470
471       /* (plus (value V) (const_int C)) is invariant iff V is invariant.  */
472       if (GET_CODE (v->locs->loc) == PLUS
473           && CONST_INT_P (XEXP (v->locs->loc, 1))
474           && GET_CODE (XEXP (v->locs->loc, 0)) == VALUE
475           && invariant_or_equiv_p (CSELIB_VAL_PTR (XEXP (v->locs->loc, 0))))
476         return true;
477     }
478
479   return false;
480 }
481
482 /* Remove from hash table all VALUEs except constants, function
483    invariants and VALUE equivalences.  */
484
485 int
486 preserve_constants_and_equivs (cselib_val **x, void *info ATTRIBUTE_UNUSED)
487 {
488   cselib_val *v = *x;
489
490   if (invariant_or_equiv_p (v))
491     {
492       cselib_hasher::key lookup = {
493         GET_MODE (v->val_rtx), v->val_rtx, VOIDmode
494       };
495       cselib_val **slot
496         = cselib_preserved_hash_table->find_slot_with_hash (&lookup,
497                                                            v->hash, INSERT);
498       gcc_assert (!*slot);
499       *slot = v;
500     }
501
502   cselib_hash_table->clear_slot (x);
503
504   return 1;
505 }
506
507 /* Remove all entries from the hash table, arranging for the next
508    value to be numbered NUM.  */
509
510 void
511 cselib_reset_table (unsigned int num)
512 {
513   unsigned int i;
514
515   max_value_regs = 0;
516
517   if (cfa_base_preserved_val)
518     {
519       unsigned int regno = cfa_base_preserved_regno;
520       unsigned int new_used_regs = 0;
521       for (i = 0; i < n_used_regs; i++)
522         if (used_regs[i] == regno)
523           {
524             new_used_regs = 1;
525             continue;
526           }
527         else
528           REG_VALUES (used_regs[i]) = 0;
529       gcc_assert (new_used_regs == 1);
530       n_used_regs = new_used_regs;
531       used_regs[0] = regno;
532       max_value_regs
533         = hard_regno_nregs[regno][GET_MODE (cfa_base_preserved_val->locs->loc)];
534     }
535   else
536     {
537       for (i = 0; i < n_used_regs; i++)
538         REG_VALUES (used_regs[i]) = 0;
539       n_used_regs = 0;
540     }
541
542   if (cselib_preserve_constants)
543     cselib_hash_table->traverse <void *, preserve_constants_and_equivs>
544       (NULL);
545   else
546     {
547       cselib_hash_table->empty ();
548       gcc_checking_assert (!cselib_any_perm_equivs);
549     }
550
551   n_useless_values = 0;
552   n_useless_debug_values = 0;
553   n_debug_values = 0;
554
555   next_uid = num;
556
557   first_containing_mem = &dummy_val;
558 }
559
560 /* Return the number of the next value that will be generated.  */
561
562 unsigned int
563 cselib_get_next_uid (void)
564 {
565   return next_uid;
566 }
567
568 /* Search for X, whose hashcode is HASH, in CSELIB_HASH_TABLE,
569    INSERTing if requested.  When X is part of the address of a MEM,
570    MEMMODE should specify the mode of the MEM.  */
571
572 static cselib_val **
573 cselib_find_slot (machine_mode mode, rtx x, hashval_t hash,
574                   enum insert_option insert, machine_mode memmode)
575 {
576   cselib_val **slot = NULL;
577   cselib_hasher::key lookup = { mode, x, memmode };
578   if (cselib_preserve_constants)
579     slot = cselib_preserved_hash_table->find_slot_with_hash (&lookup, hash,
580                                                              NO_INSERT);
581   if (!slot)
582     slot = cselib_hash_table->find_slot_with_hash (&lookup, hash, insert);
583   return slot;
584 }
585
586 /* Return true if X contains a VALUE rtx.  If ONLY_USELESS is set, we
587    only return true for values which point to a cselib_val whose value
588    element has been set to zero, which implies the cselib_val will be
589    removed.  */
590
591 int
592 references_value_p (const_rtx x, int only_useless)
593 {
594   const enum rtx_code code = GET_CODE (x);
595   const char *fmt = GET_RTX_FORMAT (code);
596   int i, j;
597
598   if (GET_CODE (x) == VALUE
599       && (! only_useless ||
600           (CSELIB_VAL_PTR (x)->locs == 0 && !PRESERVED_VALUE_P (x))))
601     return 1;
602
603   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
604     {
605       if (fmt[i] == 'e' && references_value_p (XEXP (x, i), only_useless))
606         return 1;
607       else if (fmt[i] == 'E')
608         for (j = 0; j < XVECLEN (x, i); j++)
609           if (references_value_p (XVECEXP (x, i, j), only_useless))
610             return 1;
611     }
612
613   return 0;
614 }
615
616 /* For all locations found in X, delete locations that reference useless
617    values (i.e. values without any location).  Called through
618    htab_traverse.  */
619
620 int
621 discard_useless_locs (cselib_val **x, void *info ATTRIBUTE_UNUSED)
622 {
623   cselib_val *v = *x;
624   struct elt_loc_list **p = &v->locs;
625   bool had_locs = v->locs != NULL;
626   rtx_insn *setting_insn = v->locs ? v->locs->setting_insn : NULL;
627
628   while (*p)
629     {
630       if (references_value_p ((*p)->loc, 1))
631         unchain_one_elt_loc_list (p);
632       else
633         p = &(*p)->next;
634     }
635
636   if (had_locs && v->locs == 0 && !PRESERVED_VALUE_P (v->val_rtx))
637     {
638       if (setting_insn && DEBUG_INSN_P (setting_insn))
639         n_useless_debug_values++;
640       else
641         n_useless_values++;
642       values_became_useless = 1;
643     }
644   return 1;
645 }
646
647 /* If X is a value with no locations, remove it from the hashtable.  */
648
649 int
650 discard_useless_values (cselib_val **x, void *info ATTRIBUTE_UNUSED)
651 {
652   cselib_val *v = *x;
653
654   if (v->locs == 0 && !PRESERVED_VALUE_P (v->val_rtx))
655     {
656       if (cselib_discard_hook)
657         cselib_discard_hook (v);
658
659       CSELIB_VAL_PTR (v->val_rtx) = NULL;
660       cselib_hash_table->clear_slot (x);
661       unchain_one_value (v);
662       n_useless_values--;
663     }
664
665   return 1;
666 }
667
668 /* Clean out useless values (i.e. those which no longer have locations
669    associated with them) from the hash table.  */
670
671 static void
672 remove_useless_values (void)
673 {
674   cselib_val **p, *v;
675
676   /* First pass: eliminate locations that reference the value.  That in
677      turn can make more values useless.  */
678   do
679     {
680       values_became_useless = 0;
681       cselib_hash_table->traverse <void *, discard_useless_locs> (NULL);
682     }
683   while (values_became_useless);
684
685   /* Second pass: actually remove the values.  */
686
687   p = &first_containing_mem;
688   for (v = *p; v != &dummy_val; v = v->next_containing_mem)
689     if (v->locs && v == canonical_cselib_val (v))
690       {
691         *p = v;
692         p = &(*p)->next_containing_mem;
693       }
694   *p = &dummy_val;
695
696   n_useless_values += n_useless_debug_values;
697   n_debug_values -= n_useless_debug_values;
698   n_useless_debug_values = 0;
699
700   cselib_hash_table->traverse <void *, discard_useless_values> (NULL);
701
702   gcc_assert (!n_useless_values);
703 }
704
705 /* Arrange for a value to not be removed from the hash table even if
706    it becomes useless.  */
707
708 void
709 cselib_preserve_value (cselib_val *v)
710 {
711   PRESERVED_VALUE_P (v->val_rtx) = 1;
712 }
713
714 /* Test whether a value is preserved.  */
715
716 bool
717 cselib_preserved_value_p (cselib_val *v)
718 {
719   return PRESERVED_VALUE_P (v->val_rtx);
720 }
721
722 /* Arrange for a REG value to be assumed constant through the whole function,
723    never invalidated and preserved across cselib_reset_table calls.  */
724
725 void
726 cselib_preserve_cfa_base_value (cselib_val *v, unsigned int regno)
727 {
728   if (cselib_preserve_constants
729       && v->locs
730       && REG_P (v->locs->loc))
731     {
732       cfa_base_preserved_val = v;
733       cfa_base_preserved_regno = regno;
734     }
735 }
736
737 /* Clean all non-constant expressions in the hash table, but retain
738    their values.  */
739
740 void
741 cselib_preserve_only_values (void)
742 {
743   int i;
744
745   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
746     cselib_invalidate_regno (i, reg_raw_mode[i]);
747
748   cselib_invalidate_mem (callmem);
749
750   remove_useless_values ();
751
752   gcc_assert (first_containing_mem == &dummy_val);
753 }
754
755 /* Arrange for a value to be marked as based on stack pointer
756    for find_base_term purposes.  */
757
758 void
759 cselib_set_value_sp_based (cselib_val *v)
760 {
761   SP_BASED_VALUE_P (v->val_rtx) = 1;
762 }
763
764 /* Test whether a value is based on stack pointer for
765    find_base_term purposes.  */
766
767 bool
768 cselib_sp_based_value_p (cselib_val *v)
769 {
770   return SP_BASED_VALUE_P (v->val_rtx);
771 }
772
773 /* Return the mode in which a register was last set.  If X is not a
774    register, return its mode.  If the mode in which the register was
775    set is not known, or the value was already clobbered, return
776    VOIDmode.  */
777
778 machine_mode
779 cselib_reg_set_mode (const_rtx x)
780 {
781   if (!REG_P (x))
782     return GET_MODE (x);
783
784   if (REG_VALUES (REGNO (x)) == NULL
785       || REG_VALUES (REGNO (x))->elt == NULL)
786     return VOIDmode;
787
788   return GET_MODE (REG_VALUES (REGNO (x))->elt->val_rtx);
789 }
790
791 /* Return nonzero if we can prove that X and Y contain the same value, taking
792    our gathered information into account.  */
793
794 int
795 rtx_equal_for_cselib_p (rtx x, rtx y)
796 {
797   return rtx_equal_for_cselib_1 (x, y, VOIDmode);
798 }
799
800 /* If x is a PLUS or an autoinc operation, expand the operation,
801    storing the offset, if any, in *OFF.  */
802
803 static rtx
804 autoinc_split (rtx x, rtx *off, machine_mode memmode)
805 {
806   switch (GET_CODE (x))
807     {
808     case PLUS:
809       *off = XEXP (x, 1);
810       return XEXP (x, 0);
811
812     case PRE_DEC:
813       if (memmode == VOIDmode)
814         return x;
815
816       *off = GEN_INT (-GET_MODE_SIZE (memmode));
817       return XEXP (x, 0);
818       break;
819
820     case PRE_INC:
821       if (memmode == VOIDmode)
822         return x;
823
824       *off = GEN_INT (GET_MODE_SIZE (memmode));
825       return XEXP (x, 0);
826
827     case PRE_MODIFY:
828       return XEXP (x, 1);
829
830     case POST_DEC:
831     case POST_INC:
832     case POST_MODIFY:
833       return XEXP (x, 0);
834
835     default:
836       return x;
837     }
838 }
839
840 /* Return nonzero if we can prove that X and Y contain the same value,
841    taking our gathered information into account.  MEMMODE holds the
842    mode of the enclosing MEM, if any, as required to deal with autoinc
843    addressing modes.  If X and Y are not (known to be) part of
844    addresses, MEMMODE should be VOIDmode.  */
845
846 static int
847 rtx_equal_for_cselib_1 (rtx x, rtx y, machine_mode memmode)
848 {
849   enum rtx_code code;
850   const char *fmt;
851   int i;
852
853   if (REG_P (x) || MEM_P (x))
854     {
855       cselib_val *e = cselib_lookup (x, GET_MODE (x), 0, memmode);
856
857       if (e)
858         x = e->val_rtx;
859     }
860
861   if (REG_P (y) || MEM_P (y))
862     {
863       cselib_val *e = cselib_lookup (y, GET_MODE (y), 0, memmode);
864
865       if (e)
866         y = e->val_rtx;
867     }
868
869   if (x == y)
870     return 1;
871
872   if (GET_CODE (x) == VALUE)
873     {
874       cselib_val *e = canonical_cselib_val (CSELIB_VAL_PTR (x));
875       struct elt_loc_list *l;
876
877       if (GET_CODE (y) == VALUE)
878         return e == canonical_cselib_val (CSELIB_VAL_PTR (y));
879
880       for (l = e->locs; l; l = l->next)
881         {
882           rtx t = l->loc;
883
884           /* Avoid infinite recursion.  We know we have the canonical
885              value, so we can just skip any values in the equivalence
886              list.  */
887           if (REG_P (t) || MEM_P (t) || GET_CODE (t) == VALUE)
888             continue;
889           else if (rtx_equal_for_cselib_1 (t, y, memmode))
890             return 1;
891         }
892
893       return 0;
894     }
895   else if (GET_CODE (y) == VALUE)
896     {
897       cselib_val *e = canonical_cselib_val (CSELIB_VAL_PTR (y));
898       struct elt_loc_list *l;
899
900       for (l = e->locs; l; l = l->next)
901         {
902           rtx t = l->loc;
903
904           if (REG_P (t) || MEM_P (t) || GET_CODE (t) == VALUE)
905             continue;
906           else if (rtx_equal_for_cselib_1 (x, t, memmode))
907             return 1;
908         }
909
910       return 0;
911     }
912
913   if (GET_MODE (x) != GET_MODE (y))
914     return 0;
915
916   if (GET_CODE (x) != GET_CODE (y))
917     {
918       rtx xorig = x, yorig = y;
919       rtx xoff = NULL, yoff = NULL;
920
921       x = autoinc_split (x, &xoff, memmode);
922       y = autoinc_split (y, &yoff, memmode);
923
924       if (!xoff != !yoff)
925         return 0;
926
927       if (xoff && !rtx_equal_for_cselib_1 (xoff, yoff, memmode))
928         return 0;
929
930       /* Don't recurse if nothing changed.  */
931       if (x != xorig || y != yorig)
932         return rtx_equal_for_cselib_1 (x, y, memmode);
933
934       return 0;
935     }
936
937   /* These won't be handled correctly by the code below.  */
938   switch (GET_CODE (x))
939     {
940     CASE_CONST_UNIQUE:
941     case DEBUG_EXPR:
942       return 0;
943
944     case DEBUG_IMPLICIT_PTR:
945       return DEBUG_IMPLICIT_PTR_DECL (x)
946              == DEBUG_IMPLICIT_PTR_DECL (y);
947
948     case DEBUG_PARAMETER_REF:
949       return DEBUG_PARAMETER_REF_DECL (x)
950              == DEBUG_PARAMETER_REF_DECL (y);
951
952     case ENTRY_VALUE:
953       /* ENTRY_VALUEs are function invariant, it is thus undesirable to
954          use rtx_equal_for_cselib_1 to compare the operands.  */
955       return rtx_equal_p (ENTRY_VALUE_EXP (x), ENTRY_VALUE_EXP (y));
956
957     case LABEL_REF:
958       return LABEL_REF_LABEL (x) == LABEL_REF_LABEL (y);
959
960     case REG:
961       return REGNO (x) == REGNO (y);
962
963     case MEM:
964       /* We have to compare any autoinc operations in the addresses
965          using this MEM's mode.  */
966       return rtx_equal_for_cselib_1 (XEXP (x, 0), XEXP (y, 0), GET_MODE (x));
967
968     default:
969       break;
970     }
971
972   code = GET_CODE (x);
973   fmt = GET_RTX_FORMAT (code);
974
975   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
976     {
977       int j;
978
979       switch (fmt[i])
980         {
981         case 'w':
982           if (XWINT (x, i) != XWINT (y, i))
983             return 0;
984           break;
985
986         case 'n':
987         case 'i':
988           if (XINT (x, i) != XINT (y, i))
989             return 0;
990           break;
991
992         case 'V':
993         case 'E':
994           /* Two vectors must have the same length.  */
995           if (XVECLEN (x, i) != XVECLEN (y, i))
996             return 0;
997
998           /* And the corresponding elements must match.  */
999           for (j = 0; j < XVECLEN (x, i); j++)
1000             if (! rtx_equal_for_cselib_1 (XVECEXP (x, i, j),
1001                                           XVECEXP (y, i, j), memmode))
1002               return 0;
1003           break;
1004
1005         case 'e':
1006           if (i == 1
1007               && targetm.commutative_p (x, UNKNOWN)
1008               && rtx_equal_for_cselib_1 (XEXP (x, 1), XEXP (y, 0), memmode)
1009               && rtx_equal_for_cselib_1 (XEXP (x, 0), XEXP (y, 1), memmode))
1010             return 1;
1011           if (! rtx_equal_for_cselib_1 (XEXP (x, i), XEXP (y, i), memmode))
1012             return 0;
1013           break;
1014
1015         case 'S':
1016         case 's':
1017           if (strcmp (XSTR (x, i), XSTR (y, i)))
1018             return 0;
1019           break;
1020
1021         case 'u':
1022           /* These are just backpointers, so they don't matter.  */
1023           break;
1024
1025         case '0':
1026         case 't':
1027           break;
1028
1029           /* It is believed that rtx's at this level will never
1030              contain anything but integers and other rtx's,
1031              except for within LABEL_REFs and SYMBOL_REFs.  */
1032         default:
1033           gcc_unreachable ();
1034         }
1035     }
1036   return 1;
1037 }
1038
1039 /* Hash an rtx.  Return 0 if we couldn't hash the rtx.
1040    For registers and memory locations, we look up their cselib_val structure
1041    and return its VALUE element.
1042    Possible reasons for return 0 are: the object is volatile, or we couldn't
1043    find a register or memory location in the table and CREATE is zero.  If
1044    CREATE is nonzero, table elts are created for regs and mem.
1045    N.B. this hash function returns the same hash value for RTXes that
1046    differ only in the order of operands, thus it is suitable for comparisons
1047    that take commutativity into account.
1048    If we wanted to also support associative rules, we'd have to use a different
1049    strategy to avoid returning spurious 0, e.g. return ~(~0U >> 1) .
1050    MEMMODE indicates the mode of an enclosing MEM, and it's only
1051    used to compute autoinc values.
1052    We used to have a MODE argument for hashing for CONST_INTs, but that
1053    didn't make sense, since it caused spurious hash differences between
1054     (set (reg:SI 1) (const_int))
1055     (plus:SI (reg:SI 2) (reg:SI 1))
1056    and
1057     (plus:SI (reg:SI 2) (const_int))
1058    If the mode is important in any context, it must be checked specifically
1059    in a comparison anyway, since relying on hash differences is unsafe.  */
1060
1061 static unsigned int
1062 cselib_hash_rtx (rtx x, int create, machine_mode memmode)
1063 {
1064   cselib_val *e;
1065   int i, j;
1066   enum rtx_code code;
1067   const char *fmt;
1068   unsigned int hash = 0;
1069
1070   code = GET_CODE (x);
1071   hash += (unsigned) code + (unsigned) GET_MODE (x);
1072
1073   switch (code)
1074     {
1075     case VALUE:
1076       e = CSELIB_VAL_PTR (x);
1077       return e->hash;
1078
1079     case MEM:
1080     case REG:
1081       e = cselib_lookup (x, GET_MODE (x), create, memmode);
1082       if (! e)
1083         return 0;
1084
1085       return e->hash;
1086
1087     case DEBUG_EXPR:
1088       hash += ((unsigned) DEBUG_EXPR << 7)
1089               + DEBUG_TEMP_UID (DEBUG_EXPR_TREE_DECL (x));
1090       return hash ? hash : (unsigned int) DEBUG_EXPR;
1091
1092     case DEBUG_IMPLICIT_PTR:
1093       hash += ((unsigned) DEBUG_IMPLICIT_PTR << 7)
1094               + DECL_UID (DEBUG_IMPLICIT_PTR_DECL (x));
1095       return hash ? hash : (unsigned int) DEBUG_IMPLICIT_PTR;
1096
1097     case DEBUG_PARAMETER_REF:
1098       hash += ((unsigned) DEBUG_PARAMETER_REF << 7)
1099               + DECL_UID (DEBUG_PARAMETER_REF_DECL (x));
1100       return hash ? hash : (unsigned int) DEBUG_PARAMETER_REF;
1101
1102     case ENTRY_VALUE:
1103       /* ENTRY_VALUEs are function invariant, thus try to avoid
1104          recursing on argument if ENTRY_VALUE is one of the
1105          forms emitted by expand_debug_expr, otherwise
1106          ENTRY_VALUE hash would depend on the current value
1107          in some register or memory.  */
1108       if (REG_P (ENTRY_VALUE_EXP (x)))
1109         hash += (unsigned int) REG
1110                 + (unsigned int) GET_MODE (ENTRY_VALUE_EXP (x))
1111                 + (unsigned int) REGNO (ENTRY_VALUE_EXP (x));
1112       else if (MEM_P (ENTRY_VALUE_EXP (x))
1113                && REG_P (XEXP (ENTRY_VALUE_EXP (x), 0)))
1114         hash += (unsigned int) MEM
1115                 + (unsigned int) GET_MODE (XEXP (ENTRY_VALUE_EXP (x), 0))
1116                 + (unsigned int) REGNO (XEXP (ENTRY_VALUE_EXP (x), 0));
1117       else
1118         hash += cselib_hash_rtx (ENTRY_VALUE_EXP (x), create, memmode);
1119       return hash ? hash : (unsigned int) ENTRY_VALUE;
1120
1121     case CONST_INT:
1122       hash += ((unsigned) CONST_INT << 7) + UINTVAL (x);
1123       return hash ? hash : (unsigned int) CONST_INT;
1124
1125     case CONST_WIDE_INT:
1126       for (i = 0; i < CONST_WIDE_INT_NUNITS (x); i++)
1127         hash += CONST_WIDE_INT_ELT (x, i);
1128       return hash;
1129
1130     case CONST_DOUBLE:
1131       /* This is like the general case, except that it only counts
1132          the integers representing the constant.  */
1133       hash += (unsigned) code + (unsigned) GET_MODE (x);
1134       if (TARGET_SUPPORTS_WIDE_INT == 0 && GET_MODE (x) == VOIDmode)
1135         hash += ((unsigned) CONST_DOUBLE_LOW (x)
1136                  + (unsigned) CONST_DOUBLE_HIGH (x));
1137       else
1138         hash += real_hash (CONST_DOUBLE_REAL_VALUE (x));
1139       return hash ? hash : (unsigned int) CONST_DOUBLE;
1140
1141     case CONST_FIXED:
1142       hash += (unsigned int) code + (unsigned int) GET_MODE (x);
1143       hash += fixed_hash (CONST_FIXED_VALUE (x));
1144       return hash ? hash : (unsigned int) CONST_FIXED;
1145
1146     case CONST_VECTOR:
1147       {
1148         int units;
1149         rtx elt;
1150
1151         units = CONST_VECTOR_NUNITS (x);
1152
1153         for (i = 0; i < units; ++i)
1154           {
1155             elt = CONST_VECTOR_ELT (x, i);
1156             hash += cselib_hash_rtx (elt, 0, memmode);
1157           }
1158
1159         return hash;
1160       }
1161
1162       /* Assume there is only one rtx object for any given label.  */
1163     case LABEL_REF:
1164       /* We don't hash on the address of the CODE_LABEL to avoid bootstrap
1165          differences and differences between each stage's debugging dumps.  */
1166       hash += (((unsigned int) LABEL_REF << 7)
1167                + CODE_LABEL_NUMBER (LABEL_REF_LABEL (x)));
1168       return hash ? hash : (unsigned int) LABEL_REF;
1169
1170     case SYMBOL_REF:
1171       {
1172         /* Don't hash on the symbol's address to avoid bootstrap differences.
1173            Different hash values may cause expressions to be recorded in
1174            different orders and thus different registers to be used in the
1175            final assembler.  This also avoids differences in the dump files
1176            between various stages.  */
1177         unsigned int h = 0;
1178         const unsigned char *p = (const unsigned char *) XSTR (x, 0);
1179
1180         while (*p)
1181           h += (h << 7) + *p++; /* ??? revisit */
1182
1183         hash += ((unsigned int) SYMBOL_REF << 7) + h;
1184         return hash ? hash : (unsigned int) SYMBOL_REF;
1185       }
1186
1187     case PRE_DEC:
1188     case PRE_INC:
1189       /* We can't compute these without knowing the MEM mode.  */
1190       gcc_assert (memmode != VOIDmode);
1191       i = GET_MODE_SIZE (memmode);
1192       if (code == PRE_DEC)
1193         i = -i;
1194       /* Adjust the hash so that (mem:MEMMODE (pre_* (reg))) hashes
1195          like (mem:MEMMODE (plus (reg) (const_int I))).  */
1196       hash += (unsigned) PLUS - (unsigned)code
1197         + cselib_hash_rtx (XEXP (x, 0), create, memmode)
1198         + cselib_hash_rtx (GEN_INT (i), create, memmode);
1199       return hash ? hash : 1 + (unsigned) PLUS;
1200
1201     case PRE_MODIFY:
1202       gcc_assert (memmode != VOIDmode);
1203       return cselib_hash_rtx (XEXP (x, 1), create, memmode);
1204
1205     case POST_DEC:
1206     case POST_INC:
1207     case POST_MODIFY:
1208       gcc_assert (memmode != VOIDmode);
1209       return cselib_hash_rtx (XEXP (x, 0), create, memmode);
1210
1211     case PC:
1212     case CC0:
1213     case CALL:
1214     case UNSPEC_VOLATILE:
1215       return 0;
1216
1217     case ASM_OPERANDS:
1218       if (MEM_VOLATILE_P (x))
1219         return 0;
1220
1221       break;
1222
1223     default:
1224       break;
1225     }
1226
1227   i = GET_RTX_LENGTH (code) - 1;
1228   fmt = GET_RTX_FORMAT (code);
1229   for (; i >= 0; i--)
1230     {
1231       switch (fmt[i])
1232         {
1233         case 'e':
1234           {
1235             rtx tem = XEXP (x, i);
1236             unsigned int tem_hash = cselib_hash_rtx (tem, create, memmode);
1237
1238             if (tem_hash == 0)
1239               return 0;
1240
1241             hash += tem_hash;
1242           }
1243           break;
1244         case 'E':
1245           for (j = 0; j < XVECLEN (x, i); j++)
1246             {
1247               unsigned int tem_hash
1248                 = cselib_hash_rtx (XVECEXP (x, i, j), create, memmode);
1249
1250               if (tem_hash == 0)
1251                 return 0;
1252
1253               hash += tem_hash;
1254             }
1255           break;
1256
1257         case 's':
1258           {
1259             const unsigned char *p = (const unsigned char *) XSTR (x, i);
1260
1261             if (p)
1262               while (*p)
1263                 hash += *p++;
1264             break;
1265           }
1266
1267         case 'i':
1268           hash += XINT (x, i);
1269           break;
1270
1271         case '0':
1272         case 't':
1273           /* unused */
1274           break;
1275
1276         default:
1277           gcc_unreachable ();
1278         }
1279     }
1280
1281   return hash ? hash : 1 + (unsigned int) GET_CODE (x);
1282 }
1283
1284 /* Create a new value structure for VALUE and initialize it.  The mode of the
1285    value is MODE.  */
1286
1287 static inline cselib_val *
1288 new_cselib_val (unsigned int hash, machine_mode mode, rtx x)
1289 {
1290   cselib_val *e = cselib_val_pool.allocate ();
1291
1292   gcc_assert (hash);
1293   gcc_assert (next_uid);
1294
1295   e->hash = hash;
1296   e->uid = next_uid++;
1297   /* We use an alloc pool to allocate this RTL construct because it
1298      accounts for about 8% of the overall memory usage.  We know
1299      precisely when we can have VALUE RTXen (when cselib is active)
1300      so we don't need to put them in garbage collected memory.
1301      ??? Why should a VALUE be an RTX in the first place?  */
1302   e->val_rtx = (rtx_def*) value_pool.allocate ();
1303   memset (e->val_rtx, 0, RTX_HDR_SIZE);
1304   PUT_CODE (e->val_rtx, VALUE);
1305   PUT_MODE (e->val_rtx, mode);
1306   CSELIB_VAL_PTR (e->val_rtx) = e;
1307   e->addr_list = 0;
1308   e->locs = 0;
1309   e->next_containing_mem = 0;
1310
1311   if (dump_file && (dump_flags & TDF_CSELIB))
1312     {
1313       fprintf (dump_file, "cselib value %u:%u ", e->uid, hash);
1314       if (flag_dump_noaddr || flag_dump_unnumbered)
1315         fputs ("# ", dump_file);
1316       else
1317         fprintf (dump_file, "%p ", (void*)e);
1318       print_rtl_single (dump_file, x);
1319       fputc ('\n', dump_file);
1320     }
1321
1322   return e;
1323 }
1324
1325 /* ADDR_ELT is a value that is used as address.  MEM_ELT is the value that
1326    contains the data at this address.  X is a MEM that represents the
1327    value.  Update the two value structures to represent this situation.  */
1328
1329 static void
1330 add_mem_for_addr (cselib_val *addr_elt, cselib_val *mem_elt, rtx x)
1331 {
1332   addr_elt = canonical_cselib_val (addr_elt);
1333   mem_elt = canonical_cselib_val (mem_elt);
1334
1335   /* Avoid duplicates.  */
1336   addr_space_t as = MEM_ADDR_SPACE (x);
1337   for (elt_loc_list *l = mem_elt->locs; l; l = l->next)
1338     if (MEM_P (l->loc)
1339         && CSELIB_VAL_PTR (XEXP (l->loc, 0)) == addr_elt
1340         && MEM_ADDR_SPACE (l->loc) == as)
1341       {
1342         promote_debug_loc (l);
1343         return;
1344       }
1345
1346   addr_elt->addr_list = new_elt_list (addr_elt->addr_list, mem_elt);
1347   new_elt_loc_list (mem_elt,
1348                     replace_equiv_address_nv (x, addr_elt->val_rtx));
1349   if (mem_elt->next_containing_mem == NULL)
1350     {
1351       mem_elt->next_containing_mem = first_containing_mem;
1352       first_containing_mem = mem_elt;
1353     }
1354 }
1355
1356 /* Subroutine of cselib_lookup.  Return a value for X, which is a MEM rtx.
1357    If CREATE, make a new one if we haven't seen it before.  */
1358
1359 static cselib_val *
1360 cselib_lookup_mem (rtx x, int create)
1361 {
1362   machine_mode mode = GET_MODE (x);
1363   machine_mode addr_mode;
1364   cselib_val **slot;
1365   cselib_val *addr;
1366   cselib_val *mem_elt;
1367
1368   if (MEM_VOLATILE_P (x) || mode == BLKmode
1369       || !cselib_record_memory
1370       || (FLOAT_MODE_P (mode) && flag_float_store))
1371     return 0;
1372
1373   addr_mode = GET_MODE (XEXP (x, 0));
1374   if (addr_mode == VOIDmode)
1375     addr_mode = Pmode;
1376
1377   /* Look up the value for the address.  */
1378   addr = cselib_lookup (XEXP (x, 0), addr_mode, create, mode);
1379   if (! addr)
1380     return 0;
1381   addr = canonical_cselib_val (addr);
1382
1383   /* Find a value that describes a value of our mode at that address.  */
1384   addr_space_t as = MEM_ADDR_SPACE (x);
1385   for (elt_list *l = addr->addr_list; l; l = l->next)
1386     if (GET_MODE (l->elt->val_rtx) == mode)
1387       {
1388         for (elt_loc_list *l2 = l->elt->locs; l2; l2 = l2->next)
1389           if (MEM_P (l2->loc) && MEM_ADDR_SPACE (l2->loc) == as)
1390             {
1391               promote_debug_loc (l->elt->locs);
1392               return l->elt;
1393             }
1394       }
1395
1396   if (! create)
1397     return 0;
1398
1399   mem_elt = new_cselib_val (next_uid, mode, x);
1400   add_mem_for_addr (addr, mem_elt, x);
1401   slot = cselib_find_slot (mode, x, mem_elt->hash, INSERT, VOIDmode);
1402   *slot = mem_elt;
1403   return mem_elt;
1404 }
1405
1406 /* Search through the possible substitutions in P.  We prefer a non reg
1407    substitution because this allows us to expand the tree further.  If
1408    we find, just a reg, take the lowest regno.  There may be several
1409    non-reg results, we just take the first one because they will all
1410    expand to the same place.  */
1411
1412 static rtx
1413 expand_loc (struct elt_loc_list *p, struct expand_value_data *evd,
1414             int max_depth)
1415 {
1416   rtx reg_result = NULL;
1417   unsigned int regno = UINT_MAX;
1418   struct elt_loc_list *p_in = p;
1419
1420   for (; p; p = p->next)
1421     {
1422       /* Return these right away to avoid returning stack pointer based
1423          expressions for frame pointer and vice versa, which is something
1424          that would confuse DSE.  See the comment in cselib_expand_value_rtx_1
1425          for more details.  */
1426       if (REG_P (p->loc)
1427           && (REGNO (p->loc) == STACK_POINTER_REGNUM
1428               || REGNO (p->loc) == FRAME_POINTER_REGNUM
1429               || REGNO (p->loc) == HARD_FRAME_POINTER_REGNUM
1430               || REGNO (p->loc) == cfa_base_preserved_regno))
1431         return p->loc;
1432       /* Avoid infinite recursion trying to expand a reg into a
1433          the same reg.  */
1434       if ((REG_P (p->loc))
1435           && (REGNO (p->loc) < regno)
1436           && !bitmap_bit_p (evd->regs_active, REGNO (p->loc)))
1437         {
1438           reg_result = p->loc;
1439           regno = REGNO (p->loc);
1440         }
1441       /* Avoid infinite recursion and do not try to expand the
1442          value.  */
1443       else if (GET_CODE (p->loc) == VALUE
1444                && CSELIB_VAL_PTR (p->loc)->locs == p_in)
1445         continue;
1446       else if (!REG_P (p->loc))
1447         {
1448           rtx result, note;
1449           if (dump_file && (dump_flags & TDF_CSELIB))
1450             {
1451               print_inline_rtx (dump_file, p->loc, 0);
1452               fprintf (dump_file, "\n");
1453             }
1454           if (GET_CODE (p->loc) == LO_SUM
1455               && GET_CODE (XEXP (p->loc, 1)) == SYMBOL_REF
1456               && p->setting_insn
1457               && (note = find_reg_note (p->setting_insn, REG_EQUAL, NULL_RTX))
1458               && XEXP (note, 0) == XEXP (p->loc, 1))
1459             return XEXP (p->loc, 1);
1460           result = cselib_expand_value_rtx_1 (p->loc, evd, max_depth - 1);
1461           if (result)
1462             return result;
1463         }
1464
1465     }
1466
1467   if (regno != UINT_MAX)
1468     {
1469       rtx result;
1470       if (dump_file && (dump_flags & TDF_CSELIB))
1471         fprintf (dump_file, "r%d\n", regno);
1472
1473       result = cselib_expand_value_rtx_1 (reg_result, evd, max_depth - 1);
1474       if (result)
1475         return result;
1476     }
1477
1478   if (dump_file && (dump_flags & TDF_CSELIB))
1479     {
1480       if (reg_result)
1481         {
1482           print_inline_rtx (dump_file, reg_result, 0);
1483           fprintf (dump_file, "\n");
1484         }
1485       else
1486         fprintf (dump_file, "NULL\n");
1487     }
1488   return reg_result;
1489 }
1490
1491
1492 /* Forward substitute and expand an expression out to its roots.
1493    This is the opposite of common subexpression.  Because local value
1494    numbering is such a weak optimization, the expanded expression is
1495    pretty much unique (not from a pointer equals point of view but
1496    from a tree shape point of view.
1497
1498    This function returns NULL if the expansion fails.  The expansion
1499    will fail if there is no value number for one of the operands or if
1500    one of the operands has been overwritten between the current insn
1501    and the beginning of the basic block.  For instance x has no
1502    expansion in:
1503
1504    r1 <- r1 + 3
1505    x <- r1 + 8
1506
1507    REGS_ACTIVE is a scratch bitmap that should be clear when passing in.
1508    It is clear on return.  */
1509
1510 rtx
1511 cselib_expand_value_rtx (rtx orig, bitmap regs_active, int max_depth)
1512 {
1513   struct expand_value_data evd;
1514
1515   evd.regs_active = regs_active;
1516   evd.callback = NULL;
1517   evd.callback_arg = NULL;
1518   evd.dummy = false;
1519
1520   return cselib_expand_value_rtx_1 (orig, &evd, max_depth);
1521 }
1522
1523 /* Same as cselib_expand_value_rtx, but using a callback to try to
1524    resolve some expressions.  The CB function should return ORIG if it
1525    can't or does not want to deal with a certain RTX.  Any other
1526    return value, including NULL, will be used as the expansion for
1527    VALUE, without any further changes.  */
1528
1529 rtx
1530 cselib_expand_value_rtx_cb (rtx orig, bitmap regs_active, int max_depth,
1531                             cselib_expand_callback cb, void *data)
1532 {
1533   struct expand_value_data evd;
1534
1535   evd.regs_active = regs_active;
1536   evd.callback = cb;
1537   evd.callback_arg = data;
1538   evd.dummy = false;
1539
1540   return cselib_expand_value_rtx_1 (orig, &evd, max_depth);
1541 }
1542
1543 /* Similar to cselib_expand_value_rtx_cb, but no rtxs are actually copied
1544    or simplified.  Useful to find out whether cselib_expand_value_rtx_cb
1545    would return NULL or non-NULL, without allocating new rtx.  */
1546
1547 bool
1548 cselib_dummy_expand_value_rtx_cb (rtx orig, bitmap regs_active, int max_depth,
1549                                   cselib_expand_callback cb, void *data)
1550 {
1551   struct expand_value_data evd;
1552
1553   evd.regs_active = regs_active;
1554   evd.callback = cb;
1555   evd.callback_arg = data;
1556   evd.dummy = true;
1557
1558   return cselib_expand_value_rtx_1 (orig, &evd, max_depth) != NULL;
1559 }
1560
1561 /* Internal implementation of cselib_expand_value_rtx and
1562    cselib_expand_value_rtx_cb.  */
1563
1564 static rtx
1565 cselib_expand_value_rtx_1 (rtx orig, struct expand_value_data *evd,
1566                            int max_depth)
1567 {
1568   rtx copy, scopy;
1569   int i, j;
1570   RTX_CODE code;
1571   const char *format_ptr;
1572   machine_mode mode;
1573
1574   code = GET_CODE (orig);
1575
1576   /* For the context of dse, if we end up expand into a huge tree, we
1577      will not have a useful address, so we might as well just give up
1578      quickly.  */
1579   if (max_depth <= 0)
1580     return NULL;
1581
1582   switch (code)
1583     {
1584     case REG:
1585       {
1586         struct elt_list *l = REG_VALUES (REGNO (orig));
1587
1588         if (l && l->elt == NULL)
1589           l = l->next;
1590         for (; l; l = l->next)
1591           if (GET_MODE (l->elt->val_rtx) == GET_MODE (orig))
1592             {
1593               rtx result;
1594               unsigned regno = REGNO (orig);
1595
1596               /* The only thing that we are not willing to do (this
1597                  is requirement of dse and if others potential uses
1598                  need this function we should add a parm to control
1599                  it) is that we will not substitute the
1600                  STACK_POINTER_REGNUM, FRAME_POINTER or the
1601                  HARD_FRAME_POINTER.
1602
1603                  These expansions confuses the code that notices that
1604                  stores into the frame go dead at the end of the
1605                  function and that the frame is not effected by calls
1606                  to subroutines.  If you allow the
1607                  STACK_POINTER_REGNUM substitution, then dse will
1608                  think that parameter pushing also goes dead which is
1609                  wrong.  If you allow the FRAME_POINTER or the
1610                  HARD_FRAME_POINTER then you lose the opportunity to
1611                  make the frame assumptions.  */
1612               if (regno == STACK_POINTER_REGNUM
1613                   || regno == FRAME_POINTER_REGNUM
1614                   || regno == HARD_FRAME_POINTER_REGNUM
1615                   || regno == cfa_base_preserved_regno)
1616                 return orig;
1617
1618               bitmap_set_bit (evd->regs_active, regno);
1619
1620               if (dump_file && (dump_flags & TDF_CSELIB))
1621                 fprintf (dump_file, "expanding: r%d into: ", regno);
1622
1623               result = expand_loc (l->elt->locs, evd, max_depth);
1624               bitmap_clear_bit (evd->regs_active, regno);
1625
1626               if (result)
1627                 return result;
1628               else
1629                 return orig;
1630             }
1631       }
1632
1633     CASE_CONST_ANY:
1634     case SYMBOL_REF:
1635     case CODE_LABEL:
1636     case PC:
1637     case CC0:
1638     case SCRATCH:
1639       /* SCRATCH must be shared because they represent distinct values.  */
1640       return orig;
1641     case CLOBBER:
1642       if (REG_P (XEXP (orig, 0)) && HARD_REGISTER_NUM_P (REGNO (XEXP (orig, 0))))
1643         return orig;
1644       break;
1645
1646     case CONST:
1647       if (shared_const_p (orig))
1648         return orig;
1649       break;
1650
1651     case SUBREG:
1652       {
1653         rtx subreg;
1654
1655         if (evd->callback)
1656           {
1657             subreg = evd->callback (orig, evd->regs_active, max_depth,
1658                                     evd->callback_arg);
1659             if (subreg != orig)
1660               return subreg;
1661           }
1662
1663         subreg = cselib_expand_value_rtx_1 (SUBREG_REG (orig), evd,
1664                                             max_depth - 1);
1665         if (!subreg)
1666           return NULL;
1667         scopy = simplify_gen_subreg (GET_MODE (orig), subreg,
1668                                      GET_MODE (SUBREG_REG (orig)),
1669                                      SUBREG_BYTE (orig));
1670         if (scopy == NULL
1671             || (GET_CODE (scopy) == SUBREG
1672                 && !REG_P (SUBREG_REG (scopy))
1673                 && !MEM_P (SUBREG_REG (scopy))))
1674           return NULL;
1675
1676         return scopy;
1677       }
1678
1679     case VALUE:
1680       {
1681         rtx result;
1682
1683         if (dump_file && (dump_flags & TDF_CSELIB))
1684           {
1685             fputs ("\nexpanding ", dump_file);
1686             print_rtl_single (dump_file, orig);
1687             fputs (" into...", dump_file);
1688           }
1689
1690         if (evd->callback)
1691           {
1692             result = evd->callback (orig, evd->regs_active, max_depth,
1693                                     evd->callback_arg);
1694
1695             if (result != orig)
1696               return result;
1697           }
1698
1699         result = expand_loc (CSELIB_VAL_PTR (orig)->locs, evd, max_depth);
1700         return result;
1701       }
1702
1703     case DEBUG_EXPR:
1704       if (evd->callback)
1705         return evd->callback (orig, evd->regs_active, max_depth,
1706                               evd->callback_arg);
1707       return orig;
1708
1709     default:
1710       break;
1711     }
1712
1713   /* Copy the various flags, fields, and other information.  We assume
1714      that all fields need copying, and then clear the fields that should
1715      not be copied.  That is the sensible default behavior, and forces
1716      us to explicitly document why we are *not* copying a flag.  */
1717   if (evd->dummy)
1718     copy = NULL;
1719   else
1720     copy = shallow_copy_rtx (orig);
1721
1722   format_ptr = GET_RTX_FORMAT (code);
1723
1724   for (i = 0; i < GET_RTX_LENGTH (code); i++)
1725     switch (*format_ptr++)
1726       {
1727       case 'e':
1728         if (XEXP (orig, i) != NULL)
1729           {
1730             rtx result = cselib_expand_value_rtx_1 (XEXP (orig, i), evd,
1731                                                     max_depth - 1);
1732             if (!result)
1733               return NULL;
1734             if (copy)
1735               XEXP (copy, i) = result;
1736           }
1737         break;
1738
1739       case 'E':
1740       case 'V':
1741         if (XVEC (orig, i) != NULL)
1742           {
1743             if (copy)
1744               XVEC (copy, i) = rtvec_alloc (XVECLEN (orig, i));
1745             for (j = 0; j < XVECLEN (orig, i); j++)
1746               {
1747                 rtx result = cselib_expand_value_rtx_1 (XVECEXP (orig, i, j),
1748                                                         evd, max_depth - 1);
1749                 if (!result)
1750                   return NULL;
1751                 if (copy)
1752                   XVECEXP (copy, i, j) = result;
1753               }
1754           }
1755         break;
1756
1757       case 't':
1758       case 'w':
1759       case 'i':
1760       case 's':
1761       case 'S':
1762       case 'T':
1763       case 'u':
1764       case 'B':
1765       case '0':
1766         /* These are left unchanged.  */
1767         break;
1768
1769       default:
1770         gcc_unreachable ();
1771       }
1772
1773   if (evd->dummy)
1774     return orig;
1775
1776   mode = GET_MODE (copy);
1777   /* If an operand has been simplified into CONST_INT, which doesn't
1778      have a mode and the mode isn't derivable from whole rtx's mode,
1779      try simplify_*_operation first with mode from original's operand
1780      and as a fallback wrap CONST_INT into gen_rtx_CONST.  */
1781   scopy = copy;
1782   switch (GET_RTX_CLASS (code))
1783     {
1784     case RTX_UNARY:
1785       if (CONST_INT_P (XEXP (copy, 0))
1786           && GET_MODE (XEXP (orig, 0)) != VOIDmode)
1787         {
1788           scopy = simplify_unary_operation (code, mode, XEXP (copy, 0),
1789                                             GET_MODE (XEXP (orig, 0)));
1790           if (scopy)
1791             return scopy;
1792         }
1793       break;
1794     case RTX_COMM_ARITH:
1795     case RTX_BIN_ARITH:
1796       /* These expressions can derive operand modes from the whole rtx's mode.  */
1797       break;
1798     case RTX_TERNARY:
1799     case RTX_BITFIELD_OPS:
1800       if (CONST_INT_P (XEXP (copy, 0))
1801           && GET_MODE (XEXP (orig, 0)) != VOIDmode)
1802         {
1803           scopy = simplify_ternary_operation (code, mode,
1804                                               GET_MODE (XEXP (orig, 0)),
1805                                               XEXP (copy, 0), XEXP (copy, 1),
1806                                               XEXP (copy, 2));
1807           if (scopy)
1808             return scopy;
1809         }
1810       break;
1811     case RTX_COMPARE:
1812     case RTX_COMM_COMPARE:
1813       if (CONST_INT_P (XEXP (copy, 0))
1814           && GET_MODE (XEXP (copy, 1)) == VOIDmode
1815           && (GET_MODE (XEXP (orig, 0)) != VOIDmode
1816               || GET_MODE (XEXP (orig, 1)) != VOIDmode))
1817         {
1818           scopy = simplify_relational_operation (code, mode,
1819                                                  (GET_MODE (XEXP (orig, 0))
1820                                                   != VOIDmode)
1821                                                  ? GET_MODE (XEXP (orig, 0))
1822                                                  : GET_MODE (XEXP (orig, 1)),
1823                                                  XEXP (copy, 0),
1824                                                  XEXP (copy, 1));
1825           if (scopy)
1826             return scopy;
1827         }
1828       break;
1829     default:
1830       break;
1831     }
1832   scopy = simplify_rtx (copy);
1833   if (scopy)
1834     return scopy;
1835   return copy;
1836 }
1837
1838 /* Walk rtx X and replace all occurrences of REG and MEM subexpressions
1839    with VALUE expressions.  This way, it becomes independent of changes
1840    to registers and memory.
1841    X isn't actually modified; if modifications are needed, new rtl is
1842    allocated.  However, the return value can share rtl with X.
1843    If X is within a MEM, MEMMODE must be the mode of the MEM.  */
1844
1845 rtx
1846 cselib_subst_to_values (rtx x, machine_mode memmode)
1847 {
1848   enum rtx_code code = GET_CODE (x);
1849   const char *fmt = GET_RTX_FORMAT (code);
1850   cselib_val *e;
1851   struct elt_list *l;
1852   rtx copy = x;
1853   int i;
1854
1855   switch (code)
1856     {
1857     case REG:
1858       l = REG_VALUES (REGNO (x));
1859       if (l && l->elt == NULL)
1860         l = l->next;
1861       for (; l; l = l->next)
1862         if (GET_MODE (l->elt->val_rtx) == GET_MODE (x))
1863           return l->elt->val_rtx;
1864
1865       gcc_unreachable ();
1866
1867     case MEM:
1868       e = cselib_lookup_mem (x, 0);
1869       /* This used to happen for autoincrements, but we deal with them
1870          properly now.  Remove the if stmt for the next release.  */
1871       if (! e)
1872         {
1873           /* Assign a value that doesn't match any other.  */
1874           e = new_cselib_val (next_uid, GET_MODE (x), x);
1875         }
1876       return e->val_rtx;
1877
1878     case ENTRY_VALUE:
1879       e = cselib_lookup (x, GET_MODE (x), 0, memmode);
1880       if (! e)
1881         break;
1882       return e->val_rtx;
1883
1884     CASE_CONST_ANY:
1885       return x;
1886
1887     case PRE_DEC:
1888     case PRE_INC:
1889       gcc_assert (memmode != VOIDmode);
1890       i = GET_MODE_SIZE (memmode);
1891       if (code == PRE_DEC)
1892         i = -i;
1893       return cselib_subst_to_values (plus_constant (GET_MODE (x),
1894                                                     XEXP (x, 0), i),
1895                                      memmode);
1896
1897     case PRE_MODIFY:
1898       gcc_assert (memmode != VOIDmode);
1899       return cselib_subst_to_values (XEXP (x, 1), memmode);
1900
1901     case POST_DEC:
1902     case POST_INC:
1903     case POST_MODIFY:
1904       gcc_assert (memmode != VOIDmode);
1905       return cselib_subst_to_values (XEXP (x, 0), memmode);
1906
1907     default:
1908       break;
1909     }
1910
1911   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1912     {
1913       if (fmt[i] == 'e')
1914         {
1915           rtx t = cselib_subst_to_values (XEXP (x, i), memmode);
1916
1917           if (t != XEXP (x, i))
1918             {
1919               if (x == copy)
1920                 copy = shallow_copy_rtx (x);
1921               XEXP (copy, i) = t;
1922             }
1923         }
1924       else if (fmt[i] == 'E')
1925         {
1926           int j;
1927
1928           for (j = 0; j < XVECLEN (x, i); j++)
1929             {
1930               rtx t = cselib_subst_to_values (XVECEXP (x, i, j), memmode);
1931
1932               if (t != XVECEXP (x, i, j))
1933                 {
1934                   if (XVEC (x, i) == XVEC (copy, i))
1935                     {
1936                       if (x == copy)
1937                         copy = shallow_copy_rtx (x);
1938                       XVEC (copy, i) = shallow_copy_rtvec (XVEC (x, i));
1939                     }
1940                   XVECEXP (copy, i, j) = t;
1941                 }
1942             }
1943         }
1944     }
1945
1946   return copy;
1947 }
1948
1949 /* Wrapper for cselib_subst_to_values, that indicates X is in INSN.  */
1950
1951 rtx
1952 cselib_subst_to_values_from_insn (rtx x, machine_mode memmode, rtx_insn *insn)
1953 {
1954   rtx ret;
1955   gcc_assert (!cselib_current_insn);
1956   cselib_current_insn = insn;
1957   ret = cselib_subst_to_values (x, memmode);
1958   cselib_current_insn = NULL;
1959   return ret;
1960 }
1961
1962 /* Look up the rtl expression X in our tables and return the value it
1963    has.  If CREATE is zero, we return NULL if we don't know the value.
1964    Otherwise, we create a new one if possible, using mode MODE if X
1965    doesn't have a mode (i.e. because it's a constant).  When X is part
1966    of an address, MEMMODE should be the mode of the enclosing MEM if
1967    we're tracking autoinc expressions.  */
1968
1969 static cselib_val *
1970 cselib_lookup_1 (rtx x, machine_mode mode,
1971                  int create, machine_mode memmode)
1972 {
1973   cselib_val **slot;
1974   cselib_val *e;
1975   unsigned int hashval;
1976
1977   if (GET_MODE (x) != VOIDmode)
1978     mode = GET_MODE (x);
1979
1980   if (GET_CODE (x) == VALUE)
1981     return CSELIB_VAL_PTR (x);
1982
1983   if (REG_P (x))
1984     {
1985       struct elt_list *l;
1986       unsigned int i = REGNO (x);
1987
1988       l = REG_VALUES (i);
1989       if (l && l->elt == NULL)
1990         l = l->next;
1991       for (; l; l = l->next)
1992         if (mode == GET_MODE (l->elt->val_rtx))
1993           {
1994             promote_debug_loc (l->elt->locs);
1995             return l->elt;
1996           }
1997
1998       if (! create)
1999         return 0;
2000
2001       if (i < FIRST_PSEUDO_REGISTER)
2002         {
2003           unsigned int n = hard_regno_nregs[i][mode];
2004
2005           if (n > max_value_regs)
2006             max_value_regs = n;
2007         }
2008
2009       e = new_cselib_val (next_uid, GET_MODE (x), x);
2010       new_elt_loc_list (e, x);
2011       if (REG_VALUES (i) == 0)
2012         {
2013           /* Maintain the invariant that the first entry of
2014              REG_VALUES, if present, must be the value used to set the
2015              register, or NULL.  */
2016           used_regs[n_used_regs++] = i;
2017           REG_VALUES (i) = new_elt_list (REG_VALUES (i), NULL);
2018         }
2019       else if (cselib_preserve_constants
2020                && GET_MODE_CLASS (mode) == MODE_INT)
2021         {
2022           /* During var-tracking, try harder to find equivalences
2023              for SUBREGs.  If a setter sets say a DImode register
2024              and user uses that register only in SImode, add a lowpart
2025              subreg location.  */
2026           struct elt_list *lwider = NULL;
2027           l = REG_VALUES (i);
2028           if (l && l->elt == NULL)
2029             l = l->next;
2030           for (; l; l = l->next)
2031             if (GET_MODE_CLASS (GET_MODE (l->elt->val_rtx)) == MODE_INT
2032                 && GET_MODE_SIZE (GET_MODE (l->elt->val_rtx))
2033                    > GET_MODE_SIZE (mode)
2034                 && (lwider == NULL
2035                     || GET_MODE_SIZE (GET_MODE (l->elt->val_rtx))
2036                        < GET_MODE_SIZE (GET_MODE (lwider->elt->val_rtx))))
2037               {
2038                 struct elt_loc_list *el;
2039                 if (i < FIRST_PSEUDO_REGISTER
2040                     && hard_regno_nregs[i][GET_MODE (l->elt->val_rtx)] != 1)
2041                   continue;
2042                 for (el = l->elt->locs; el; el = el->next)
2043                   if (!REG_P (el->loc))
2044                     break;
2045                 if (el)
2046                   lwider = l;
2047               }
2048           if (lwider)
2049             {
2050               rtx sub = lowpart_subreg (mode, lwider->elt->val_rtx,
2051                                         GET_MODE (lwider->elt->val_rtx));
2052               if (sub)
2053                 new_elt_loc_list (e, sub);
2054             }
2055         }
2056       REG_VALUES (i)->next = new_elt_list (REG_VALUES (i)->next, e);
2057       slot = cselib_find_slot (mode, x, e->hash, INSERT, memmode);
2058       *slot = e;
2059       return e;
2060     }
2061
2062   if (MEM_P (x))
2063     return cselib_lookup_mem (x, create);
2064
2065   hashval = cselib_hash_rtx (x, create, memmode);
2066   /* Can't even create if hashing is not possible.  */
2067   if (! hashval)
2068     return 0;
2069
2070   slot = cselib_find_slot (mode, x, hashval,
2071                            create ? INSERT : NO_INSERT, memmode);
2072   if (slot == 0)
2073     return 0;
2074
2075   e = (cselib_val *) *slot;
2076   if (e)
2077     return e;
2078
2079   e = new_cselib_val (hashval, mode, x);
2080
2081   /* We have to fill the slot before calling cselib_subst_to_values:
2082      the hash table is inconsistent until we do so, and
2083      cselib_subst_to_values will need to do lookups.  */
2084   *slot = e;
2085   new_elt_loc_list (e, cselib_subst_to_values (x, memmode));
2086   return e;
2087 }
2088
2089 /* Wrapper for cselib_lookup, that indicates X is in INSN.  */
2090
2091 cselib_val *
2092 cselib_lookup_from_insn (rtx x, machine_mode mode,
2093                          int create, machine_mode memmode, rtx_insn *insn)
2094 {
2095   cselib_val *ret;
2096
2097   gcc_assert (!cselib_current_insn);
2098   cselib_current_insn = insn;
2099
2100   ret = cselib_lookup (x, mode, create, memmode);
2101
2102   cselib_current_insn = NULL;
2103
2104   return ret;
2105 }
2106
2107 /* Wrapper for cselib_lookup_1, that logs the lookup result and
2108    maintains invariants related with debug insns.  */
2109
2110 cselib_val *
2111 cselib_lookup (rtx x, machine_mode mode,
2112                int create, machine_mode memmode)
2113 {
2114   cselib_val *ret = cselib_lookup_1 (x, mode, create, memmode);
2115
2116   /* ??? Should we return NULL if we're not to create an entry, the
2117      found loc is a debug loc and cselib_current_insn is not DEBUG?
2118      If so, we should also avoid converting val to non-DEBUG; probably
2119      easiest setting cselib_current_insn to NULL before the call
2120      above.  */
2121
2122   if (dump_file && (dump_flags & TDF_CSELIB))
2123     {
2124       fputs ("cselib lookup ", dump_file);
2125       print_inline_rtx (dump_file, x, 2);
2126       fprintf (dump_file, " => %u:%u\n",
2127                ret ? ret->uid : 0,
2128                ret ? ret->hash : 0);
2129     }
2130
2131   return ret;
2132 }
2133
2134 /* Invalidate any entries in reg_values that overlap REGNO.  This is called
2135    if REGNO is changing.  MODE is the mode of the assignment to REGNO, which
2136    is used to determine how many hard registers are being changed.  If MODE
2137    is VOIDmode, then only REGNO is being changed; this is used when
2138    invalidating call clobbered registers across a call.  */
2139
2140 static void
2141 cselib_invalidate_regno (unsigned int regno, machine_mode mode)
2142 {
2143   unsigned int endregno;
2144   unsigned int i;
2145
2146   /* If we see pseudos after reload, something is _wrong_.  */
2147   gcc_assert (!reload_completed || regno < FIRST_PSEUDO_REGISTER
2148               || reg_renumber[regno] < 0);
2149
2150   /* Determine the range of registers that must be invalidated.  For
2151      pseudos, only REGNO is affected.  For hard regs, we must take MODE
2152      into account, and we must also invalidate lower register numbers
2153      if they contain values that overlap REGNO.  */
2154   if (regno < FIRST_PSEUDO_REGISTER)
2155     {
2156       gcc_assert (mode != VOIDmode);
2157
2158       if (regno < max_value_regs)
2159         i = 0;
2160       else
2161         i = regno - max_value_regs;
2162
2163       endregno = end_hard_regno (mode, regno);
2164     }
2165   else
2166     {
2167       i = regno;
2168       endregno = regno + 1;
2169     }
2170
2171   for (; i < endregno; i++)
2172     {
2173       struct elt_list **l = &REG_VALUES (i);
2174
2175       /* Go through all known values for this reg; if it overlaps the range
2176          we're invalidating, remove the value.  */
2177       while (*l)
2178         {
2179           cselib_val *v = (*l)->elt;
2180           bool had_locs;
2181           rtx_insn *setting_insn;
2182           struct elt_loc_list **p;
2183           unsigned int this_last = i;
2184
2185           if (i < FIRST_PSEUDO_REGISTER && v != NULL)
2186             this_last = end_hard_regno (GET_MODE (v->val_rtx), i) - 1;
2187
2188           if (this_last < regno || v == NULL
2189               || (v == cfa_base_preserved_val
2190                   && i == cfa_base_preserved_regno))
2191             {
2192               l = &(*l)->next;
2193               continue;
2194             }
2195
2196           /* We have an overlap.  */
2197           if (*l == REG_VALUES (i))
2198             {
2199               /* Maintain the invariant that the first entry of
2200                  REG_VALUES, if present, must be the value used to set
2201                  the register, or NULL.  This is also nice because
2202                  then we won't push the same regno onto user_regs
2203                  multiple times.  */
2204               (*l)->elt = NULL;
2205               l = &(*l)->next;
2206             }
2207           else
2208             unchain_one_elt_list (l);
2209
2210           v = canonical_cselib_val (v);
2211
2212           had_locs = v->locs != NULL;
2213           setting_insn = v->locs ? v->locs->setting_insn : NULL;
2214
2215           /* Now, we clear the mapping from value to reg.  It must exist, so
2216              this code will crash intentionally if it doesn't.  */
2217           for (p = &v->locs; ; p = &(*p)->next)
2218             {
2219               rtx x = (*p)->loc;
2220
2221               if (REG_P (x) && REGNO (x) == i)
2222                 {
2223                   unchain_one_elt_loc_list (p);
2224                   break;
2225                 }
2226             }
2227
2228           if (had_locs && v->locs == 0 && !PRESERVED_VALUE_P (v->val_rtx))
2229             {
2230               if (setting_insn && DEBUG_INSN_P (setting_insn))
2231                 n_useless_debug_values++;
2232               else
2233                 n_useless_values++;
2234             }
2235         }
2236     }
2237 }
2238 \f
2239 /* Invalidate any locations in the table which are changed because of a
2240    store to MEM_RTX.  If this is called because of a non-const call
2241    instruction, MEM_RTX is (mem:BLK const0_rtx).  */
2242
2243 static void
2244 cselib_invalidate_mem (rtx mem_rtx)
2245 {
2246   cselib_val **vp, *v, *next;
2247   int num_mems = 0;
2248   rtx mem_addr;
2249
2250   mem_addr = canon_rtx (get_addr (XEXP (mem_rtx, 0)));
2251   mem_rtx = canon_rtx (mem_rtx);
2252
2253   vp = &first_containing_mem;
2254   for (v = *vp; v != &dummy_val; v = next)
2255     {
2256       bool has_mem = false;
2257       struct elt_loc_list **p = &v->locs;
2258       bool had_locs = v->locs != NULL;
2259       rtx_insn *setting_insn = v->locs ? v->locs->setting_insn : NULL;
2260
2261       while (*p)
2262         {
2263           rtx x = (*p)->loc;
2264           cselib_val *addr;
2265           struct elt_list **mem_chain;
2266
2267           /* MEMs may occur in locations only at the top level; below
2268              that every MEM or REG is substituted by its VALUE.  */
2269           if (!MEM_P (x))
2270             {
2271               p = &(*p)->next;
2272               continue;
2273             }
2274           if (num_mems < PARAM_VALUE (PARAM_MAX_CSELIB_MEMORY_LOCATIONS)
2275               && ! canon_anti_dependence (x, false, mem_rtx,
2276                                           GET_MODE (mem_rtx), mem_addr))
2277             {
2278               has_mem = true;
2279               num_mems++;
2280               p = &(*p)->next;
2281               continue;
2282             }
2283
2284           /* This one overlaps.  */
2285           /* We must have a mapping from this MEM's address to the
2286              value (E).  Remove that, too.  */
2287           addr = cselib_lookup (XEXP (x, 0), VOIDmode, 0, GET_MODE (x));
2288           addr = canonical_cselib_val (addr);
2289           gcc_checking_assert (v == canonical_cselib_val (v));
2290           mem_chain = &addr->addr_list;
2291           for (;;)
2292             {
2293               cselib_val *canon = canonical_cselib_val ((*mem_chain)->elt);
2294
2295               if (canon == v)
2296                 {
2297                   unchain_one_elt_list (mem_chain);
2298                   break;
2299                 }
2300
2301               /* Record canonicalized elt.  */
2302               (*mem_chain)->elt = canon;
2303
2304               mem_chain = &(*mem_chain)->next;
2305             }
2306
2307           unchain_one_elt_loc_list (p);
2308         }
2309
2310       if (had_locs && v->locs == 0 && !PRESERVED_VALUE_P (v->val_rtx))
2311         {
2312           if (setting_insn && DEBUG_INSN_P (setting_insn))
2313             n_useless_debug_values++;
2314           else
2315             n_useless_values++;
2316         }
2317
2318       next = v->next_containing_mem;
2319       if (has_mem)
2320         {
2321           *vp = v;
2322           vp = &(*vp)->next_containing_mem;
2323         }
2324       else
2325         v->next_containing_mem = NULL;
2326     }
2327   *vp = &dummy_val;
2328 }
2329
2330 /* Invalidate DEST, which is being assigned to or clobbered.  */
2331
2332 void
2333 cselib_invalidate_rtx (rtx dest)
2334 {
2335   while (GET_CODE (dest) == SUBREG
2336          || GET_CODE (dest) == ZERO_EXTRACT
2337          || GET_CODE (dest) == STRICT_LOW_PART)
2338     dest = XEXP (dest, 0);
2339
2340   if (REG_P (dest))
2341     cselib_invalidate_regno (REGNO (dest), GET_MODE (dest));
2342   else if (MEM_P (dest))
2343     cselib_invalidate_mem (dest);
2344 }
2345
2346 /* A wrapper for cselib_invalidate_rtx to be called via note_stores.  */
2347
2348 static void
2349 cselib_invalidate_rtx_note_stores (rtx dest, const_rtx ignore ATTRIBUTE_UNUSED,
2350                                    void *data ATTRIBUTE_UNUSED)
2351 {
2352   cselib_invalidate_rtx (dest);
2353 }
2354
2355 /* Record the result of a SET instruction.  DEST is being set; the source
2356    contains the value described by SRC_ELT.  If DEST is a MEM, DEST_ADDR_ELT
2357    describes its address.  */
2358
2359 static void
2360 cselib_record_set (rtx dest, cselib_val *src_elt, cselib_val *dest_addr_elt)
2361 {
2362   if (src_elt == 0 || side_effects_p (dest))
2363     return;
2364
2365   if (REG_P (dest))
2366     {
2367       unsigned int dreg = REGNO (dest);
2368       if (dreg < FIRST_PSEUDO_REGISTER)
2369         {
2370           unsigned int n = REG_NREGS (dest);
2371
2372           if (n > max_value_regs)
2373             max_value_regs = n;
2374         }
2375
2376       if (REG_VALUES (dreg) == 0)
2377         {
2378           used_regs[n_used_regs++] = dreg;
2379           REG_VALUES (dreg) = new_elt_list (REG_VALUES (dreg), src_elt);
2380         }
2381       else
2382         {
2383           /* The register should have been invalidated.  */
2384           gcc_assert (REG_VALUES (dreg)->elt == 0);
2385           REG_VALUES (dreg)->elt = src_elt;
2386         }
2387
2388       if (src_elt->locs == 0 && !PRESERVED_VALUE_P (src_elt->val_rtx))
2389         n_useless_values--;
2390       new_elt_loc_list (src_elt, dest);
2391     }
2392   else if (MEM_P (dest) && dest_addr_elt != 0
2393            && cselib_record_memory)
2394     {
2395       if (src_elt->locs == 0 && !PRESERVED_VALUE_P (src_elt->val_rtx))
2396         n_useless_values--;
2397       add_mem_for_addr (dest_addr_elt, src_elt, dest);
2398     }
2399 }
2400
2401 /* Make ELT and X's VALUE equivalent to each other at INSN.  */
2402
2403 void
2404 cselib_add_permanent_equiv (cselib_val *elt, rtx x, rtx_insn *insn)
2405 {
2406   cselib_val *nelt;
2407   rtx_insn *save_cselib_current_insn = cselib_current_insn;
2408
2409   gcc_checking_assert (elt);
2410   gcc_checking_assert (PRESERVED_VALUE_P (elt->val_rtx));
2411   gcc_checking_assert (!side_effects_p (x));
2412
2413   cselib_current_insn = insn;
2414
2415   nelt = cselib_lookup (x, GET_MODE (elt->val_rtx), 1, VOIDmode);
2416
2417   if (nelt != elt)
2418     {
2419       cselib_any_perm_equivs = true;
2420
2421       if (!PRESERVED_VALUE_P (nelt->val_rtx))
2422         cselib_preserve_value (nelt);
2423
2424       new_elt_loc_list (nelt, elt->val_rtx);
2425     }
2426
2427   cselib_current_insn = save_cselib_current_insn;
2428 }
2429
2430 /* Return TRUE if any permanent equivalences have been recorded since
2431    the table was last initialized.  */
2432 bool
2433 cselib_have_permanent_equivalences (void)
2434 {
2435   return cselib_any_perm_equivs;
2436 }
2437
2438 /* There is no good way to determine how many elements there can be
2439    in a PARALLEL.  Since it's fairly cheap, use a really large number.  */
2440 #define MAX_SETS (FIRST_PSEUDO_REGISTER * 2)
2441
2442 struct cselib_record_autoinc_data
2443 {
2444   struct cselib_set *sets;
2445   int n_sets;
2446 };
2447
2448 /* Callback for for_each_inc_dec.  Records in ARG the SETs implied by
2449    autoinc RTXs: SRC plus SRCOFF if non-NULL is stored in DEST.  */
2450
2451 static int
2452 cselib_record_autoinc_cb (rtx mem ATTRIBUTE_UNUSED, rtx op ATTRIBUTE_UNUSED,
2453                           rtx dest, rtx src, rtx srcoff, void *arg)
2454 {
2455   struct cselib_record_autoinc_data *data;
2456   data = (struct cselib_record_autoinc_data *)arg;
2457
2458   data->sets[data->n_sets].dest = dest;
2459
2460   if (srcoff)
2461     data->sets[data->n_sets].src = gen_rtx_PLUS (GET_MODE (src), src, srcoff);
2462   else
2463     data->sets[data->n_sets].src = src;
2464
2465   data->n_sets++;
2466
2467   return 0;
2468 }
2469
2470 /* Record the effects of any sets and autoincs in INSN.  */
2471 static void
2472 cselib_record_sets (rtx_insn *insn)
2473 {
2474   int n_sets = 0;
2475   int i;
2476   struct cselib_set sets[MAX_SETS];
2477   rtx body = PATTERN (insn);
2478   rtx cond = 0;
2479   int n_sets_before_autoinc;
2480   struct cselib_record_autoinc_data data;
2481
2482   body = PATTERN (insn);
2483   if (GET_CODE (body) == COND_EXEC)
2484     {
2485       cond = COND_EXEC_TEST (body);
2486       body = COND_EXEC_CODE (body);
2487     }
2488
2489   /* Find all sets.  */
2490   if (GET_CODE (body) == SET)
2491     {
2492       sets[0].src = SET_SRC (body);
2493       sets[0].dest = SET_DEST (body);
2494       n_sets = 1;
2495     }
2496   else if (GET_CODE (body) == PARALLEL)
2497     {
2498       /* Look through the PARALLEL and record the values being
2499          set, if possible.  Also handle any CLOBBERs.  */
2500       for (i = XVECLEN (body, 0) - 1; i >= 0; --i)
2501         {
2502           rtx x = XVECEXP (body, 0, i);
2503
2504           if (GET_CODE (x) == SET)
2505             {
2506               sets[n_sets].src = SET_SRC (x);
2507               sets[n_sets].dest = SET_DEST (x);
2508               n_sets++;
2509             }
2510         }
2511     }
2512
2513   if (n_sets == 1
2514       && MEM_P (sets[0].src)
2515       && !cselib_record_memory
2516       && MEM_READONLY_P (sets[0].src))
2517     {
2518       rtx note = find_reg_equal_equiv_note (insn);
2519
2520       if (note && CONSTANT_P (XEXP (note, 0)))
2521         sets[0].src = XEXP (note, 0);
2522     }
2523
2524   data.sets = sets;
2525   data.n_sets = n_sets_before_autoinc = n_sets;
2526   for_each_inc_dec (PATTERN (insn), cselib_record_autoinc_cb, &data);
2527   n_sets = data.n_sets;
2528
2529   /* Look up the values that are read.  Do this before invalidating the
2530      locations that are written.  */
2531   for (i = 0; i < n_sets; i++)
2532     {
2533       rtx dest = sets[i].dest;
2534
2535       /* A STRICT_LOW_PART can be ignored; we'll record the equivalence for
2536          the low part after invalidating any knowledge about larger modes.  */
2537       if (GET_CODE (sets[i].dest) == STRICT_LOW_PART)
2538         sets[i].dest = dest = XEXP (dest, 0);
2539
2540       /* We don't know how to record anything but REG or MEM.  */
2541       if (REG_P (dest)
2542           || (MEM_P (dest) && cselib_record_memory))
2543         {
2544           rtx src = sets[i].src;
2545           if (cond)
2546             src = gen_rtx_IF_THEN_ELSE (GET_MODE (dest), cond, src, dest);
2547           sets[i].src_elt = cselib_lookup (src, GET_MODE (dest), 1, VOIDmode);
2548           if (MEM_P (dest))
2549             {
2550               machine_mode address_mode = get_address_mode (dest);
2551
2552               sets[i].dest_addr_elt = cselib_lookup (XEXP (dest, 0),
2553                                                      address_mode, 1,
2554                                                      GET_MODE (dest));
2555             }
2556           else
2557             sets[i].dest_addr_elt = 0;
2558         }
2559     }
2560
2561   if (cselib_record_sets_hook)
2562     cselib_record_sets_hook (insn, sets, n_sets);
2563
2564   /* Invalidate all locations written by this insn.  Note that the elts we
2565      looked up in the previous loop aren't affected, just some of their
2566      locations may go away.  */
2567   note_stores (body, cselib_invalidate_rtx_note_stores, NULL);
2568
2569   for (i = n_sets_before_autoinc; i < n_sets; i++)
2570     cselib_invalidate_rtx (sets[i].dest);
2571
2572   /* If this is an asm, look for duplicate sets.  This can happen when the
2573      user uses the same value as an output multiple times.  This is valid
2574      if the outputs are not actually used thereafter.  Treat this case as
2575      if the value isn't actually set.  We do this by smashing the destination
2576      to pc_rtx, so that we won't record the value later.  */
2577   if (n_sets >= 2 && asm_noperands (body) >= 0)
2578     {
2579       for (i = 0; i < n_sets; i++)
2580         {
2581           rtx dest = sets[i].dest;
2582           if (REG_P (dest) || MEM_P (dest))
2583             {
2584               int j;
2585               for (j = i + 1; j < n_sets; j++)
2586                 if (rtx_equal_p (dest, sets[j].dest))
2587                   {
2588                     sets[i].dest = pc_rtx;
2589                     sets[j].dest = pc_rtx;
2590                   }
2591             }
2592         }
2593     }
2594
2595   /* Now enter the equivalences in our tables.  */
2596   for (i = 0; i < n_sets; i++)
2597     {
2598       rtx dest = sets[i].dest;
2599       if (REG_P (dest)
2600           || (MEM_P (dest) && cselib_record_memory))
2601         cselib_record_set (dest, sets[i].src_elt, sets[i].dest_addr_elt);
2602     }
2603 }
2604
2605 /* Return true if INSN in the prologue initializes hard_frame_pointer_rtx.  */
2606
2607 bool
2608 fp_setter_insn (rtx_insn *insn)
2609 {
2610   rtx expr, pat = NULL_RTX;
2611
2612   if (!RTX_FRAME_RELATED_P (insn))
2613     return false;
2614
2615   expr = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
2616   if (expr)
2617     pat = XEXP (expr, 0);
2618   if (!modified_in_p (hard_frame_pointer_rtx, pat ? pat : insn))
2619     return false;
2620
2621   /* Don't return true for frame pointer restores in the epilogue.  */
2622   if (find_reg_note (insn, REG_CFA_RESTORE, hard_frame_pointer_rtx))
2623     return false;
2624   return true;
2625 }
2626
2627 /* Record the effects of INSN.  */
2628
2629 void
2630 cselib_process_insn (rtx_insn *insn)
2631 {
2632   int i;
2633   rtx x;
2634
2635   cselib_current_insn = insn;
2636
2637   /* Forget everything at a CODE_LABEL or a setjmp.  */
2638   if ((LABEL_P (insn)
2639        || (CALL_P (insn)
2640            && find_reg_note (insn, REG_SETJMP, NULL)))
2641       && !cselib_preserve_constants)
2642     {
2643       cselib_reset_table (next_uid);
2644       cselib_current_insn = NULL;
2645       return;
2646     }
2647
2648   if (! INSN_P (insn))
2649     {
2650       cselib_current_insn = NULL;
2651       return;
2652     }
2653
2654   /* If this is a call instruction, forget anything stored in a
2655      call clobbered register, or, if this is not a const call, in
2656      memory.  */
2657   if (CALL_P (insn))
2658     {
2659       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2660         if (call_used_regs[i]
2661             || (REG_VALUES (i) && REG_VALUES (i)->elt
2662                 && HARD_REGNO_CALL_PART_CLOBBERED (i,
2663                       GET_MODE (REG_VALUES (i)->elt->val_rtx))))
2664           cselib_invalidate_regno (i, reg_raw_mode[i]);
2665
2666       /* Since it is not clear how cselib is going to be used, be
2667          conservative here and treat looping pure or const functions
2668          as if they were regular functions.  */
2669       if (RTL_LOOPING_CONST_OR_PURE_CALL_P (insn)
2670           || !(RTL_CONST_OR_PURE_CALL_P (insn)))
2671         cselib_invalidate_mem (callmem);
2672     }
2673
2674   cselib_record_sets (insn);
2675
2676   /* Look for any CLOBBERs in CALL_INSN_FUNCTION_USAGE, but only
2677      after we have processed the insn.  */
2678   if (CALL_P (insn))
2679     {
2680       for (x = CALL_INSN_FUNCTION_USAGE (insn); x; x = XEXP (x, 1))
2681         if (GET_CODE (XEXP (x, 0)) == CLOBBER)
2682           cselib_invalidate_rtx (XEXP (XEXP (x, 0), 0));
2683       /* Flush evertything on setjmp.  */
2684       if (cselib_preserve_constants
2685           && find_reg_note (insn, REG_SETJMP, NULL))
2686         {
2687           cselib_preserve_only_values ();
2688           cselib_reset_table (next_uid);
2689         }
2690     }
2691
2692   /* On setter of the hard frame pointer if frame_pointer_needed,
2693      invalidate stack_pointer_rtx, so that sp and {,h}fp based
2694      VALUEs are distinct.  */
2695   if (reload_completed
2696       && frame_pointer_needed
2697       && fp_setter_insn (insn))
2698     cselib_invalidate_rtx (stack_pointer_rtx);
2699
2700   cselib_current_insn = NULL;
2701
2702   if (n_useless_values > MAX_USELESS_VALUES
2703       /* remove_useless_values is linear in the hash table size.  Avoid
2704          quadratic behavior for very large hashtables with very few
2705          useless elements.  */
2706       && ((unsigned int)n_useless_values
2707           > (cselib_hash_table->elements () - n_debug_values) / 4))
2708     remove_useless_values ();
2709 }
2710
2711 /* Initialize cselib for one pass.  The caller must also call
2712    init_alias_analysis.  */
2713
2714 void
2715 cselib_init (int record_what)
2716 {
2717   cselib_record_memory = record_what & CSELIB_RECORD_MEMORY;
2718   cselib_preserve_constants = record_what & CSELIB_PRESERVE_CONSTANTS;
2719   cselib_any_perm_equivs = false;
2720
2721   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything,
2722      see canon_true_dependence.  This is only created once.  */
2723   if (! callmem)
2724     callmem = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode));
2725
2726   cselib_nregs = max_reg_num ();
2727
2728   /* We preserve reg_values to allow expensive clearing of the whole thing.
2729      Reallocate it however if it happens to be too large.  */
2730   if (!reg_values || reg_values_size < cselib_nregs
2731       || (reg_values_size > 10 && reg_values_size > cselib_nregs * 4))
2732     {
2733       free (reg_values);
2734       /* Some space for newly emit instructions so we don't end up
2735          reallocating in between passes.  */
2736       reg_values_size = cselib_nregs + (63 + cselib_nregs) / 16;
2737       reg_values = XCNEWVEC (struct elt_list *, reg_values_size);
2738     }
2739   used_regs = XNEWVEC (unsigned int, cselib_nregs);
2740   n_used_regs = 0;
2741   cselib_hash_table = new hash_table<cselib_hasher> (31);
2742   if (cselib_preserve_constants)
2743     cselib_preserved_hash_table = new hash_table<cselib_hasher> (31);
2744   next_uid = 1;
2745 }
2746
2747 /* Called when the current user is done with cselib.  */
2748
2749 void
2750 cselib_finish (void)
2751 {
2752   bool preserved = cselib_preserve_constants;
2753   cselib_discard_hook = NULL;
2754   cselib_preserve_constants = false;
2755   cselib_any_perm_equivs = false;
2756   cfa_base_preserved_val = NULL;
2757   cfa_base_preserved_regno = INVALID_REGNUM;
2758   elt_list_pool.release ();
2759   elt_loc_list_pool.release ();
2760   cselib_val_pool.release ();
2761   value_pool.release ();
2762   cselib_clear_table ();
2763   delete cselib_hash_table;
2764   cselib_hash_table = NULL;
2765   if (preserved)
2766     delete cselib_preserved_hash_table;
2767   cselib_preserved_hash_table = NULL;
2768   free (used_regs);
2769   used_regs = 0;
2770   n_useless_values = 0;
2771   n_useless_debug_values = 0;
2772   n_debug_values = 0;
2773   next_uid = 0;
2774 }
2775
2776 /* Dump the cselib_val *X to FILE *OUT.  */
2777
2778 int
2779 dump_cselib_val (cselib_val **x, FILE *out)
2780 {
2781   cselib_val *v = *x;
2782   bool need_lf = true;
2783
2784   print_inline_rtx (out, v->val_rtx, 0);
2785
2786   if (v->locs)
2787     {
2788       struct elt_loc_list *l = v->locs;
2789       if (need_lf)
2790         {
2791           fputc ('\n', out);
2792           need_lf = false;
2793         }
2794       fputs (" locs:", out);
2795       do
2796         {
2797           if (l->setting_insn)
2798             fprintf (out, "\n  from insn %i ",
2799                      INSN_UID (l->setting_insn));
2800           else
2801             fprintf (out, "\n   ");
2802           print_inline_rtx (out, l->loc, 4);
2803         }
2804       while ((l = l->next));
2805       fputc ('\n', out);
2806     }
2807   else
2808     {
2809       fputs (" no locs", out);
2810       need_lf = true;
2811     }
2812
2813   if (v->addr_list)
2814     {
2815       struct elt_list *e = v->addr_list;
2816       if (need_lf)
2817         {
2818           fputc ('\n', out);
2819           need_lf = false;
2820         }
2821       fputs (" addr list:", out);
2822       do
2823         {
2824           fputs ("\n  ", out);
2825           print_inline_rtx (out, e->elt->val_rtx, 2);
2826         }
2827       while ((e = e->next));
2828       fputc ('\n', out);
2829     }
2830   else
2831     {
2832       fputs (" no addrs", out);
2833       need_lf = true;
2834     }
2835
2836   if (v->next_containing_mem == &dummy_val)
2837     fputs (" last mem\n", out);
2838   else if (v->next_containing_mem)
2839     {
2840       fputs (" next mem ", out);
2841       print_inline_rtx (out, v->next_containing_mem->val_rtx, 2);
2842       fputc ('\n', out);
2843     }
2844   else if (need_lf)
2845     fputc ('\n', out);
2846
2847   return 1;
2848 }
2849
2850 /* Dump to OUT everything in the CSELIB table.  */
2851
2852 void
2853 dump_cselib_table (FILE *out)
2854 {
2855   fprintf (out, "cselib hash table:\n");
2856   cselib_hash_table->traverse <FILE *, dump_cselib_val> (out);
2857   fprintf (out, "cselib preserved hash table:\n");
2858   cselib_preserved_hash_table->traverse <FILE *, dump_cselib_val> (out);
2859   if (first_containing_mem != &dummy_val)
2860     {
2861       fputs ("first mem ", out);
2862       print_inline_rtx (out, first_containing_mem->val_rtx, 2);
2863       fputc ('\n', out);
2864     }
2865   fprintf (out, "next uid %i\n", next_uid);
2866 }
2867
2868 #include "gt-cselib.h"