OSDN Git Service

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