OSDN Git Service

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