OSDN Git Service

* alias.c (record_component_aliases): Don't inspect
[pf3gnuchains/gcc-fork.git] / gcc / alias.c
1 /* Alias analysis for GNU C
2    Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
3    Contributed by John Carr (jfc@mit.edu).
4
5 This file is part of GNU CC.
6
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING.  If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 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 "insn-flags.h"
29 #include "expr.h"
30 #include "regs.h"
31 #include "hard-reg-set.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
39 /* The alias sets assigned to MEMs assist the back-end in determining
40    which MEMs can alias which other MEMs.  In general, two MEMs in
41    different alias sets cannot alias each other, with one important
42    exception.  Consider something like:
43
44      struct S {int i; double d; };
45
46    a store to an `S' can alias something of either type `int' or type
47    `double'.  (However, a store to an `int' cannot alias a `double'
48    and vice versa.)  We indicate this via a tree structure that looks
49    like:
50            struct S
51             /   \
52            /     \
53          |/_     _\|
54          int    double
55
56    (The arrows are directed and point downwards.)
57     In this situation we say the alias set for `struct S' is the
58    `superset' and that those for `int' and `double' are `subsets'.
59
60    To see whether two alias sets can point to the same memory, we must
61    see if either alias set is a subset of the other. We need not trace
62    past immediate decendents, however, since we propagate all
63    grandchildren up one level.
64
65    Alias set zero is implicitly a superset of all other alias sets.
66    However, this is no actual entry for alias set zero.  It is an
67    error to attempt to explicitly construct a subset of zero.  */
68
69 typedef struct alias_set_entry
70 {
71   /* The alias set number, as stored in MEM_ALIAS_SET.  */
72   HOST_WIDE_INT alias_set;
73
74   /* The children of the alias set.  These are not just the immediate
75      children, but, in fact, all decendents.  So, if we have:
76
77        struct T { struct S s; float f; } 
78
79      continuing our example above, the children here will be all of
80      `int', `double', `float', and `struct S'.  */
81   splay_tree children;
82
83   /* Nonzero if would have a child of zero: this effectively makes this
84      alias set the same as alias set zero.  */
85   int has_zero_child;
86 } *alias_set_entry;
87
88 static int rtx_equal_for_memref_p       PARAMS ((rtx, rtx));
89 static rtx find_symbolic_term           PARAMS ((rtx));
90 static rtx get_addr                     PARAMS ((rtx));
91 static int memrefs_conflict_p           PARAMS ((int, rtx, int, rtx,
92                                                  HOST_WIDE_INT));
93 static void record_set                  PARAMS ((rtx, rtx, void *));
94 static rtx find_base_term               PARAMS ((rtx));
95 static int base_alias_check             PARAMS ((rtx, rtx, enum machine_mode,
96                                                  enum machine_mode));
97 static rtx find_base_value              PARAMS ((rtx));
98 static int mems_in_disjoint_alias_sets_p PARAMS ((rtx, rtx));
99 static int insert_subset_children       PARAMS ((splay_tree_node, void*));
100 static tree find_base_decl            PARAMS ((tree));
101 static alias_set_entry get_alias_set_entry PARAMS ((HOST_WIDE_INT));
102 static rtx fixed_scalar_and_varying_struct_p PARAMS ((rtx, rtx, rtx, rtx,
103                                                       int (*) (rtx)));
104 static int aliases_everything_p         PARAMS ((rtx));
105 static int write_dependence_p           PARAMS ((rtx, rtx, int));
106 static int nonlocal_reference_p         PARAMS ((rtx));
107
108 /* Set up all info needed to perform alias analysis on memory references.  */
109
110 /* Returns the size in bytes of the mode of X.  */
111 #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X)))
112
113 /* Returns nonzero if MEM1 and MEM2 do not alias because they are in
114    different alias sets.  We ignore alias sets in functions making use
115    of variable arguments because the va_arg macros on some systems are
116    not legal ANSI C.  */
117 #define DIFFERENT_ALIAS_SETS_P(MEM1, MEM2)                      \
118   mems_in_disjoint_alias_sets_p (MEM1, MEM2)
119
120 /* Cap the number of passes we make over the insns propagating alias
121    information through set chains.   10 is a completely arbitrary choice.  */
122 #define MAX_ALIAS_LOOP_PASSES 10
123    
124 /* reg_base_value[N] gives an address to which register N is related.
125    If all sets after the first add or subtract to the current value
126    or otherwise modify it so it does not point to a different top level
127    object, reg_base_value[N] is equal to the address part of the source
128    of the first set.
129
130    A base address can be an ADDRESS, SYMBOL_REF, or LABEL_REF.  ADDRESS
131    expressions represent certain special values: function arguments and
132    the stack, frame, and argument pointers.  
133
134    The contents of an ADDRESS is not normally used, the mode of the
135    ADDRESS determines whether the ADDRESS is a function argument or some
136    other special value.  Pointer equality, not rtx_equal_p, determines whether
137    two ADDRESS expressions refer to the same base address.
138
139    The only use of the contents of an ADDRESS is for determining if the
140    current function performs nonlocal memory memory references for the
141    purposes of marking the function as a constant function.  */
142
143 static rtx *reg_base_value;
144 static rtx *new_reg_base_value;
145 static unsigned int reg_base_value_size; /* size of reg_base_value array */
146
147 #define REG_BASE_VALUE(X) \
148   (REGNO (X) < reg_base_value_size ? reg_base_value[REGNO (X)] : 0)
149
150 /* Vector of known invariant relationships between registers.  Set in
151    loop unrolling.  Indexed by register number, if nonzero the value
152    is an expression describing this register in terms of another.
153
154    The length of this array is REG_BASE_VALUE_SIZE.
155
156    Because this array contains only pseudo registers it has no effect
157    after reload.  */
158 static rtx *alias_invariant;
159
160 /* Vector indexed by N giving the initial (unchanging) value known for
161    pseudo-register N.  This array is initialized in
162    init_alias_analysis, and does not change until end_alias_analysis
163    is called.  */
164 rtx *reg_known_value;
165
166 /* Indicates number of valid entries in reg_known_value.  */
167 static unsigned int reg_known_value_size;
168
169 /* Vector recording for each reg_known_value whether it is due to a
170    REG_EQUIV note.  Future passes (viz., reload) may replace the
171    pseudo with the equivalent expression and so we account for the
172    dependences that would be introduced if that happens.
173
174    The REG_EQUIV notes created in assign_parms may mention the arg
175    pointer, and there are explicit insns in the RTL that modify the
176    arg pointer.  Thus we must ensure that such insns don't get
177    scheduled across each other because that would invalidate the
178    REG_EQUIV notes.  One could argue that the REG_EQUIV notes are
179    wrong, but solving the problem in the scheduler will likely give
180    better code, so we do it here.  */
181 char *reg_known_equiv_p;
182
183 /* True when scanning insns from the start of the rtl to the
184    NOTE_INSN_FUNCTION_BEG note.  */
185 static int copying_arguments;
186
187 /* The splay-tree used to store the various alias set entries.  */
188 static splay_tree alias_sets;
189 \f
190 /* Returns a pointer to the alias set entry for ALIAS_SET, if there is
191    such an entry, or NULL otherwise.  */
192
193 static alias_set_entry
194 get_alias_set_entry (alias_set)
195      HOST_WIDE_INT alias_set;
196 {
197   splay_tree_node sn
198     = splay_tree_lookup (alias_sets, (splay_tree_key) alias_set);
199
200   return sn != 0 ? ((alias_set_entry) sn->value) : 0;
201 }
202
203 /* Returns nonzero if the alias sets for MEM1 and MEM2 are such that
204    the two MEMs cannot alias each other.  */
205
206 static int 
207 mems_in_disjoint_alias_sets_p (mem1, mem2)
208      rtx mem1;
209      rtx mem2;
210 {
211   alias_set_entry ase;
212
213 #ifdef ENABLE_CHECKING  
214 /* Perform a basic sanity check.  Namely, that there are no alias sets
215    if we're not using strict aliasing.  This helps to catch bugs
216    whereby someone uses PUT_CODE, but doesn't clear MEM_ALIAS_SET, or
217    where a MEM is allocated in some way other than by the use of
218    gen_rtx_MEM, and the MEM_ALIAS_SET is not cleared.  If we begin to
219    use alias sets to indicate that spilled registers cannot alias each
220    other, we might need to remove this check.  */
221   if (! flag_strict_aliasing
222       && (MEM_ALIAS_SET (mem1) != 0 || MEM_ALIAS_SET (mem2) != 0))
223     abort ();
224 #endif
225
226   /* The code used in varargs macros are often not conforming ANSI C,
227      which can trick the compiler into making incorrect aliasing
228      assumptions in these functions.  So, we don't use alias sets in
229      such a function.  FIXME: This should be moved into the front-end;
230      it is a language-dependent notion, and there's no reason not to
231      still use these checks to handle globals.  */
232   if (current_function_stdarg || current_function_varargs)
233     return 0;
234
235   /* If have no alias set information for one of the MEMs, we have to assume
236      it can alias anything.  */
237   if (MEM_ALIAS_SET (mem1) == 0 || MEM_ALIAS_SET (mem2) == 0)
238     return 0;
239
240   /* If the two alias sets are the same, they may alias.  */
241   if (MEM_ALIAS_SET (mem1) == MEM_ALIAS_SET (mem2))
242     return 0;
243
244   /* See if the first alias set is a subset of the second.  */
245   ase = get_alias_set_entry (MEM_ALIAS_SET (mem1));
246   if (ase != 0
247       && (ase->has_zero_child
248           || splay_tree_lookup (ase->children,
249                                 (splay_tree_key) MEM_ALIAS_SET (mem2))))
250     return  0;
251
252   /* Now do the same, but with the alias sets reversed.  */
253   ase = get_alias_set_entry (MEM_ALIAS_SET (mem2));
254   if (ase != 0
255       && (ase->has_zero_child
256           || splay_tree_lookup (ase->children,
257                                 (splay_tree_key) MEM_ALIAS_SET (mem1))))
258     return  0;
259
260   /* The two MEMs are in distinct alias sets, and neither one is the
261      child of the other.  Therefore, they cannot alias.  */
262   return 1;
263 }
264
265 /* Insert the NODE into the splay tree given by DATA.  Used by
266    record_alias_subset via splay_tree_foreach.  */
267
268 static int
269 insert_subset_children (node, data)
270      splay_tree_node node;
271      void *data;
272 {
273   splay_tree_insert ((splay_tree) data, node->key, node->value);
274
275   return 0;
276 }
277 \f
278 /* T is an expression with pointer type.  Find the DECL on which this
279    expression is based.  (For example, in `a[i]' this would be `a'.)
280    If there is no such DECL, or a unique decl cannot be determined,
281    NULL_TREE is retured.  */
282
283 static tree
284 find_base_decl (t)
285      tree t;
286 {
287   tree d0, d1, d2;
288
289   if (t == 0 || t == error_mark_node || ! POINTER_TYPE_P (TREE_TYPE (t)))
290     return 0;
291
292   /* If this is a declaration, return it.  */
293   if (TREE_CODE_CLASS (TREE_CODE (t)) == 'd')
294     return t;
295
296   /* Handle general expressions.  It would be nice to deal with
297      COMPONENT_REFs here.  If we could tell that `a' and `b' were the
298      same, then `a->f' and `b->f' are also the same.  */
299   switch (TREE_CODE_CLASS (TREE_CODE (t)))
300     {
301     case '1':
302       return find_base_decl (TREE_OPERAND (t, 0));
303
304     case '2':
305       /* Return 0 if found in neither or both are the same.  */
306       d0 = find_base_decl (TREE_OPERAND (t, 0));
307       d1 = find_base_decl (TREE_OPERAND (t, 1));
308       if (d0 == d1)
309         return d0;
310       else if (d0 == 0)
311         return d1;
312       else if (d1 == 0)
313         return d0;
314       else
315         return 0;
316
317     case '3':
318       d0 = find_base_decl (TREE_OPERAND (t, 0));
319       d1 = find_base_decl (TREE_OPERAND (t, 1));
320       d0 = find_base_decl (TREE_OPERAND (t, 0));
321       d2 = find_base_decl (TREE_OPERAND (t, 2));
322
323       /* Set any nonzero values from the last, then from the first.  */
324       if (d1 == 0) d1 = d2;
325       if (d0 == 0) d0 = d1;
326       if (d1 == 0) d1 = d0;
327       if (d2 == 0) d2 = d1;
328
329       /* At this point all are nonzero or all are zero.  If all three are the
330          same, return it.  Otherwise, return zero.  */
331       return (d0 == d1 && d1 == d2) ? d0 : 0;
332
333     default:
334       return 0;
335     }
336 }
337
338 /* Return the alias set for T, which may be either a type or an
339    expression.  Call language-specific routine for help, if needed.  */
340
341 HOST_WIDE_INT
342 get_alias_set (t)
343      tree t;
344 {
345   tree orig_t;
346   HOST_WIDE_INT set;
347   HOST_WIDE_INT bitsize, bitpos;
348   tree offset;
349   enum machine_mode mode;
350   int volatilep, unsignedp;
351   unsigned int alignment;
352
353   /* If we're not doing any alias analysis, just assume everything
354      aliases everything else.  Also return 0 if this or its type is
355      an error.  */
356   if (! flag_strict_aliasing || t == error_mark_node
357       || (! TYPE_P (t)
358           && (TREE_TYPE (t) == 0 || TREE_TYPE (t) == error_mark_node)))
359     return 0;
360
361   /* We can be passed either an expression or a type.  This and the
362      language-specific routine may make mutually-recursive calls to
363      each other to figure out what to do.  At each juncture, we see if
364      this is a tree that the language may need to handle specially.
365      First handle things that aren't types and start by removing nops
366      since we care only about the actual object.  */
367   if (! TYPE_P (t))
368     {
369       while (TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR
370              || TREE_CODE (t) == NON_LVALUE_EXPR)
371         t = TREE_OPERAND (t, 0);
372
373       /* Now give the language a chance to do something but record what we
374          gave it this time.  */
375       orig_t = t;
376       if ((set = lang_get_alias_set (t)) != -1)
377         return set;
378
379       /* If this is a reference, go inside it and use the underlying
380          object.  */
381       if (TREE_CODE_CLASS (TREE_CODE (t)) == 'r')
382         t = get_inner_reference (t, &bitsize, &bitpos, &offset, &mode,
383                                  &unsignedp, &volatilep, &alignment);
384
385       if (TREE_CODE (t) == INDIRECT_REF)
386         {
387           /* Check for accesses through restrict-qualified pointers.  */
388           tree decl = find_base_decl (TREE_OPERAND (t, 0));
389
390           if (decl && DECL_POINTER_ALIAS_SET_KNOWN_P (decl))
391             /* We use the alias set indicated in the declaration.  */
392             return DECL_POINTER_ALIAS_SET (decl);
393
394           /* If we have an INDIRECT_REF via a void pointer, we don't
395              know anything about what that might alias.  */
396           if (TREE_CODE (TREE_TYPE (t)) == VOID_TYPE)
397             return 0;
398         }
399
400       /* Give the language another chance to do something special.  */
401       if (orig_t != t
402           && (set = lang_get_alias_set (t)) != -1)
403         return set;
404
405       /* Now all we care about is the type.  */
406       t = TREE_TYPE (t);
407     }
408
409   /* Variant qualifiers don't affect the alias set, so get the main
410      variant. If this is a type with a known alias set, return it.  */
411   t = TYPE_MAIN_VARIANT (t);
412   if (TYPE_P (t) && TYPE_ALIAS_SET_KNOWN_P (t))
413     return TYPE_ALIAS_SET (t);
414
415   /* See if the language has special handling for this type.  */
416   if ((set = lang_get_alias_set (t)) != -1)
417     {
418       /* If the alias set is now known, we are done.  */
419       if (TYPE_ALIAS_SET_KNOWN_P (t))
420         return TYPE_ALIAS_SET (t);
421     }
422
423   /* There are no objects of FUNCTION_TYPE, so there's no point in
424      using up an alias set for them.  (There are, of course, pointers
425      and references to functions, but that's different.)  */
426   else if (TREE_CODE (t) == FUNCTION_TYPE)
427     set = 0;
428   else
429     /* Otherwise make a new alias set for this type.  */
430     set = new_alias_set ();
431
432   TYPE_ALIAS_SET (t) = set;
433
434   /* If this is an aggregate type, we must record any component aliasing
435      information.  */
436   if (AGGREGATE_TYPE_P (t))
437     record_component_aliases (t);
438
439   return set;
440 }
441
442 /* Return a brand-new alias set.  */
443
444 HOST_WIDE_INT
445 new_alias_set ()
446 {
447   static HOST_WIDE_INT last_alias_set;
448
449   if (flag_strict_aliasing)
450     return ++last_alias_set;
451   else
452     return 0;
453 }
454
455 /* Indicate that things in SUBSET can alias things in SUPERSET, but
456    not vice versa.  For example, in C, a store to an `int' can alias a
457    structure containing an `int', but not vice versa.  Here, the
458    structure would be the SUPERSET and `int' the SUBSET.  This
459    function should be called only once per SUPERSET/SUBSET pair. 
460
461    It is illegal for SUPERSET to be zero; everything is implicitly a
462    subset of alias set zero.  */
463
464 void
465 record_alias_subset (superset, subset)
466      HOST_WIDE_INT superset;
467      HOST_WIDE_INT subset;
468 {
469   alias_set_entry superset_entry;
470   alias_set_entry subset_entry;
471
472   if (superset == 0)
473     abort ();
474
475   superset_entry = get_alias_set_entry (superset);
476   if (superset_entry == 0) 
477     {
478       /* Create an entry for the SUPERSET, so that we have a place to
479          attach the SUBSET.  */
480       superset_entry
481         = (alias_set_entry) xmalloc (sizeof (struct alias_set_entry));
482       superset_entry->alias_set = superset;
483       superset_entry->children 
484         = splay_tree_new (splay_tree_compare_ints, 0, 0);
485       superset_entry->has_zero_child = 0;
486       splay_tree_insert (alias_sets, (splay_tree_key) superset,
487                          (splay_tree_value) superset_entry);
488     }
489
490   if (subset == 0)
491     superset_entry->has_zero_child = 1;
492   else
493     {
494       subset_entry = get_alias_set_entry (subset);
495       /* If there is an entry for the subset, enter all of its children
496          (if they are not already present) as children of the SUPERSET.  */
497       if (subset_entry) 
498         {
499           if (subset_entry->has_zero_child)
500             superset_entry->has_zero_child = 1;
501
502           splay_tree_foreach (subset_entry->children, insert_subset_children,
503                               superset_entry->children);
504         }
505
506       /* Enter the SUBSET itself as a child of the SUPERSET.  */
507       splay_tree_insert (superset_entry->children, 
508                          (splay_tree_key) subset, 0);
509     }
510 }
511
512 /* Record that component types of TYPE, if any, are part of that type for
513    aliasing purposes.  For record types, we only record component types
514    for fields that are marked addressable.  For array types, we always
515    record the component types, so the front end should not call this
516    function if the individual component aren't addressable.  */
517
518 void
519 record_component_aliases (type)
520      tree type;
521 {
522   HOST_WIDE_INT superset = get_alias_set (type);
523   tree field;
524
525   if (superset == 0)
526     return;
527
528   switch (TREE_CODE (type))
529     {
530     case ARRAY_TYPE:
531       if (! TYPE_NONALIASED_COMPONENT (type))
532         record_alias_subset (superset, get_alias_set (TREE_TYPE (type)));
533       break;
534
535     case RECORD_TYPE:
536     case UNION_TYPE:
537     case QUAL_UNION_TYPE:
538       for (field = TYPE_FIELDS (type); field != 0; field = TREE_CHAIN (field))
539         if (TREE_CODE (field) == FIELD_DECL && ! DECL_NONADDRESSABLE_P (field))
540           record_alias_subset (superset, get_alias_set (TREE_TYPE (field)));
541       break;
542
543     default:
544       break;
545     }
546 }
547
548 /* Allocate an alias set for use in storing and reading from the varargs
549    spill area.  */
550
551 HOST_WIDE_INT
552 get_varargs_alias_set ()
553 {
554   static HOST_WIDE_INT set = -1;
555
556   if (set == -1)
557     set = new_alias_set ();
558
559   return set;
560 }
561
562 /* Likewise, but used for the fixed portions of the frame, e.g., register
563    save areas.  */
564
565 HOST_WIDE_INT
566 get_frame_alias_set ()
567 {
568   static HOST_WIDE_INT set = -1;
569
570   if (set == -1)
571     set = new_alias_set ();
572
573   return set;
574 }
575
576 /* Inside SRC, the source of a SET, find a base address.  */
577
578 static rtx
579 find_base_value (src)
580      register rtx src;
581 {
582   switch (GET_CODE (src))
583     {
584     case SYMBOL_REF:
585     case LABEL_REF:
586       return src;
587
588     case REG:
589       /* At the start of a function, argument registers have known base
590          values which may be lost later.  Returning an ADDRESS
591          expression here allows optimization based on argument values
592          even when the argument registers are used for other purposes.  */
593       if (REGNO (src) < FIRST_PSEUDO_REGISTER && copying_arguments)
594         return new_reg_base_value[REGNO (src)];
595
596       /* If a pseudo has a known base value, return it.  Do not do this
597          for hard regs since it can result in a circular dependency
598          chain for registers which have values at function entry.
599
600          The test above is not sufficient because the scheduler may move
601          a copy out of an arg reg past the NOTE_INSN_FUNCTION_BEGIN.  */
602       if (REGNO (src) >= FIRST_PSEUDO_REGISTER
603           && (unsigned) REGNO (src) < reg_base_value_size
604           && reg_base_value[REGNO (src)])
605         return reg_base_value[REGNO (src)];
606
607       return src;
608
609     case MEM:
610       /* Check for an argument passed in memory.  Only record in the
611          copying-arguments block; it is too hard to track changes
612          otherwise.  */
613       if (copying_arguments
614           && (XEXP (src, 0) == arg_pointer_rtx
615               || (GET_CODE (XEXP (src, 0)) == PLUS
616                   && XEXP (XEXP (src, 0), 0) == arg_pointer_rtx)))
617         return gen_rtx_ADDRESS (VOIDmode, src);
618       return 0;
619
620     case CONST:
621       src = XEXP (src, 0);
622       if (GET_CODE (src) != PLUS && GET_CODE (src) != MINUS)
623         break;
624
625       /* ... fall through ... */
626
627     case PLUS:
628     case MINUS:
629       {
630         rtx temp, src_0 = XEXP (src, 0), src_1 = XEXP (src, 1);
631
632         /* If either operand is a REG, then see if we already have
633            a known value for it.  */
634         if (GET_CODE (src_0) == REG)
635           {
636             temp = find_base_value (src_0);
637             if (temp != 0)
638               src_0 = temp;
639           }
640
641         if (GET_CODE (src_1) == REG)
642           {
643             temp = find_base_value (src_1);
644             if (temp!= 0)
645               src_1 = temp;
646           }
647
648         /* Guess which operand is the base address:
649            If either operand is a symbol, then it is the base.  If
650            either operand is a CONST_INT, then the other is the base.  */
651         if (GET_CODE (src_1) == CONST_INT || CONSTANT_P (src_0))
652           return find_base_value (src_0);
653         else if (GET_CODE (src_0) == CONST_INT || CONSTANT_P (src_1))
654           return find_base_value (src_1);
655
656         /* This might not be necessary anymore:
657            If either operand is a REG that is a known pointer, then it
658            is the base.  */
659         else if (GET_CODE (src_0) == REG && REGNO_POINTER_FLAG (REGNO (src_0)))
660           return find_base_value (src_0);
661         else if (GET_CODE (src_1) == REG && REGNO_POINTER_FLAG (REGNO (src_1)))
662           return find_base_value (src_1);
663
664         return 0;
665       }
666
667     case LO_SUM:
668       /* The standard form is (lo_sum reg sym) so look only at the
669          second operand.  */
670       return find_base_value (XEXP (src, 1));
671
672     case AND:
673       /* If the second operand is constant set the base
674          address to the first operand. */
675       if (GET_CODE (XEXP (src, 1)) == CONST_INT && INTVAL (XEXP (src, 1)) != 0)
676         return find_base_value (XEXP (src, 0));
677       return 0;
678
679     case ZERO_EXTEND:
680     case SIGN_EXTEND:   /* used for NT/Alpha pointers */
681     case HIGH:
682       return find_base_value (XEXP (src, 0));
683
684     default:
685       break;
686     }
687
688   return 0;
689 }
690
691 /* Called from init_alias_analysis indirectly through note_stores.  */
692
693 /* While scanning insns to find base values, reg_seen[N] is nonzero if
694    register N has been set in this function.  */
695 static char *reg_seen;
696
697 /* Addresses which are known not to alias anything else are identified
698    by a unique integer.  */
699 static int unique_id;
700
701 static void
702 record_set (dest, set, data)
703      rtx dest, set;
704      void *data ATTRIBUTE_UNUSED;
705 {
706   register unsigned regno;
707   rtx src;
708
709   if (GET_CODE (dest) != REG)
710     return;
711
712   regno = REGNO (dest);
713
714   if (regno >= reg_base_value_size)
715     abort ();
716
717   if (set)
718     {
719       /* A CLOBBER wipes out any old value but does not prevent a previously
720          unset register from acquiring a base address (i.e. reg_seen is not
721          set).  */
722       if (GET_CODE (set) == CLOBBER)
723         {
724           new_reg_base_value[regno] = 0;
725           return;
726         }
727       src = SET_SRC (set);
728     }
729   else
730     {
731       if (reg_seen[regno])
732         {
733           new_reg_base_value[regno] = 0;
734           return;
735         }
736       reg_seen[regno] = 1;
737       new_reg_base_value[regno] = gen_rtx_ADDRESS (Pmode,
738                                                    GEN_INT (unique_id++));
739       return;
740     }
741
742   /* This is not the first set.  If the new value is not related to the
743      old value, forget the base value. Note that the following code is
744      not detected:
745      extern int x, y;  int *p = &x; p += (&y-&x);
746      ANSI C does not allow computing the difference of addresses
747      of distinct top level objects.  */
748   if (new_reg_base_value[regno])
749     switch (GET_CODE (src))
750       {
751       case LO_SUM:
752       case PLUS:
753       case MINUS:
754         if (XEXP (src, 0) != dest && XEXP (src, 1) != dest)
755           new_reg_base_value[regno] = 0;
756         break;
757       case AND:
758         if (XEXP (src, 0) != dest || GET_CODE (XEXP (src, 1)) != CONST_INT)
759           new_reg_base_value[regno] = 0;
760         break;
761       default:
762         new_reg_base_value[regno] = 0;
763         break;
764       }
765   /* If this is the first set of a register, record the value.  */
766   else if ((regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
767            && ! reg_seen[regno] && new_reg_base_value[regno] == 0)
768     new_reg_base_value[regno] = find_base_value (src);
769
770   reg_seen[regno] = 1;
771 }
772
773 /* Called from loop optimization when a new pseudo-register is
774    created.  It indicates that REGNO is being set to VAL.  f INVARIANT
775    is true then this value also describes an invariant relationship
776    which can be used to deduce that two registers with unknown values
777    are different.  */
778
779 void
780 record_base_value (regno, val, invariant)
781      unsigned int regno;
782      rtx val;
783      int invariant;
784 {
785   if (regno >= reg_base_value_size)
786     return;
787
788   if (invariant && alias_invariant)
789     alias_invariant[regno] = val;
790
791   if (GET_CODE (val) == REG)
792     {
793       if (REGNO (val) < reg_base_value_size)
794         reg_base_value[regno] = reg_base_value[REGNO (val)];
795
796       return;
797     }
798
799   reg_base_value[regno] = find_base_value (val);
800 }
801
802 /* Returns a canonical version of X, from the point of view alias
803    analysis.  (For example, if X is a MEM whose address is a register,
804    and the register has a known value (say a SYMBOL_REF), then a MEM
805    whose address is the SYMBOL_REF is returned.)  */
806
807 rtx
808 canon_rtx (x)
809      rtx x;
810 {
811   /* Recursively look for equivalences.  */
812   if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
813       && REGNO (x) < reg_known_value_size)
814     return reg_known_value[REGNO (x)] == x
815       ? x : canon_rtx (reg_known_value[REGNO (x)]);
816   else if (GET_CODE (x) == PLUS)
817     {
818       rtx x0 = canon_rtx (XEXP (x, 0));
819       rtx x1 = canon_rtx (XEXP (x, 1));
820
821       if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
822         {
823           /* We can tolerate LO_SUMs being offset here; these
824              rtl are used for nothing other than comparisons.  */
825           if (GET_CODE (x0) == CONST_INT)
826             return plus_constant_for_output (x1, INTVAL (x0));
827           else if (GET_CODE (x1) == CONST_INT)
828             return plus_constant_for_output (x0, INTVAL (x1));
829           return gen_rtx_PLUS (GET_MODE (x), x0, x1);
830         }
831     }
832
833   /* This gives us much better alias analysis when called from
834      the loop optimizer.   Note we want to leave the original
835      MEM alone, but need to return the canonicalized MEM with
836      all the flags with their original values.  */
837   else if (GET_CODE (x) == MEM)
838     {
839       rtx addr = canon_rtx (XEXP (x, 0));
840
841       if (addr != XEXP (x, 0))
842         {
843           rtx new = gen_rtx_MEM (GET_MODE (x), addr);
844
845           MEM_COPY_ATTRIBUTES (new, x);
846           x = new;
847         }
848     }
849   return x;
850 }
851
852 /* Return 1 if X and Y are identical-looking rtx's.
853
854    We use the data in reg_known_value above to see if two registers with
855    different numbers are, in fact, equivalent.  */
856
857 static int
858 rtx_equal_for_memref_p (x, y)
859      rtx x, y;
860 {
861   register int i;
862   register int j;
863   register enum rtx_code code;
864   register const char *fmt;
865
866   if (x == 0 && y == 0)
867     return 1;
868   if (x == 0 || y == 0)
869     return 0;
870
871   x = canon_rtx (x);
872   y = canon_rtx (y);
873
874   if (x == y)
875     return 1;
876
877   code = GET_CODE (x);
878   /* Rtx's of different codes cannot be equal.  */
879   if (code != GET_CODE (y))
880     return 0;
881
882   /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
883      (REG:SI x) and (REG:HI x) are NOT equivalent.  */
884
885   if (GET_MODE (x) != GET_MODE (y))
886     return 0;
887
888   /* Some RTL can be compared without a recursive examination.  */
889   switch (code)
890     {
891     case REG:
892       return REGNO (x) == REGNO (y);
893
894     case LABEL_REF:
895       return XEXP (x, 0) == XEXP (y, 0);
896       
897     case SYMBOL_REF:
898       return XSTR (x, 0) == XSTR (y, 0);
899
900     case CONST_INT:
901     case CONST_DOUBLE:
902       /* There's no need to compare the contents of CONST_DOUBLEs or
903          CONST_INTs because pointer equality is a good enough
904          comparison for these nodes.  */
905       return 0;
906
907     case ADDRESSOF:
908       return (REGNO (XEXP (x, 0)) == REGNO (XEXP (y, 0))
909               && XINT (x, 1) == XINT (y, 1));
910
911     default:
912       break;
913     }
914
915   /* For commutative operations, the RTX match if the operand match in any
916      order.  Also handle the simple binary and unary cases without a loop.  */
917   if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
918     return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
919              && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
920             || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
921                 && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
922   else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
923     return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
924             && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)));
925   else if (GET_RTX_CLASS (code) == '1')
926     return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0));
927
928   /* Compare the elements.  If any pair of corresponding elements
929      fail to match, return 0 for the whole things.
930
931      Limit cases to types which actually appear in addresses.  */
932
933   fmt = GET_RTX_FORMAT (code);
934   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
935     {
936       switch (fmt[i])
937         {
938         case 'i':
939           if (XINT (x, i) != XINT (y, i))
940             return 0;
941           break;
942
943         case 'E':
944           /* Two vectors must have the same length.  */
945           if (XVECLEN (x, i) != XVECLEN (y, i))
946             return 0;
947
948           /* And the corresponding elements must match.  */
949           for (j = 0; j < XVECLEN (x, i); j++)
950             if (rtx_equal_for_memref_p (XVECEXP (x, i, j),
951                                         XVECEXP (y, i, j)) == 0)
952               return 0;
953           break;
954
955         case 'e':
956           if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0)
957             return 0;
958           break;
959
960         /* This can happen for an asm which clobbers memory.  */
961         case '0':
962           break;
963
964           /* It is believed that rtx's at this level will never
965              contain anything but integers and other rtx's,
966              except for within LABEL_REFs and SYMBOL_REFs.  */
967         default:
968           abort ();
969         }
970     }
971   return 1;
972 }
973
974 /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
975    X and return it, or return 0 if none found.  */
976
977 static rtx
978 find_symbolic_term (x)
979      rtx x;
980 {
981   register int i;
982   register enum rtx_code code;
983   register const char *fmt;
984
985   code = GET_CODE (x);
986   if (code == SYMBOL_REF || code == LABEL_REF)
987     return x;
988   if (GET_RTX_CLASS (code) == 'o')
989     return 0;
990
991   fmt = GET_RTX_FORMAT (code);
992   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
993     {
994       rtx t;
995
996       if (fmt[i] == 'e')
997         {
998           t = find_symbolic_term (XEXP (x, i));
999           if (t != 0)
1000             return t;
1001         }
1002       else if (fmt[i] == 'E')
1003         break;
1004     }
1005   return 0;
1006 }
1007
1008 static rtx
1009 find_base_term (x)
1010      register rtx x;
1011 {
1012   cselib_val *val;
1013   struct elt_loc_list *l;
1014
1015   switch (GET_CODE (x))
1016     {
1017     case REG:
1018       return REG_BASE_VALUE (x);
1019
1020     case ZERO_EXTEND:
1021     case SIGN_EXTEND:   /* Used for Alpha/NT pointers */
1022     case HIGH:
1023     case PRE_INC:
1024     case PRE_DEC:
1025     case POST_INC:
1026     case POST_DEC:
1027       return find_base_term (XEXP (x, 0));
1028
1029     case VALUE:
1030       val = CSELIB_VAL_PTR (x);
1031       for (l = val->locs; l; l = l->next)
1032         if ((x = find_base_term (l->loc)) != 0)
1033           return x;
1034       return 0;
1035
1036     case CONST:
1037       x = XEXP (x, 0);
1038       if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
1039         return 0;
1040       /* fall through */
1041     case LO_SUM:
1042     case PLUS:
1043     case MINUS:
1044       {
1045         rtx tmp1 = XEXP (x, 0);
1046         rtx tmp2 = XEXP (x, 1);
1047
1048         /* This is a litle bit tricky since we have to determine which of
1049            the two operands represents the real base address.  Otherwise this
1050            routine may return the index register instead of the base register.
1051
1052            That may cause us to believe no aliasing was possible, when in
1053            fact aliasing is possible.
1054
1055            We use a few simple tests to guess the base register.  Additional
1056            tests can certainly be added.  For example, if one of the operands
1057            is a shift or multiply, then it must be the index register and the
1058            other operand is the base register.  */
1059         
1060         /* If either operand is known to be a pointer, then use it
1061            to determine the base term.  */
1062         if (REG_P (tmp1) && REGNO_POINTER_FLAG (REGNO (tmp1)))
1063           return find_base_term (tmp1);
1064
1065         if (REG_P (tmp2) && REGNO_POINTER_FLAG (REGNO (tmp2)))
1066           return find_base_term (tmp2);
1067
1068         /* Neither operand was known to be a pointer.  Go ahead and find the
1069            base term for both operands.  */
1070         tmp1 = find_base_term (tmp1);
1071         tmp2 = find_base_term (tmp2);
1072
1073         /* If either base term is named object or a special address
1074            (like an argument or stack reference), then use it for the
1075            base term.  */
1076         if (tmp1 != 0
1077             && (GET_CODE (tmp1) == SYMBOL_REF
1078                 || GET_CODE (tmp1) == LABEL_REF
1079                 || (GET_CODE (tmp1) == ADDRESS
1080                     && GET_MODE (tmp1) != VOIDmode)))
1081           return tmp1;
1082
1083         if (tmp2 != 0
1084             && (GET_CODE (tmp2) == SYMBOL_REF
1085                 || GET_CODE (tmp2) == LABEL_REF
1086                 || (GET_CODE (tmp2) == ADDRESS
1087                     && GET_MODE (tmp2) != VOIDmode)))
1088           return tmp2;
1089
1090         /* We could not determine which of the two operands was the
1091            base register and which was the index.  So we can determine
1092            nothing from the base alias check.  */
1093         return 0;
1094       }
1095
1096     case AND:
1097       if (GET_CODE (XEXP (x, 0)) == REG && GET_CODE (XEXP (x, 1)) == CONST_INT)
1098         return REG_BASE_VALUE (XEXP (x, 0));
1099       return 0;
1100
1101     case SYMBOL_REF:
1102     case LABEL_REF:
1103       return x;
1104
1105     default:
1106       return 0;
1107     }
1108 }
1109
1110 /* Return 0 if the addresses X and Y are known to point to different
1111    objects, 1 if they might be pointers to the same object.  */
1112
1113 static int
1114 base_alias_check (x, y, x_mode, y_mode)
1115      rtx x, y;
1116      enum machine_mode x_mode, y_mode;
1117 {
1118   rtx x_base = find_base_term (x);
1119   rtx y_base = find_base_term (y);
1120
1121   /* If the address itself has no known base see if a known equivalent
1122      value has one.  If either address still has no known base, nothing
1123      is known about aliasing.  */
1124   if (x_base == 0)
1125     {
1126       rtx x_c;
1127
1128       if (! flag_expensive_optimizations || (x_c = canon_rtx (x)) == x)
1129         return 1;
1130
1131       x_base = find_base_term (x_c);
1132       if (x_base == 0)
1133         return 1;
1134     }
1135
1136   if (y_base == 0)
1137     {
1138       rtx y_c;
1139       if (! flag_expensive_optimizations || (y_c = canon_rtx (y)) == y)
1140         return 1;
1141
1142       y_base = find_base_term (y_c);
1143       if (y_base == 0)
1144         return 1;
1145     }
1146
1147   /* If the base addresses are equal nothing is known about aliasing.  */
1148   if (rtx_equal_p (x_base, y_base))
1149     return 1;
1150
1151   /* The base addresses of the read and write are different expressions. 
1152      If they are both symbols and they are not accessed via AND, there is
1153      no conflict.  We can bring knowledge of object alignment into play
1154      here.  For example, on alpha, "char a, b;" can alias one another,
1155      though "char a; long b;" cannot.  */
1156   if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
1157     {
1158       if (GET_CODE (x) == AND && GET_CODE (y) == AND)
1159         return 1;
1160       if (GET_CODE (x) == AND
1161           && (GET_CODE (XEXP (x, 1)) != CONST_INT
1162               || GET_MODE_UNIT_SIZE (y_mode) < -INTVAL (XEXP (x, 1))))
1163         return 1;
1164       if (GET_CODE (y) == AND
1165           && (GET_CODE (XEXP (y, 1)) != CONST_INT
1166               || GET_MODE_UNIT_SIZE (x_mode) < -INTVAL (XEXP (y, 1))))
1167         return 1;
1168       /* Differing symbols never alias.  */
1169       return 0;
1170     }
1171
1172   /* If one address is a stack reference there can be no alias:
1173      stack references using different base registers do not alias,
1174      a stack reference can not alias a parameter, and a stack reference
1175      can not alias a global.  */
1176   if ((GET_CODE (x_base) == ADDRESS && GET_MODE (x_base) == Pmode)
1177       || (GET_CODE (y_base) == ADDRESS && GET_MODE (y_base) == Pmode))
1178     return 0;
1179
1180   if (! flag_argument_noalias)
1181     return 1;
1182
1183   if (flag_argument_noalias > 1)
1184     return 0;
1185
1186   /* Weak noalias assertion (arguments are distinct, but may match globals). */
1187   return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode);
1188 }
1189
1190 /* Convert the address X into something we can use.  This is done by returning
1191    it unchanged unless it is a value; in the latter case we call cselib to get
1192    a more useful rtx.  */
1193
1194 static rtx
1195 get_addr (x)
1196      rtx x;
1197 {
1198   cselib_val *v;
1199   struct elt_loc_list *l;
1200
1201   if (GET_CODE (x) != VALUE)
1202     return x;
1203   v = CSELIB_VAL_PTR (x);
1204   for (l = v->locs; l; l = l->next)
1205     if (CONSTANT_P (l->loc))
1206       return l->loc;
1207   for (l = v->locs; l; l = l->next)
1208     if (GET_CODE (l->loc) != REG && GET_CODE (l->loc) != MEM)
1209       return l->loc;
1210   if (v->locs)
1211     return v->locs->loc;
1212   return x;
1213 }
1214
1215 /*  Return the address of the (N_REFS + 1)th memory reference to ADDR
1216     where SIZE is the size in bytes of the memory reference.  If ADDR
1217     is not modified by the memory reference then ADDR is returned.  */
1218
1219 rtx
1220 addr_side_effect_eval (addr, size, n_refs)
1221      rtx addr;
1222      int size;
1223      int n_refs;
1224 {
1225   int offset = 0;
1226   
1227   switch (GET_CODE (addr))
1228     {
1229     case PRE_INC:
1230       offset = (n_refs + 1) * size;
1231       break;
1232     case PRE_DEC:
1233       offset = -(n_refs + 1) * size;
1234       break;
1235     case POST_INC:
1236       offset = n_refs * size;
1237       break;
1238     case POST_DEC:
1239       offset = -n_refs * size;
1240       break;
1241
1242     default:
1243       return addr;
1244     }
1245   
1246   if (offset)
1247     addr = gen_rtx_PLUS (GET_MODE (addr), XEXP (addr, 0), GEN_INT (offset));
1248   else
1249     addr = XEXP (addr, 0);
1250
1251   return addr;
1252 }
1253
1254 /* Return nonzero if X and Y (memory addresses) could reference the
1255    same location in memory.  C is an offset accumulator.  When
1256    C is nonzero, we are testing aliases between X and Y + C.
1257    XSIZE is the size in bytes of the X reference,
1258    similarly YSIZE is the size in bytes for Y.
1259
1260    If XSIZE or YSIZE is zero, we do not know the amount of memory being
1261    referenced (the reference was BLKmode), so make the most pessimistic
1262    assumptions.
1263
1264    If XSIZE or YSIZE is negative, we may access memory outside the object
1265    being referenced as a side effect.  This can happen when using AND to
1266    align memory references, as is done on the Alpha.
1267
1268    Nice to notice that varying addresses cannot conflict with fp if no
1269    local variables had their addresses taken, but that's too hard now.  */
1270
1271 static int
1272 memrefs_conflict_p (xsize, x, ysize, y, c)
1273      register rtx x, y;
1274      int xsize, ysize;
1275      HOST_WIDE_INT c;
1276 {
1277   if (GET_CODE (x) == VALUE)
1278     x = get_addr (x);
1279   if (GET_CODE (y) == VALUE)
1280     y = get_addr (y);
1281   if (GET_CODE (x) == HIGH)
1282     x = XEXP (x, 0);
1283   else if (GET_CODE (x) == LO_SUM)
1284     x = XEXP (x, 1);
1285   else
1286     x = canon_rtx (addr_side_effect_eval (x, xsize, 0));
1287   if (GET_CODE (y) == HIGH)
1288     y = XEXP (y, 0);
1289   else if (GET_CODE (y) == LO_SUM)
1290     y = XEXP (y, 1);
1291   else
1292     y = canon_rtx (addr_side_effect_eval (y, ysize, 0));
1293
1294   if (rtx_equal_for_memref_p (x, y))
1295     {
1296       if (xsize <= 0 || ysize <= 0)
1297         return 1;
1298       if (c >= 0 && xsize > c)
1299         return 1;
1300       if (c < 0 && ysize+c > 0)
1301         return 1;
1302       return 0;
1303     }
1304
1305   /* This code used to check for conflicts involving stack references and
1306      globals but the base address alias code now handles these cases.  */
1307
1308   if (GET_CODE (x) == PLUS)
1309     {
1310       /* The fact that X is canonicalized means that this
1311          PLUS rtx is canonicalized.  */
1312       rtx x0 = XEXP (x, 0);
1313       rtx x1 = XEXP (x, 1);
1314
1315       if (GET_CODE (y) == PLUS)
1316         {
1317           /* The fact that Y is canonicalized means that this
1318              PLUS rtx is canonicalized.  */
1319           rtx y0 = XEXP (y, 0);
1320           rtx y1 = XEXP (y, 1);
1321
1322           if (rtx_equal_for_memref_p (x1, y1))
1323             return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1324           if (rtx_equal_for_memref_p (x0, y0))
1325             return memrefs_conflict_p (xsize, x1, ysize, y1, c);
1326           if (GET_CODE (x1) == CONST_INT)
1327             {
1328               if (GET_CODE (y1) == CONST_INT)
1329                 return memrefs_conflict_p (xsize, x0, ysize, y0,
1330                                            c - INTVAL (x1) + INTVAL (y1));
1331               else
1332                 return memrefs_conflict_p (xsize, x0, ysize, y,
1333                                            c - INTVAL (x1));
1334             }
1335           else if (GET_CODE (y1) == CONST_INT)
1336             return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1337
1338           return 1;
1339         }
1340       else if (GET_CODE (x1) == CONST_INT)
1341         return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
1342     }
1343   else if (GET_CODE (y) == PLUS)
1344     {
1345       /* The fact that Y is canonicalized means that this
1346          PLUS rtx is canonicalized.  */
1347       rtx y0 = XEXP (y, 0);
1348       rtx y1 = XEXP (y, 1);
1349
1350       if (GET_CODE (y1) == CONST_INT)
1351         return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1352       else
1353         return 1;
1354     }
1355
1356   if (GET_CODE (x) == GET_CODE (y))
1357     switch (GET_CODE (x))
1358       {
1359       case MULT:
1360         {
1361           /* Handle cases where we expect the second operands to be the
1362              same, and check only whether the first operand would conflict
1363              or not.  */
1364           rtx x0, y0;
1365           rtx x1 = canon_rtx (XEXP (x, 1));
1366           rtx y1 = canon_rtx (XEXP (y, 1));
1367           if (! rtx_equal_for_memref_p (x1, y1))
1368             return 1;
1369           x0 = canon_rtx (XEXP (x, 0));
1370           y0 = canon_rtx (XEXP (y, 0));
1371           if (rtx_equal_for_memref_p (x0, y0))
1372             return (xsize == 0 || ysize == 0
1373                     || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1374
1375           /* Can't properly adjust our sizes.  */
1376           if (GET_CODE (x1) != CONST_INT)
1377             return 1;
1378           xsize /= INTVAL (x1);
1379           ysize /= INTVAL (x1);
1380           c /= INTVAL (x1);
1381           return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1382         }
1383
1384       case REG:
1385         /* Are these registers known not to be equal?  */
1386         if (alias_invariant)
1387           {
1388             unsigned int r_x = REGNO (x), r_y = REGNO (y);
1389             rtx i_x, i_y;       /* invariant relationships of X and Y */
1390
1391             i_x = r_x >= reg_base_value_size ? 0 : alias_invariant[r_x];
1392             i_y = r_y >= reg_base_value_size ? 0 : alias_invariant[r_y];
1393
1394             if (i_x == 0 && i_y == 0)
1395               break;
1396
1397             if (! memrefs_conflict_p (xsize, i_x ? i_x : x,
1398                                       ysize, i_y ? i_y : y, c))
1399               return 0;
1400           }
1401         break;
1402
1403       default:
1404         break;
1405       }
1406
1407   /* Treat an access through an AND (e.g. a subword access on an Alpha)
1408      as an access with indeterminate size.  Assume that references 
1409      besides AND are aligned, so if the size of the other reference is
1410      at least as large as the alignment, assume no other overlap.  */
1411   if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT)
1412     {
1413       if (GET_CODE (y) == AND || ysize < -INTVAL (XEXP (x, 1)))
1414         xsize = -1;
1415       return memrefs_conflict_p (xsize, XEXP (x, 0), ysize, y, c);
1416     }
1417   if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT)
1418     {
1419       /* ??? If we are indexing far enough into the array/structure, we
1420          may yet be able to determine that we can not overlap.  But we 
1421          also need to that we are far enough from the end not to overlap
1422          a following reference, so we do nothing with that for now.  */
1423       if (GET_CODE (x) == AND || xsize < -INTVAL (XEXP (y, 1)))
1424         ysize = -1;
1425       return memrefs_conflict_p (xsize, x, ysize, XEXP (y, 0), c);
1426     }
1427
1428   if (CONSTANT_P (x))
1429     {
1430       if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
1431         {
1432           c += (INTVAL (y) - INTVAL (x));
1433           return (xsize <= 0 || ysize <= 0
1434                   || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1435         }
1436
1437       if (GET_CODE (x) == CONST)
1438         {
1439           if (GET_CODE (y) == CONST)
1440             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1441                                        ysize, canon_rtx (XEXP (y, 0)), c);
1442           else
1443             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1444                                        ysize, y, c);
1445         }
1446       if (GET_CODE (y) == CONST)
1447         return memrefs_conflict_p (xsize, x, ysize,
1448                                    canon_rtx (XEXP (y, 0)), c);
1449
1450       if (CONSTANT_P (y))
1451         return (xsize < 0 || ysize < 0
1452                 || (rtx_equal_for_memref_p (x, y)
1453                     && (xsize == 0 || ysize == 0
1454                         || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0))));
1455
1456       return 1;
1457     }
1458   return 1;
1459 }
1460
1461 /* Functions to compute memory dependencies.
1462
1463    Since we process the insns in execution order, we can build tables
1464    to keep track of what registers are fixed (and not aliased), what registers
1465    are varying in known ways, and what registers are varying in unknown
1466    ways.
1467
1468    If both memory references are volatile, then there must always be a
1469    dependence between the two references, since their order can not be
1470    changed.  A volatile and non-volatile reference can be interchanged
1471    though. 
1472
1473    A MEM_IN_STRUCT reference at a non-AND varying address can never
1474    conflict with a non-MEM_IN_STRUCT reference at a fixed address.  We
1475    also must allow AND addresses, because they may generate accesses
1476    outside the object being referenced.  This is used to generate
1477    aligned addresses from unaligned addresses, for instance, the alpha
1478    storeqi_unaligned pattern.  */
1479
1480 /* Read dependence: X is read after read in MEM takes place.  There can
1481    only be a dependence here if both reads are volatile.  */
1482
1483 int
1484 read_dependence (mem, x)
1485      rtx mem;
1486      rtx x;
1487 {
1488   return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
1489 }
1490
1491 /* Returns MEM1 if and only if MEM1 is a scalar at a fixed address and
1492    MEM2 is a reference to a structure at a varying address, or returns
1493    MEM2 if vice versa.  Otherwise, returns NULL_RTX.  If a non-NULL
1494    value is returned MEM1 and MEM2 can never alias.  VARIES_P is used
1495    to decide whether or not an address may vary; it should return
1496    nonzero whenever variation is possible.
1497    MEM1_ADDR and MEM2_ADDR are the addresses of MEM1 and MEM2.  */
1498   
1499 static rtx
1500 fixed_scalar_and_varying_struct_p (mem1, mem2, mem1_addr, mem2_addr, varies_p)
1501      rtx mem1, mem2;
1502      rtx mem1_addr, mem2_addr;
1503      int (*varies_p) PARAMS ((rtx));
1504 {  
1505   if (MEM_SCALAR_P (mem1) && MEM_IN_STRUCT_P (mem2) 
1506       && !varies_p (mem1_addr) && varies_p (mem2_addr))
1507     /* MEM1 is a scalar at a fixed address; MEM2 is a struct at a
1508        varying address.  */
1509     return mem1;
1510
1511   if (MEM_IN_STRUCT_P (mem1) && MEM_SCALAR_P (mem2) 
1512       && varies_p (mem1_addr) && !varies_p (mem2_addr))
1513     /* MEM2 is a scalar at a fixed address; MEM1 is a struct at a
1514        varying address.  */
1515     return mem2;
1516
1517   return NULL_RTX;
1518 }
1519
1520 /* Returns nonzero if something about the mode or address format MEM1
1521    indicates that it might well alias *anything*.  */
1522
1523 static int
1524 aliases_everything_p (mem)
1525      rtx mem;
1526 {
1527   if (GET_CODE (XEXP (mem, 0)) == AND)
1528     /* If the address is an AND, its very hard to know at what it is
1529        actually pointing.  */
1530     return 1;
1531     
1532   return 0;
1533 }
1534
1535 /* True dependence: X is read after store in MEM takes place.  */
1536
1537 int
1538 true_dependence (mem, mem_mode, x, varies)
1539      rtx mem;
1540      enum machine_mode mem_mode;
1541      rtx x;
1542      int (*varies) PARAMS ((rtx));
1543 {
1544   register rtx x_addr, mem_addr;
1545
1546   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
1547     return 1;
1548
1549   if (DIFFERENT_ALIAS_SETS_P (x, mem))
1550     return 0;
1551
1552   /* If X is an unchanging read, then it can't possibly conflict with any
1553      non-unchanging store.  It may conflict with an unchanging write though,
1554      because there may be a single store to this address to initialize it.
1555      Just fall through to the code below to resolve the case where we have
1556      both an unchanging read and an unchanging write.  This won't handle all
1557      cases optimally, but the possible performance loss should be
1558      negligible.  */
1559   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
1560     return 0;
1561
1562   if (mem_mode == VOIDmode)
1563     mem_mode = GET_MODE (mem);
1564
1565   x_addr = get_addr (XEXP (x, 0));
1566   mem_addr = get_addr (XEXP (mem, 0));
1567
1568   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
1569     return 0;
1570
1571   x_addr = canon_rtx (x_addr);
1572   mem_addr = canon_rtx (mem_addr);
1573
1574   if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
1575                             SIZE_FOR_MODE (x), x_addr, 0))
1576     return 0;
1577
1578   if (aliases_everything_p (x))
1579     return 1;
1580
1581   /* We cannot use aliases_everyting_p to test MEM, since we must look
1582      at MEM_MODE, rather than GET_MODE (MEM).  */
1583   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
1584     return 1;
1585
1586   /* In true_dependence we also allow BLKmode to alias anything.  Why
1587      don't we do this in anti_dependence and output_dependence?  */
1588   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
1589     return 1;
1590
1591   return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
1592                                               varies);
1593 }
1594
1595 /* Returns non-zero if a write to X might alias a previous read from
1596    (or, if WRITEP is non-zero, a write to) MEM.  */
1597
1598 static int
1599 write_dependence_p (mem, x, writep)
1600      rtx mem;
1601      rtx x;
1602      int writep;
1603 {
1604   rtx x_addr, mem_addr;
1605   rtx fixed_scalar;
1606
1607   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
1608     return 1;
1609
1610   if (DIFFERENT_ALIAS_SETS_P (x, mem))
1611     return 0;
1612
1613   /* If MEM is an unchanging read, then it can't possibly conflict with
1614      the store to X, because there is at most one store to MEM, and it must
1615      have occurred somewhere before MEM.  */
1616   if (!writep && RTX_UNCHANGING_P (mem))
1617     return 0;
1618
1619   x_addr = get_addr (XEXP (x, 0));
1620   mem_addr = get_addr (XEXP (mem, 0));
1621
1622   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x),
1623                           GET_MODE (mem)))
1624     return 0;
1625
1626   x_addr = canon_rtx (x_addr);
1627   mem_addr = canon_rtx (mem_addr);
1628
1629   if (!memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
1630                            SIZE_FOR_MODE (x), x_addr, 0))
1631     return 0;
1632
1633   fixed_scalar 
1634     = fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
1635                                          rtx_addr_varies_p);
1636
1637   return (!(fixed_scalar == mem && !aliases_everything_p (x))
1638           && !(fixed_scalar == x && !aliases_everything_p (mem)));
1639 }
1640
1641 /* Anti dependence: X is written after read in MEM takes place.  */
1642
1643 int
1644 anti_dependence (mem, x)
1645      rtx mem;
1646      rtx x;
1647 {
1648   return write_dependence_p (mem, x, /*writep=*/0);
1649 }
1650
1651 /* Output dependence: X is written after store in MEM takes place.  */
1652
1653 int
1654 output_dependence (mem, x)
1655      register rtx mem;
1656      register rtx x;
1657 {
1658   return write_dependence_p (mem, x, /*writep=*/1);
1659 }
1660
1661 /* Returns non-zero if X might refer to something which is not
1662    local to the function and is not constant.  */
1663
1664 static int
1665 nonlocal_reference_p (x)
1666      rtx x;
1667 {
1668   rtx base;
1669   register RTX_CODE code;
1670   int regno;
1671
1672   code = GET_CODE (x);
1673
1674   if (GET_RTX_CLASS (code) == 'i')
1675     {
1676       /* Constant functions can be constant if they don't use
1677          scratch memory used to mark function w/o side effects.  */
1678       if (code == CALL_INSN && CONST_CALL_P (x))
1679         {
1680           x = CALL_INSN_FUNCTION_USAGE (x);
1681           if (x == 0)
1682             return 0;
1683         }
1684       else
1685         x = PATTERN (x);
1686       code = GET_CODE (x);
1687     }
1688
1689   switch (code)
1690     {
1691     case SUBREG:
1692       if (GET_CODE (SUBREG_REG (x)) == REG)
1693         {
1694           /* Global registers are not local.  */
1695           if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER
1696               && global_regs[REGNO (SUBREG_REG (x)) + SUBREG_WORD (x)])
1697             return 1;
1698           return 0;
1699         }
1700       break;
1701
1702     case REG:
1703       regno = REGNO (x);
1704       /* Global registers are not local.  */
1705       if (regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
1706         return 1;
1707       return 0;
1708
1709     case SCRATCH:
1710     case PC:
1711     case CC0:
1712     case CONST_INT:
1713     case CONST_DOUBLE:
1714     case CONST:
1715     case LABEL_REF:
1716       return 0;
1717
1718     case SYMBOL_REF:
1719       /* Constants in the function's constants pool are constant.  */
1720       if (CONSTANT_POOL_ADDRESS_P (x))
1721         return 0;
1722       return 1;
1723
1724     case CALL:
1725       /* Recursion introduces no additional considerations.  */
1726       if (GET_CODE (XEXP (x, 0)) == MEM
1727           && GET_CODE (XEXP (XEXP (x, 0), 0)) == SYMBOL_REF
1728           && strcmp(XSTR (XEXP (XEXP (x, 0), 0), 0),
1729                     IDENTIFIER_POINTER (
1730                           DECL_ASSEMBLER_NAME (current_function_decl))) == 0)
1731         return 0;
1732       return 1;
1733
1734     case MEM:
1735       /* Be overly conservative and consider any volatile memory
1736          reference as not local.  */
1737       if (MEM_VOLATILE_P (x))
1738         return 1;
1739       base = find_base_term (XEXP (x, 0));
1740       if (base)
1741         {
1742           /* A Pmode ADDRESS could be a reference via the structure value
1743              address or static chain.  Such memory references are nonlocal.
1744
1745              Thus, we have to examine the contents of the ADDRESS to find
1746              out if this is a local reference or not.  */
1747           if (GET_CODE (base) == ADDRESS
1748               && GET_MODE (base) == Pmode
1749               && (XEXP (base, 0) == stack_pointer_rtx
1750                   || XEXP (base, 0) == arg_pointer_rtx
1751 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
1752                   || XEXP (base, 0) == hard_frame_pointer_rtx
1753 #endif
1754                   || XEXP (base, 0) == frame_pointer_rtx))
1755             return 0;
1756           /* Constants in the function's constant pool are constant.  */
1757           if (GET_CODE (base) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (base))
1758             return 0;
1759         }
1760       return 1;
1761
1762     case ASM_INPUT:
1763     case ASM_OPERANDS:
1764       return 1;
1765
1766     default:
1767       break;
1768     }
1769
1770   /* Recursively scan the operands of this expression.  */
1771
1772   {
1773     register const char *fmt = GET_RTX_FORMAT (code);
1774     register int i;
1775     
1776     for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1777       {
1778         if (fmt[i] == 'e' && XEXP (x, i))
1779           {
1780             if (nonlocal_reference_p (XEXP (x, i)))
1781               return 1;
1782           }
1783         else if (fmt[i] == 'E')
1784           {
1785             register int j;
1786             for (j = 0; j < XVECLEN (x, i); j++)
1787               if (nonlocal_reference_p (XVECEXP (x, i, j)))
1788                 return 1;
1789           }
1790       }
1791   }
1792
1793   return 0;
1794 }
1795
1796 /* Mark the function if it is constant.  */
1797
1798 void
1799 mark_constant_function ()
1800 {
1801   rtx insn;
1802
1803   if (TREE_PUBLIC (current_function_decl)
1804       || TREE_READONLY (current_function_decl)
1805       || TREE_THIS_VOLATILE (current_function_decl)
1806       || TYPE_MODE (TREE_TYPE (current_function_decl)) == VOIDmode)
1807     return;
1808
1809   /* Determine if this is a constant function.  */
1810
1811   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
1812     if (GET_RTX_CLASS (GET_CODE (insn)) == 'i'
1813         && nonlocal_reference_p (insn))
1814       return;
1815
1816   /* Mark the function.  */
1817
1818   TREE_READONLY (current_function_decl) = 1;
1819 }
1820
1821
1822 static HARD_REG_SET argument_registers;
1823
1824 void
1825 init_alias_once ()
1826 {
1827   register int i;
1828
1829 #ifndef OUTGOING_REGNO
1830 #define OUTGOING_REGNO(N) N
1831 #endif
1832   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1833     /* Check whether this register can hold an incoming pointer
1834        argument.  FUNCTION_ARG_REGNO_P tests outgoing register
1835        numbers, so translate if necessary due to register windows. */
1836     if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i))
1837         && HARD_REGNO_MODE_OK (i, Pmode))
1838       SET_HARD_REG_BIT (argument_registers, i);
1839
1840   alias_sets = splay_tree_new (splay_tree_compare_ints, 0, 0);
1841 }
1842
1843 /* Initialize the aliasing machinery.  Initialize the REG_KNOWN_VALUE
1844    array.  */
1845
1846 void
1847 init_alias_analysis ()
1848 {
1849   int maxreg = max_reg_num ();
1850   int changed, pass;
1851   register int i;
1852   register unsigned int ui;
1853   register rtx insn;
1854
1855   reg_known_value_size = maxreg;
1856
1857   reg_known_value 
1858     = (rtx *) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (rtx))
1859     - FIRST_PSEUDO_REGISTER;
1860   reg_known_equiv_p 
1861     = (char*) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (char))
1862     - FIRST_PSEUDO_REGISTER;
1863
1864   /* Overallocate reg_base_value to allow some growth during loop
1865      optimization.  Loop unrolling can create a large number of
1866      registers.  */
1867   reg_base_value_size = maxreg * 2;
1868   reg_base_value = (rtx *) xcalloc (reg_base_value_size, sizeof (rtx));
1869   if (ggc_p)
1870     ggc_add_rtx_root (reg_base_value, reg_base_value_size);
1871
1872   new_reg_base_value = (rtx *) xmalloc (reg_base_value_size * sizeof (rtx));
1873   reg_seen = (char *) xmalloc (reg_base_value_size);
1874   if (! reload_completed && flag_unroll_loops)
1875     {
1876       /* ??? Why are we realloc'ing if we're just going to zero it?  */
1877       alias_invariant = (rtx *)xrealloc (alias_invariant,
1878                                          reg_base_value_size * sizeof (rtx));
1879       bzero ((char *)alias_invariant, reg_base_value_size * sizeof (rtx));
1880     }
1881     
1882
1883   /* The basic idea is that each pass through this loop will use the
1884      "constant" information from the previous pass to propagate alias
1885      information through another level of assignments.
1886
1887      This could get expensive if the assignment chains are long.  Maybe
1888      we should throttle the number of iterations, possibly based on
1889      the optimization level or flag_expensive_optimizations.
1890
1891      We could propagate more information in the first pass by making use
1892      of REG_N_SETS to determine immediately that the alias information
1893      for a pseudo is "constant".
1894
1895      A program with an uninitialized variable can cause an infinite loop
1896      here.  Instead of doing a full dataflow analysis to detect such problems
1897      we just cap the number of iterations for the loop.
1898
1899      The state of the arrays for the set chain in question does not matter
1900      since the program has undefined behavior.  */
1901
1902   pass = 0;
1903   do
1904     {
1905       /* Assume nothing will change this iteration of the loop.  */
1906       changed = 0;
1907
1908       /* We want to assign the same IDs each iteration of this loop, so
1909          start counting from zero each iteration of the loop.  */
1910       unique_id = 0;
1911
1912       /* We're at the start of the funtion each iteration through the
1913          loop, so we're copying arguments.  */
1914       copying_arguments = 1;
1915
1916       /* Wipe the potential alias information clean for this pass.  */
1917       bzero ((char *) new_reg_base_value, reg_base_value_size * sizeof (rtx));
1918
1919       /* Wipe the reg_seen array clean.  */
1920       bzero ((char *) reg_seen, reg_base_value_size);
1921
1922       /* Mark all hard registers which may contain an address.
1923          The stack, frame and argument pointers may contain an address.
1924          An argument register which can hold a Pmode value may contain
1925          an address even if it is not in BASE_REGS.
1926
1927          The address expression is VOIDmode for an argument and
1928          Pmode for other registers.  */
1929
1930       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1931         if (TEST_HARD_REG_BIT (argument_registers, i))
1932           new_reg_base_value[i] = gen_rtx_ADDRESS (VOIDmode,
1933                                                    gen_rtx_REG (Pmode, i));
1934
1935       new_reg_base_value[STACK_POINTER_REGNUM]
1936         = gen_rtx_ADDRESS (Pmode, stack_pointer_rtx);
1937       new_reg_base_value[ARG_POINTER_REGNUM]
1938         = gen_rtx_ADDRESS (Pmode, arg_pointer_rtx);
1939       new_reg_base_value[FRAME_POINTER_REGNUM]
1940         = gen_rtx_ADDRESS (Pmode, frame_pointer_rtx);
1941 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
1942       new_reg_base_value[HARD_FRAME_POINTER_REGNUM]
1943         = gen_rtx_ADDRESS (Pmode, hard_frame_pointer_rtx);
1944 #endif
1945       if (struct_value_incoming_rtx
1946           && GET_CODE (struct_value_incoming_rtx) == REG)
1947         new_reg_base_value[REGNO (struct_value_incoming_rtx)]
1948           = gen_rtx_ADDRESS (Pmode, struct_value_incoming_rtx);
1949
1950       if (static_chain_rtx
1951           && GET_CODE (static_chain_rtx) == REG)
1952         new_reg_base_value[REGNO (static_chain_rtx)]
1953           = gen_rtx_ADDRESS (Pmode, static_chain_rtx);
1954
1955       /* Walk the insns adding values to the new_reg_base_value array.  */
1956       for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
1957         {
1958           if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
1959             {
1960               rtx note, set;
1961
1962 #if defined (HAVE_prologue) || defined (HAVE_epilogue)
1963               if (prologue_epilogue_contains (insn))
1964                 continue;
1965 #endif
1966
1967               /* If this insn has a noalias note, process it,  Otherwise,
1968                  scan for sets.  A simple set will have no side effects
1969                  which could change the base value of any other register. */
1970
1971               if (GET_CODE (PATTERN (insn)) == SET
1972                   && REG_NOTES (insn) != 0
1973                   && find_reg_note (insn, REG_NOALIAS, NULL_RTX))
1974                 record_set (SET_DEST (PATTERN (insn)), NULL_RTX, NULL);
1975               else
1976                 note_stores (PATTERN (insn), record_set, NULL);
1977
1978               set = single_set (insn);
1979
1980               if (set != 0
1981                   && GET_CODE (SET_DEST (set)) == REG
1982                   && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER
1983                   && REG_NOTES (insn) != 0
1984                   && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
1985                        && REG_N_SETS (REGNO (SET_DEST (set))) == 1)
1986                       || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
1987                   && GET_CODE (XEXP (note, 0)) != EXPR_LIST
1988                   && ! reg_overlap_mentioned_p (SET_DEST (set), XEXP (note, 0)))
1989                 {
1990                   int regno = REGNO (SET_DEST (set));
1991                   reg_known_value[regno] = XEXP (note, 0);
1992                   reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV;
1993                 }
1994             }
1995           else if (GET_CODE (insn) == NOTE
1996                    && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
1997             copying_arguments = 0;
1998         }
1999
2000       /* Now propagate values from new_reg_base_value to reg_base_value.  */
2001       for (ui = 0; ui < reg_base_value_size; ui++)
2002         {
2003           if (new_reg_base_value[ui]
2004               && new_reg_base_value[ui] != reg_base_value[ui]
2005               && ! rtx_equal_p (new_reg_base_value[ui], reg_base_value[ui]))
2006             {
2007               reg_base_value[ui] = new_reg_base_value[ui];
2008               changed = 1;
2009             }
2010         }
2011     }
2012   while (changed && ++pass < MAX_ALIAS_LOOP_PASSES);
2013
2014   /* Fill in the remaining entries.  */
2015   for (i = FIRST_PSEUDO_REGISTER; i < maxreg; i++)
2016     if (reg_known_value[i] == 0)
2017       reg_known_value[i] = regno_reg_rtx[i];
2018
2019   /* Simplify the reg_base_value array so that no register refers to
2020      another register, except to special registers indirectly through
2021      ADDRESS expressions.
2022
2023      In theory this loop can take as long as O(registers^2), but unless
2024      there are very long dependency chains it will run in close to linear
2025      time.
2026
2027      This loop may not be needed any longer now that the main loop does
2028      a better job at propagating alias information.  */
2029   pass = 0;
2030   do
2031     {
2032       changed = 0;
2033       pass++;
2034       for (ui = 0; ui < reg_base_value_size; ui++)
2035         {
2036           rtx base = reg_base_value[ui];
2037           if (base && GET_CODE (base) == REG)
2038             {
2039               unsigned int base_regno = REGNO (base);
2040               if (base_regno == ui)             /* register set from itself */
2041                 reg_base_value[ui] = 0;
2042               else
2043                 reg_base_value[ui] = reg_base_value[base_regno];
2044               changed = 1;
2045             }
2046         }
2047     }
2048   while (changed && pass < MAX_ALIAS_LOOP_PASSES);
2049
2050   /* Clean up.  */
2051   free (new_reg_base_value);
2052   new_reg_base_value = 0;
2053   free (reg_seen);
2054   reg_seen = 0;
2055 }
2056
2057 void
2058 end_alias_analysis ()
2059 {
2060   free (reg_known_value + FIRST_PSEUDO_REGISTER);
2061   reg_known_value = 0;
2062   reg_known_value_size = 0;
2063   free (reg_known_equiv_p + FIRST_PSEUDO_REGISTER);
2064   reg_known_equiv_p = 0;
2065   if (reg_base_value)
2066     {
2067       if (ggc_p)
2068         ggc_del_root (reg_base_value);
2069       free (reg_base_value);
2070       reg_base_value = 0;
2071     }
2072   reg_base_value_size = 0;
2073   if (alias_invariant)
2074     {
2075       free (alias_invariant);
2076       alias_invariant = 0;
2077     }
2078 }