OSDN Git Service

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