OSDN Git Service

* gcc.c-torture/execute/strct-stdarg-1.x: New file. Expect
[pf3gnuchains/gcc-fork.git] / gcc / alias.c
1 /* Alias analysis for GNU C
2    Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
3    Contributed by John Carr (jfc@mit.edu).
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING.  If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "rtl.h"
25 #include "tree.h"
26 #include "tm_p.h"
27 #include "function.h"
28 #include "expr.h"
29 #include "regs.h"
30 #include "hard-reg-set.h"
31 #include "basic-block.h"
32 #include "flags.h"
33 #include "output.h"
34 #include "toplev.h"
35 #include "cselib.h"
36 #include "splay-tree.h"
37 #include "ggc.h"
38 #include "langhooks.h"
39
40 /* The alias sets assigned to MEMs assist the back-end in determining
41    which MEMs can alias which other MEMs.  In general, two MEMs in
42    different alias sets cannot alias each other, with one important
43    exception.  Consider something like:
44
45      struct S {int i; double d; };
46
47    a store to an `S' can alias something of either type `int' or type
48    `double'.  (However, a store to an `int' cannot alias a `double'
49    and vice versa.)  We indicate this via a tree structure that looks
50    like:
51            struct S
52             /   \
53            /     \
54          |/_     _\|
55          int    double
56
57    (The arrows are directed and point downwards.)
58     In this situation we say the alias set for `struct S' is the
59    `superset' and that those for `int' and `double' are `subsets'.
60
61    To see whether two alias sets can point to the same memory, we must
62    see if either alias set is a subset of the other. We need not trace
63    past immediate descendents, however, since we propagate all
64    grandchildren up one level.
65
66    Alias set zero is implicitly a superset of all other alias sets.
67    However, this is no actual entry for alias set zero.  It is an
68    error to attempt to explicitly construct a subset of zero.  */
69
70 typedef struct alias_set_entry
71 {
72   /* The alias set number, as stored in MEM_ALIAS_SET.  */
73   HOST_WIDE_INT alias_set;
74
75   /* The children of the alias set.  These are not just the immediate
76      children, but, in fact, all descendents.  So, if we have:
77
78        struct T { struct S s; float f; } 
79
80      continuing our example above, the children here will be all of
81      `int', `double', `float', and `struct S'.  */
82   splay_tree children;
83
84   /* Nonzero if would have a child of zero: this effectively makes this
85      alias set the same as alias set zero.  */
86   int has_zero_child;
87 } *alias_set_entry;
88
89 static int rtx_equal_for_memref_p       PARAMS ((rtx, rtx));
90 static rtx find_symbolic_term           PARAMS ((rtx));
91 rtx get_addr                            PARAMS ((rtx));
92 static int memrefs_conflict_p           PARAMS ((int, rtx, int, rtx,
93                                                  HOST_WIDE_INT));
94 static void record_set                  PARAMS ((rtx, rtx, void *));
95 static rtx find_base_term               PARAMS ((rtx));
96 static int base_alias_check             PARAMS ((rtx, rtx, enum machine_mode,
97                                                  enum machine_mode));
98 static rtx find_base_value              PARAMS ((rtx));
99 static int mems_in_disjoint_alias_sets_p PARAMS ((rtx, rtx));
100 static int insert_subset_children       PARAMS ((splay_tree_node, void*));
101 static tree find_base_decl              PARAMS ((tree));
102 static alias_set_entry get_alias_set_entry PARAMS ((HOST_WIDE_INT));
103 static rtx fixed_scalar_and_varying_struct_p PARAMS ((rtx, rtx, rtx, rtx,
104                                                       int (*) (rtx, int)));
105 static int aliases_everything_p         PARAMS ((rtx));
106 static bool nonoverlapping_component_refs_p PARAMS ((tree, tree));
107 static tree decl_for_component_ref      PARAMS ((tree));
108 static rtx adjust_offset_for_component_ref PARAMS ((tree, rtx));
109 static int nonoverlapping_memrefs_p     PARAMS ((rtx, rtx));
110 static int write_dependence_p           PARAMS ((rtx, rtx, int));
111 static int nonlocal_mentioned_p         PARAMS ((rtx));
112
113 /* Set up all info needed to perform alias analysis on memory references.  */
114
115 /* Returns the size in bytes of the mode of X.  */
116 #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X)))
117
118 /* Returns nonzero if MEM1 and MEM2 do not alias because they are in
119    different alias sets.  We ignore alias sets in functions making use
120    of variable arguments because the va_arg macros on some systems are
121    not legal ANSI C.  */
122 #define DIFFERENT_ALIAS_SETS_P(MEM1, MEM2)                      \
123   mems_in_disjoint_alias_sets_p (MEM1, MEM2)
124
125 /* Cap the number of passes we make over the insns propagating alias
126    information through set chains.   10 is a completely arbitrary choice.  */
127 #define MAX_ALIAS_LOOP_PASSES 10
128    
129 /* reg_base_value[N] gives an address to which register N is related.
130    If all sets after the first add or subtract to the current value
131    or otherwise modify it so it does not point to a different top level
132    object, reg_base_value[N] is equal to the address part of the source
133    of the first set.
134
135    A base address can be an ADDRESS, SYMBOL_REF, or LABEL_REF.  ADDRESS
136    expressions represent certain special values: function arguments and
137    the stack, frame, and argument pointers.  
138
139    The contents of an ADDRESS is not normally used, the mode of the
140    ADDRESS determines whether the ADDRESS is a function argument or some
141    other special value.  Pointer equality, not rtx_equal_p, determines whether
142    two ADDRESS expressions refer to the same base address.
143
144    The only use of the contents of an ADDRESS is for determining if the
145    current function performs nonlocal memory memory references for the
146    purposes of marking the function as a constant function.  */
147
148 static rtx *reg_base_value;
149 static rtx *new_reg_base_value;
150 static unsigned int reg_base_value_size; /* size of reg_base_value array */
151
152 #define REG_BASE_VALUE(X) \
153   (REGNO (X) < reg_base_value_size \
154    ? reg_base_value[REGNO (X)] : 0)
155
156 /* Vector of known invariant relationships between registers.  Set in
157    loop unrolling.  Indexed by register number, if nonzero the value
158    is an expression describing this register in terms of another.
159
160    The length of this array is REG_BASE_VALUE_SIZE.
161
162    Because this array contains only pseudo registers it has no effect
163    after reload.  */
164 static rtx *alias_invariant;
165
166 /* Vector indexed by N giving the initial (unchanging) value known for
167    pseudo-register N.  This array is initialized in
168    init_alias_analysis, and does not change until end_alias_analysis
169    is called.  */
170 rtx *reg_known_value;
171
172 /* Indicates number of valid entries in reg_known_value.  */
173 static unsigned int reg_known_value_size;
174
175 /* Vector recording for each reg_known_value whether it is due to a
176    REG_EQUIV note.  Future passes (viz., reload) may replace the
177    pseudo with the equivalent expression and so we account for the
178    dependences that would be introduced if that happens.
179
180    The REG_EQUIV notes created in assign_parms may mention the arg
181    pointer, and there are explicit insns in the RTL that modify the
182    arg pointer.  Thus we must ensure that such insns don't get
183    scheduled across each other because that would invalidate the
184    REG_EQUIV notes.  One could argue that the REG_EQUIV notes are
185    wrong, but solving the problem in the scheduler will likely give
186    better code, so we do it here.  */
187 char *reg_known_equiv_p;
188
189 /* True when scanning insns from the start of the rtl to the
190    NOTE_INSN_FUNCTION_BEG note.  */
191 static int copying_arguments;
192
193 /* The splay-tree used to store the various alias set entries.  */
194 static splay_tree alias_sets;
195 \f
196 /* Returns a pointer to the alias set entry for ALIAS_SET, if there is
197    such an entry, or NULL otherwise.  */
198
199 static alias_set_entry
200 get_alias_set_entry (alias_set)
201      HOST_WIDE_INT alias_set;
202 {
203   splay_tree_node sn
204     = splay_tree_lookup (alias_sets, (splay_tree_key) alias_set);
205
206   return sn != 0 ? ((alias_set_entry) sn->value) : 0;
207 }
208
209 /* Returns nonzero if the alias sets for MEM1 and MEM2 are such that
210    the two MEMs cannot alias each other.  */
211
212 static int 
213 mems_in_disjoint_alias_sets_p (mem1, mem2)
214      rtx mem1;
215      rtx mem2;
216 {
217 #ifdef ENABLE_CHECKING  
218 /* Perform a basic sanity check.  Namely, that there are no alias sets
219    if we're not using strict aliasing.  This helps to catch bugs
220    whereby someone uses PUT_CODE, but doesn't clear MEM_ALIAS_SET, or
221    where a MEM is allocated in some way other than by the use of
222    gen_rtx_MEM, and the MEM_ALIAS_SET is not cleared.  If we begin to
223    use alias sets to indicate that spilled registers cannot alias each
224    other, we might need to remove this check.  */
225   if (! flag_strict_aliasing
226       && (MEM_ALIAS_SET (mem1) != 0 || MEM_ALIAS_SET (mem2) != 0))
227     abort ();
228 #endif
229
230   return ! alias_sets_conflict_p (MEM_ALIAS_SET (mem1), MEM_ALIAS_SET (mem2));
231 }
232
233 /* Insert the NODE into the splay tree given by DATA.  Used by
234    record_alias_subset via splay_tree_foreach.  */
235
236 static int
237 insert_subset_children (node, data)
238      splay_tree_node node;
239      void *data;
240 {
241   splay_tree_insert ((splay_tree) data, node->key, node->value);
242
243   return 0;
244 }
245
246 /* Return 1 if the two specified alias sets may conflict.  */
247
248 int
249 alias_sets_conflict_p (set1, set2)
250      HOST_WIDE_INT set1, set2;
251 {
252   alias_set_entry ase;
253
254   /* If have no alias set information for one of the operands, we have
255      to assume it can alias anything.  */
256   if (set1 == 0 || set2 == 0
257       /* If the two alias sets are the same, they may alias.  */
258       || set1 == set2)
259     return 1;
260
261   /* See if the first alias set is a subset of the second.  */
262   ase = get_alias_set_entry (set1);
263   if (ase != 0
264       && (ase->has_zero_child
265           || splay_tree_lookup (ase->children,
266                                 (splay_tree_key) set2)))
267     return 1;
268
269   /* Now do the same, but with the alias sets reversed.  */
270   ase = get_alias_set_entry (set2);
271   if (ase != 0
272       && (ase->has_zero_child
273           || splay_tree_lookup (ase->children,
274                                 (splay_tree_key) set1)))
275     return 1;
276
277   /* The two alias sets are distinct and neither one is the
278      child of the other.  Therefore, they cannot alias.  */
279   return 0;
280 }
281 \f
282 /* Return 1 if TYPE is a RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE and has
283    has any readonly fields.  If any of the fields have types that
284    contain readonly fields, return true as well.  */
285
286 int
287 readonly_fields_p (type)
288      tree type;
289 {
290   tree field;
291
292   if (TREE_CODE (type) != RECORD_TYPE && TREE_CODE (type) != UNION_TYPE
293       && TREE_CODE (type) != QUAL_UNION_TYPE)
294     return 0;
295
296   for (field = TYPE_FIELDS (type); field != 0; field = TREE_CHAIN (field))
297     if (TREE_CODE (field) == FIELD_DECL
298         && (TREE_READONLY (field)
299             || readonly_fields_p (TREE_TYPE (field))))
300       return 1;
301
302   return 0;
303 }
304 \f
305 /* Return 1 if any MEM object of type T1 will always conflict (using the
306    dependency routines in this file) with any MEM object of type T2.
307    This is used when allocating temporary storage.  If T1 and/or T2 are
308    NULL_TREE, it means we know nothing about the storage.  */
309
310 int
311 objects_must_conflict_p (t1, t2)
312      tree t1, t2;
313 {
314   /* If neither has a type specified, we don't know if they'll conflict
315      because we may be using them to store objects of various types, for
316      example the argument and local variables areas of inlined functions.  */
317   if (t1 == 0 && t2 == 0)
318     return 0;
319
320   /* If one or the other has readonly fields or is readonly,
321      then they may not conflict.  */
322   if ((t1 != 0 && readonly_fields_p (t1))
323       || (t2 != 0 && readonly_fields_p (t2))
324       || (t1 != 0 && TYPE_READONLY (t1))
325       || (t2 != 0 && TYPE_READONLY (t2)))
326     return 0;
327
328   /* If they are the same type, they must conflict.  */
329   if (t1 == t2
330       /* Likewise if both are volatile.  */
331       || (t1 != 0 && TYPE_VOLATILE (t1) && t2 != 0 && TYPE_VOLATILE (t2)))
332     return 1;
333
334   /* If one is aggregate and the other is scalar then they may not
335      conflict.  */
336   if ((t1 != 0 && AGGREGATE_TYPE_P (t1))
337       != (t2 != 0 && AGGREGATE_TYPE_P (t2)))
338     return 0;
339
340   /* Otherwise they conflict only if the alias sets conflict.  */
341   return alias_sets_conflict_p (t1 ? get_alias_set (t1) : 0,
342                                 t2 ? get_alias_set (t2) : 0);
343 }
344 \f
345 /* T is an expression with pointer type.  Find the DECL on which this
346    expression is based.  (For example, in `a[i]' this would be `a'.)
347    If there is no such DECL, or a unique decl cannot be determined,
348    NULL_TREE is returned.  */
349
350 static tree
351 find_base_decl (t)
352      tree t;
353 {
354   tree d0, d1, d2;
355
356   if (t == 0 || t == error_mark_node || ! POINTER_TYPE_P (TREE_TYPE (t)))
357     return 0;
358
359   /* If this is a declaration, return it.  */
360   if (TREE_CODE_CLASS (TREE_CODE (t)) == 'd')
361     return t;
362
363   /* Handle general expressions.  It would be nice to deal with
364      COMPONENT_REFs here.  If we could tell that `a' and `b' were the
365      same, then `a->f' and `b->f' are also the same.  */
366   switch (TREE_CODE_CLASS (TREE_CODE (t)))
367     {
368     case '1':
369       return find_base_decl (TREE_OPERAND (t, 0));
370
371     case '2':
372       /* Return 0 if found in neither or both are the same.  */
373       d0 = find_base_decl (TREE_OPERAND (t, 0));
374       d1 = find_base_decl (TREE_OPERAND (t, 1));
375       if (d0 == d1)
376         return d0;
377       else if (d0 == 0)
378         return d1;
379       else if (d1 == 0)
380         return d0;
381       else
382         return 0;
383
384     case '3':
385       d0 = find_base_decl (TREE_OPERAND (t, 0));
386       d1 = find_base_decl (TREE_OPERAND (t, 1));
387       d2 = find_base_decl (TREE_OPERAND (t, 2));
388
389       /* Set any nonzero values from the last, then from the first.  */
390       if (d1 == 0) d1 = d2;
391       if (d0 == 0) d0 = d1;
392       if (d1 == 0) d1 = d0;
393       if (d2 == 0) d2 = d1;
394
395       /* At this point all are nonzero or all are zero.  If all three are the
396          same, return it.  Otherwise, return zero.  */
397       return (d0 == d1 && d1 == d2) ? d0 : 0;
398
399     default:
400       return 0;
401     }
402 }
403
404 /* Return 1 if all the nested component references handled by
405    get_inner_reference in T are such that we can address the object in T.  */
406
407 int
408 can_address_p (t)
409      tree t;
410 {
411   /* If we're at the end, it is vacuously addressable.  */
412   if (! handled_component_p (t))
413     return 1;
414
415   /* Bitfields are never addressable.  */
416   else if (TREE_CODE (t) == BIT_FIELD_REF)
417     return 0;
418
419   /* Fields are addressable unless they are marked as nonaddressable or
420      the containing type has alias set 0.  */
421   else if (TREE_CODE (t) == COMPONENT_REF
422            && ! DECL_NONADDRESSABLE_P (TREE_OPERAND (t, 1))
423            && get_alias_set (TREE_TYPE (TREE_OPERAND (t, 0))) != 0
424            && can_address_p (TREE_OPERAND (t, 0)))
425     return 1;
426
427   /* Likewise for arrays.  */
428   else if ((TREE_CODE (t) == ARRAY_REF || TREE_CODE (t) == ARRAY_RANGE_REF)
429            && ! TYPE_NONALIASED_COMPONENT (TREE_TYPE (TREE_OPERAND (t, 0)))
430            && get_alias_set (TREE_TYPE (TREE_OPERAND (t, 0))) != 0
431            && can_address_p (TREE_OPERAND (t, 0)))
432     return 1;
433
434   return 0;
435 }
436
437 /* Return the alias set for T, which may be either a type or an
438    expression.  Call language-specific routine for help, if needed.  */
439
440 HOST_WIDE_INT
441 get_alias_set (t)
442      tree t;
443 {
444   HOST_WIDE_INT set;
445
446   /* If we're not doing any alias analysis, just assume everything
447      aliases everything else.  Also return 0 if this or its type is
448      an error.  */
449   if (! flag_strict_aliasing || t == error_mark_node
450       || (! TYPE_P (t)
451           && (TREE_TYPE (t) == 0 || TREE_TYPE (t) == error_mark_node)))
452     return 0;
453
454   /* We can be passed either an expression or a type.  This and the
455      language-specific routine may make mutually-recursive calls to each other
456      to figure out what to do.  At each juncture, we see if this is a tree
457      that the language may need to handle specially.  First handle things that
458      aren't types.  */
459   if (! TYPE_P (t))
460     {
461       tree inner = t;
462       tree placeholder_ptr = 0;
463
464       /* Remove any nops, then give the language a chance to do
465          something with this tree before we look at it.  */
466       STRIP_NOPS (t);
467       set = (*lang_hooks.get_alias_set) (t);
468       if (set != -1)
469         return set;
470
471       /* First see if the actual object referenced is an INDIRECT_REF from a
472          restrict-qualified pointer or a "void *".  Replace
473          PLACEHOLDER_EXPRs.  */
474       while (TREE_CODE (inner) == PLACEHOLDER_EXPR
475              || handled_component_p (inner))
476         {
477           if (TREE_CODE (inner) == PLACEHOLDER_EXPR)
478             inner = find_placeholder (inner, &placeholder_ptr);
479           else
480             inner = TREE_OPERAND (inner, 0);
481
482           STRIP_NOPS (inner);
483         }
484
485       /* Check for accesses through restrict-qualified pointers.  */
486       if (TREE_CODE (inner) == INDIRECT_REF)
487         {
488           tree decl = find_base_decl (TREE_OPERAND (inner, 0));
489
490           if (decl && DECL_POINTER_ALIAS_SET_KNOWN_P (decl))
491             {
492               /* If we haven't computed the actual alias set, do it now.  */
493               if (DECL_POINTER_ALIAS_SET (decl) == -2)
494                 {
495                   /* No two restricted pointers can point at the same thing.
496                      However, a restricted pointer can point at the same thing
497                      as an unrestricted pointer, if that unrestricted pointer
498                      is based on the restricted pointer.  So, we make the
499                      alias set for the restricted pointer a subset of the
500                      alias set for the type pointed to by the type of the
501                      decl.  */
502                   HOST_WIDE_INT pointed_to_alias_set
503                     = get_alias_set (TREE_TYPE (TREE_TYPE (decl)));
504
505                   if (pointed_to_alias_set == 0)
506                     /* It's not legal to make a subset of alias set zero.  */
507                     ;
508                   else
509                     {
510                       DECL_POINTER_ALIAS_SET (decl) = new_alias_set ();
511                       record_alias_subset  (pointed_to_alias_set,
512                                             DECL_POINTER_ALIAS_SET (decl));
513                     }
514                 }
515
516               /* We use the alias set indicated in the declaration.  */
517               return DECL_POINTER_ALIAS_SET (decl);
518             }
519
520           /* If we have an INDIRECT_REF via a void pointer, we don't
521              know anything about what that might alias.  */
522           else if (TREE_CODE (TREE_TYPE (inner)) == VOID_TYPE)
523             return 0;
524         }
525
526       /* Otherwise, pick up the outermost object that we could have a pointer
527          to, processing conversion and PLACEHOLDER_EXPR as above.  */
528       placeholder_ptr = 0;
529       while (TREE_CODE (t) == PLACEHOLDER_EXPR
530              || (handled_component_p (t) && ! can_address_p (t)))
531         {
532           if (TREE_CODE (t) == PLACEHOLDER_EXPR)
533             t = find_placeholder (t, &placeholder_ptr);
534           else
535             t = TREE_OPERAND (t, 0);
536
537           STRIP_NOPS (t);
538         }
539
540       /* If we've already determined the alias set for a decl, just return
541          it.  This is necessary for C++ anonymous unions, whose component
542          variables don't look like union members (boo!).  */
543       if (TREE_CODE (t) == VAR_DECL
544           && DECL_RTL_SET_P (t) && GET_CODE (DECL_RTL (t)) == MEM)
545         return MEM_ALIAS_SET (DECL_RTL (t));
546
547       /* Now all we care about is the type.  */
548       t = TREE_TYPE (t);
549     }
550
551   /* Variant qualifiers don't affect the alias set, so get the main
552      variant. If this is a type with a known alias set, return it.  */
553   t = TYPE_MAIN_VARIANT (t);
554   if (TYPE_ALIAS_SET_KNOWN_P (t))
555     return TYPE_ALIAS_SET (t);
556
557   /* See if the language has special handling for this type.  */
558   set = (*lang_hooks.get_alias_set) (t);
559   if (set != -1)
560     return set;
561
562   /* There are no objects of FUNCTION_TYPE, so there's no point in
563      using up an alias set for them.  (There are, of course, pointers
564      and references to functions, but that's different.)  */
565   else if (TREE_CODE (t) == FUNCTION_TYPE)
566     set = 0;
567   else
568     /* Otherwise make a new alias set for this type.  */
569     set = new_alias_set ();
570
571   TYPE_ALIAS_SET (t) = set;
572
573   /* If this is an aggregate type, we must record any component aliasing
574      information.  */
575   if (AGGREGATE_TYPE_P (t) || TREE_CODE (t) == COMPLEX_TYPE)
576     record_component_aliases (t);
577
578   return set;
579 }
580
581 /* Return a brand-new alias set.  */
582
583 HOST_WIDE_INT
584 new_alias_set ()
585 {
586   static HOST_WIDE_INT last_alias_set;
587
588   if (flag_strict_aliasing)
589     return ++last_alias_set;
590   else
591     return 0;
592 }
593
594 /* Indicate that things in SUBSET can alias things in SUPERSET, but
595    not vice versa.  For example, in C, a store to an `int' can alias a
596    structure containing an `int', but not vice versa.  Here, the
597    structure would be the SUPERSET and `int' the SUBSET.  This
598    function should be called only once per SUPERSET/SUBSET pair. 
599
600    It is illegal for SUPERSET to be zero; everything is implicitly a
601    subset of alias set zero.  */
602
603 void
604 record_alias_subset (superset, subset)
605      HOST_WIDE_INT superset;
606      HOST_WIDE_INT subset;
607 {
608   alias_set_entry superset_entry;
609   alias_set_entry subset_entry;
610
611   /* It is possible in complex type situations for both sets to be the same,
612      in which case we can ignore this operation.  */
613   if (superset == subset)
614     return;
615
616   if (superset == 0)
617     abort ();
618
619   superset_entry = get_alias_set_entry (superset);
620   if (superset_entry == 0) 
621     {
622       /* Create an entry for the SUPERSET, so that we have a place to
623          attach the SUBSET.  */
624       superset_entry
625         = (alias_set_entry) xmalloc (sizeof (struct alias_set_entry));
626       superset_entry->alias_set = superset;
627       superset_entry->children 
628         = splay_tree_new (splay_tree_compare_ints, 0, 0);
629       superset_entry->has_zero_child = 0;
630       splay_tree_insert (alias_sets, (splay_tree_key) superset,
631                          (splay_tree_value) superset_entry);
632     }
633
634   if (subset == 0)
635     superset_entry->has_zero_child = 1;
636   else
637     {
638       subset_entry = get_alias_set_entry (subset);
639       /* If there is an entry for the subset, enter all of its children
640          (if they are not already present) as children of the SUPERSET.  */
641       if (subset_entry) 
642         {
643           if (subset_entry->has_zero_child)
644             superset_entry->has_zero_child = 1;
645
646           splay_tree_foreach (subset_entry->children, insert_subset_children,
647                               superset_entry->children);
648         }
649
650       /* Enter the SUBSET itself as a child of the SUPERSET.  */
651       splay_tree_insert (superset_entry->children, 
652                          (splay_tree_key) subset, 0);
653     }
654 }
655
656 /* Record that component types of TYPE, if any, are part of that type for
657    aliasing purposes.  For record types, we only record component types
658    for fields that are marked addressable.  For array types, we always
659    record the component types, so the front end should not call this
660    function if the individual component aren't addressable.  */
661
662 void
663 record_component_aliases (type)
664      tree type;
665 {
666   HOST_WIDE_INT superset = get_alias_set (type);
667   tree field;
668
669   if (superset == 0)
670     return;
671
672   switch (TREE_CODE (type))
673     {
674     case ARRAY_TYPE:
675       if (! TYPE_NONALIASED_COMPONENT (type))
676         record_alias_subset (superset, get_alias_set (TREE_TYPE (type)));
677       break;
678
679     case RECORD_TYPE:
680     case UNION_TYPE:
681     case QUAL_UNION_TYPE:
682       for (field = TYPE_FIELDS (type); field != 0; field = TREE_CHAIN (field))
683         if (TREE_CODE (field) == FIELD_DECL && ! DECL_NONADDRESSABLE_P (field))
684           record_alias_subset (superset, get_alias_set (TREE_TYPE (field)));
685       break;
686
687     case COMPLEX_TYPE:
688       record_alias_subset (superset, get_alias_set (TREE_TYPE (type)));
689       break;
690
691     default:
692       break;
693     }
694 }
695
696 /* Allocate an alias set for use in storing and reading from the varargs
697    spill area.  */
698
699 HOST_WIDE_INT
700 get_varargs_alias_set ()
701 {
702   static HOST_WIDE_INT set = -1;
703
704   if (set == -1)
705     set = new_alias_set ();
706
707   return set;
708 }
709
710 /* Likewise, but used for the fixed portions of the frame, e.g., register
711    save areas.  */
712
713 HOST_WIDE_INT
714 get_frame_alias_set ()
715 {
716   static HOST_WIDE_INT set = -1;
717
718   if (set == -1)
719     set = new_alias_set ();
720
721   return set;
722 }
723
724 /* Inside SRC, the source of a SET, find a base address.  */
725
726 static rtx
727 find_base_value (src)
728      rtx src;
729 {
730   unsigned int regno;
731   switch (GET_CODE (src))
732     {
733     case SYMBOL_REF:
734     case LABEL_REF:
735       return src;
736
737     case REG:
738       regno = REGNO (src);
739       /* At the start of a function, argument registers have known base
740          values which may be lost later.  Returning an ADDRESS
741          expression here allows optimization based on argument values
742          even when the argument registers are used for other purposes.  */
743       if (regno < FIRST_PSEUDO_REGISTER && copying_arguments)
744         return new_reg_base_value[regno];
745
746       /* If a pseudo has a known base value, return it.  Do not do this
747          for hard regs since it can result in a circular dependency
748          chain for registers which have values at function entry.
749
750          The test above is not sufficient because the scheduler may move
751          a copy out of an arg reg past the NOTE_INSN_FUNCTION_BEGIN.  */
752       if (regno >= FIRST_PSEUDO_REGISTER
753           && regno < reg_base_value_size
754           && reg_base_value[regno])
755         return reg_base_value[regno];
756
757       return src;
758
759     case MEM:
760       /* Check for an argument passed in memory.  Only record in the
761          copying-arguments block; it is too hard to track changes
762          otherwise.  */
763       if (copying_arguments
764           && (XEXP (src, 0) == arg_pointer_rtx
765               || (GET_CODE (XEXP (src, 0)) == PLUS
766                   && XEXP (XEXP (src, 0), 0) == arg_pointer_rtx)))
767         return gen_rtx_ADDRESS (VOIDmode, src);
768       return 0;
769
770     case CONST:
771       src = XEXP (src, 0);
772       if (GET_CODE (src) != PLUS && GET_CODE (src) != MINUS)
773         break;
774
775       /* ... fall through ...  */
776
777     case PLUS:
778     case MINUS:
779       {
780         rtx temp, src_0 = XEXP (src, 0), src_1 = XEXP (src, 1);
781
782         /* If either operand is a REG that is a known pointer, then it
783            is the base.  */
784         if (REG_P (src_0) && REG_POINTER (src_0))
785           return find_base_value (src_0);
786         if (REG_P (src_1) && REG_POINTER (src_1))
787           return find_base_value (src_1);
788
789         /* If either operand is a REG, then see if we already have
790            a known value for it.  */
791         if (REG_P (src_0))
792           {
793             temp = find_base_value (src_0);
794             if (temp != 0)
795               src_0 = temp;
796           }
797
798         if (REG_P (src_1))
799           {
800             temp = find_base_value (src_1);
801             if (temp!= 0)
802               src_1 = temp;
803           }
804
805         /* If either base is named object or a special address
806            (like an argument or stack reference), then use it for the
807            base term.  */
808         if (src_0 != 0
809             && (GET_CODE (src_0) == SYMBOL_REF
810                 || GET_CODE (src_0) == LABEL_REF
811                 || (GET_CODE (src_0) == ADDRESS
812                     && GET_MODE (src_0) != VOIDmode)))
813           return src_0;
814
815         if (src_1 != 0
816             && (GET_CODE (src_1) == SYMBOL_REF
817                 || GET_CODE (src_1) == LABEL_REF
818                 || (GET_CODE (src_1) == ADDRESS
819                     && GET_MODE (src_1) != VOIDmode)))
820           return src_1;
821
822         /* Guess which operand is the base address:
823            If either operand is a symbol, then it is the base.  If
824            either operand is a CONST_INT, then the other is the base.  */
825         if (GET_CODE (src_1) == CONST_INT || CONSTANT_P (src_0))
826           return find_base_value (src_0);
827         else if (GET_CODE (src_0) == CONST_INT || CONSTANT_P (src_1))
828           return find_base_value (src_1);
829
830         return 0;
831       }
832
833     case LO_SUM:
834       /* The standard form is (lo_sum reg sym) so look only at the
835          second operand.  */
836       return find_base_value (XEXP (src, 1));
837
838     case AND:
839       /* If the second operand is constant set the base
840          address to the first operand.  */
841       if (GET_CODE (XEXP (src, 1)) == CONST_INT && INTVAL (XEXP (src, 1)) != 0)
842         return find_base_value (XEXP (src, 0));
843       return 0;
844
845     case TRUNCATE:
846       if (GET_MODE_SIZE (GET_MODE (src)) < GET_MODE_SIZE (Pmode))
847         break;
848       /* Fall through.  */
849     case ZERO_EXTEND:
850     case SIGN_EXTEND:   /* used for NT/Alpha pointers */
851     case HIGH:
852       return find_base_value (XEXP (src, 0));
853
854     default:
855       break;
856     }
857
858   return 0;
859 }
860
861 /* Called from init_alias_analysis indirectly through note_stores.  */
862
863 /* While scanning insns to find base values, reg_seen[N] is nonzero if
864    register N has been set in this function.  */
865 static char *reg_seen;
866
867 /* Addresses which are known not to alias anything else are identified
868    by a unique integer.  */
869 static int unique_id;
870
871 static void
872 record_set (dest, set, data)
873      rtx dest, set;
874      void *data ATTRIBUTE_UNUSED;
875 {
876   unsigned regno;
877   rtx src;
878
879   if (GET_CODE (dest) != REG)
880     return;
881
882   regno = REGNO (dest);
883
884   if (regno >= reg_base_value_size)
885     abort ();
886
887   if (set)
888     {
889       /* A CLOBBER wipes out any old value but does not prevent a previously
890          unset register from acquiring a base address (i.e. reg_seen is not
891          set).  */
892       if (GET_CODE (set) == CLOBBER)
893         {
894           new_reg_base_value[regno] = 0;
895           return;
896         }
897       src = SET_SRC (set);
898     }
899   else
900     {
901       if (reg_seen[regno])
902         {
903           new_reg_base_value[regno] = 0;
904           return;
905         }
906       reg_seen[regno] = 1;
907       new_reg_base_value[regno] = gen_rtx_ADDRESS (Pmode,
908                                                    GEN_INT (unique_id++));
909       return;
910     }
911
912   /* This is not the first set.  If the new value is not related to the
913      old value, forget the base value. Note that the following code is
914      not detected:
915      extern int x, y;  int *p = &x; p += (&y-&x);
916      ANSI C does not allow computing the difference of addresses
917      of distinct top level objects.  */
918   if (new_reg_base_value[regno])
919     switch (GET_CODE (src))
920       {
921       case LO_SUM:
922       case MINUS:
923         if (XEXP (src, 0) != dest && XEXP (src, 1) != dest)
924           new_reg_base_value[regno] = 0;
925         break;
926       case PLUS:
927         /* If the value we add in the PLUS is also a valid base value,
928            this might be the actual base value, and the original value
929            an index.  */
930         {
931           rtx other = NULL_RTX;
932
933           if (XEXP (src, 0) == dest)
934             other = XEXP (src, 1);
935           else if (XEXP (src, 1) == dest)
936             other = XEXP (src, 0);
937
938           if (! other || find_base_value (other))
939             new_reg_base_value[regno] = 0;
940           break;
941         }
942       case AND:
943         if (XEXP (src, 0) != dest || GET_CODE (XEXP (src, 1)) != CONST_INT)
944           new_reg_base_value[regno] = 0;
945         break;
946       default:
947         new_reg_base_value[regno] = 0;
948         break;
949       }
950   /* If this is the first set of a register, record the value.  */
951   else if ((regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
952            && ! reg_seen[regno] && new_reg_base_value[regno] == 0)
953     new_reg_base_value[regno] = find_base_value (src);
954
955   reg_seen[regno] = 1;
956 }
957
958 /* Called from loop optimization when a new pseudo-register is
959    created.  It indicates that REGNO is being set to VAL.  f INVARIANT
960    is true then this value also describes an invariant relationship
961    which can be used to deduce that two registers with unknown values
962    are different.  */
963
964 void
965 record_base_value (regno, val, invariant)
966      unsigned int regno;
967      rtx val;
968      int invariant;
969 {
970   if (regno >= reg_base_value_size)
971     return;
972
973   if (invariant && alias_invariant)
974     alias_invariant[regno] = val;
975
976   if (GET_CODE (val) == REG)
977     {
978       if (REGNO (val) < reg_base_value_size)
979         reg_base_value[regno] = reg_base_value[REGNO (val)];
980
981       return;
982     }
983
984   reg_base_value[regno] = find_base_value (val);
985 }
986
987 /* Clear alias info for a register.  This is used if an RTL transformation
988    changes the value of a register.  This is used in flow by AUTO_INC_DEC
989    optimizations.  We don't need to clear reg_base_value, since flow only
990    changes the offset.  */
991
992 void
993 clear_reg_alias_info (reg)
994      rtx reg;
995 {
996   unsigned int regno = REGNO (reg);
997
998   if (regno < reg_known_value_size && regno >= FIRST_PSEUDO_REGISTER)
999     reg_known_value[regno] = reg;
1000 }
1001
1002 /* Returns a canonical version of X, from the point of view alias
1003    analysis.  (For example, if X is a MEM whose address is a register,
1004    and the register has a known value (say a SYMBOL_REF), then a MEM
1005    whose address is the SYMBOL_REF is returned.)  */
1006
1007 rtx
1008 canon_rtx (x)
1009      rtx x;
1010 {
1011   /* Recursively look for equivalences.  */
1012   if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
1013       && REGNO (x) < reg_known_value_size)
1014     return reg_known_value[REGNO (x)] == x
1015       ? x : canon_rtx (reg_known_value[REGNO (x)]);
1016   else if (GET_CODE (x) == PLUS)
1017     {
1018       rtx x0 = canon_rtx (XEXP (x, 0));
1019       rtx x1 = canon_rtx (XEXP (x, 1));
1020
1021       if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
1022         {
1023           if (GET_CODE (x0) == CONST_INT)
1024             return plus_constant (x1, INTVAL (x0));
1025           else if (GET_CODE (x1) == CONST_INT)
1026             return plus_constant (x0, INTVAL (x1));
1027           return gen_rtx_PLUS (GET_MODE (x), x0, x1);
1028         }
1029     }
1030
1031   /* This gives us much better alias analysis when called from
1032      the loop optimizer.   Note we want to leave the original
1033      MEM alone, but need to return the canonicalized MEM with
1034      all the flags with their original values.  */
1035   else if (GET_CODE (x) == MEM)
1036     x = replace_equiv_address_nv (x, canon_rtx (XEXP (x, 0)));
1037
1038   return x;
1039 }
1040
1041 /* Return 1 if X and Y are identical-looking rtx's.
1042
1043    We use the data in reg_known_value above to see if two registers with
1044    different numbers are, in fact, equivalent.  */
1045
1046 static int
1047 rtx_equal_for_memref_p (x, y)
1048      rtx x, y;
1049 {
1050   int i;
1051   int j;
1052   enum rtx_code code;
1053   const char *fmt;
1054
1055   if (x == 0 && y == 0)
1056     return 1;
1057   if (x == 0 || y == 0)
1058     return 0;
1059
1060   x = canon_rtx (x);
1061   y = canon_rtx (y);
1062
1063   if (x == y)
1064     return 1;
1065
1066   code = GET_CODE (x);
1067   /* Rtx's of different codes cannot be equal.  */
1068   if (code != GET_CODE (y))
1069     return 0;
1070
1071   /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
1072      (REG:SI x) and (REG:HI x) are NOT equivalent.  */
1073
1074   if (GET_MODE (x) != GET_MODE (y))
1075     return 0;
1076
1077   /* Some RTL can be compared without a recursive examination.  */
1078   switch (code)
1079     {
1080     case VALUE:
1081       return CSELIB_VAL_PTR (x) == CSELIB_VAL_PTR (y);
1082
1083     case REG:
1084       return REGNO (x) == REGNO (y);
1085
1086     case LABEL_REF:
1087       return XEXP (x, 0) == XEXP (y, 0);
1088       
1089     case SYMBOL_REF:
1090       return XSTR (x, 0) == XSTR (y, 0);
1091
1092     case CONST_INT:
1093     case CONST_DOUBLE:
1094       /* There's no need to compare the contents of CONST_DOUBLEs or
1095          CONST_INTs because pointer equality is a good enough
1096          comparison for these nodes.  */
1097       return 0;
1098
1099     case ADDRESSOF:
1100       return (XINT (x, 1) == XINT (y, 1)
1101               && rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0)));
1102
1103     default:
1104       break;
1105     }
1106
1107   /* For commutative operations, the RTX match if the operand match in any
1108      order.  Also handle the simple binary and unary cases without a loop.  */
1109   if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
1110     return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
1111              && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
1112             || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
1113                 && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
1114   else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
1115     return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
1116             && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)));
1117   else if (GET_RTX_CLASS (code) == '1')
1118     return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0));
1119
1120   /* Compare the elements.  If any pair of corresponding elements
1121      fail to match, return 0 for the whole things.
1122
1123      Limit cases to types which actually appear in addresses.  */
1124
1125   fmt = GET_RTX_FORMAT (code);
1126   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1127     {
1128       switch (fmt[i])
1129         {
1130         case 'i':
1131           if (XINT (x, i) != XINT (y, i))
1132             return 0;
1133           break;
1134
1135         case 'E':
1136           /* Two vectors must have the same length.  */
1137           if (XVECLEN (x, i) != XVECLEN (y, i))
1138             return 0;
1139
1140           /* And the corresponding elements must match.  */
1141           for (j = 0; j < XVECLEN (x, i); j++)
1142             if (rtx_equal_for_memref_p (XVECEXP (x, i, j),
1143                                         XVECEXP (y, i, j)) == 0)
1144               return 0;
1145           break;
1146
1147         case 'e':
1148           if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0)
1149             return 0;
1150           break;
1151
1152           /* This can happen for asm operands.  */
1153         case 's':
1154           if (strcmp (XSTR (x, i), XSTR (y, i)))
1155             return 0;
1156           break;
1157
1158         /* This can happen for an asm which clobbers memory.  */
1159         case '0':
1160           break;
1161
1162           /* It is believed that rtx's at this level will never
1163              contain anything but integers and other rtx's,
1164              except for within LABEL_REFs and SYMBOL_REFs.  */
1165         default:
1166           abort ();
1167         }
1168     }
1169   return 1;
1170 }
1171
1172 /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
1173    X and return it, or return 0 if none found.  */
1174
1175 static rtx
1176 find_symbolic_term (x)
1177      rtx x;
1178 {
1179   int i;
1180   enum rtx_code code;
1181   const char *fmt;
1182
1183   code = GET_CODE (x);
1184   if (code == SYMBOL_REF || code == LABEL_REF)
1185     return x;
1186   if (GET_RTX_CLASS (code) == 'o')
1187     return 0;
1188
1189   fmt = GET_RTX_FORMAT (code);
1190   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1191     {
1192       rtx t;
1193
1194       if (fmt[i] == 'e')
1195         {
1196           t = find_symbolic_term (XEXP (x, i));
1197           if (t != 0)
1198             return t;
1199         }
1200       else if (fmt[i] == 'E')
1201         break;
1202     }
1203   return 0;
1204 }
1205
1206 static rtx
1207 find_base_term (x)
1208      rtx x;
1209 {
1210   cselib_val *val;
1211   struct elt_loc_list *l;
1212
1213 #if defined (FIND_BASE_TERM)
1214   /* Try machine-dependent ways to find the base term.  */
1215   x = FIND_BASE_TERM (x);
1216 #endif
1217
1218   switch (GET_CODE (x))
1219     {
1220     case REG:
1221       return REG_BASE_VALUE (x);
1222
1223     case ZERO_EXTEND:
1224     case SIGN_EXTEND:   /* Used for Alpha/NT pointers */
1225     case HIGH:
1226     case PRE_INC:
1227     case PRE_DEC:
1228     case POST_INC:
1229     case POST_DEC:
1230       return find_base_term (XEXP (x, 0));
1231
1232     case VALUE:
1233       val = CSELIB_VAL_PTR (x);
1234       for (l = val->locs; l; l = l->next)
1235         if ((x = find_base_term (l->loc)) != 0)
1236           return x;
1237       return 0;
1238
1239     case CONST:
1240       x = XEXP (x, 0);
1241       if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
1242         return 0;
1243       /* fall through */
1244     case LO_SUM:
1245     case PLUS:
1246     case MINUS:
1247       {
1248         rtx tmp1 = XEXP (x, 0);
1249         rtx tmp2 = XEXP (x, 1);
1250
1251         /* This is a little bit tricky since we have to determine which of
1252            the two operands represents the real base address.  Otherwise this
1253            routine may return the index register instead of the base register.
1254
1255            That may cause us to believe no aliasing was possible, when in
1256            fact aliasing is possible.
1257
1258            We use a few simple tests to guess the base register.  Additional
1259            tests can certainly be added.  For example, if one of the operands
1260            is a shift or multiply, then it must be the index register and the
1261            other operand is the base register.  */
1262         
1263         if (tmp1 == pic_offset_table_rtx && CONSTANT_P (tmp2))
1264           return find_base_term (tmp2);
1265
1266         /* If either operand is known to be a pointer, then use it
1267            to determine the base term.  */
1268         if (REG_P (tmp1) && REG_POINTER (tmp1))
1269           return find_base_term (tmp1);
1270
1271         if (REG_P (tmp2) && REG_POINTER (tmp2))
1272           return find_base_term (tmp2);
1273
1274         /* Neither operand was known to be a pointer.  Go ahead and find the
1275            base term for both operands.  */
1276         tmp1 = find_base_term (tmp1);
1277         tmp2 = find_base_term (tmp2);
1278
1279         /* If either base term is named object or a special address
1280            (like an argument or stack reference), then use it for the
1281            base term.  */
1282         if (tmp1 != 0
1283             && (GET_CODE (tmp1) == SYMBOL_REF
1284                 || GET_CODE (tmp1) == LABEL_REF
1285                 || (GET_CODE (tmp1) == ADDRESS
1286                     && GET_MODE (tmp1) != VOIDmode)))
1287           return tmp1;
1288
1289         if (tmp2 != 0
1290             && (GET_CODE (tmp2) == SYMBOL_REF
1291                 || GET_CODE (tmp2) == LABEL_REF
1292                 || (GET_CODE (tmp2) == ADDRESS
1293                     && GET_MODE (tmp2) != VOIDmode)))
1294           return tmp2;
1295
1296         /* We could not determine which of the two operands was the
1297            base register and which was the index.  So we can determine
1298            nothing from the base alias check.  */
1299         return 0;
1300       }
1301
1302     case AND:
1303       if (GET_CODE (XEXP (x, 0)) == REG && GET_CODE (XEXP (x, 1)) == CONST_INT)
1304         return REG_BASE_VALUE (XEXP (x, 0));
1305       return 0;
1306
1307     case SYMBOL_REF:
1308     case LABEL_REF:
1309       return x;
1310
1311     case ADDRESSOF:
1312       return REG_BASE_VALUE (frame_pointer_rtx);
1313
1314     default:
1315       return 0;
1316     }
1317 }
1318
1319 /* Return 0 if the addresses X and Y are known to point to different
1320    objects, 1 if they might be pointers to the same object.  */
1321
1322 static int
1323 base_alias_check (x, y, x_mode, y_mode)
1324      rtx x, y;
1325      enum machine_mode x_mode, y_mode;
1326 {
1327   rtx x_base = find_base_term (x);
1328   rtx y_base = find_base_term (y);
1329
1330   /* If the address itself has no known base see if a known equivalent
1331      value has one.  If either address still has no known base, nothing
1332      is known about aliasing.  */
1333   if (x_base == 0)
1334     {
1335       rtx x_c;
1336
1337       if (! flag_expensive_optimizations || (x_c = canon_rtx (x)) == x)
1338         return 1;
1339
1340       x_base = find_base_term (x_c);
1341       if (x_base == 0)
1342         return 1;
1343     }
1344
1345   if (y_base == 0)
1346     {
1347       rtx y_c;
1348       if (! flag_expensive_optimizations || (y_c = canon_rtx (y)) == y)
1349         return 1;
1350
1351       y_base = find_base_term (y_c);
1352       if (y_base == 0)
1353         return 1;
1354     }
1355
1356   /* If the base addresses are equal nothing is known about aliasing.  */
1357   if (rtx_equal_p (x_base, y_base))
1358     return 1;
1359
1360   /* The base addresses of the read and write are different expressions. 
1361      If they are both symbols and they are not accessed via AND, there is
1362      no conflict.  We can bring knowledge of object alignment into play
1363      here.  For example, on alpha, "char a, b;" can alias one another,
1364      though "char a; long b;" cannot.  */
1365   if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
1366     {
1367       if (GET_CODE (x) == AND && GET_CODE (y) == AND)
1368         return 1;
1369       if (GET_CODE (x) == AND
1370           && (GET_CODE (XEXP (x, 1)) != CONST_INT
1371               || (int) GET_MODE_UNIT_SIZE (y_mode) < -INTVAL (XEXP (x, 1))))
1372         return 1;
1373       if (GET_CODE (y) == AND
1374           && (GET_CODE (XEXP (y, 1)) != CONST_INT
1375               || (int) GET_MODE_UNIT_SIZE (x_mode) < -INTVAL (XEXP (y, 1))))
1376         return 1;
1377       /* Differing symbols never alias.  */
1378       return 0;
1379     }
1380
1381   /* If one address is a stack reference there can be no alias:
1382      stack references using different base registers do not alias,
1383      a stack reference can not alias a parameter, and a stack reference
1384      can not alias a global.  */
1385   if ((GET_CODE (x_base) == ADDRESS && GET_MODE (x_base) == Pmode)
1386       || (GET_CODE (y_base) == ADDRESS && GET_MODE (y_base) == Pmode))
1387     return 0;
1388
1389   if (! flag_argument_noalias)
1390     return 1;
1391
1392   if (flag_argument_noalias > 1)
1393     return 0;
1394
1395   /* Weak noalias assertion (arguments are distinct, but may match globals).  */
1396   return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode);
1397 }
1398
1399 /* Convert the address X into something we can use.  This is done by returning
1400    it unchanged unless it is a value; in the latter case we call cselib to get
1401    a more useful rtx.  */
1402
1403 rtx
1404 get_addr (x)
1405      rtx x;
1406 {
1407   cselib_val *v;
1408   struct elt_loc_list *l;
1409
1410   if (GET_CODE (x) != VALUE)
1411     return x;
1412   v = CSELIB_VAL_PTR (x);
1413   for (l = v->locs; l; l = l->next)
1414     if (CONSTANT_P (l->loc))
1415       return l->loc;
1416   for (l = v->locs; l; l = l->next)
1417     if (GET_CODE (l->loc) != REG && GET_CODE (l->loc) != MEM)
1418       return l->loc;
1419   if (v->locs)
1420     return v->locs->loc;
1421   return x;
1422 }
1423
1424 /*  Return the address of the (N_REFS + 1)th memory reference to ADDR
1425     where SIZE is the size in bytes of the memory reference.  If ADDR
1426     is not modified by the memory reference then ADDR is returned.  */
1427
1428 rtx
1429 addr_side_effect_eval (addr, size, n_refs)
1430      rtx addr;
1431      int size;
1432      int n_refs;
1433 {
1434   int offset = 0;
1435   
1436   switch (GET_CODE (addr))
1437     {
1438     case PRE_INC:
1439       offset = (n_refs + 1) * size;
1440       break;
1441     case PRE_DEC:
1442       offset = -(n_refs + 1) * size;
1443       break;
1444     case POST_INC:
1445       offset = n_refs * size;
1446       break;
1447     case POST_DEC:
1448       offset = -n_refs * size;
1449       break;
1450
1451     default:
1452       return addr;
1453     }
1454   
1455   if (offset)
1456     addr = gen_rtx_PLUS (GET_MODE (addr), XEXP (addr, 0), GEN_INT (offset));
1457   else
1458     addr = XEXP (addr, 0);
1459
1460   return addr;
1461 }
1462
1463 /* Return nonzero if X and Y (memory addresses) could reference the
1464    same location in memory.  C is an offset accumulator.  When
1465    C is nonzero, we are testing aliases between X and Y + C.
1466    XSIZE is the size in bytes of the X reference,
1467    similarly YSIZE is the size in bytes for Y.
1468
1469    If XSIZE or YSIZE is zero, we do not know the amount of memory being
1470    referenced (the reference was BLKmode), so make the most pessimistic
1471    assumptions.
1472
1473    If XSIZE or YSIZE is negative, we may access memory outside the object
1474    being referenced as a side effect.  This can happen when using AND to
1475    align memory references, as is done on the Alpha.
1476
1477    Nice to notice that varying addresses cannot conflict with fp if no
1478    local variables had their addresses taken, but that's too hard now.  */
1479
1480 static int
1481 memrefs_conflict_p (xsize, x, ysize, y, c)
1482      rtx x, y;
1483      int xsize, ysize;
1484      HOST_WIDE_INT c;
1485 {
1486   if (GET_CODE (x) == VALUE)
1487     x = get_addr (x);
1488   if (GET_CODE (y) == VALUE)
1489     y = get_addr (y);
1490   if (GET_CODE (x) == HIGH)
1491     x = XEXP (x, 0);
1492   else if (GET_CODE (x) == LO_SUM)
1493     x = XEXP (x, 1);
1494   else
1495     x = canon_rtx (addr_side_effect_eval (x, xsize, 0));
1496   if (GET_CODE (y) == HIGH)
1497     y = XEXP (y, 0);
1498   else if (GET_CODE (y) == LO_SUM)
1499     y = XEXP (y, 1);
1500   else
1501     y = canon_rtx (addr_side_effect_eval (y, ysize, 0));
1502
1503   if (rtx_equal_for_memref_p (x, y))
1504     {
1505       if (xsize <= 0 || ysize <= 0)
1506         return 1;
1507       if (c >= 0 && xsize > c)
1508         return 1;
1509       if (c < 0 && ysize+c > 0)
1510         return 1;
1511       return 0;
1512     }
1513
1514   /* This code used to check for conflicts involving stack references and
1515      globals but the base address alias code now handles these cases.  */
1516
1517   if (GET_CODE (x) == PLUS)
1518     {
1519       /* The fact that X is canonicalized means that this
1520          PLUS rtx is canonicalized.  */
1521       rtx x0 = XEXP (x, 0);
1522       rtx x1 = XEXP (x, 1);
1523
1524       if (GET_CODE (y) == PLUS)
1525         {
1526           /* The fact that Y is canonicalized means that this
1527              PLUS rtx is canonicalized.  */
1528           rtx y0 = XEXP (y, 0);
1529           rtx y1 = XEXP (y, 1);
1530
1531           if (rtx_equal_for_memref_p (x1, y1))
1532             return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1533           if (rtx_equal_for_memref_p (x0, y0))
1534             return memrefs_conflict_p (xsize, x1, ysize, y1, c);
1535           if (GET_CODE (x1) == CONST_INT)
1536             {
1537               if (GET_CODE (y1) == CONST_INT)
1538                 return memrefs_conflict_p (xsize, x0, ysize, y0,
1539                                            c - INTVAL (x1) + INTVAL (y1));
1540               else
1541                 return memrefs_conflict_p (xsize, x0, ysize, y,
1542                                            c - INTVAL (x1));
1543             }
1544           else if (GET_CODE (y1) == CONST_INT)
1545             return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1546
1547           return 1;
1548         }
1549       else if (GET_CODE (x1) == CONST_INT)
1550         return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
1551     }
1552   else if (GET_CODE (y) == PLUS)
1553     {
1554       /* The fact that Y is canonicalized means that this
1555          PLUS rtx is canonicalized.  */
1556       rtx y0 = XEXP (y, 0);
1557       rtx y1 = XEXP (y, 1);
1558
1559       if (GET_CODE (y1) == CONST_INT)
1560         return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1561       else
1562         return 1;
1563     }
1564
1565   if (GET_CODE (x) == GET_CODE (y))
1566     switch (GET_CODE (x))
1567       {
1568       case MULT:
1569         {
1570           /* Handle cases where we expect the second operands to be the
1571              same, and check only whether the first operand would conflict
1572              or not.  */
1573           rtx x0, y0;
1574           rtx x1 = canon_rtx (XEXP (x, 1));
1575           rtx y1 = canon_rtx (XEXP (y, 1));
1576           if (! rtx_equal_for_memref_p (x1, y1))
1577             return 1;
1578           x0 = canon_rtx (XEXP (x, 0));
1579           y0 = canon_rtx (XEXP (y, 0));
1580           if (rtx_equal_for_memref_p (x0, y0))
1581             return (xsize == 0 || ysize == 0
1582                     || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1583
1584           /* Can't properly adjust our sizes.  */
1585           if (GET_CODE (x1) != CONST_INT)
1586             return 1;
1587           xsize /= INTVAL (x1);
1588           ysize /= INTVAL (x1);
1589           c /= INTVAL (x1);
1590           return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1591         }
1592
1593       case REG:
1594         /* Are these registers known not to be equal?  */
1595         if (alias_invariant)
1596           {
1597             unsigned int r_x = REGNO (x), r_y = REGNO (y);
1598             rtx i_x, i_y;       /* invariant relationships of X and Y */
1599
1600             i_x = r_x >= reg_base_value_size ? 0 : alias_invariant[r_x];
1601             i_y = r_y >= reg_base_value_size ? 0 : alias_invariant[r_y];
1602
1603             if (i_x == 0 && i_y == 0)
1604               break;
1605
1606             if (! memrefs_conflict_p (xsize, i_x ? i_x : x,
1607                                       ysize, i_y ? i_y : y, c))
1608               return 0;
1609           }
1610         break;
1611
1612       default:
1613         break;
1614       }
1615
1616   /* Treat an access through an AND (e.g. a subword access on an Alpha)
1617      as an access with indeterminate size.  Assume that references 
1618      besides AND are aligned, so if the size of the other reference is
1619      at least as large as the alignment, assume no other overlap.  */
1620   if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT)
1621     {
1622       if (GET_CODE (y) == AND || ysize < -INTVAL (XEXP (x, 1)))
1623         xsize = -1;
1624       return memrefs_conflict_p (xsize, XEXP (x, 0), ysize, y, c);
1625     }
1626   if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT)
1627     {
1628       /* ??? If we are indexing far enough into the array/structure, we
1629          may yet be able to determine that we can not overlap.  But we 
1630          also need to that we are far enough from the end not to overlap
1631          a following reference, so we do nothing with that for now.  */
1632       if (GET_CODE (x) == AND || xsize < -INTVAL (XEXP (y, 1)))
1633         ysize = -1;
1634       return memrefs_conflict_p (xsize, x, ysize, XEXP (y, 0), c);
1635     }
1636
1637   if (GET_CODE (x) == ADDRESSOF)
1638     {
1639       if (y == frame_pointer_rtx
1640           || GET_CODE (y) == ADDRESSOF)
1641         return xsize <= 0 || ysize <= 0;
1642     }
1643   if (GET_CODE (y) == ADDRESSOF)
1644     {
1645       if (x == frame_pointer_rtx)
1646         return xsize <= 0 || ysize <= 0;
1647     }
1648
1649   if (CONSTANT_P (x))
1650     {
1651       if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
1652         {
1653           c += (INTVAL (y) - INTVAL (x));
1654           return (xsize <= 0 || ysize <= 0
1655                   || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1656         }
1657
1658       if (GET_CODE (x) == CONST)
1659         {
1660           if (GET_CODE (y) == CONST)
1661             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1662                                        ysize, canon_rtx (XEXP (y, 0)), c);
1663           else
1664             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1665                                        ysize, y, c);
1666         }
1667       if (GET_CODE (y) == CONST)
1668         return memrefs_conflict_p (xsize, x, ysize,
1669                                    canon_rtx (XEXP (y, 0)), c);
1670
1671       if (CONSTANT_P (y))
1672         return (xsize <= 0 || ysize <= 0
1673                 || (rtx_equal_for_memref_p (x, y)
1674                     && ((c >= 0 && xsize > c) || (c < 0 && ysize+c > 0))));
1675
1676       return 1;
1677     }
1678   return 1;
1679 }
1680
1681 /* Functions to compute memory dependencies.
1682
1683    Since we process the insns in execution order, we can build tables
1684    to keep track of what registers are fixed (and not aliased), what registers
1685    are varying in known ways, and what registers are varying in unknown
1686    ways.
1687
1688    If both memory references are volatile, then there must always be a
1689    dependence between the two references, since their order can not be
1690    changed.  A volatile and non-volatile reference can be interchanged
1691    though. 
1692
1693    A MEM_IN_STRUCT reference at a non-AND varying address can never
1694    conflict with a non-MEM_IN_STRUCT reference at a fixed address.  We
1695    also must allow AND addresses, because they may generate accesses
1696    outside the object being referenced.  This is used to generate
1697    aligned addresses from unaligned addresses, for instance, the alpha
1698    storeqi_unaligned pattern.  */
1699
1700 /* Read dependence: X is read after read in MEM takes place.  There can
1701    only be a dependence here if both reads are volatile.  */
1702
1703 int
1704 read_dependence (mem, x)
1705      rtx mem;
1706      rtx x;
1707 {
1708   return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
1709 }
1710
1711 /* Returns MEM1 if and only if MEM1 is a scalar at a fixed address and
1712    MEM2 is a reference to a structure at a varying address, or returns
1713    MEM2 if vice versa.  Otherwise, returns NULL_RTX.  If a non-NULL
1714    value is returned MEM1 and MEM2 can never alias.  VARIES_P is used
1715    to decide whether or not an address may vary; it should return
1716    nonzero whenever variation is possible.
1717    MEM1_ADDR and MEM2_ADDR are the addresses of MEM1 and MEM2.  */
1718   
1719 static rtx
1720 fixed_scalar_and_varying_struct_p (mem1, mem2, mem1_addr, mem2_addr, varies_p)
1721      rtx mem1, mem2;
1722      rtx mem1_addr, mem2_addr;
1723      int (*varies_p) PARAMS ((rtx, int));
1724 {  
1725   if (! flag_strict_aliasing)
1726     return NULL_RTX;
1727
1728   if (MEM_SCALAR_P (mem1) && MEM_IN_STRUCT_P (mem2) 
1729       && !varies_p (mem1_addr, 1) && varies_p (mem2_addr, 1))
1730     /* MEM1 is a scalar at a fixed address; MEM2 is a struct at a
1731        varying address.  */
1732     return mem1;
1733
1734   if (MEM_IN_STRUCT_P (mem1) && MEM_SCALAR_P (mem2) 
1735       && varies_p (mem1_addr, 1) && !varies_p (mem2_addr, 1))
1736     /* MEM2 is a scalar at a fixed address; MEM1 is a struct at a
1737        varying address.  */
1738     return mem2;
1739
1740   return NULL_RTX;
1741 }
1742
1743 /* Returns nonzero if something about the mode or address format MEM1
1744    indicates that it might well alias *anything*.  */
1745
1746 static int
1747 aliases_everything_p (mem)
1748      rtx mem;
1749 {
1750   if (GET_CODE (XEXP (mem, 0)) == AND)
1751     /* If the address is an AND, its very hard to know at what it is
1752        actually pointing.  */
1753     return 1;
1754     
1755   return 0;
1756 }
1757
1758 /* Return true if we can determine that the fields referenced cannot
1759    overlap for any pair of objects.  */
1760
1761 static bool
1762 nonoverlapping_component_refs_p (x, y)
1763      tree x, y;
1764 {
1765   tree fieldx, fieldy, typex, typey, orig_y;
1766
1767   do
1768     {
1769       /* The comparison has to be done at a common type, since we don't
1770          know how the inheritance hierarchy works.  */
1771       orig_y = y;
1772       do
1773         {
1774           fieldx = TREE_OPERAND (x, 1);
1775           typex = DECL_FIELD_CONTEXT (fieldx);
1776
1777           y = orig_y;
1778           do
1779             {
1780               fieldy = TREE_OPERAND (y, 1);
1781               typey = DECL_FIELD_CONTEXT (fieldy);
1782
1783               if (typex == typey)
1784                 goto found;
1785
1786               y = TREE_OPERAND (y, 0);
1787             }
1788           while (y && TREE_CODE (y) == COMPONENT_REF);
1789
1790           x = TREE_OPERAND (x, 0);
1791         }
1792       while (x && TREE_CODE (x) == COMPONENT_REF);
1793
1794       /* Never found a common type.  */
1795       return false;
1796
1797     found:
1798       /* If we're left with accessing different fields of a structure,
1799          then no overlap.  */
1800       if (TREE_CODE (typex) == RECORD_TYPE
1801           && fieldx != fieldy)
1802         return true;
1803
1804       /* The comparison on the current field failed.  If we're accessing
1805          a very nested structure, look at the next outer level.  */
1806       x = TREE_OPERAND (x, 0);
1807       y = TREE_OPERAND (y, 0);
1808     }
1809   while (x && y
1810          && TREE_CODE (x) == COMPONENT_REF
1811          && TREE_CODE (y) == COMPONENT_REF);
1812   
1813   return false;
1814 }
1815
1816 /* Look at the bottom of the COMPONENT_REF list for a DECL, and return it.  */
1817
1818 static tree
1819 decl_for_component_ref (x)
1820      tree x;
1821 {
1822   do
1823     {
1824       x = TREE_OPERAND (x, 0);
1825     }
1826   while (x && TREE_CODE (x) == COMPONENT_REF);
1827
1828   return x && DECL_P (x) ? x : NULL_TREE;
1829 }
1830
1831 /* Walk up the COMPONENT_REF list and adjust OFFSET to compensate for the
1832    offset of the field reference.  */
1833
1834 static rtx
1835 adjust_offset_for_component_ref (x, offset)
1836      tree x;
1837      rtx offset;
1838 {
1839   HOST_WIDE_INT ioffset;
1840
1841   if (! offset)
1842     return NULL_RTX;
1843
1844   ioffset = INTVAL (offset);
1845   do 
1846     {
1847       tree field = TREE_OPERAND (x, 1);
1848
1849       if (! host_integerp (DECL_FIELD_OFFSET (field), 1))
1850         return NULL_RTX;
1851       ioffset += (tree_low_cst (DECL_FIELD_OFFSET (field), 1)
1852                   + (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
1853                      / BITS_PER_UNIT));
1854
1855       x = TREE_OPERAND (x, 0);
1856     }
1857   while (x && TREE_CODE (x) == COMPONENT_REF);
1858
1859   return GEN_INT (ioffset);
1860 }
1861
1862 /* Return nonzero if we can deterimine the exprs corresponding to memrefs
1863    X and Y and they do not overlap.  */
1864
1865 static int
1866 nonoverlapping_memrefs_p (x, y)
1867      rtx x, y;
1868 {
1869   tree exprx = MEM_EXPR (x), expry = MEM_EXPR (y);
1870   rtx rtlx, rtly;
1871   rtx basex, basey;
1872   rtx moffsetx, moffsety;
1873   HOST_WIDE_INT offsetx = 0, offsety = 0, sizex, sizey, tem;
1874
1875   /* Unless both have exprs, we can't tell anything.  */
1876   if (exprx == 0 || expry == 0)
1877     return 0;
1878
1879   /* If both are field references, we may be able to determine something.  */
1880   if (TREE_CODE (exprx) == COMPONENT_REF
1881       && TREE_CODE (expry) == COMPONENT_REF
1882       && nonoverlapping_component_refs_p (exprx, expry))
1883     return 1;
1884
1885   /* If the field reference test failed, look at the DECLs involved.  */
1886   moffsetx = MEM_OFFSET (x);
1887   if (TREE_CODE (exprx) == COMPONENT_REF)
1888     {
1889       tree t = decl_for_component_ref (exprx);
1890       if (! t)
1891         return 0;
1892       moffsetx = adjust_offset_for_component_ref (exprx, moffsetx);
1893       exprx = t;
1894     }
1895   moffsety = MEM_OFFSET (y);
1896   if (TREE_CODE (expry) == COMPONENT_REF)
1897     {
1898       tree t = decl_for_component_ref (expry);
1899       if (! t)
1900         return 0;
1901       moffsety = adjust_offset_for_component_ref (expry, moffsety);
1902       expry = t;
1903     }
1904
1905   if (! DECL_P (exprx) || ! DECL_P (expry))
1906     return 0;
1907
1908   rtlx = DECL_RTL (exprx);
1909   rtly = DECL_RTL (expry);
1910
1911   /* If either RTL is not a MEM, it must be a REG or CONCAT, meaning they
1912      can't overlap unless they are the same because we never reuse that part
1913      of the stack frame used for locals for spilled pseudos.  */
1914   if ((GET_CODE (rtlx) != MEM || GET_CODE (rtly) != MEM)
1915       && ! rtx_equal_p (rtlx, rtly))
1916     return 1;
1917
1918   /* Get the base and offsets of both decls.  If either is a register, we
1919      know both are and are the same, so use that as the base.  The only
1920      we can avoid overlap is if we can deduce that they are nonoverlapping
1921      pieces of that decl, which is very rare.  */
1922   basex = GET_CODE (rtlx) == MEM ? XEXP (rtlx, 0) : rtlx;
1923   if (GET_CODE (basex) == PLUS && GET_CODE (XEXP (basex, 1)) == CONST_INT)
1924     offsetx = INTVAL (XEXP (basex, 1)), basex = XEXP (basex, 0);
1925
1926   basey = GET_CODE (rtly) == MEM ? XEXP (rtly, 0) : rtly;
1927   if (GET_CODE (basey) == PLUS && GET_CODE (XEXP (basey, 1)) == CONST_INT)
1928     offsety = INTVAL (XEXP (basey, 1)), basey = XEXP (basey, 0);
1929
1930   /* If the bases are different, we know they do not overlap if both
1931      are constants or if one is a constant and the other a pointer into the 
1932      stack frame.  Otherwise a different base means we can't tell if they
1933      overlap or not.  */
1934   if (! rtx_equal_p (basex, basey))
1935       return ((CONSTANT_P (basex) && CONSTANT_P (basey))
1936               || (CONSTANT_P (basex) && REG_P (basey)
1937                   && REGNO_PTR_FRAME_P (REGNO (basey)))
1938               || (CONSTANT_P (basey) && REG_P (basex)
1939                   && REGNO_PTR_FRAME_P (REGNO (basex))));
1940
1941   sizex = (GET_CODE (rtlx) != MEM ? (int) GET_MODE_SIZE (GET_MODE (rtlx))
1942            : MEM_SIZE (rtlx) ? INTVAL (MEM_SIZE (rtlx))
1943            : -1);
1944   sizey = (GET_CODE (rtly) != MEM ? (int) GET_MODE_SIZE (GET_MODE (rtly))
1945            : MEM_SIZE (rtly) ? INTVAL (MEM_SIZE (rtly)) :
1946            -1);
1947
1948   /* If we have an offset for either memref, it can update the values computed
1949      above.  */
1950   if (moffsetx)
1951     offsetx += INTVAL (moffsetx), sizex -= INTVAL (moffsetx);
1952   if (moffsety)
1953     offsety += INTVAL (moffsety), sizey -= INTVAL (moffsety);
1954
1955   /* If a memref has both a size and an offset, we can use the smaller size.
1956      We can't do this if the offset isn't known because we must view this
1957      memref as being anywhere inside the DECL's MEM.  */
1958   if (MEM_SIZE (x) && moffsetx)
1959     sizex = INTVAL (MEM_SIZE (x));
1960   if (MEM_SIZE (y) && moffsety)
1961     sizey = INTVAL (MEM_SIZE (y));
1962
1963   /* Put the values of the memref with the lower offset in X's values.  */
1964   if (offsetx > offsety)
1965     {
1966       tem = offsetx, offsetx = offsety, offsety = tem;
1967       tem = sizex, sizex = sizey, sizey = tem;
1968     }
1969
1970   /* If we don't know the size of the lower-offset value, we can't tell
1971      if they conflict.  Otherwise, we do the test.  */
1972   return sizex >= 0 && offsety > offsetx + sizex;
1973 }
1974
1975 /* True dependence: X is read after store in MEM takes place.  */
1976
1977 int
1978 true_dependence (mem, mem_mode, x, varies)
1979      rtx mem;
1980      enum machine_mode mem_mode;
1981      rtx x;
1982      int (*varies) PARAMS ((rtx, int));
1983 {
1984   rtx x_addr, mem_addr;
1985   rtx base;
1986
1987   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
1988     return 1;
1989
1990   if (DIFFERENT_ALIAS_SETS_P (x, mem))
1991     return 0;
1992
1993   /* Unchanging memory can't conflict with non-unchanging memory.
1994      A non-unchanging read can conflict with a non-unchanging write.
1995      An unchanging read can conflict with an unchanging write since
1996      there may be a single store to this address to initialize it.
1997      Note that an unchanging store can conflict with a non-unchanging read
1998      since we have to make conservative assumptions when we have a
1999      record with readonly fields and we are copying the whole thing.
2000      Just fall through to the code below to resolve potential conflicts.
2001      This won't handle all cases optimally, but the possible performance
2002      loss should be negligible.  */
2003   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
2004     return 0;
2005
2006   if (nonoverlapping_memrefs_p (mem, x))
2007     return 0;
2008
2009   if (mem_mode == VOIDmode)
2010     mem_mode = GET_MODE (mem);
2011
2012   x_addr = get_addr (XEXP (x, 0));
2013   mem_addr = get_addr (XEXP (mem, 0));
2014
2015   base = find_base_term (x_addr);
2016   if (base && (GET_CODE (base) == LABEL_REF
2017                || (GET_CODE (base) == SYMBOL_REF
2018                    && CONSTANT_POOL_ADDRESS_P (base))))
2019     return 0;
2020
2021   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
2022     return 0;
2023
2024   x_addr = canon_rtx (x_addr);
2025   mem_addr = canon_rtx (mem_addr);
2026
2027   if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
2028                             SIZE_FOR_MODE (x), x_addr, 0))
2029     return 0;
2030
2031   if (aliases_everything_p (x))
2032     return 1;
2033
2034   /* We cannot use aliases_everything_p to test MEM, since we must look
2035      at MEM_MODE, rather than GET_MODE (MEM).  */
2036   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
2037     return 1;
2038
2039   /* In true_dependence we also allow BLKmode to alias anything.  Why
2040      don't we do this in anti_dependence and output_dependence?  */
2041   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
2042     return 1;
2043
2044   return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2045                                               varies);
2046 }
2047
2048 /* Canonical true dependence: X is read after store in MEM takes place.
2049    Variant of true_dependence which assumes MEM has already been 
2050    canonicalized (hence we no longer do that here).  
2051    The mem_addr argument has been added, since true_dependence computed 
2052    this value prior to canonicalizing.  */
2053
2054 int
2055 canon_true_dependence (mem, mem_mode, mem_addr, x, varies)
2056      rtx mem, mem_addr, x;
2057      enum machine_mode mem_mode;
2058      int (*varies) PARAMS ((rtx, int));
2059 {
2060   rtx x_addr;
2061
2062   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2063     return 1;
2064
2065   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2066     return 0;
2067
2068   /* If X is an unchanging read, then it can't possibly conflict with any
2069      non-unchanging store.  It may conflict with an unchanging write though,
2070      because there may be a single store to this address to initialize it.
2071      Just fall through to the code below to resolve the case where we have
2072      both an unchanging read and an unchanging write.  This won't handle all
2073      cases optimally, but the possible performance loss should be
2074      negligible.  */
2075   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
2076     return 0;
2077
2078   if (nonoverlapping_memrefs_p (x, mem))
2079     return 0;
2080
2081   x_addr = get_addr (XEXP (x, 0));
2082
2083   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
2084     return 0;
2085
2086   x_addr = canon_rtx (x_addr);
2087   if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
2088                             SIZE_FOR_MODE (x), x_addr, 0))
2089     return 0;
2090
2091   if (aliases_everything_p (x))
2092     return 1;
2093
2094   /* We cannot use aliases_everything_p to test MEM, since we must look
2095      at MEM_MODE, rather than GET_MODE (MEM).  */
2096   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
2097     return 1;
2098
2099   /* In true_dependence we also allow BLKmode to alias anything.  Why
2100      don't we do this in anti_dependence and output_dependence?  */
2101   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
2102     return 1;
2103
2104   return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2105                                               varies);
2106 }
2107
2108 /* Returns non-zero if a write to X might alias a previous read from
2109    (or, if WRITEP is non-zero, a write to) MEM.  */
2110
2111 static int
2112 write_dependence_p (mem, x, writep)
2113      rtx mem;
2114      rtx x;
2115      int writep;
2116 {
2117   rtx x_addr, mem_addr;
2118   rtx fixed_scalar;
2119   rtx base;
2120
2121   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2122     return 1;
2123
2124   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2125     return 0;
2126
2127   /* Unchanging memory can't conflict with non-unchanging memory.  */
2128   if (RTX_UNCHANGING_P (x) != RTX_UNCHANGING_P (mem))
2129     return 0;
2130
2131   /* If MEM is an unchanging read, then it can't possibly conflict with
2132      the store to X, because there is at most one store to MEM, and it must
2133      have occurred somewhere before MEM.  */
2134   if (! writep && RTX_UNCHANGING_P (mem))
2135     return 0;
2136
2137   if (nonoverlapping_memrefs_p (x, mem))
2138     return 0;
2139
2140   x_addr = get_addr (XEXP (x, 0));
2141   mem_addr = get_addr (XEXP (mem, 0));
2142
2143   if (! writep)
2144     {
2145       base = find_base_term (mem_addr);
2146       if (base && (GET_CODE (base) == LABEL_REF
2147                    || (GET_CODE (base) == SYMBOL_REF
2148                        && CONSTANT_POOL_ADDRESS_P (base))))
2149         return 0;
2150     }
2151
2152   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x),
2153                           GET_MODE (mem)))
2154     return 0;
2155
2156   x_addr = canon_rtx (x_addr);
2157   mem_addr = canon_rtx (mem_addr);
2158
2159   if (!memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
2160                            SIZE_FOR_MODE (x), x_addr, 0))
2161     return 0;
2162
2163   fixed_scalar 
2164     = fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2165                                          rtx_addr_varies_p);
2166
2167   return (!(fixed_scalar == mem && !aliases_everything_p (x))
2168           && !(fixed_scalar == x && !aliases_everything_p (mem)));
2169 }
2170
2171 /* Anti dependence: X is written after read in MEM takes place.  */
2172
2173 int
2174 anti_dependence (mem, x)
2175      rtx mem;
2176      rtx x;
2177 {
2178   return write_dependence_p (mem, x, /*writep=*/0);
2179 }
2180
2181 /* Output dependence: X is written after store in MEM takes place.  */
2182
2183 int
2184 output_dependence (mem, x)
2185      rtx mem;
2186      rtx x;
2187 {
2188   return write_dependence_p (mem, x, /*writep=*/1);
2189 }
2190
2191 /* Returns non-zero if X mentions something which is not
2192    local to the function and is not constant.  */
2193
2194 static int
2195 nonlocal_mentioned_p (x)
2196      rtx x;
2197 {
2198   rtx base;
2199   RTX_CODE code;
2200   int regno;
2201
2202   code = GET_CODE (x);
2203
2204   if (GET_RTX_CLASS (code) == 'i')
2205     {
2206       /* Constant functions can be constant if they don't use
2207          scratch memory used to mark function w/o side effects.  */
2208       if (code == CALL_INSN && CONST_OR_PURE_CALL_P (x))
2209         {
2210           x = CALL_INSN_FUNCTION_USAGE (x);
2211           if (x == 0)
2212             return 0;
2213         }
2214       else
2215         x = PATTERN (x);
2216       code = GET_CODE (x);
2217     }
2218
2219   switch (code)
2220     {
2221     case SUBREG:
2222       if (GET_CODE (SUBREG_REG (x)) == REG)
2223         {
2224           /* Global registers are not local.  */
2225           if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER
2226               && global_regs[subreg_regno (x)])
2227             return 1;
2228           return 0;
2229         }
2230       break;
2231
2232     case REG:
2233       regno = REGNO (x);
2234       /* Global registers are not local.  */
2235       if (regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
2236         return 1;
2237       return 0;
2238
2239     case SCRATCH:
2240     case PC:
2241     case CC0:
2242     case CONST_INT:
2243     case CONST_DOUBLE:
2244     case CONST:
2245     case LABEL_REF:
2246       return 0;
2247
2248     case SYMBOL_REF:
2249       /* Constants in the function's constants pool are constant.  */
2250       if (CONSTANT_POOL_ADDRESS_P (x))
2251         return 0;
2252       return 1;
2253
2254     case CALL:
2255       /* Non-constant calls and recursion are not local.  */
2256       return 1;
2257
2258     case MEM:
2259       /* Be overly conservative and consider any volatile memory
2260          reference as not local.  */
2261       if (MEM_VOLATILE_P (x))
2262         return 1;
2263       base = find_base_term (XEXP (x, 0));
2264       if (base)
2265         {
2266           /* A Pmode ADDRESS could be a reference via the structure value
2267              address or static chain.  Such memory references are nonlocal.
2268
2269              Thus, we have to examine the contents of the ADDRESS to find
2270              out if this is a local reference or not.  */
2271           if (GET_CODE (base) == ADDRESS
2272               && GET_MODE (base) == Pmode
2273               && (XEXP (base, 0) == stack_pointer_rtx
2274                   || XEXP (base, 0) == arg_pointer_rtx
2275 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2276                   || XEXP (base, 0) == hard_frame_pointer_rtx
2277 #endif
2278                   || XEXP (base, 0) == frame_pointer_rtx))
2279             return 0;
2280           /* Constants in the function's constant pool are constant.  */
2281           if (GET_CODE (base) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (base))
2282             return 0;
2283         }
2284       return 1;
2285
2286     case UNSPEC_VOLATILE:
2287     case ASM_INPUT:
2288       return 1;
2289
2290     case ASM_OPERANDS:
2291       if (MEM_VOLATILE_P (x))
2292         return 1;
2293
2294     /* FALLTHROUGH */
2295
2296     default:
2297       break;
2298     }
2299
2300   /* Recursively scan the operands of this expression.  */
2301
2302   {
2303     const char *fmt = GET_RTX_FORMAT (code);
2304     int i;
2305     
2306     for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2307       {
2308         if (fmt[i] == 'e' && XEXP (x, i))
2309           {
2310             if (nonlocal_mentioned_p (XEXP (x, i)))
2311               return 1;
2312           }
2313         else if (fmt[i] == 'E')
2314           {
2315             int j;
2316             for (j = 0; j < XVECLEN (x, i); j++)
2317               if (nonlocal_mentioned_p (XVECEXP (x, i, j)))
2318                 return 1;
2319           }
2320       }
2321   }
2322
2323   return 0;
2324 }
2325
2326 /* Mark the function if it is constant.  */
2327
2328 void
2329 mark_constant_function ()
2330 {
2331   rtx insn;
2332   int nonlocal_mentioned;
2333
2334   if (TREE_PUBLIC (current_function_decl)
2335       || TREE_READONLY (current_function_decl)
2336       || DECL_IS_PURE (current_function_decl)
2337       || TREE_THIS_VOLATILE (current_function_decl)
2338       || TYPE_MODE (TREE_TYPE (current_function_decl)) == VOIDmode)
2339     return;
2340
2341   /* A loop might not return which counts as a side effect.  */
2342   if (mark_dfs_back_edges ())
2343     return;
2344
2345   nonlocal_mentioned = 0;
2346
2347   init_alias_analysis ();
2348
2349   /* Determine if this is a constant function.  */
2350
2351   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2352     if (INSN_P (insn) && nonlocal_mentioned_p (insn))
2353       {
2354         nonlocal_mentioned = 1;
2355         break;
2356       }
2357
2358   end_alias_analysis ();
2359
2360   /* Mark the function.  */
2361
2362   if (! nonlocal_mentioned)
2363     TREE_READONLY (current_function_decl) = 1;
2364 }
2365
2366
2367 static HARD_REG_SET argument_registers;
2368
2369 void
2370 init_alias_once ()
2371 {
2372   int i;
2373
2374 #ifndef OUTGOING_REGNO
2375 #define OUTGOING_REGNO(N) N
2376 #endif
2377   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2378     /* Check whether this register can hold an incoming pointer
2379        argument.  FUNCTION_ARG_REGNO_P tests outgoing register
2380        numbers, so translate if necessary due to register windows.  */
2381     if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i))
2382         && HARD_REGNO_MODE_OK (i, Pmode))
2383       SET_HARD_REG_BIT (argument_registers, i);
2384
2385   alias_sets = splay_tree_new (splay_tree_compare_ints, 0, 0);
2386 }
2387
2388 /* Initialize the aliasing machinery.  Initialize the REG_KNOWN_VALUE
2389    array.  */
2390
2391 void
2392 init_alias_analysis ()
2393 {
2394   int maxreg = max_reg_num ();
2395   int changed, pass;
2396   int i;
2397   unsigned int ui;
2398   rtx insn;
2399
2400   reg_known_value_size = maxreg;
2401
2402   reg_known_value 
2403     = (rtx *) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (rtx))
2404     - FIRST_PSEUDO_REGISTER;
2405   reg_known_equiv_p 
2406     = (char*) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (char))
2407     - FIRST_PSEUDO_REGISTER;
2408
2409   /* Overallocate reg_base_value to allow some growth during loop
2410      optimization.  Loop unrolling can create a large number of
2411      registers.  */
2412   reg_base_value_size = maxreg * 2;
2413   reg_base_value = (rtx *) xcalloc (reg_base_value_size, sizeof (rtx));
2414   ggc_add_rtx_root (reg_base_value, reg_base_value_size);
2415
2416   new_reg_base_value = (rtx *) xmalloc (reg_base_value_size * sizeof (rtx));
2417   reg_seen = (char *) xmalloc (reg_base_value_size);
2418   if (! reload_completed && flag_unroll_loops)
2419     {
2420       /* ??? Why are we realloc'ing if we're just going to zero it?  */
2421       alias_invariant = (rtx *)xrealloc (alias_invariant,
2422                                          reg_base_value_size * sizeof (rtx));
2423       memset ((char *)alias_invariant, 0, reg_base_value_size * sizeof (rtx));
2424     }
2425
2426   /* The basic idea is that each pass through this loop will use the
2427      "constant" information from the previous pass to propagate alias
2428      information through another level of assignments.
2429
2430      This could get expensive if the assignment chains are long.  Maybe
2431      we should throttle the number of iterations, possibly based on
2432      the optimization level or flag_expensive_optimizations.
2433
2434      We could propagate more information in the first pass by making use
2435      of REG_N_SETS to determine immediately that the alias information
2436      for a pseudo is "constant".
2437
2438      A program with an uninitialized variable can cause an infinite loop
2439      here.  Instead of doing a full dataflow analysis to detect such problems
2440      we just cap the number of iterations for the loop.
2441
2442      The state of the arrays for the set chain in question does not matter
2443      since the program has undefined behavior.  */
2444
2445   pass = 0;
2446   do
2447     {
2448       /* Assume nothing will change this iteration of the loop.  */
2449       changed = 0;
2450
2451       /* We want to assign the same IDs each iteration of this loop, so
2452          start counting from zero each iteration of the loop.  */
2453       unique_id = 0;
2454
2455       /* We're at the start of the function each iteration through the
2456          loop, so we're copying arguments.  */
2457       copying_arguments = 1;
2458
2459       /* Wipe the potential alias information clean for this pass.  */
2460       memset ((char *) new_reg_base_value, 0, reg_base_value_size * sizeof (rtx));
2461
2462       /* Wipe the reg_seen array clean.  */
2463       memset ((char *) reg_seen, 0, reg_base_value_size);
2464
2465       /* Mark all hard registers which may contain an address.
2466          The stack, frame and argument pointers may contain an address.
2467          An argument register which can hold a Pmode value may contain
2468          an address even if it is not in BASE_REGS.
2469
2470          The address expression is VOIDmode for an argument and
2471          Pmode for other registers.  */
2472
2473       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2474         if (TEST_HARD_REG_BIT (argument_registers, i))
2475           new_reg_base_value[i] = gen_rtx_ADDRESS (VOIDmode,
2476                                                    gen_rtx_REG (Pmode, i));
2477
2478       new_reg_base_value[STACK_POINTER_REGNUM]
2479         = gen_rtx_ADDRESS (Pmode, stack_pointer_rtx);
2480       new_reg_base_value[ARG_POINTER_REGNUM]
2481         = gen_rtx_ADDRESS (Pmode, arg_pointer_rtx);
2482       new_reg_base_value[FRAME_POINTER_REGNUM]
2483         = gen_rtx_ADDRESS (Pmode, frame_pointer_rtx);
2484 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2485       new_reg_base_value[HARD_FRAME_POINTER_REGNUM]
2486         = gen_rtx_ADDRESS (Pmode, hard_frame_pointer_rtx);
2487 #endif
2488
2489       /* Walk the insns adding values to the new_reg_base_value array.  */
2490       for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2491         {
2492           if (INSN_P (insn))
2493             {
2494               rtx note, set;
2495
2496 #if defined (HAVE_prologue) || defined (HAVE_epilogue)
2497               /* The prologue/epilogue insns are not threaded onto the
2498                  insn chain until after reload has completed.  Thus,
2499                  there is no sense wasting time checking if INSN is in
2500                  the prologue/epilogue until after reload has completed.  */
2501               if (reload_completed
2502                   && prologue_epilogue_contains (insn))
2503                 continue;
2504 #endif
2505
2506               /* If this insn has a noalias note, process it,  Otherwise,
2507                  scan for sets.  A simple set will have no side effects
2508                  which could change the base value of any other register.  */
2509
2510               if (GET_CODE (PATTERN (insn)) == SET
2511                   && REG_NOTES (insn) != 0
2512                   && find_reg_note (insn, REG_NOALIAS, NULL_RTX))
2513                 record_set (SET_DEST (PATTERN (insn)), NULL_RTX, NULL);
2514               else
2515                 note_stores (PATTERN (insn), record_set, NULL);
2516
2517               set = single_set (insn);
2518
2519               if (set != 0
2520                   && GET_CODE (SET_DEST (set)) == REG
2521                   && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER)
2522                 {
2523                   unsigned int regno = REGNO (SET_DEST (set));
2524                   rtx src = SET_SRC (set);
2525
2526                   if (REG_NOTES (insn) != 0
2527                       && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
2528                            && REG_N_SETS (regno) == 1)
2529                           || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
2530                       && GET_CODE (XEXP (note, 0)) != EXPR_LIST
2531                       && ! rtx_varies_p (XEXP (note, 0), 1)
2532                       && ! reg_overlap_mentioned_p (SET_DEST (set), XEXP (note, 0)))
2533                     {
2534                       reg_known_value[regno] = XEXP (note, 0);
2535                       reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV;
2536                     }
2537                   else if (REG_N_SETS (regno) == 1
2538                            && GET_CODE (src) == PLUS
2539                            && GET_CODE (XEXP (src, 0)) == REG
2540                            && REGNO (XEXP (src, 0)) >= FIRST_PSEUDO_REGISTER
2541                            && (reg_known_value[REGNO (XEXP (src, 0))])
2542                            && GET_CODE (XEXP (src, 1)) == CONST_INT)
2543                     {
2544                       rtx op0 = XEXP (src, 0);
2545                       op0 = reg_known_value[REGNO (op0)];
2546                       reg_known_value[regno]
2547                         = plus_constant (op0, INTVAL (XEXP (src, 1)));
2548                       reg_known_equiv_p[regno] = 0;
2549                     }
2550                   else if (REG_N_SETS (regno) == 1
2551                            && ! rtx_varies_p (src, 1))
2552                     {
2553                       reg_known_value[regno] = src;
2554                       reg_known_equiv_p[regno] = 0;
2555                     }
2556                 }
2557             }
2558           else if (GET_CODE (insn) == NOTE
2559                    && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
2560             copying_arguments = 0;
2561         }
2562
2563       /* Now propagate values from new_reg_base_value to reg_base_value.  */
2564       for (ui = 0; ui < reg_base_value_size; ui++)
2565         {
2566           if (new_reg_base_value[ui]
2567               && new_reg_base_value[ui] != reg_base_value[ui]
2568               && ! rtx_equal_p (new_reg_base_value[ui], reg_base_value[ui]))
2569             {
2570               reg_base_value[ui] = new_reg_base_value[ui];
2571               changed = 1;
2572             }
2573         }
2574     }
2575   while (changed && ++pass < MAX_ALIAS_LOOP_PASSES);
2576
2577   /* Fill in the remaining entries.  */
2578   for (i = FIRST_PSEUDO_REGISTER; i < maxreg; i++)
2579     if (reg_known_value[i] == 0)
2580       reg_known_value[i] = regno_reg_rtx[i];
2581
2582   /* Simplify the reg_base_value array so that no register refers to
2583      another register, except to special registers indirectly through
2584      ADDRESS expressions.
2585
2586      In theory this loop can take as long as O(registers^2), but unless
2587      there are very long dependency chains it will run in close to linear
2588      time.
2589
2590      This loop may not be needed any longer now that the main loop does
2591      a better job at propagating alias information.  */
2592   pass = 0;
2593   do
2594     {
2595       changed = 0;
2596       pass++;
2597       for (ui = 0; ui < reg_base_value_size; ui++)
2598         {
2599           rtx base = reg_base_value[ui];
2600           if (base && GET_CODE (base) == REG)
2601             {
2602               unsigned int base_regno = REGNO (base);
2603               if (base_regno == ui)             /* register set from itself */
2604                 reg_base_value[ui] = 0;
2605               else
2606                 reg_base_value[ui] = reg_base_value[base_regno];
2607               changed = 1;
2608             }
2609         }
2610     }
2611   while (changed && pass < MAX_ALIAS_LOOP_PASSES);
2612
2613   /* Clean up.  */
2614   free (new_reg_base_value);
2615   new_reg_base_value = 0;
2616   free (reg_seen);
2617   reg_seen = 0;
2618 }
2619
2620 void
2621 end_alias_analysis ()
2622 {
2623   free (reg_known_value + FIRST_PSEUDO_REGISTER);
2624   reg_known_value = 0;
2625   reg_known_value_size = 0;
2626   free (reg_known_equiv_p + FIRST_PSEUDO_REGISTER);
2627   reg_known_equiv_p = 0;
2628   if (reg_base_value)
2629     {
2630       ggc_del_root (reg_base_value);
2631       free (reg_base_value);
2632       reg_base_value = 0;
2633     }
2634   reg_base_value_size = 0;
2635   if (alias_invariant)
2636     {
2637       free (alias_invariant);
2638       alias_invariant = 0;
2639     }
2640 }