OSDN Git Service

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