OSDN Git Service

PR c/5420:
[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     case PRE_INC:
853     case PRE_DEC:
854     case POST_INC:
855     case POST_DEC:
856     case PRE_MODIFY:
857     case POST_MODIFY:
858       return find_base_value (XEXP (src, 0));
859
860     default:
861       break;
862     }
863
864   return 0;
865 }
866
867 /* Called from init_alias_analysis indirectly through note_stores.  */
868
869 /* While scanning insns to find base values, reg_seen[N] is nonzero if
870    register N has been set in this function.  */
871 static char *reg_seen;
872
873 /* Addresses which are known not to alias anything else are identified
874    by a unique integer.  */
875 static int unique_id;
876
877 static void
878 record_set (dest, set, data)
879      rtx dest, set;
880      void *data ATTRIBUTE_UNUSED;
881 {
882   unsigned regno;
883   rtx src;
884
885   if (GET_CODE (dest) != REG)
886     return;
887
888   regno = REGNO (dest);
889
890   if (regno >= reg_base_value_size)
891     abort ();
892
893   if (set)
894     {
895       /* A CLOBBER wipes out any old value but does not prevent a previously
896          unset register from acquiring a base address (i.e. reg_seen is not
897          set).  */
898       if (GET_CODE (set) == CLOBBER)
899         {
900           new_reg_base_value[regno] = 0;
901           return;
902         }
903       src = SET_SRC (set);
904     }
905   else
906     {
907       if (reg_seen[regno])
908         {
909           new_reg_base_value[regno] = 0;
910           return;
911         }
912       reg_seen[regno] = 1;
913       new_reg_base_value[regno] = gen_rtx_ADDRESS (Pmode,
914                                                    GEN_INT (unique_id++));
915       return;
916     }
917
918   /* This is not the first set.  If the new value is not related to the
919      old value, forget the base value. Note that the following code is
920      not detected:
921      extern int x, y;  int *p = &x; p += (&y-&x);
922      ANSI C does not allow computing the difference of addresses
923      of distinct top level objects.  */
924   if (new_reg_base_value[regno])
925     switch (GET_CODE (src))
926       {
927       case LO_SUM:
928       case MINUS:
929         if (XEXP (src, 0) != dest && XEXP (src, 1) != dest)
930           new_reg_base_value[regno] = 0;
931         break;
932       case PLUS:
933         /* If the value we add in the PLUS is also a valid base value,
934            this might be the actual base value, and the original value
935            an index.  */
936         {
937           rtx other = NULL_RTX;
938
939           if (XEXP (src, 0) == dest)
940             other = XEXP (src, 1);
941           else if (XEXP (src, 1) == dest)
942             other = XEXP (src, 0);
943
944           if (! other || find_base_value (other))
945             new_reg_base_value[regno] = 0;
946           break;
947         }
948       case AND:
949         if (XEXP (src, 0) != dest || GET_CODE (XEXP (src, 1)) != CONST_INT)
950           new_reg_base_value[regno] = 0;
951         break;
952       default:
953         new_reg_base_value[regno] = 0;
954         break;
955       }
956   /* If this is the first set of a register, record the value.  */
957   else if ((regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
958            && ! reg_seen[regno] && new_reg_base_value[regno] == 0)
959     new_reg_base_value[regno] = find_base_value (src);
960
961   reg_seen[regno] = 1;
962 }
963
964 /* Called from loop optimization when a new pseudo-register is
965    created.  It indicates that REGNO is being set to VAL.  f INVARIANT
966    is true then this value also describes an invariant relationship
967    which can be used to deduce that two registers with unknown values
968    are different.  */
969
970 void
971 record_base_value (regno, val, invariant)
972      unsigned int regno;
973      rtx val;
974      int invariant;
975 {
976   if (regno >= reg_base_value_size)
977     return;
978
979   if (invariant && alias_invariant)
980     alias_invariant[regno] = val;
981
982   if (GET_CODE (val) == REG)
983     {
984       if (REGNO (val) < reg_base_value_size)
985         reg_base_value[regno] = reg_base_value[REGNO (val)];
986
987       return;
988     }
989
990   reg_base_value[regno] = find_base_value (val);
991 }
992
993 /* Clear alias info for a register.  This is used if an RTL transformation
994    changes the value of a register.  This is used in flow by AUTO_INC_DEC
995    optimizations.  We don't need to clear reg_base_value, since flow only
996    changes the offset.  */
997
998 void
999 clear_reg_alias_info (reg)
1000      rtx reg;
1001 {
1002   unsigned int regno = REGNO (reg);
1003
1004   if (regno < reg_known_value_size && regno >= FIRST_PSEUDO_REGISTER)
1005     reg_known_value[regno] = reg;
1006 }
1007
1008 /* Returns a canonical version of X, from the point of view alias
1009    analysis.  (For example, if X is a MEM whose address is a register,
1010    and the register has a known value (say a SYMBOL_REF), then a MEM
1011    whose address is the SYMBOL_REF is returned.)  */
1012
1013 rtx
1014 canon_rtx (x)
1015      rtx x;
1016 {
1017   /* Recursively look for equivalences.  */
1018   if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
1019       && REGNO (x) < reg_known_value_size)
1020     return reg_known_value[REGNO (x)] == x
1021       ? x : canon_rtx (reg_known_value[REGNO (x)]);
1022   else if (GET_CODE (x) == PLUS)
1023     {
1024       rtx x0 = canon_rtx (XEXP (x, 0));
1025       rtx x1 = canon_rtx (XEXP (x, 1));
1026
1027       if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
1028         {
1029           if (GET_CODE (x0) == CONST_INT)
1030             return plus_constant (x1, INTVAL (x0));
1031           else if (GET_CODE (x1) == CONST_INT)
1032             return plus_constant (x0, INTVAL (x1));
1033           return gen_rtx_PLUS (GET_MODE (x), x0, x1);
1034         }
1035     }
1036
1037   /* This gives us much better alias analysis when called from
1038      the loop optimizer.   Note we want to leave the original
1039      MEM alone, but need to return the canonicalized MEM with
1040      all the flags with their original values.  */
1041   else if (GET_CODE (x) == MEM)
1042     x = replace_equiv_address_nv (x, canon_rtx (XEXP (x, 0)));
1043
1044   return x;
1045 }
1046
1047 /* Return 1 if X and Y are identical-looking rtx's.
1048
1049    We use the data in reg_known_value above to see if two registers with
1050    different numbers are, in fact, equivalent.  */
1051
1052 static int
1053 rtx_equal_for_memref_p (x, y)
1054      rtx x, y;
1055 {
1056   int i;
1057   int j;
1058   enum rtx_code code;
1059   const char *fmt;
1060
1061   if (x == 0 && y == 0)
1062     return 1;
1063   if (x == 0 || y == 0)
1064     return 0;
1065
1066   x = canon_rtx (x);
1067   y = canon_rtx (y);
1068
1069   if (x == y)
1070     return 1;
1071
1072   code = GET_CODE (x);
1073   /* Rtx's of different codes cannot be equal.  */
1074   if (code != GET_CODE (y))
1075     return 0;
1076
1077   /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
1078      (REG:SI x) and (REG:HI x) are NOT equivalent.  */
1079
1080   if (GET_MODE (x) != GET_MODE (y))
1081     return 0;
1082
1083   /* Some RTL can be compared without a recursive examination.  */
1084   switch (code)
1085     {
1086     case VALUE:
1087       return CSELIB_VAL_PTR (x) == CSELIB_VAL_PTR (y);
1088
1089     case REG:
1090       return REGNO (x) == REGNO (y);
1091
1092     case LABEL_REF:
1093       return XEXP (x, 0) == XEXP (y, 0);
1094       
1095     case SYMBOL_REF:
1096       return XSTR (x, 0) == XSTR (y, 0);
1097
1098     case CONST_INT:
1099     case CONST_DOUBLE:
1100       /* There's no need to compare the contents of CONST_DOUBLEs or
1101          CONST_INTs because pointer equality is a good enough
1102          comparison for these nodes.  */
1103       return 0;
1104
1105     case ADDRESSOF:
1106       return (XINT (x, 1) == XINT (y, 1)
1107               && rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0)));
1108
1109     default:
1110       break;
1111     }
1112
1113   /* For commutative operations, the RTX match if the operand match in any
1114      order.  Also handle the simple binary and unary cases without a loop.  */
1115   if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
1116     return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
1117              && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
1118             || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
1119                 && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
1120   else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
1121     return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
1122             && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)));
1123   else if (GET_RTX_CLASS (code) == '1')
1124     return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0));
1125
1126   /* Compare the elements.  If any pair of corresponding elements
1127      fail to match, return 0 for the whole things.
1128
1129      Limit cases to types which actually appear in addresses.  */
1130
1131   fmt = GET_RTX_FORMAT (code);
1132   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1133     {
1134       switch (fmt[i])
1135         {
1136         case 'i':
1137           if (XINT (x, i) != XINT (y, i))
1138             return 0;
1139           break;
1140
1141         case 'E':
1142           /* Two vectors must have the same length.  */
1143           if (XVECLEN (x, i) != XVECLEN (y, i))
1144             return 0;
1145
1146           /* And the corresponding elements must match.  */
1147           for (j = 0; j < XVECLEN (x, i); j++)
1148             if (rtx_equal_for_memref_p (XVECEXP (x, i, j),
1149                                         XVECEXP (y, i, j)) == 0)
1150               return 0;
1151           break;
1152
1153         case 'e':
1154           if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0)
1155             return 0;
1156           break;
1157
1158           /* This can happen for asm operands.  */
1159         case 's':
1160           if (strcmp (XSTR (x, i), XSTR (y, i)))
1161             return 0;
1162           break;
1163
1164         /* This can happen for an asm which clobbers memory.  */
1165         case '0':
1166           break;
1167
1168           /* It is believed that rtx's at this level will never
1169              contain anything but integers and other rtx's,
1170              except for within LABEL_REFs and SYMBOL_REFs.  */
1171         default:
1172           abort ();
1173         }
1174     }
1175   return 1;
1176 }
1177
1178 /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
1179    X and return it, or return 0 if none found.  */
1180
1181 static rtx
1182 find_symbolic_term (x)
1183      rtx x;
1184 {
1185   int i;
1186   enum rtx_code code;
1187   const char *fmt;
1188
1189   code = GET_CODE (x);
1190   if (code == SYMBOL_REF || code == LABEL_REF)
1191     return x;
1192   if (GET_RTX_CLASS (code) == 'o')
1193     return 0;
1194
1195   fmt = GET_RTX_FORMAT (code);
1196   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1197     {
1198       rtx t;
1199
1200       if (fmt[i] == 'e')
1201         {
1202           t = find_symbolic_term (XEXP (x, i));
1203           if (t != 0)
1204             return t;
1205         }
1206       else if (fmt[i] == 'E')
1207         break;
1208     }
1209   return 0;
1210 }
1211
1212 static rtx
1213 find_base_term (x)
1214      rtx x;
1215 {
1216   cselib_val *val;
1217   struct elt_loc_list *l;
1218
1219 #if defined (FIND_BASE_TERM)
1220   /* Try machine-dependent ways to find the base term.  */
1221   x = FIND_BASE_TERM (x);
1222 #endif
1223
1224   switch (GET_CODE (x))
1225     {
1226     case REG:
1227       return REG_BASE_VALUE (x);
1228
1229     case TRUNCATE:
1230       if (GET_MODE_SIZE (GET_MODE (x)) < GET_MODE_SIZE (Pmode))
1231         return 0;
1232       /* Fall through.  */
1233     case ZERO_EXTEND:
1234     case SIGN_EXTEND:   /* Used for Alpha/NT pointers */
1235     case HIGH:
1236     case PRE_INC:
1237     case PRE_DEC:
1238     case POST_INC:
1239     case POST_DEC:
1240     case PRE_MODIFY:
1241     case POST_MODIFY:
1242       return find_base_term (XEXP (x, 0));
1243
1244     case VALUE:
1245       val = CSELIB_VAL_PTR (x);
1246       for (l = val->locs; l; l = l->next)
1247         if ((x = find_base_term (l->loc)) != 0)
1248           return x;
1249       return 0;
1250
1251     case CONST:
1252       x = XEXP (x, 0);
1253       if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
1254         return 0;
1255       /* fall through */
1256     case LO_SUM:
1257     case PLUS:
1258     case MINUS:
1259       {
1260         rtx tmp1 = XEXP (x, 0);
1261         rtx tmp2 = XEXP (x, 1);
1262
1263         /* This is a little bit tricky since we have to determine which of
1264            the two operands represents the real base address.  Otherwise this
1265            routine may return the index register instead of the base register.
1266
1267            That may cause us to believe no aliasing was possible, when in
1268            fact aliasing is possible.
1269
1270            We use a few simple tests to guess the base register.  Additional
1271            tests can certainly be added.  For example, if one of the operands
1272            is a shift or multiply, then it must be the index register and the
1273            other operand is the base register.  */
1274         
1275         if (tmp1 == pic_offset_table_rtx && CONSTANT_P (tmp2))
1276           return find_base_term (tmp2);
1277
1278         /* If either operand is known to be a pointer, then use it
1279            to determine the base term.  */
1280         if (REG_P (tmp1) && REG_POINTER (tmp1))
1281           return find_base_term (tmp1);
1282
1283         if (REG_P (tmp2) && REG_POINTER (tmp2))
1284           return find_base_term (tmp2);
1285
1286         /* Neither operand was known to be a pointer.  Go ahead and find the
1287            base term for both operands.  */
1288         tmp1 = find_base_term (tmp1);
1289         tmp2 = find_base_term (tmp2);
1290
1291         /* If either base term is named object or a special address
1292            (like an argument or stack reference), then use it for the
1293            base term.  */
1294         if (tmp1 != 0
1295             && (GET_CODE (tmp1) == SYMBOL_REF
1296                 || GET_CODE (tmp1) == LABEL_REF
1297                 || (GET_CODE (tmp1) == ADDRESS
1298                     && GET_MODE (tmp1) != VOIDmode)))
1299           return tmp1;
1300
1301         if (tmp2 != 0
1302             && (GET_CODE (tmp2) == SYMBOL_REF
1303                 || GET_CODE (tmp2) == LABEL_REF
1304                 || (GET_CODE (tmp2) == ADDRESS
1305                     && GET_MODE (tmp2) != VOIDmode)))
1306           return tmp2;
1307
1308         /* We could not determine which of the two operands was the
1309            base register and which was the index.  So we can determine
1310            nothing from the base alias check.  */
1311         return 0;
1312       }
1313
1314     case AND:
1315       if (GET_CODE (XEXP (x, 1)) == CONST_INT && INTVAL (XEXP (x, 1)) != 0)
1316         return find_base_term (XEXP (x, 0));
1317       return 0;
1318
1319     case SYMBOL_REF:
1320     case LABEL_REF:
1321       return x;
1322
1323     case ADDRESSOF:
1324       return REG_BASE_VALUE (frame_pointer_rtx);
1325
1326     default:
1327       return 0;
1328     }
1329 }
1330
1331 /* Return 0 if the addresses X and Y are known to point to different
1332    objects, 1 if they might be pointers to the same object.  */
1333
1334 static int
1335 base_alias_check (x, y, x_mode, y_mode)
1336      rtx x, y;
1337      enum machine_mode x_mode, y_mode;
1338 {
1339   rtx x_base = find_base_term (x);
1340   rtx y_base = find_base_term (y);
1341
1342   /* If the address itself has no known base see if a known equivalent
1343      value has one.  If either address still has no known base, nothing
1344      is known about aliasing.  */
1345   if (x_base == 0)
1346     {
1347       rtx x_c;
1348
1349       if (! flag_expensive_optimizations || (x_c = canon_rtx (x)) == x)
1350         return 1;
1351
1352       x_base = find_base_term (x_c);
1353       if (x_base == 0)
1354         return 1;
1355     }
1356
1357   if (y_base == 0)
1358     {
1359       rtx y_c;
1360       if (! flag_expensive_optimizations || (y_c = canon_rtx (y)) == y)
1361         return 1;
1362
1363       y_base = find_base_term (y_c);
1364       if (y_base == 0)
1365         return 1;
1366     }
1367
1368   /* If the base addresses are equal nothing is known about aliasing.  */
1369   if (rtx_equal_p (x_base, y_base))
1370     return 1;
1371
1372   /* The base addresses of the read and write are different expressions. 
1373      If they are both symbols and they are not accessed via AND, there is
1374      no conflict.  We can bring knowledge of object alignment into play
1375      here.  For example, on alpha, "char a, b;" can alias one another,
1376      though "char a; long b;" cannot.  */
1377   if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
1378     {
1379       if (GET_CODE (x) == AND && GET_CODE (y) == AND)
1380         return 1;
1381       if (GET_CODE (x) == AND
1382           && (GET_CODE (XEXP (x, 1)) != CONST_INT
1383               || (int) GET_MODE_UNIT_SIZE (y_mode) < -INTVAL (XEXP (x, 1))))
1384         return 1;
1385       if (GET_CODE (y) == AND
1386           && (GET_CODE (XEXP (y, 1)) != CONST_INT
1387               || (int) GET_MODE_UNIT_SIZE (x_mode) < -INTVAL (XEXP (y, 1))))
1388         return 1;
1389       /* Differing symbols never alias.  */
1390       return 0;
1391     }
1392
1393   /* If one address is a stack reference there can be no alias:
1394      stack references using different base registers do not alias,
1395      a stack reference can not alias a parameter, and a stack reference
1396      can not alias a global.  */
1397   if ((GET_CODE (x_base) == ADDRESS && GET_MODE (x_base) == Pmode)
1398       || (GET_CODE (y_base) == ADDRESS && GET_MODE (y_base) == Pmode))
1399     return 0;
1400
1401   if (! flag_argument_noalias)
1402     return 1;
1403
1404   if (flag_argument_noalias > 1)
1405     return 0;
1406
1407   /* Weak noalias assertion (arguments are distinct, but may match globals).  */
1408   return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode);
1409 }
1410
1411 /* Convert the address X into something we can use.  This is done by returning
1412    it unchanged unless it is a value; in the latter case we call cselib to get
1413    a more useful rtx.  */
1414
1415 rtx
1416 get_addr (x)
1417      rtx x;
1418 {
1419   cselib_val *v;
1420   struct elt_loc_list *l;
1421
1422   if (GET_CODE (x) != VALUE)
1423     return x;
1424   v = CSELIB_VAL_PTR (x);
1425   for (l = v->locs; l; l = l->next)
1426     if (CONSTANT_P (l->loc))
1427       return l->loc;
1428   for (l = v->locs; l; l = l->next)
1429     if (GET_CODE (l->loc) != REG && GET_CODE (l->loc) != MEM)
1430       return l->loc;
1431   if (v->locs)
1432     return v->locs->loc;
1433   return x;
1434 }
1435
1436 /*  Return the address of the (N_REFS + 1)th memory reference to ADDR
1437     where SIZE is the size in bytes of the memory reference.  If ADDR
1438     is not modified by the memory reference then ADDR is returned.  */
1439
1440 rtx
1441 addr_side_effect_eval (addr, size, n_refs)
1442      rtx addr;
1443      int size;
1444      int n_refs;
1445 {
1446   int offset = 0;
1447   
1448   switch (GET_CODE (addr))
1449     {
1450     case PRE_INC:
1451       offset = (n_refs + 1) * size;
1452       break;
1453     case PRE_DEC:
1454       offset = -(n_refs + 1) * size;
1455       break;
1456     case POST_INC:
1457       offset = n_refs * size;
1458       break;
1459     case POST_DEC:
1460       offset = -n_refs * size;
1461       break;
1462
1463     default:
1464       return addr;
1465     }
1466   
1467   if (offset)
1468     addr = gen_rtx_PLUS (GET_MODE (addr), XEXP (addr, 0), GEN_INT (offset));
1469   else
1470     addr = XEXP (addr, 0);
1471
1472   return addr;
1473 }
1474
1475 /* Return nonzero if X and Y (memory addresses) could reference the
1476    same location in memory.  C is an offset accumulator.  When
1477    C is nonzero, we are testing aliases between X and Y + C.
1478    XSIZE is the size in bytes of the X reference,
1479    similarly YSIZE is the size in bytes for Y.
1480
1481    If XSIZE or YSIZE is zero, we do not know the amount of memory being
1482    referenced (the reference was BLKmode), so make the most pessimistic
1483    assumptions.
1484
1485    If XSIZE or YSIZE is negative, we may access memory outside the object
1486    being referenced as a side effect.  This can happen when using AND to
1487    align memory references, as is done on the Alpha.
1488
1489    Nice to notice that varying addresses cannot conflict with fp if no
1490    local variables had their addresses taken, but that's too hard now.  */
1491
1492 static int
1493 memrefs_conflict_p (xsize, x, ysize, y, c)
1494      rtx x, y;
1495      int xsize, ysize;
1496      HOST_WIDE_INT c;
1497 {
1498   if (GET_CODE (x) == VALUE)
1499     x = get_addr (x);
1500   if (GET_CODE (y) == VALUE)
1501     y = get_addr (y);
1502   if (GET_CODE (x) == HIGH)
1503     x = XEXP (x, 0);
1504   else if (GET_CODE (x) == LO_SUM)
1505     x = XEXP (x, 1);
1506   else
1507     x = canon_rtx (addr_side_effect_eval (x, xsize, 0));
1508   if (GET_CODE (y) == HIGH)
1509     y = XEXP (y, 0);
1510   else if (GET_CODE (y) == LO_SUM)
1511     y = XEXP (y, 1);
1512   else
1513     y = canon_rtx (addr_side_effect_eval (y, ysize, 0));
1514
1515   if (rtx_equal_for_memref_p (x, y))
1516     {
1517       if (xsize <= 0 || ysize <= 0)
1518         return 1;
1519       if (c >= 0 && xsize > c)
1520         return 1;
1521       if (c < 0 && ysize+c > 0)
1522         return 1;
1523       return 0;
1524     }
1525
1526   /* This code used to check for conflicts involving stack references and
1527      globals but the base address alias code now handles these cases.  */
1528
1529   if (GET_CODE (x) == PLUS)
1530     {
1531       /* The fact that X is canonicalized means that this
1532          PLUS rtx is canonicalized.  */
1533       rtx x0 = XEXP (x, 0);
1534       rtx x1 = XEXP (x, 1);
1535
1536       if (GET_CODE (y) == PLUS)
1537         {
1538           /* The fact that Y is canonicalized means that this
1539              PLUS rtx is canonicalized.  */
1540           rtx y0 = XEXP (y, 0);
1541           rtx y1 = XEXP (y, 1);
1542
1543           if (rtx_equal_for_memref_p (x1, y1))
1544             return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1545           if (rtx_equal_for_memref_p (x0, y0))
1546             return memrefs_conflict_p (xsize, x1, ysize, y1, c);
1547           if (GET_CODE (x1) == CONST_INT)
1548             {
1549               if (GET_CODE (y1) == CONST_INT)
1550                 return memrefs_conflict_p (xsize, x0, ysize, y0,
1551                                            c - INTVAL (x1) + INTVAL (y1));
1552               else
1553                 return memrefs_conflict_p (xsize, x0, ysize, y,
1554                                            c - INTVAL (x1));
1555             }
1556           else if (GET_CODE (y1) == CONST_INT)
1557             return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1558
1559           return 1;
1560         }
1561       else if (GET_CODE (x1) == CONST_INT)
1562         return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
1563     }
1564   else if (GET_CODE (y) == PLUS)
1565     {
1566       /* The fact that Y is canonicalized means that this
1567          PLUS rtx is canonicalized.  */
1568       rtx y0 = XEXP (y, 0);
1569       rtx y1 = XEXP (y, 1);
1570
1571       if (GET_CODE (y1) == CONST_INT)
1572         return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1573       else
1574         return 1;
1575     }
1576
1577   if (GET_CODE (x) == GET_CODE (y))
1578     switch (GET_CODE (x))
1579       {
1580       case MULT:
1581         {
1582           /* Handle cases where we expect the second operands to be the
1583              same, and check only whether the first operand would conflict
1584              or not.  */
1585           rtx x0, y0;
1586           rtx x1 = canon_rtx (XEXP (x, 1));
1587           rtx y1 = canon_rtx (XEXP (y, 1));
1588           if (! rtx_equal_for_memref_p (x1, y1))
1589             return 1;
1590           x0 = canon_rtx (XEXP (x, 0));
1591           y0 = canon_rtx (XEXP (y, 0));
1592           if (rtx_equal_for_memref_p (x0, y0))
1593             return (xsize == 0 || ysize == 0
1594                     || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1595
1596           /* Can't properly adjust our sizes.  */
1597           if (GET_CODE (x1) != CONST_INT)
1598             return 1;
1599           xsize /= INTVAL (x1);
1600           ysize /= INTVAL (x1);
1601           c /= INTVAL (x1);
1602           return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1603         }
1604
1605       case REG:
1606         /* Are these registers known not to be equal?  */
1607         if (alias_invariant)
1608           {
1609             unsigned int r_x = REGNO (x), r_y = REGNO (y);
1610             rtx i_x, i_y;       /* invariant relationships of X and Y */
1611
1612             i_x = r_x >= reg_base_value_size ? 0 : alias_invariant[r_x];
1613             i_y = r_y >= reg_base_value_size ? 0 : alias_invariant[r_y];
1614
1615             if (i_x == 0 && i_y == 0)
1616               break;
1617
1618             if (! memrefs_conflict_p (xsize, i_x ? i_x : x,
1619                                       ysize, i_y ? i_y : y, c))
1620               return 0;
1621           }
1622         break;
1623
1624       default:
1625         break;
1626       }
1627
1628   /* Treat an access through an AND (e.g. a subword access on an Alpha)
1629      as an access with indeterminate size.  Assume that references 
1630      besides AND are aligned, so if the size of the other reference is
1631      at least as large as the alignment, assume no other overlap.  */
1632   if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT)
1633     {
1634       if (GET_CODE (y) == AND || ysize < -INTVAL (XEXP (x, 1)))
1635         xsize = -1;
1636       return memrefs_conflict_p (xsize, XEXP (x, 0), ysize, y, c);
1637     }
1638   if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT)
1639     {
1640       /* ??? If we are indexing far enough into the array/structure, we
1641          may yet be able to determine that we can not overlap.  But we 
1642          also need to that we are far enough from the end not to overlap
1643          a following reference, so we do nothing with that for now.  */
1644       if (GET_CODE (x) == AND || xsize < -INTVAL (XEXP (y, 1)))
1645         ysize = -1;
1646       return memrefs_conflict_p (xsize, x, ysize, XEXP (y, 0), c);
1647     }
1648
1649   if (GET_CODE (x) == ADDRESSOF)
1650     {
1651       if (y == frame_pointer_rtx
1652           || GET_CODE (y) == ADDRESSOF)
1653         return xsize <= 0 || ysize <= 0;
1654     }
1655   if (GET_CODE (y) == ADDRESSOF)
1656     {
1657       if (x == frame_pointer_rtx)
1658         return xsize <= 0 || ysize <= 0;
1659     }
1660
1661   if (CONSTANT_P (x))
1662     {
1663       if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
1664         {
1665           c += (INTVAL (y) - INTVAL (x));
1666           return (xsize <= 0 || ysize <= 0
1667                   || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1668         }
1669
1670       if (GET_CODE (x) == CONST)
1671         {
1672           if (GET_CODE (y) == CONST)
1673             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1674                                        ysize, canon_rtx (XEXP (y, 0)), c);
1675           else
1676             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1677                                        ysize, y, c);
1678         }
1679       if (GET_CODE (y) == CONST)
1680         return memrefs_conflict_p (xsize, x, ysize,
1681                                    canon_rtx (XEXP (y, 0)), c);
1682
1683       if (CONSTANT_P (y))
1684         return (xsize <= 0 || ysize <= 0
1685                 || (rtx_equal_for_memref_p (x, y)
1686                     && ((c >= 0 && xsize > c) || (c < 0 && ysize+c > 0))));
1687
1688       return 1;
1689     }
1690   return 1;
1691 }
1692
1693 /* Functions to compute memory dependencies.
1694
1695    Since we process the insns in execution order, we can build tables
1696    to keep track of what registers are fixed (and not aliased), what registers
1697    are varying in known ways, and what registers are varying in unknown
1698    ways.
1699
1700    If both memory references are volatile, then there must always be a
1701    dependence between the two references, since their order can not be
1702    changed.  A volatile and non-volatile reference can be interchanged
1703    though. 
1704
1705    A MEM_IN_STRUCT reference at a non-AND varying address can never
1706    conflict with a non-MEM_IN_STRUCT reference at a fixed address.  We
1707    also must allow AND addresses, because they may generate accesses
1708    outside the object being referenced.  This is used to generate
1709    aligned addresses from unaligned addresses, for instance, the alpha
1710    storeqi_unaligned pattern.  */
1711
1712 /* Read dependence: X is read after read in MEM takes place.  There can
1713    only be a dependence here if both reads are volatile.  */
1714
1715 int
1716 read_dependence (mem, x)
1717      rtx mem;
1718      rtx x;
1719 {
1720   return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
1721 }
1722
1723 /* Returns MEM1 if and only if MEM1 is a scalar at a fixed address and
1724    MEM2 is a reference to a structure at a varying address, or returns
1725    MEM2 if vice versa.  Otherwise, returns NULL_RTX.  If a non-NULL
1726    value is returned MEM1 and MEM2 can never alias.  VARIES_P is used
1727    to decide whether or not an address may vary; it should return
1728    nonzero whenever variation is possible.
1729    MEM1_ADDR and MEM2_ADDR are the addresses of MEM1 and MEM2.  */
1730   
1731 static rtx
1732 fixed_scalar_and_varying_struct_p (mem1, mem2, mem1_addr, mem2_addr, varies_p)
1733      rtx mem1, mem2;
1734      rtx mem1_addr, mem2_addr;
1735      int (*varies_p) PARAMS ((rtx, int));
1736 {  
1737   if (! flag_strict_aliasing)
1738     return NULL_RTX;
1739
1740   if (MEM_SCALAR_P (mem1) && MEM_IN_STRUCT_P (mem2) 
1741       && !varies_p (mem1_addr, 1) && varies_p (mem2_addr, 1))
1742     /* MEM1 is a scalar at a fixed address; MEM2 is a struct at a
1743        varying address.  */
1744     return mem1;
1745
1746   if (MEM_IN_STRUCT_P (mem1) && MEM_SCALAR_P (mem2) 
1747       && varies_p (mem1_addr, 1) && !varies_p (mem2_addr, 1))
1748     /* MEM2 is a scalar at a fixed address; MEM1 is a struct at a
1749        varying address.  */
1750     return mem2;
1751
1752   return NULL_RTX;
1753 }
1754
1755 /* Returns nonzero if something about the mode or address format MEM1
1756    indicates that it might well alias *anything*.  */
1757
1758 static int
1759 aliases_everything_p (mem)
1760      rtx mem;
1761 {
1762   if (GET_CODE (XEXP (mem, 0)) == AND)
1763     /* If the address is an AND, its very hard to know at what it is
1764        actually pointing.  */
1765     return 1;
1766     
1767   return 0;
1768 }
1769
1770 /* Return true if we can determine that the fields referenced cannot
1771    overlap for any pair of objects.  */
1772
1773 static bool
1774 nonoverlapping_component_refs_p (x, y)
1775      tree x, y;
1776 {
1777   tree fieldx, fieldy, typex, typey, orig_y;
1778
1779   do
1780     {
1781       /* The comparison has to be done at a common type, since we don't
1782          know how the inheritance hierarchy works.  */
1783       orig_y = y;
1784       do
1785         {
1786           fieldx = TREE_OPERAND (x, 1);
1787           typex = DECL_FIELD_CONTEXT (fieldx);
1788
1789           y = orig_y;
1790           do
1791             {
1792               fieldy = TREE_OPERAND (y, 1);
1793               typey = DECL_FIELD_CONTEXT (fieldy);
1794
1795               if (typex == typey)
1796                 goto found;
1797
1798               y = TREE_OPERAND (y, 0);
1799             }
1800           while (y && TREE_CODE (y) == COMPONENT_REF);
1801
1802           x = TREE_OPERAND (x, 0);
1803         }
1804       while (x && TREE_CODE (x) == COMPONENT_REF);
1805
1806       /* Never found a common type.  */
1807       return false;
1808
1809     found:
1810       /* If we're left with accessing different fields of a structure,
1811          then no overlap.  */
1812       if (TREE_CODE (typex) == RECORD_TYPE
1813           && fieldx != fieldy)
1814         return true;
1815
1816       /* The comparison on the current field failed.  If we're accessing
1817          a very nested structure, look at the next outer level.  */
1818       x = TREE_OPERAND (x, 0);
1819       y = TREE_OPERAND (y, 0);
1820     }
1821   while (x && y
1822          && TREE_CODE (x) == COMPONENT_REF
1823          && TREE_CODE (y) == COMPONENT_REF);
1824   
1825   return false;
1826 }
1827
1828 /* Look at the bottom of the COMPONENT_REF list for a DECL, and return it.  */
1829
1830 static tree
1831 decl_for_component_ref (x)
1832      tree x;
1833 {
1834   do
1835     {
1836       x = TREE_OPERAND (x, 0);
1837     }
1838   while (x && TREE_CODE (x) == COMPONENT_REF);
1839
1840   return x && DECL_P (x) ? x : NULL_TREE;
1841 }
1842
1843 /* Walk up the COMPONENT_REF list and adjust OFFSET to compensate for the
1844    offset of the field reference.  */
1845
1846 static rtx
1847 adjust_offset_for_component_ref (x, offset)
1848      tree x;
1849      rtx offset;
1850 {
1851   HOST_WIDE_INT ioffset;
1852
1853   if (! offset)
1854     return NULL_RTX;
1855
1856   ioffset = INTVAL (offset);
1857   do 
1858     {
1859       tree field = TREE_OPERAND (x, 1);
1860
1861       if (! host_integerp (DECL_FIELD_OFFSET (field), 1))
1862         return NULL_RTX;
1863       ioffset += (tree_low_cst (DECL_FIELD_OFFSET (field), 1)
1864                   + (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
1865                      / BITS_PER_UNIT));
1866
1867       x = TREE_OPERAND (x, 0);
1868     }
1869   while (x && TREE_CODE (x) == COMPONENT_REF);
1870
1871   return GEN_INT (ioffset);
1872 }
1873
1874 /* Return nonzero if we can deterimine the exprs corresponding to memrefs
1875    X and Y and they do not overlap.  */
1876
1877 static int
1878 nonoverlapping_memrefs_p (x, y)
1879      rtx x, y;
1880 {
1881   tree exprx = MEM_EXPR (x), expry = MEM_EXPR (y);
1882   rtx rtlx, rtly;
1883   rtx basex, basey;
1884   rtx moffsetx, moffsety;
1885   HOST_WIDE_INT offsetx = 0, offsety = 0, sizex, sizey, tem;
1886
1887   /* Unless both have exprs, we can't tell anything.  */
1888   if (exprx == 0 || expry == 0)
1889     return 0;
1890
1891   /* If both are field references, we may be able to determine something.  */
1892   if (TREE_CODE (exprx) == COMPONENT_REF
1893       && TREE_CODE (expry) == COMPONENT_REF
1894       && nonoverlapping_component_refs_p (exprx, expry))
1895     return 1;
1896
1897   /* If the field reference test failed, look at the DECLs involved.  */
1898   moffsetx = MEM_OFFSET (x);
1899   if (TREE_CODE (exprx) == COMPONENT_REF)
1900     {
1901       tree t = decl_for_component_ref (exprx);
1902       if (! t)
1903         return 0;
1904       moffsetx = adjust_offset_for_component_ref (exprx, moffsetx);
1905       exprx = t;
1906     }
1907   moffsety = MEM_OFFSET (y);
1908   if (TREE_CODE (expry) == COMPONENT_REF)
1909     {
1910       tree t = decl_for_component_ref (expry);
1911       if (! t)
1912         return 0;
1913       moffsety = adjust_offset_for_component_ref (expry, moffsety);
1914       expry = t;
1915     }
1916
1917   if (! DECL_P (exprx) || ! DECL_P (expry))
1918     return 0;
1919
1920   rtlx = DECL_RTL (exprx);
1921   rtly = DECL_RTL (expry);
1922
1923   /* If either RTL is not a MEM, it must be a REG or CONCAT, meaning they
1924      can't overlap unless they are the same because we never reuse that part
1925      of the stack frame used for locals for spilled pseudos.  */
1926   if ((GET_CODE (rtlx) != MEM || GET_CODE (rtly) != MEM)
1927       && ! rtx_equal_p (rtlx, rtly))
1928     return 1;
1929
1930   /* Get the base and offsets of both decls.  If either is a register, we
1931      know both are and are the same, so use that as the base.  The only
1932      we can avoid overlap is if we can deduce that they are nonoverlapping
1933      pieces of that decl, which is very rare.  */
1934   basex = GET_CODE (rtlx) == MEM ? XEXP (rtlx, 0) : rtlx;
1935   if (GET_CODE (basex) == PLUS && GET_CODE (XEXP (basex, 1)) == CONST_INT)
1936     offsetx = INTVAL (XEXP (basex, 1)), basex = XEXP (basex, 0);
1937
1938   basey = GET_CODE (rtly) == MEM ? XEXP (rtly, 0) : rtly;
1939   if (GET_CODE (basey) == PLUS && GET_CODE (XEXP (basey, 1)) == CONST_INT)
1940     offsety = INTVAL (XEXP (basey, 1)), basey = XEXP (basey, 0);
1941
1942   /* If the bases are different, we know they do not overlap if both
1943      are constants or if one is a constant and the other a pointer into the 
1944      stack frame.  Otherwise a different base means we can't tell if they
1945      overlap or not.  */
1946   if (! rtx_equal_p (basex, basey))
1947       return ((CONSTANT_P (basex) && CONSTANT_P (basey))
1948               || (CONSTANT_P (basex) && REG_P (basey)
1949                   && REGNO_PTR_FRAME_P (REGNO (basey)))
1950               || (CONSTANT_P (basey) && REG_P (basex)
1951                   && REGNO_PTR_FRAME_P (REGNO (basex))));
1952
1953   sizex = (GET_CODE (rtlx) != MEM ? (int) GET_MODE_SIZE (GET_MODE (rtlx))
1954            : MEM_SIZE (rtlx) ? INTVAL (MEM_SIZE (rtlx))
1955            : -1);
1956   sizey = (GET_CODE (rtly) != MEM ? (int) GET_MODE_SIZE (GET_MODE (rtly))
1957            : MEM_SIZE (rtly) ? INTVAL (MEM_SIZE (rtly)) :
1958            -1);
1959
1960   /* If we have an offset for either memref, it can update the values computed
1961      above.  */
1962   if (moffsetx)
1963     offsetx += INTVAL (moffsetx), sizex -= INTVAL (moffsetx);
1964   if (moffsety)
1965     offsety += INTVAL (moffsety), sizey -= INTVAL (moffsety);
1966
1967   /* If a memref has both a size and an offset, we can use the smaller size.
1968      We can't do this if the offset isn't known because we must view this
1969      memref as being anywhere inside the DECL's MEM.  */
1970   if (MEM_SIZE (x) && moffsetx)
1971     sizex = INTVAL (MEM_SIZE (x));
1972   if (MEM_SIZE (y) && moffsety)
1973     sizey = INTVAL (MEM_SIZE (y));
1974
1975   /* Put the values of the memref with the lower offset in X's values.  */
1976   if (offsetx > offsety)
1977     {
1978       tem = offsetx, offsetx = offsety, offsety = tem;
1979       tem = sizex, sizex = sizey, sizey = tem;
1980     }
1981
1982   /* If we don't know the size of the lower-offset value, we can't tell
1983      if they conflict.  Otherwise, we do the test.  */
1984   return sizex >= 0 && offsety > offsetx + sizex;
1985 }
1986
1987 /* True dependence: X is read after store in MEM takes place.  */
1988
1989 int
1990 true_dependence (mem, mem_mode, x, varies)
1991      rtx mem;
1992      enum machine_mode mem_mode;
1993      rtx x;
1994      int (*varies) PARAMS ((rtx, int));
1995 {
1996   rtx x_addr, mem_addr;
1997   rtx base;
1998
1999   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2000     return 1;
2001
2002   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2003     return 0;
2004
2005   /* Unchanging memory can't conflict with non-unchanging memory.
2006      A non-unchanging read can conflict with a non-unchanging write.
2007      An unchanging read can conflict with an unchanging write since
2008      there may be a single store to this address to initialize it.
2009      Note that an unchanging store can conflict with a non-unchanging read
2010      since we have to make conservative assumptions when we have a
2011      record with readonly fields and we are copying the whole thing.
2012      Just fall through to the code below to resolve potential conflicts.
2013      This won't handle all cases optimally, but the possible performance
2014      loss should be negligible.  */
2015   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
2016     return 0;
2017
2018   if (nonoverlapping_memrefs_p (mem, x))
2019     return 0;
2020
2021   if (mem_mode == VOIDmode)
2022     mem_mode = GET_MODE (mem);
2023
2024   x_addr = get_addr (XEXP (x, 0));
2025   mem_addr = get_addr (XEXP (mem, 0));
2026
2027   base = find_base_term (x_addr);
2028   if (base && (GET_CODE (base) == LABEL_REF
2029                || (GET_CODE (base) == SYMBOL_REF
2030                    && CONSTANT_POOL_ADDRESS_P (base))))
2031     return 0;
2032
2033   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
2034     return 0;
2035
2036   x_addr = canon_rtx (x_addr);
2037   mem_addr = canon_rtx (mem_addr);
2038
2039   if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
2040                             SIZE_FOR_MODE (x), x_addr, 0))
2041     return 0;
2042
2043   if (aliases_everything_p (x))
2044     return 1;
2045
2046   /* We cannot use aliases_everything_p to test MEM, since we must look
2047      at MEM_MODE, rather than GET_MODE (MEM).  */
2048   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
2049     return 1;
2050
2051   /* In true_dependence we also allow BLKmode to alias anything.  Why
2052      don't we do this in anti_dependence and output_dependence?  */
2053   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
2054     return 1;
2055
2056   return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2057                                               varies);
2058 }
2059
2060 /* Canonical true dependence: X is read after store in MEM takes place.
2061    Variant of true_dependence which assumes MEM has already been 
2062    canonicalized (hence we no longer do that here).  
2063    The mem_addr argument has been added, since true_dependence computed 
2064    this value prior to canonicalizing.  */
2065
2066 int
2067 canon_true_dependence (mem, mem_mode, mem_addr, x, varies)
2068      rtx mem, mem_addr, x;
2069      enum machine_mode mem_mode;
2070      int (*varies) PARAMS ((rtx, int));
2071 {
2072   rtx x_addr;
2073
2074   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2075     return 1;
2076
2077   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2078     return 0;
2079
2080   /* If X is an unchanging read, then it can't possibly conflict with any
2081      non-unchanging store.  It may conflict with an unchanging write though,
2082      because there may be a single store to this address to initialize it.
2083      Just fall through to the code below to resolve the case where we have
2084      both an unchanging read and an unchanging write.  This won't handle all
2085      cases optimally, but the possible performance loss should be
2086      negligible.  */
2087   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
2088     return 0;
2089
2090   if (nonoverlapping_memrefs_p (x, mem))
2091     return 0;
2092
2093   x_addr = get_addr (XEXP (x, 0));
2094
2095   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
2096     return 0;
2097
2098   x_addr = canon_rtx (x_addr);
2099   if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
2100                             SIZE_FOR_MODE (x), x_addr, 0))
2101     return 0;
2102
2103   if (aliases_everything_p (x))
2104     return 1;
2105
2106   /* We cannot use aliases_everything_p to test MEM, since we must look
2107      at MEM_MODE, rather than GET_MODE (MEM).  */
2108   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
2109     return 1;
2110
2111   /* In true_dependence we also allow BLKmode to alias anything.  Why
2112      don't we do this in anti_dependence and output_dependence?  */
2113   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
2114     return 1;
2115
2116   return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2117                                               varies);
2118 }
2119
2120 /* Returns non-zero if a write to X might alias a previous read from
2121    (or, if WRITEP is non-zero, a write to) MEM.  */
2122
2123 static int
2124 write_dependence_p (mem, x, writep)
2125      rtx mem;
2126      rtx x;
2127      int writep;
2128 {
2129   rtx x_addr, mem_addr;
2130   rtx fixed_scalar;
2131   rtx base;
2132
2133   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2134     return 1;
2135
2136   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2137     return 0;
2138
2139   /* Unchanging memory can't conflict with non-unchanging memory.  */
2140   if (RTX_UNCHANGING_P (x) != RTX_UNCHANGING_P (mem))
2141     return 0;
2142
2143   /* If MEM is an unchanging read, then it can't possibly conflict with
2144      the store to X, because there is at most one store to MEM, and it must
2145      have occurred somewhere before MEM.  */
2146   if (! writep && RTX_UNCHANGING_P (mem))
2147     return 0;
2148
2149   if (nonoverlapping_memrefs_p (x, mem))
2150     return 0;
2151
2152   x_addr = get_addr (XEXP (x, 0));
2153   mem_addr = get_addr (XEXP (mem, 0));
2154
2155   if (! writep)
2156     {
2157       base = find_base_term (mem_addr);
2158       if (base && (GET_CODE (base) == LABEL_REF
2159                    || (GET_CODE (base) == SYMBOL_REF
2160                        && CONSTANT_POOL_ADDRESS_P (base))))
2161         return 0;
2162     }
2163
2164   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x),
2165                           GET_MODE (mem)))
2166     return 0;
2167
2168   x_addr = canon_rtx (x_addr);
2169   mem_addr = canon_rtx (mem_addr);
2170
2171   if (!memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
2172                            SIZE_FOR_MODE (x), x_addr, 0))
2173     return 0;
2174
2175   fixed_scalar 
2176     = fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2177                                          rtx_addr_varies_p);
2178
2179   return (!(fixed_scalar == mem && !aliases_everything_p (x))
2180           && !(fixed_scalar == x && !aliases_everything_p (mem)));
2181 }
2182
2183 /* Anti dependence: X is written after read in MEM takes place.  */
2184
2185 int
2186 anti_dependence (mem, x)
2187      rtx mem;
2188      rtx x;
2189 {
2190   return write_dependence_p (mem, x, /*writep=*/0);
2191 }
2192
2193 /* Output dependence: X is written after store in MEM takes place.  */
2194
2195 int
2196 output_dependence (mem, x)
2197      rtx mem;
2198      rtx x;
2199 {
2200   return write_dependence_p (mem, x, /*writep=*/1);
2201 }
2202
2203 /* Returns non-zero if X mentions something which is not
2204    local to the function and is not constant.  */
2205
2206 static int
2207 nonlocal_mentioned_p (x)
2208      rtx x;
2209 {
2210   rtx base;
2211   RTX_CODE code;
2212   int regno;
2213
2214   code = GET_CODE (x);
2215
2216   if (GET_RTX_CLASS (code) == 'i')
2217     {
2218       /* Constant functions can be constant if they don't use
2219          scratch memory used to mark function w/o side effects.  */
2220       if (code == CALL_INSN && CONST_OR_PURE_CALL_P (x))
2221         {
2222           x = CALL_INSN_FUNCTION_USAGE (x);
2223           if (x == 0)
2224             return 0;
2225         }
2226       else
2227         x = PATTERN (x);
2228       code = GET_CODE (x);
2229     }
2230
2231   switch (code)
2232     {
2233     case SUBREG:
2234       if (GET_CODE (SUBREG_REG (x)) == REG)
2235         {
2236           /* Global registers are not local.  */
2237           if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER
2238               && global_regs[subreg_regno (x)])
2239             return 1;
2240           return 0;
2241         }
2242       break;
2243
2244     case REG:
2245       regno = REGNO (x);
2246       /* Global registers are not local.  */
2247       if (regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
2248         return 1;
2249       return 0;
2250
2251     case SCRATCH:
2252     case PC:
2253     case CC0:
2254     case CONST_INT:
2255     case CONST_DOUBLE:
2256     case CONST:
2257     case LABEL_REF:
2258       return 0;
2259
2260     case SYMBOL_REF:
2261       /* Constants in the function's constants pool are constant.  */
2262       if (CONSTANT_POOL_ADDRESS_P (x))
2263         return 0;
2264       return 1;
2265
2266     case CALL:
2267       /* Non-constant calls and recursion are not local.  */
2268       return 1;
2269
2270     case MEM:
2271       /* Be overly conservative and consider any volatile memory
2272          reference as not local.  */
2273       if (MEM_VOLATILE_P (x))
2274         return 1;
2275       base = find_base_term (XEXP (x, 0));
2276       if (base)
2277         {
2278           /* A Pmode ADDRESS could be a reference via the structure value
2279              address or static chain.  Such memory references are nonlocal.
2280
2281              Thus, we have to examine the contents of the ADDRESS to find
2282              out if this is a local reference or not.  */
2283           if (GET_CODE (base) == ADDRESS
2284               && GET_MODE (base) == Pmode
2285               && (XEXP (base, 0) == stack_pointer_rtx
2286                   || XEXP (base, 0) == arg_pointer_rtx
2287 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2288                   || XEXP (base, 0) == hard_frame_pointer_rtx
2289 #endif
2290                   || XEXP (base, 0) == frame_pointer_rtx))
2291             return 0;
2292           /* Constants in the function's constant pool are constant.  */
2293           if (GET_CODE (base) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (base))
2294             return 0;
2295         }
2296       return 1;
2297
2298     case UNSPEC_VOLATILE:
2299     case ASM_INPUT:
2300       return 1;
2301
2302     case ASM_OPERANDS:
2303       if (MEM_VOLATILE_P (x))
2304         return 1;
2305
2306     /* FALLTHROUGH */
2307
2308     default:
2309       break;
2310     }
2311
2312   /* Recursively scan the operands of this expression.  */
2313
2314   {
2315     const char *fmt = GET_RTX_FORMAT (code);
2316     int i;
2317     
2318     for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2319       {
2320         if (fmt[i] == 'e' && XEXP (x, i))
2321           {
2322             if (nonlocal_mentioned_p (XEXP (x, i)))
2323               return 1;
2324           }
2325         else if (fmt[i] == 'E')
2326           {
2327             int j;
2328             for (j = 0; j < XVECLEN (x, i); j++)
2329               if (nonlocal_mentioned_p (XVECEXP (x, i, j)))
2330                 return 1;
2331           }
2332       }
2333   }
2334
2335   return 0;
2336 }
2337
2338 /* Mark the function if it is constant.  */
2339
2340 void
2341 mark_constant_function ()
2342 {
2343   rtx insn;
2344   int nonlocal_mentioned;
2345
2346   if (TREE_PUBLIC (current_function_decl)
2347       || TREE_READONLY (current_function_decl)
2348       || DECL_IS_PURE (current_function_decl)
2349       || TREE_THIS_VOLATILE (current_function_decl)
2350       || TYPE_MODE (TREE_TYPE (current_function_decl)) == VOIDmode)
2351     return;
2352
2353   /* A loop might not return which counts as a side effect.  */
2354   if (mark_dfs_back_edges ())
2355     return;
2356
2357   nonlocal_mentioned = 0;
2358
2359   init_alias_analysis ();
2360
2361   /* Determine if this is a constant function.  */
2362
2363   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2364     if (INSN_P (insn) && nonlocal_mentioned_p (insn))
2365       {
2366         nonlocal_mentioned = 1;
2367         break;
2368       }
2369
2370   end_alias_analysis ();
2371
2372   /* Mark the function.  */
2373
2374   if (! nonlocal_mentioned)
2375     TREE_READONLY (current_function_decl) = 1;
2376 }
2377
2378
2379 static HARD_REG_SET argument_registers;
2380
2381 void
2382 init_alias_once ()
2383 {
2384   int i;
2385
2386 #ifndef OUTGOING_REGNO
2387 #define OUTGOING_REGNO(N) N
2388 #endif
2389   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2390     /* Check whether this register can hold an incoming pointer
2391        argument.  FUNCTION_ARG_REGNO_P tests outgoing register
2392        numbers, so translate if necessary due to register windows.  */
2393     if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i))
2394         && HARD_REGNO_MODE_OK (i, Pmode))
2395       SET_HARD_REG_BIT (argument_registers, i);
2396
2397   alias_sets = splay_tree_new (splay_tree_compare_ints, 0, 0);
2398 }
2399
2400 /* Initialize the aliasing machinery.  Initialize the REG_KNOWN_VALUE
2401    array.  */
2402
2403 void
2404 init_alias_analysis ()
2405 {
2406   int maxreg = max_reg_num ();
2407   int changed, pass;
2408   int i;
2409   unsigned int ui;
2410   rtx insn;
2411
2412   reg_known_value_size = maxreg;
2413
2414   reg_known_value 
2415     = (rtx *) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (rtx))
2416     - FIRST_PSEUDO_REGISTER;
2417   reg_known_equiv_p 
2418     = (char*) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (char))
2419     - FIRST_PSEUDO_REGISTER;
2420
2421   /* Overallocate reg_base_value to allow some growth during loop
2422      optimization.  Loop unrolling can create a large number of
2423      registers.  */
2424   reg_base_value_size = maxreg * 2;
2425   reg_base_value = (rtx *) xcalloc (reg_base_value_size, sizeof (rtx));
2426   ggc_add_rtx_root (reg_base_value, reg_base_value_size);
2427
2428   new_reg_base_value = (rtx *) xmalloc (reg_base_value_size * sizeof (rtx));
2429   reg_seen = (char *) xmalloc (reg_base_value_size);
2430   if (! reload_completed && flag_unroll_loops)
2431     {
2432       /* ??? Why are we realloc'ing if we're just going to zero it?  */
2433       alias_invariant = (rtx *)xrealloc (alias_invariant,
2434                                          reg_base_value_size * sizeof (rtx));
2435       memset ((char *)alias_invariant, 0, reg_base_value_size * sizeof (rtx));
2436     }
2437
2438   /* The basic idea is that each pass through this loop will use the
2439      "constant" information from the previous pass to propagate alias
2440      information through another level of assignments.
2441
2442      This could get expensive if the assignment chains are long.  Maybe
2443      we should throttle the number of iterations, possibly based on
2444      the optimization level or flag_expensive_optimizations.
2445
2446      We could propagate more information in the first pass by making use
2447      of REG_N_SETS to determine immediately that the alias information
2448      for a pseudo is "constant".
2449
2450      A program with an uninitialized variable can cause an infinite loop
2451      here.  Instead of doing a full dataflow analysis to detect such problems
2452      we just cap the number of iterations for the loop.
2453
2454      The state of the arrays for the set chain in question does not matter
2455      since the program has undefined behavior.  */
2456
2457   pass = 0;
2458   do
2459     {
2460       /* Assume nothing will change this iteration of the loop.  */
2461       changed = 0;
2462
2463       /* We want to assign the same IDs each iteration of this loop, so
2464          start counting from zero each iteration of the loop.  */
2465       unique_id = 0;
2466
2467       /* We're at the start of the function each iteration through the
2468          loop, so we're copying arguments.  */
2469       copying_arguments = 1;
2470
2471       /* Wipe the potential alias information clean for this pass.  */
2472       memset ((char *) new_reg_base_value, 0, reg_base_value_size * sizeof (rtx));
2473
2474       /* Wipe the reg_seen array clean.  */
2475       memset ((char *) reg_seen, 0, reg_base_value_size);
2476
2477       /* Mark all hard registers which may contain an address.
2478          The stack, frame and argument pointers may contain an address.
2479          An argument register which can hold a Pmode value may contain
2480          an address even if it is not in BASE_REGS.
2481
2482          The address expression is VOIDmode for an argument and
2483          Pmode for other registers.  */
2484
2485       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2486         if (TEST_HARD_REG_BIT (argument_registers, i))
2487           new_reg_base_value[i] = gen_rtx_ADDRESS (VOIDmode,
2488                                                    gen_rtx_REG (Pmode, i));
2489
2490       new_reg_base_value[STACK_POINTER_REGNUM]
2491         = gen_rtx_ADDRESS (Pmode, stack_pointer_rtx);
2492       new_reg_base_value[ARG_POINTER_REGNUM]
2493         = gen_rtx_ADDRESS (Pmode, arg_pointer_rtx);
2494       new_reg_base_value[FRAME_POINTER_REGNUM]
2495         = gen_rtx_ADDRESS (Pmode, frame_pointer_rtx);
2496 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2497       new_reg_base_value[HARD_FRAME_POINTER_REGNUM]
2498         = gen_rtx_ADDRESS (Pmode, hard_frame_pointer_rtx);
2499 #endif
2500
2501       /* Walk the insns adding values to the new_reg_base_value array.  */
2502       for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2503         {
2504           if (INSN_P (insn))
2505             {
2506               rtx note, set;
2507
2508 #if defined (HAVE_prologue) || defined (HAVE_epilogue)
2509               /* The prologue/epilogue insns are not threaded onto the
2510                  insn chain until after reload has completed.  Thus,
2511                  there is no sense wasting time checking if INSN is in
2512                  the prologue/epilogue until after reload has completed.  */
2513               if (reload_completed
2514                   && prologue_epilogue_contains (insn))
2515                 continue;
2516 #endif
2517
2518               /* If this insn has a noalias note, process it,  Otherwise,
2519                  scan for sets.  A simple set will have no side effects
2520                  which could change the base value of any other register.  */
2521
2522               if (GET_CODE (PATTERN (insn)) == SET
2523                   && REG_NOTES (insn) != 0
2524                   && find_reg_note (insn, REG_NOALIAS, NULL_RTX))
2525                 record_set (SET_DEST (PATTERN (insn)), NULL_RTX, NULL);
2526               else
2527                 note_stores (PATTERN (insn), record_set, NULL);
2528
2529               set = single_set (insn);
2530
2531               if (set != 0
2532                   && GET_CODE (SET_DEST (set)) == REG
2533                   && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER)
2534                 {
2535                   unsigned int regno = REGNO (SET_DEST (set));
2536                   rtx src = SET_SRC (set);
2537
2538                   if (REG_NOTES (insn) != 0
2539                       && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
2540                            && REG_N_SETS (regno) == 1)
2541                           || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
2542                       && GET_CODE (XEXP (note, 0)) != EXPR_LIST
2543                       && ! rtx_varies_p (XEXP (note, 0), 1)
2544                       && ! reg_overlap_mentioned_p (SET_DEST (set), XEXP (note, 0)))
2545                     {
2546                       reg_known_value[regno] = XEXP (note, 0);
2547                       reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV;
2548                     }
2549                   else if (REG_N_SETS (regno) == 1
2550                            && GET_CODE (src) == PLUS
2551                            && GET_CODE (XEXP (src, 0)) == REG
2552                            && REGNO (XEXP (src, 0)) >= FIRST_PSEUDO_REGISTER
2553                            && (reg_known_value[REGNO (XEXP (src, 0))])
2554                            && GET_CODE (XEXP (src, 1)) == CONST_INT)
2555                     {
2556                       rtx op0 = XEXP (src, 0);
2557                       op0 = reg_known_value[REGNO (op0)];
2558                       reg_known_value[regno]
2559                         = plus_constant (op0, INTVAL (XEXP (src, 1)));
2560                       reg_known_equiv_p[regno] = 0;
2561                     }
2562                   else if (REG_N_SETS (regno) == 1
2563                            && ! rtx_varies_p (src, 1))
2564                     {
2565                       reg_known_value[regno] = src;
2566                       reg_known_equiv_p[regno] = 0;
2567                     }
2568                 }
2569             }
2570           else if (GET_CODE (insn) == NOTE
2571                    && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
2572             copying_arguments = 0;
2573         }
2574
2575       /* Now propagate values from new_reg_base_value to reg_base_value.  */
2576       for (ui = 0; ui < reg_base_value_size; ui++)
2577         {
2578           if (new_reg_base_value[ui]
2579               && new_reg_base_value[ui] != reg_base_value[ui]
2580               && ! rtx_equal_p (new_reg_base_value[ui], reg_base_value[ui]))
2581             {
2582               reg_base_value[ui] = new_reg_base_value[ui];
2583               changed = 1;
2584             }
2585         }
2586     }
2587   while (changed && ++pass < MAX_ALIAS_LOOP_PASSES);
2588
2589   /* Fill in the remaining entries.  */
2590   for (i = FIRST_PSEUDO_REGISTER; i < maxreg; i++)
2591     if (reg_known_value[i] == 0)
2592       reg_known_value[i] = regno_reg_rtx[i];
2593
2594   /* Simplify the reg_base_value array so that no register refers to
2595      another register, except to special registers indirectly through
2596      ADDRESS expressions.
2597
2598      In theory this loop can take as long as O(registers^2), but unless
2599      there are very long dependency chains it will run in close to linear
2600      time.
2601
2602      This loop may not be needed any longer now that the main loop does
2603      a better job at propagating alias information.  */
2604   pass = 0;
2605   do
2606     {
2607       changed = 0;
2608       pass++;
2609       for (ui = 0; ui < reg_base_value_size; ui++)
2610         {
2611           rtx base = reg_base_value[ui];
2612           if (base && GET_CODE (base) == REG)
2613             {
2614               unsigned int base_regno = REGNO (base);
2615               if (base_regno == ui)             /* register set from itself */
2616                 reg_base_value[ui] = 0;
2617               else
2618                 reg_base_value[ui] = reg_base_value[base_regno];
2619               changed = 1;
2620             }
2621         }
2622     }
2623   while (changed && pass < MAX_ALIAS_LOOP_PASSES);
2624
2625   /* Clean up.  */
2626   free (new_reg_base_value);
2627   new_reg_base_value = 0;
2628   free (reg_seen);
2629   reg_seen = 0;
2630 }
2631
2632 void
2633 end_alias_analysis ()
2634 {
2635   free (reg_known_value + FIRST_PSEUDO_REGISTER);
2636   reg_known_value = 0;
2637   reg_known_value_size = 0;
2638   free (reg_known_equiv_p + FIRST_PSEUDO_REGISTER);
2639   reg_known_equiv_p = 0;
2640   if (reg_base_value)
2641     {
2642       ggc_del_root (reg_base_value);
2643       free (reg_base_value);
2644       reg_base_value = 0;
2645     }
2646   reg_base_value_size = 0;
2647   if (alias_invariant)
2648     {
2649       free (alias_invariant);
2650       alias_invariant = 0;
2651     }
2652 }