OSDN Git Service

* splay-tree.c (splay_tree_successor): Fix comments.
[pf3gnuchains/gcc-fork.git] / gcc / alias.c
1 /* Alias analysis for GNU C
2    Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
3    Contributed by John Carr (jfc@mit.edu).
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING.  If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "rtl.h"
25 #include "tree.h"
26 #include "tm_p.h"
27 #include "function.h"
28 #include "expr.h"
29 #include "regs.h"
30 #include "hard-reg-set.h"
31 #include "basic-block.h"
32 #include "flags.h"
33 #include "output.h"
34 #include "toplev.h"
35 #include "cselib.h"
36 #include "splay-tree.h"
37 #include "ggc.h"
38 #include "langhooks.h"
39 #include "target.h"
40
41 /* The alias sets assigned to MEMs assist the back-end in determining
42    which MEMs can alias which other MEMs.  In general, two MEMs in
43    different alias sets cannot alias each other, with one important
44    exception.  Consider something like:
45
46      struct S {int i; double d; };
47
48    a store to an `S' can alias something of either type `int' or type
49    `double'.  (However, a store to an `int' cannot alias a `double'
50    and vice versa.)  We indicate this via a tree structure that looks
51    like:
52            struct S
53             /   \
54            /     \
55          |/_     _\|
56          int    double
57
58    (The arrows are directed and point downwards.)
59     In this situation we say the alias set for `struct S' is the
60    `superset' and that those for `int' and `double' are `subsets'.
61
62    To see whether two alias sets can point to the same memory, we must
63    see if either alias set is a subset of the other. We need not trace
64    past immediate descendents, however, since we propagate all
65    grandchildren up one level.
66
67    Alias set zero is implicitly a superset of all other alias sets.
68    However, this is no actual entry for alias set zero.  It is an
69    error to attempt to explicitly construct a subset of zero.  */
70
71 typedef struct alias_set_entry
72 {
73   /* The alias set number, as stored in MEM_ALIAS_SET.  */
74   HOST_WIDE_INT alias_set;
75
76   /* The children of the alias set.  These are not just the immediate
77      children, but, in fact, all descendents.  So, if we have:
78
79        struct T { struct S s; float f; }
80
81      continuing our example above, the children here will be all of
82      `int', `double', `float', and `struct S'.  */
83   splay_tree children;
84
85   /* Nonzero if would have a child of zero: this effectively makes this
86      alias set the same as alias set zero.  */
87   int has_zero_child;
88 } *alias_set_entry;
89
90 static int rtx_equal_for_memref_p       PARAMS ((rtx, rtx));
91 static rtx find_symbolic_term           PARAMS ((rtx));
92 rtx get_addr                            PARAMS ((rtx));
93 static int memrefs_conflict_p           PARAMS ((int, rtx, int, rtx,
94                                                  HOST_WIDE_INT));
95 static void record_set                  PARAMS ((rtx, rtx, void *));
96 static rtx find_base_term               PARAMS ((rtx));
97 static int base_alias_check             PARAMS ((rtx, rtx, enum machine_mode,
98                                                  enum machine_mode));
99 static rtx find_base_value              PARAMS ((rtx));
100 static int mems_in_disjoint_alias_sets_p PARAMS ((rtx, rtx));
101 static int insert_subset_children       PARAMS ((splay_tree_node, void*));
102 static tree find_base_decl              PARAMS ((tree));
103 static alias_set_entry get_alias_set_entry PARAMS ((HOST_WIDE_INT));
104 static rtx fixed_scalar_and_varying_struct_p PARAMS ((rtx, rtx, rtx, rtx,
105                                                       int (*) (rtx, int)));
106 static int aliases_everything_p         PARAMS ((rtx));
107 static bool nonoverlapping_component_refs_p PARAMS ((tree, tree));
108 static tree decl_for_component_ref      PARAMS ((tree));
109 static rtx adjust_offset_for_component_ref PARAMS ((tree, rtx));
110 static int nonoverlapping_memrefs_p     PARAMS ((rtx, rtx));
111 static int write_dependence_p           PARAMS ((rtx, rtx, int));
112
113 static int nonlocal_mentioned_p_1       PARAMS ((rtx *, void *));
114 static int nonlocal_mentioned_p         PARAMS ((rtx));
115 static int nonlocal_referenced_p_1      PARAMS ((rtx *, void *));
116 static int nonlocal_referenced_p        PARAMS ((rtx));
117 static int nonlocal_set_p_1             PARAMS ((rtx *, void *));
118 static int nonlocal_set_p               PARAMS ((rtx));
119
120 /* Set up all info needed to perform alias analysis on memory references.  */
121
122 /* Returns the size in bytes of the mode of X.  */
123 #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X)))
124
125 /* Returns nonzero if MEM1 and MEM2 do not alias because they are in
126    different alias sets.  We ignore alias sets in functions making use
127    of variable arguments because the va_arg macros on some systems are
128    not legal ANSI C.  */
129 #define DIFFERENT_ALIAS_SETS_P(MEM1, MEM2)                      \
130   mems_in_disjoint_alias_sets_p (MEM1, MEM2)
131
132 /* Cap the number of passes we make over the insns propagating alias
133    information through set chains.   10 is a completely arbitrary choice.  */
134 #define MAX_ALIAS_LOOP_PASSES 10
135
136 /* reg_base_value[N] gives an address to which register N is related.
137    If all sets after the first add or subtract to the current value
138    or otherwise modify it so it does not point to a different top level
139    object, reg_base_value[N] is equal to the address part of the source
140    of the first set.
141
142    A base address can be an ADDRESS, SYMBOL_REF, or LABEL_REF.  ADDRESS
143    expressions represent certain special values: function arguments and
144    the stack, frame, and argument pointers.
145
146    The contents of an ADDRESS is not normally used, the mode of the
147    ADDRESS determines whether the ADDRESS is a function argument or some
148    other special value.  Pointer equality, not rtx_equal_p, determines whether
149    two ADDRESS expressions refer to the same base address.
150
151    The only use of the contents of an ADDRESS is for determining if the
152    current function performs nonlocal memory memory references for the
153    purposes of marking the function as a constant function.  */
154
155 static GTY((length ("reg_base_value_size"))) rtx *reg_base_value;
156 static rtx *new_reg_base_value;
157 static unsigned int reg_base_value_size; /* size of reg_base_value array */
158
159 /* Static hunks of RTL used by the aliasing code; these are initialized
160    once per function to avoid unnecessary RTL allocations.  */
161 static GTY (()) rtx static_reg_base_value[FIRST_PSEUDO_REGISTER];
162
163 #define REG_BASE_VALUE(X) \
164   (REGNO (X) < reg_base_value_size \
165    ? reg_base_value[REGNO (X)] : 0)
166
167 /* Vector of known invariant relationships between registers.  Set in
168    loop unrolling.  Indexed by register number, if nonzero the value
169    is an expression describing this register in terms of another.
170
171    The length of this array is REG_BASE_VALUE_SIZE.
172
173    Because this array contains only pseudo registers it has no effect
174    after reload.  */
175 static rtx *alias_invariant;
176
177 /* Vector indexed by N giving the initial (unchanging) value known for
178    pseudo-register N.  This array is initialized in
179    init_alias_analysis, and does not change until end_alias_analysis
180    is called.  */
181 rtx *reg_known_value;
182
183 /* Indicates number of valid entries in reg_known_value.  */
184 static unsigned int reg_known_value_size;
185
186 /* Vector recording for each reg_known_value whether it is due to a
187    REG_EQUIV note.  Future passes (viz., reload) may replace the
188    pseudo with the equivalent expression and so we account for the
189    dependences that would be introduced if that happens.
190
191    The REG_EQUIV notes created in assign_parms may mention the arg
192    pointer, and there are explicit insns in the RTL that modify the
193    arg pointer.  Thus we must ensure that such insns don't get
194    scheduled across each other because that would invalidate the
195    REG_EQUIV notes.  One could argue that the REG_EQUIV notes are
196    wrong, but solving the problem in the scheduler will likely give
197    better code, so we do it here.  */
198 char *reg_known_equiv_p;
199
200 /* True when scanning insns from the start of the rtl to the
201    NOTE_INSN_FUNCTION_BEG note.  */
202 static int copying_arguments;
203
204 /* The splay-tree used to store the various alias set entries.  */
205 static splay_tree alias_sets;
206 \f
207 /* Returns a pointer to the alias set entry for ALIAS_SET, if there is
208    such an entry, or NULL otherwise.  */
209
210 static alias_set_entry
211 get_alias_set_entry (alias_set)
212      HOST_WIDE_INT alias_set;
213 {
214   splay_tree_node sn
215     = splay_tree_lookup (alias_sets, (splay_tree_key) alias_set);
216
217   return sn != 0 ? ((alias_set_entry) sn->value) : 0;
218 }
219
220 /* Returns nonzero if the alias sets for MEM1 and MEM2 are such that
221    the two MEMs cannot alias each other.  */
222
223 static int
224 mems_in_disjoint_alias_sets_p (mem1, mem2)
225      rtx mem1;
226      rtx mem2;
227 {
228 #ifdef ENABLE_CHECKING
229 /* Perform a basic sanity check.  Namely, that there are no alias sets
230    if we're not using strict aliasing.  This helps to catch bugs
231    whereby someone uses PUT_CODE, but doesn't clear MEM_ALIAS_SET, or
232    where a MEM is allocated in some way other than by the use of
233    gen_rtx_MEM, and the MEM_ALIAS_SET is not cleared.  If we begin to
234    use alias sets to indicate that spilled registers cannot alias each
235    other, we might need to remove this check.  */
236   if (! flag_strict_aliasing
237       && (MEM_ALIAS_SET (mem1) != 0 || MEM_ALIAS_SET (mem2) != 0))
238     abort ();
239 #endif
240
241   return ! alias_sets_conflict_p (MEM_ALIAS_SET (mem1), MEM_ALIAS_SET (mem2));
242 }
243
244 /* Insert the NODE into the splay tree given by DATA.  Used by
245    record_alias_subset via splay_tree_foreach.  */
246
247 static int
248 insert_subset_children (node, data)
249      splay_tree_node node;
250      void *data;
251 {
252   splay_tree_insert ((splay_tree) data, node->key, node->value);
253
254   return 0;
255 }
256
257 /* Return 1 if the two specified alias sets may conflict.  */
258
259 int
260 alias_sets_conflict_p (set1, set2)
261      HOST_WIDE_INT set1, set2;
262 {
263   alias_set_entry ase;
264
265   /* If have no alias set information for one of the operands, we have
266      to assume it can alias anything.  */
267   if (set1 == 0 || set2 == 0
268       /* If the two alias sets are the same, they may alias.  */
269       || set1 == set2)
270     return 1;
271
272   /* See if the first alias set is a subset of the second.  */
273   ase = get_alias_set_entry (set1);
274   if (ase != 0
275       && (ase->has_zero_child
276           || splay_tree_lookup (ase->children,
277                                 (splay_tree_key) set2)))
278     return 1;
279
280   /* Now do the same, but with the alias sets reversed.  */
281   ase = get_alias_set_entry (set2);
282   if (ase != 0
283       && (ase->has_zero_child
284           || splay_tree_lookup (ase->children,
285                                 (splay_tree_key) set1)))
286     return 1;
287
288   /* The two alias sets are distinct and neither one is the
289      child of the other.  Therefore, they cannot alias.  */
290   return 0;
291 }
292 \f
293 /* Return 1 if TYPE is a RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE and has
294    has any readonly fields.  If any of the fields have types that
295    contain readonly fields, return true as well.  */
296
297 int
298 readonly_fields_p (type)
299      tree type;
300 {
301   tree field;
302
303   if (TREE_CODE (type) != RECORD_TYPE && TREE_CODE (type) != UNION_TYPE
304       && TREE_CODE (type) != QUAL_UNION_TYPE)
305     return 0;
306
307   for (field = TYPE_FIELDS (type); field != 0; field = TREE_CHAIN (field))
308     if (TREE_CODE (field) == FIELD_DECL
309         && (TREE_READONLY (field)
310             || readonly_fields_p (TREE_TYPE (field))))
311       return 1;
312
313   return 0;
314 }
315 \f
316 /* Return 1 if any MEM object of type T1 will always conflict (using the
317    dependency routines in this file) with any MEM object of type T2.
318    This is used when allocating temporary storage.  If T1 and/or T2 are
319    NULL_TREE, it means we know nothing about the storage.  */
320
321 int
322 objects_must_conflict_p (t1, t2)
323      tree t1, t2;
324 {
325   /* If neither has a type specified, we don't know if they'll conflict
326      because we may be using them to store objects of various types, for
327      example the argument and local variables areas of inlined functions.  */
328   if (t1 == 0 && t2 == 0)
329     return 0;
330
331   /* If one or the other has readonly fields or is readonly,
332      then they may not conflict.  */
333   if ((t1 != 0 && readonly_fields_p (t1))
334       || (t2 != 0 && readonly_fields_p (t2))
335       || (t1 != 0 && TYPE_READONLY (t1))
336       || (t2 != 0 && TYPE_READONLY (t2)))
337     return 0;
338
339   /* If they are the same type, they must conflict.  */
340   if (t1 == t2
341       /* Likewise if both are volatile.  */
342       || (t1 != 0 && TYPE_VOLATILE (t1) && t2 != 0 && TYPE_VOLATILE (t2)))
343     return 1;
344
345   /* If one is aggregate and the other is scalar then they may not
346      conflict.  */
347   if ((t1 != 0 && AGGREGATE_TYPE_P (t1))
348       != (t2 != 0 && AGGREGATE_TYPE_P (t2)))
349     return 0;
350
351   /* Otherwise they conflict only if the alias sets conflict.  */
352   return alias_sets_conflict_p (t1 ? get_alias_set (t1) : 0,
353                                 t2 ? get_alias_set (t2) : 0);
354 }
355 \f
356 /* T is an expression with pointer type.  Find the DECL on which this
357    expression is based.  (For example, in `a[i]' this would be `a'.)
358    If there is no such DECL, or a unique decl cannot be determined,
359    NULL_TREE is returned.  */
360
361 static tree
362 find_base_decl (t)
363      tree t;
364 {
365   tree d0, d1, d2;
366
367   if (t == 0 || t == error_mark_node || ! POINTER_TYPE_P (TREE_TYPE (t)))
368     return 0;
369
370   /* If this is a declaration, return it.  */
371   if (TREE_CODE_CLASS (TREE_CODE (t)) == 'd')
372     return t;
373
374   /* Handle general expressions.  It would be nice to deal with
375      COMPONENT_REFs here.  If we could tell that `a' and `b' were the
376      same, then `a->f' and `b->f' are also the same.  */
377   switch (TREE_CODE_CLASS (TREE_CODE (t)))
378     {
379     case '1':
380       return find_base_decl (TREE_OPERAND (t, 0));
381
382     case '2':
383       /* Return 0 if found in neither or both are the same.  */
384       d0 = find_base_decl (TREE_OPERAND (t, 0));
385       d1 = find_base_decl (TREE_OPERAND (t, 1));
386       if (d0 == d1)
387         return d0;
388       else if (d0 == 0)
389         return d1;
390       else if (d1 == 0)
391         return d0;
392       else
393         return 0;
394
395     case '3':
396       d0 = find_base_decl (TREE_OPERAND (t, 0));
397       d1 = find_base_decl (TREE_OPERAND (t, 1));
398       d2 = find_base_decl (TREE_OPERAND (t, 2));
399
400       /* Set any nonzero values from the last, then from the first.  */
401       if (d1 == 0) d1 = d2;
402       if (d0 == 0) d0 = d1;
403       if (d1 == 0) d1 = d0;
404       if (d2 == 0) d2 = d1;
405
406       /* At this point all are nonzero or all are zero.  If all three are the
407          same, return it.  Otherwise, return zero.  */
408       return (d0 == d1 && d1 == d2) ? d0 : 0;
409
410     default:
411       return 0;
412     }
413 }
414
415 /* Return 1 if all the nested component references handled by
416    get_inner_reference in T are such that we can address the object in T.  */
417
418 int
419 can_address_p (t)
420      tree t;
421 {
422   /* If we're at the end, it is vacuously addressable.  */
423   if (! handled_component_p (t))
424     return 1;
425
426   /* Bitfields are never addressable.  */
427   else if (TREE_CODE (t) == BIT_FIELD_REF)
428     return 0;
429
430   /* Fields are addressable unless they are marked as nonaddressable or
431      the containing type has alias set 0.  */
432   else if (TREE_CODE (t) == COMPONENT_REF
433            && ! DECL_NONADDRESSABLE_P (TREE_OPERAND (t, 1))
434            && get_alias_set (TREE_TYPE (TREE_OPERAND (t, 0))) != 0
435            && can_address_p (TREE_OPERAND (t, 0)))
436     return 1;
437
438   /* Likewise for arrays.  */
439   else if ((TREE_CODE (t) == ARRAY_REF || TREE_CODE (t) == ARRAY_RANGE_REF)
440            && ! TYPE_NONALIASED_COMPONENT (TREE_TYPE (TREE_OPERAND (t, 0)))
441            && get_alias_set (TREE_TYPE (TREE_OPERAND (t, 0))) != 0
442            && can_address_p (TREE_OPERAND (t, 0)))
443     return 1;
444
445   return 0;
446 }
447
448 /* Return the alias set for T, which may be either a type or an
449    expression.  Call language-specific routine for help, if needed.  */
450
451 HOST_WIDE_INT
452 get_alias_set (t)
453      tree t;
454 {
455   HOST_WIDE_INT set;
456
457   /* If we're not doing any alias analysis, just assume everything
458      aliases everything else.  Also return 0 if this or its type is
459      an error.  */
460   if (! flag_strict_aliasing || t == error_mark_node
461       || (! TYPE_P (t)
462           && (TREE_TYPE (t) == 0 || TREE_TYPE (t) == error_mark_node)))
463     return 0;
464
465   /* We can be passed either an expression or a type.  This and the
466      language-specific routine may make mutually-recursive calls to each other
467      to figure out what to do.  At each juncture, we see if this is a tree
468      that the language may need to handle specially.  First handle things that
469      aren't types.  */
470   if (! TYPE_P (t))
471     {
472       tree inner = t;
473       tree placeholder_ptr = 0;
474
475       /* Remove any nops, then give the language a chance to do
476          something with this tree before we look at it.  */
477       STRIP_NOPS (t);
478       set = (*lang_hooks.get_alias_set) (t);
479       if (set != -1)
480         return set;
481
482       /* First see if the actual object referenced is an INDIRECT_REF from a
483          restrict-qualified pointer or a "void *".  Replace
484          PLACEHOLDER_EXPRs.  */
485       while (TREE_CODE (inner) == PLACEHOLDER_EXPR
486              || handled_component_p (inner))
487         {
488           if (TREE_CODE (inner) == PLACEHOLDER_EXPR)
489             inner = find_placeholder (inner, &placeholder_ptr);
490           else
491             inner = TREE_OPERAND (inner, 0);
492
493           STRIP_NOPS (inner);
494         }
495
496       /* Check for accesses through restrict-qualified pointers.  */
497       if (TREE_CODE (inner) == INDIRECT_REF)
498         {
499           tree decl = find_base_decl (TREE_OPERAND (inner, 0));
500
501           if (decl && DECL_POINTER_ALIAS_SET_KNOWN_P (decl))
502             {
503               /* If we haven't computed the actual alias set, do it now.  */
504               if (DECL_POINTER_ALIAS_SET (decl) == -2)
505                 {
506                   /* No two restricted pointers can point at the same thing.
507                      However, a restricted pointer can point at the same thing
508                      as an unrestricted pointer, if that unrestricted pointer
509                      is based on the restricted pointer.  So, we make the
510                      alias set for the restricted pointer a subset of the
511                      alias set for the type pointed to by the type of the
512                      decl.  */
513                   HOST_WIDE_INT pointed_to_alias_set
514                     = get_alias_set (TREE_TYPE (TREE_TYPE (decl)));
515
516                   if (pointed_to_alias_set == 0)
517                     /* It's not legal to make a subset of alias set zero.  */
518                     ;
519                   else
520                     {
521                       DECL_POINTER_ALIAS_SET (decl) = new_alias_set ();
522                       record_alias_subset (pointed_to_alias_set,
523                                            DECL_POINTER_ALIAS_SET (decl));
524                     }
525                 }
526
527               /* We use the alias set indicated in the declaration.  */
528               return DECL_POINTER_ALIAS_SET (decl);
529             }
530
531           /* If we have an INDIRECT_REF via a void pointer, we don't
532              know anything about what that might alias.  */
533           else if (TREE_CODE (TREE_TYPE (inner)) == VOID_TYPE)
534             return 0;
535         }
536
537       /* Otherwise, pick up the outermost object that we could have a pointer
538          to, processing conversion and PLACEHOLDER_EXPR as above.  */
539       placeholder_ptr = 0;
540       while (TREE_CODE (t) == PLACEHOLDER_EXPR
541              || (handled_component_p (t) && ! can_address_p (t)))
542         {
543           if (TREE_CODE (t) == PLACEHOLDER_EXPR)
544             t = find_placeholder (t, &placeholder_ptr);
545           else
546             t = TREE_OPERAND (t, 0);
547
548           STRIP_NOPS (t);
549         }
550
551       /* If we've already determined the alias set for a decl, just return
552          it.  This is necessary for C++ anonymous unions, whose component
553          variables don't look like union members (boo!).  */
554       if (TREE_CODE (t) == VAR_DECL
555           && DECL_RTL_SET_P (t) && GET_CODE (DECL_RTL (t)) == MEM)
556         return MEM_ALIAS_SET (DECL_RTL (t));
557
558       /* Now all we care about is the type.  */
559       t = TREE_TYPE (t);
560     }
561
562   /* Variant qualifiers don't affect the alias set, so get the main
563      variant. If this is a type with a known alias set, return it.  */
564   t = TYPE_MAIN_VARIANT (t);
565   if (TYPE_ALIAS_SET_KNOWN_P (t))
566     return TYPE_ALIAS_SET (t);
567
568   /* See if the language has special handling for this type.  */
569   set = (*lang_hooks.get_alias_set) (t);
570   if (set != -1)
571     return set;
572
573   /* There are no objects of FUNCTION_TYPE, so there's no point in
574      using up an alias set for them.  (There are, of course, pointers
575      and references to functions, but that's different.)  */
576   else if (TREE_CODE (t) == FUNCTION_TYPE)
577     set = 0;
578
579   /* Unless the language specifies otherwise, let vector types alias
580      their components.  This avoids some nasty type punning issues in
581      normal usage.  And indeed lets vectors be treated more like an
582      array slice.  */
583   else if (TREE_CODE (t) == VECTOR_TYPE)
584     set = get_alias_set (TREE_TYPE (t));
585
586   else
587     /* Otherwise make a new alias set for this type.  */
588     set = new_alias_set ();
589
590   TYPE_ALIAS_SET (t) = set;
591
592   /* If this is an aggregate type, we must record any component aliasing
593      information.  */
594   if (AGGREGATE_TYPE_P (t) || TREE_CODE (t) == COMPLEX_TYPE)
595     record_component_aliases (t);
596
597   return set;
598 }
599
600 /* Return a brand-new alias set.  */
601
602 HOST_WIDE_INT
603 new_alias_set ()
604 {
605   static HOST_WIDE_INT last_alias_set;
606
607   if (flag_strict_aliasing)
608     return ++last_alias_set;
609   else
610     return 0;
611 }
612
613 /* Indicate that things in SUBSET can alias things in SUPERSET, but
614    not vice versa.  For example, in C, a store to an `int' can alias a
615    structure containing an `int', but not vice versa.  Here, the
616    structure would be the SUPERSET and `int' the SUBSET.  This
617    function should be called only once per SUPERSET/SUBSET pair.
618
619    It is illegal for SUPERSET to be zero; everything is implicitly a
620    subset of alias set zero.  */
621
622 void
623 record_alias_subset (superset, subset)
624      HOST_WIDE_INT superset;
625      HOST_WIDE_INT subset;
626 {
627   alias_set_entry superset_entry;
628   alias_set_entry subset_entry;
629
630   /* It is possible in complex type situations for both sets to be the same,
631      in which case we can ignore this operation.  */
632   if (superset == subset)
633     return;
634
635   if (superset == 0)
636     abort ();
637
638   superset_entry = get_alias_set_entry (superset);
639   if (superset_entry == 0)
640     {
641       /* Create an entry for the SUPERSET, so that we have a place to
642          attach the SUBSET.  */
643       superset_entry
644         = (alias_set_entry) xmalloc (sizeof (struct alias_set_entry));
645       superset_entry->alias_set = superset;
646       superset_entry->children
647         = splay_tree_new (splay_tree_compare_ints, 0, 0);
648       superset_entry->has_zero_child = 0;
649       splay_tree_insert (alias_sets, (splay_tree_key) superset,
650                          (splay_tree_value) superset_entry);
651     }
652
653   if (subset == 0)
654     superset_entry->has_zero_child = 1;
655   else
656     {
657       subset_entry = get_alias_set_entry (subset);
658       /* If there is an entry for the subset, enter all of its children
659          (if they are not already present) as children of the SUPERSET.  */
660       if (subset_entry)
661         {
662           if (subset_entry->has_zero_child)
663             superset_entry->has_zero_child = 1;
664
665           splay_tree_foreach (subset_entry->children, insert_subset_children,
666                               superset_entry->children);
667         }
668
669       /* Enter the SUBSET itself as a child of the SUPERSET.  */
670       splay_tree_insert (superset_entry->children,
671                          (splay_tree_key) subset, 0);
672     }
673 }
674
675 /* Record that component types of TYPE, if any, are part of that type for
676    aliasing purposes.  For record types, we only record component types
677    for fields that are marked addressable.  For array types, we always
678    record the component types, so the front end should not call this
679    function if the individual component aren't addressable.  */
680
681 void
682 record_component_aliases (type)
683      tree type;
684 {
685   HOST_WIDE_INT superset = get_alias_set (type);
686   tree field;
687
688   if (superset == 0)
689     return;
690
691   switch (TREE_CODE (type))
692     {
693     case ARRAY_TYPE:
694       if (! TYPE_NONALIASED_COMPONENT (type))
695         record_alias_subset (superset, get_alias_set (TREE_TYPE (type)));
696       break;
697
698     case RECORD_TYPE:
699     case UNION_TYPE:
700     case QUAL_UNION_TYPE:
701       /* Recursively record aliases for the base classes, if there are any */
702       if (TYPE_BINFO (type) != NULL && TYPE_BINFO_BASETYPES (type) != NULL)
703         {
704           int i;
705           for (i = 0; i < TREE_VEC_LENGTH (TYPE_BINFO_BASETYPES (type)); i++)
706             {
707               tree binfo = TREE_VEC_ELT (TYPE_BINFO_BASETYPES (type), i);
708               record_alias_subset (superset,
709                                    get_alias_set (BINFO_TYPE (binfo)));
710             }
711         }
712       for (field = TYPE_FIELDS (type); field != 0; field = TREE_CHAIN (field))
713         if (TREE_CODE (field) == FIELD_DECL && ! DECL_NONADDRESSABLE_P (field))
714           record_alias_subset (superset, get_alias_set (TREE_TYPE (field)));
715       break;
716
717     case COMPLEX_TYPE:
718       record_alias_subset (superset, get_alias_set (TREE_TYPE (type)));
719       break;
720
721     default:
722       break;
723     }
724 }
725
726 /* Allocate an alias set for use in storing and reading from the varargs
727    spill area.  */
728
729 HOST_WIDE_INT
730 get_varargs_alias_set ()
731 {
732   static HOST_WIDE_INT set = -1;
733
734   if (set == -1)
735     set = new_alias_set ();
736
737   return set;
738 }
739
740 /* Likewise, but used for the fixed portions of the frame, e.g., register
741    save areas.  */
742
743 HOST_WIDE_INT
744 get_frame_alias_set ()
745 {
746   static HOST_WIDE_INT set = -1;
747
748   if (set == -1)
749     set = new_alias_set ();
750
751   return set;
752 }
753
754 /* Inside SRC, the source of a SET, find a base address.  */
755
756 static rtx
757 find_base_value (src)
758      rtx src;
759 {
760   unsigned int regno;
761
762   switch (GET_CODE (src))
763     {
764     case SYMBOL_REF:
765     case LABEL_REF:
766       return src;
767
768     case REG:
769       regno = REGNO (src);
770       /* At the start of a function, argument registers have known base
771          values which may be lost later.  Returning an ADDRESS
772          expression here allows optimization based on argument values
773          even when the argument registers are used for other purposes.  */
774       if (regno < FIRST_PSEUDO_REGISTER && copying_arguments)
775         return new_reg_base_value[regno];
776
777       /* If a pseudo has a known base value, return it.  Do not do this
778          for non-fixed hard regs since it can result in a circular
779          dependency chain for registers which have values at function entry.
780
781          The test above is not sufficient because the scheduler may move
782          a copy out of an arg reg past the NOTE_INSN_FUNCTION_BEGIN.  */
783       if ((regno >= FIRST_PSEUDO_REGISTER || fixed_regs[regno])
784           && regno < reg_base_value_size
785           && reg_base_value[regno])
786         return reg_base_value[regno];
787
788       return src;
789
790     case MEM:
791       /* Check for an argument passed in memory.  Only record in the
792          copying-arguments block; it is too hard to track changes
793          otherwise.  */
794       if (copying_arguments
795           && (XEXP (src, 0) == arg_pointer_rtx
796               || (GET_CODE (XEXP (src, 0)) == PLUS
797                   && XEXP (XEXP (src, 0), 0) == arg_pointer_rtx)))
798         return gen_rtx_ADDRESS (VOIDmode, src);
799       return 0;
800
801     case CONST:
802       src = XEXP (src, 0);
803       if (GET_CODE (src) != PLUS && GET_CODE (src) != MINUS)
804         break;
805
806       /* ... fall through ...  */
807
808     case PLUS:
809     case MINUS:
810       {
811         rtx temp, src_0 = XEXP (src, 0), src_1 = XEXP (src, 1);
812
813         /* If either operand is a REG that is a known pointer, then it
814            is the base.  */
815         if (REG_P (src_0) && REG_POINTER (src_0))
816           return find_base_value (src_0);
817         if (REG_P (src_1) && REG_POINTER (src_1))
818           return find_base_value (src_1);
819
820         /* If either operand is a REG, then see if we already have
821            a known value for it.  */
822         if (REG_P (src_0))
823           {
824             temp = find_base_value (src_0);
825             if (temp != 0)
826               src_0 = temp;
827           }
828
829         if (REG_P (src_1))
830           {
831             temp = find_base_value (src_1);
832             if (temp!= 0)
833               src_1 = temp;
834           }
835
836         /* If either base is named object or a special address
837            (like an argument or stack reference), then use it for the
838            base term.  */
839         if (src_0 != 0
840             && (GET_CODE (src_0) == SYMBOL_REF
841                 || GET_CODE (src_0) == LABEL_REF
842                 || (GET_CODE (src_0) == ADDRESS
843                     && GET_MODE (src_0) != VOIDmode)))
844           return src_0;
845
846         if (src_1 != 0
847             && (GET_CODE (src_1) == SYMBOL_REF
848                 || GET_CODE (src_1) == LABEL_REF
849                 || (GET_CODE (src_1) == ADDRESS
850                     && GET_MODE (src_1) != VOIDmode)))
851           return src_1;
852
853         /* Guess which operand is the base address:
854            If either operand is a symbol, then it is the base.  If
855            either operand is a CONST_INT, then the other is the base.  */
856         if (GET_CODE (src_1) == CONST_INT || CONSTANT_P (src_0))
857           return find_base_value (src_0);
858         else if (GET_CODE (src_0) == CONST_INT || CONSTANT_P (src_1))
859           return find_base_value (src_1);
860
861         return 0;
862       }
863
864     case LO_SUM:
865       /* The standard form is (lo_sum reg sym) so look only at the
866          second operand.  */
867       return find_base_value (XEXP (src, 1));
868
869     case AND:
870       /* If the second operand is constant set the base
871          address to the first operand.  */
872       if (GET_CODE (XEXP (src, 1)) == CONST_INT && INTVAL (XEXP (src, 1)) != 0)
873         return find_base_value (XEXP (src, 0));
874       return 0;
875
876     case TRUNCATE:
877       if (GET_MODE_SIZE (GET_MODE (src)) < GET_MODE_SIZE (Pmode))
878         break;
879       /* Fall through.  */
880     case HIGH:
881     case PRE_INC:
882     case PRE_DEC:
883     case POST_INC:
884     case POST_DEC:
885     case PRE_MODIFY:
886     case POST_MODIFY:
887       return find_base_value (XEXP (src, 0));
888
889     case ZERO_EXTEND:
890     case SIGN_EXTEND:   /* used for NT/Alpha pointers */
891       {
892         rtx temp = find_base_value (XEXP (src, 0));
893
894 #ifdef POINTERS_EXTEND_UNSIGNED
895         if (temp != 0 && CONSTANT_P (temp) && GET_MODE (temp) != Pmode)
896           temp = convert_memory_address (Pmode, temp);
897 #endif
898
899         return temp;
900       }
901
902     default:
903       break;
904     }
905
906   return 0;
907 }
908
909 /* Called from init_alias_analysis indirectly through note_stores.  */
910
911 /* While scanning insns to find base values, reg_seen[N] is nonzero if
912    register N has been set in this function.  */
913 static char *reg_seen;
914
915 /* Addresses which are known not to alias anything else are identified
916    by a unique integer.  */
917 static int unique_id;
918
919 static void
920 record_set (dest, set, data)
921      rtx dest, set;
922      void *data ATTRIBUTE_UNUSED;
923 {
924   unsigned regno;
925   rtx src;
926
927   if (GET_CODE (dest) != REG)
928     return;
929
930   regno = REGNO (dest);
931
932   if (regno >= reg_base_value_size)
933     abort ();
934
935   if (set)
936     {
937       /* A CLOBBER wipes out any old value but does not prevent a previously
938          unset register from acquiring a base address (i.e. reg_seen is not
939          set).  */
940       if (GET_CODE (set) == CLOBBER)
941         {
942           new_reg_base_value[regno] = 0;
943           return;
944         }
945       src = SET_SRC (set);
946     }
947   else
948     {
949       if (reg_seen[regno])
950         {
951           new_reg_base_value[regno] = 0;
952           return;
953         }
954       reg_seen[regno] = 1;
955       new_reg_base_value[regno] = gen_rtx_ADDRESS (Pmode,
956                                                    GEN_INT (unique_id++));
957       return;
958     }
959
960   /* This is not the first set.  If the new value is not related to the
961      old value, forget the base value. Note that the following code is
962      not detected:
963      extern int x, y;  int *p = &x; p += (&y-&x);
964      ANSI C does not allow computing the difference of addresses
965      of distinct top level objects.  */
966   if (new_reg_base_value[regno])
967     switch (GET_CODE (src))
968       {
969       case LO_SUM:
970       case MINUS:
971         if (XEXP (src, 0) != dest && XEXP (src, 1) != dest)
972           new_reg_base_value[regno] = 0;
973         break;
974       case PLUS:
975         /* If the value we add in the PLUS is also a valid base value,
976            this might be the actual base value, and the original value
977            an index.  */
978         {
979           rtx other = NULL_RTX;
980
981           if (XEXP (src, 0) == dest)
982             other = XEXP (src, 1);
983           else if (XEXP (src, 1) == dest)
984             other = XEXP (src, 0);
985
986           if (! other || find_base_value (other))
987             new_reg_base_value[regno] = 0;
988           break;
989         }
990       case AND:
991         if (XEXP (src, 0) != dest || GET_CODE (XEXP (src, 1)) != CONST_INT)
992           new_reg_base_value[regno] = 0;
993         break;
994       default:
995         new_reg_base_value[regno] = 0;
996         break;
997       }
998   /* If this is the first set of a register, record the value.  */
999   else if ((regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
1000            && ! reg_seen[regno] && new_reg_base_value[regno] == 0)
1001     new_reg_base_value[regno] = find_base_value (src);
1002
1003   reg_seen[regno] = 1;
1004 }
1005
1006 /* Called from loop optimization when a new pseudo-register is
1007    created.  It indicates that REGNO is being set to VAL.  f INVARIANT
1008    is true then this value also describes an invariant relationship
1009    which can be used to deduce that two registers with unknown values
1010    are different.  */
1011
1012 void
1013 record_base_value (regno, val, invariant)
1014      unsigned int regno;
1015      rtx val;
1016      int invariant;
1017 {
1018   if (regno >= reg_base_value_size)
1019     return;
1020
1021   if (invariant && alias_invariant)
1022     alias_invariant[regno] = val;
1023
1024   if (GET_CODE (val) == REG)
1025     {
1026       if (REGNO (val) < reg_base_value_size)
1027         reg_base_value[regno] = reg_base_value[REGNO (val)];
1028
1029       return;
1030     }
1031
1032   reg_base_value[regno] = find_base_value (val);
1033 }
1034
1035 /* Clear alias info for a register.  This is used if an RTL transformation
1036    changes the value of a register.  This is used in flow by AUTO_INC_DEC
1037    optimizations.  We don't need to clear reg_base_value, since flow only
1038    changes the offset.  */
1039
1040 void
1041 clear_reg_alias_info (reg)
1042      rtx reg;
1043 {
1044   unsigned int regno = REGNO (reg);
1045
1046   if (regno < reg_known_value_size && regno >= FIRST_PSEUDO_REGISTER)
1047     reg_known_value[regno] = reg;
1048 }
1049
1050 /* Returns a canonical version of X, from the point of view alias
1051    analysis.  (For example, if X is a MEM whose address is a register,
1052    and the register has a known value (say a SYMBOL_REF), then a MEM
1053    whose address is the SYMBOL_REF is returned.)  */
1054
1055 rtx
1056 canon_rtx (x)
1057      rtx x;
1058 {
1059   /* Recursively look for equivalences.  */
1060   if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
1061       && REGNO (x) < reg_known_value_size)
1062     return reg_known_value[REGNO (x)] == x
1063       ? x : canon_rtx (reg_known_value[REGNO (x)]);
1064   else if (GET_CODE (x) == PLUS)
1065     {
1066       rtx x0 = canon_rtx (XEXP (x, 0));
1067       rtx x1 = canon_rtx (XEXP (x, 1));
1068
1069       if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
1070         {
1071           if (GET_CODE (x0) == CONST_INT)
1072             return plus_constant (x1, INTVAL (x0));
1073           else if (GET_CODE (x1) == CONST_INT)
1074             return plus_constant (x0, INTVAL (x1));
1075           return gen_rtx_PLUS (GET_MODE (x), x0, x1);
1076         }
1077     }
1078
1079   /* This gives us much better alias analysis when called from
1080      the loop optimizer.   Note we want to leave the original
1081      MEM alone, but need to return the canonicalized MEM with
1082      all the flags with their original values.  */
1083   else if (GET_CODE (x) == MEM)
1084     x = replace_equiv_address_nv (x, canon_rtx (XEXP (x, 0)));
1085
1086   return x;
1087 }
1088
1089 /* Return 1 if X and Y are identical-looking rtx's.
1090
1091    We use the data in reg_known_value above to see if two registers with
1092    different numbers are, in fact, equivalent.  */
1093
1094 static int
1095 rtx_equal_for_memref_p (x, y)
1096      rtx x, y;
1097 {
1098   int i;
1099   int j;
1100   enum rtx_code code;
1101   const char *fmt;
1102
1103   if (x == 0 && y == 0)
1104     return 1;
1105   if (x == 0 || y == 0)
1106     return 0;
1107
1108   x = canon_rtx (x);
1109   y = canon_rtx (y);
1110
1111   if (x == y)
1112     return 1;
1113
1114   code = GET_CODE (x);
1115   /* Rtx's of different codes cannot be equal.  */
1116   if (code != GET_CODE (y))
1117     return 0;
1118
1119   /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
1120      (REG:SI x) and (REG:HI x) are NOT equivalent.  */
1121
1122   if (GET_MODE (x) != GET_MODE (y))
1123     return 0;
1124
1125   /* Some RTL can be compared without a recursive examination.  */
1126   switch (code)
1127     {
1128     case VALUE:
1129       return CSELIB_VAL_PTR (x) == CSELIB_VAL_PTR (y);
1130
1131     case REG:
1132       return REGNO (x) == REGNO (y);
1133
1134     case LABEL_REF:
1135       return XEXP (x, 0) == XEXP (y, 0);
1136
1137     case SYMBOL_REF:
1138       return XSTR (x, 0) == XSTR (y, 0);
1139
1140     case CONST_INT:
1141     case CONST_DOUBLE:
1142       /* There's no need to compare the contents of CONST_DOUBLEs or
1143          CONST_INTs because pointer equality is a good enough
1144          comparison for these nodes.  */
1145       return 0;
1146
1147     case ADDRESSOF:
1148       return (XINT (x, 1) == XINT (y, 1)
1149               && rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0)));
1150
1151     default:
1152       break;
1153     }
1154
1155   /* For commutative operations, the RTX match if the operand match in any
1156      order.  Also handle the simple binary and unary cases without a loop.  */
1157   if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
1158     return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
1159              && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
1160             || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
1161                 && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
1162   else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
1163     return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
1164             && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)));
1165   else if (GET_RTX_CLASS (code) == '1')
1166     return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0));
1167
1168   /* Compare the elements.  If any pair of corresponding elements
1169      fail to match, return 0 for the whole things.
1170
1171      Limit cases to types which actually appear in addresses.  */
1172
1173   fmt = GET_RTX_FORMAT (code);
1174   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1175     {
1176       switch (fmt[i])
1177         {
1178         case 'i':
1179           if (XINT (x, i) != XINT (y, i))
1180             return 0;
1181           break;
1182
1183         case 'E':
1184           /* Two vectors must have the same length.  */
1185           if (XVECLEN (x, i) != XVECLEN (y, i))
1186             return 0;
1187
1188           /* And the corresponding elements must match.  */
1189           for (j = 0; j < XVECLEN (x, i); j++)
1190             if (rtx_equal_for_memref_p (XVECEXP (x, i, j),
1191                                         XVECEXP (y, i, j)) == 0)
1192               return 0;
1193           break;
1194
1195         case 'e':
1196           if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0)
1197             return 0;
1198           break;
1199
1200           /* This can happen for asm operands.  */
1201         case 's':
1202           if (strcmp (XSTR (x, i), XSTR (y, i)))
1203             return 0;
1204           break;
1205
1206         /* This can happen for an asm which clobbers memory.  */
1207         case '0':
1208           break;
1209
1210           /* It is believed that rtx's at this level will never
1211              contain anything but integers and other rtx's,
1212              except for within LABEL_REFs and SYMBOL_REFs.  */
1213         default:
1214           abort ();
1215         }
1216     }
1217   return 1;
1218 }
1219
1220 /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
1221    X and return it, or return 0 if none found.  */
1222
1223 static rtx
1224 find_symbolic_term (x)
1225      rtx x;
1226 {
1227   int i;
1228   enum rtx_code code;
1229   const char *fmt;
1230
1231   code = GET_CODE (x);
1232   if (code == SYMBOL_REF || code == LABEL_REF)
1233     return x;
1234   if (GET_RTX_CLASS (code) == 'o')
1235     return 0;
1236
1237   fmt = GET_RTX_FORMAT (code);
1238   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1239     {
1240       rtx t;
1241
1242       if (fmt[i] == 'e')
1243         {
1244           t = find_symbolic_term (XEXP (x, i));
1245           if (t != 0)
1246             return t;
1247         }
1248       else if (fmt[i] == 'E')
1249         break;
1250     }
1251   return 0;
1252 }
1253
1254 static rtx
1255 find_base_term (x)
1256      rtx x;
1257 {
1258   cselib_val *val;
1259   struct elt_loc_list *l;
1260
1261 #if defined (FIND_BASE_TERM)
1262   /* Try machine-dependent ways to find the base term.  */
1263   x = FIND_BASE_TERM (x);
1264 #endif
1265
1266   switch (GET_CODE (x))
1267     {
1268     case REG:
1269       return REG_BASE_VALUE (x);
1270
1271     case TRUNCATE:
1272       if (GET_MODE_SIZE (GET_MODE (x)) < GET_MODE_SIZE (Pmode))
1273         return 0;
1274       /* Fall through.  */
1275     case HIGH:
1276     case PRE_INC:
1277     case PRE_DEC:
1278     case POST_INC:
1279     case POST_DEC:
1280     case PRE_MODIFY:
1281     case POST_MODIFY:
1282       return find_base_term (XEXP (x, 0));
1283
1284     case ZERO_EXTEND:
1285     case SIGN_EXTEND:   /* Used for Alpha/NT pointers */
1286       {
1287         rtx temp = find_base_term (XEXP (x, 0));
1288
1289 #ifdef POINTERS_EXTEND_UNSIGNED
1290         if (temp != 0 && CONSTANT_P (temp) && GET_MODE (temp) != Pmode)
1291           temp = convert_memory_address (Pmode, temp);
1292 #endif
1293
1294         return temp;
1295       }
1296
1297     case VALUE:
1298       val = CSELIB_VAL_PTR (x);
1299       for (l = val->locs; l; l = l->next)
1300         if ((x = find_base_term (l->loc)) != 0)
1301           return x;
1302       return 0;
1303
1304     case CONST:
1305       x = XEXP (x, 0);
1306       if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
1307         return 0;
1308       /* fall through */
1309     case LO_SUM:
1310     case PLUS:
1311     case MINUS:
1312       {
1313         rtx tmp1 = XEXP (x, 0);
1314         rtx tmp2 = XEXP (x, 1);
1315
1316         /* This is a little bit tricky since we have to determine which of
1317            the two operands represents the real base address.  Otherwise this
1318            routine may return the index register instead of the base register.
1319
1320            That may cause us to believe no aliasing was possible, when in
1321            fact aliasing is possible.
1322
1323            We use a few simple tests to guess the base register.  Additional
1324            tests can certainly be added.  For example, if one of the operands
1325            is a shift or multiply, then it must be the index register and the
1326            other operand is the base register.  */
1327
1328         if (tmp1 == pic_offset_table_rtx && CONSTANT_P (tmp2))
1329           return find_base_term (tmp2);
1330
1331         /* If either operand is known to be a pointer, then use it
1332            to determine the base term.  */
1333         if (REG_P (tmp1) && REG_POINTER (tmp1))
1334           return find_base_term (tmp1);
1335
1336         if (REG_P (tmp2) && REG_POINTER (tmp2))
1337           return find_base_term (tmp2);
1338
1339         /* Neither operand was known to be a pointer.  Go ahead and find the
1340            base term for both operands.  */
1341         tmp1 = find_base_term (tmp1);
1342         tmp2 = find_base_term (tmp2);
1343
1344         /* If either base term is named object or a special address
1345            (like an argument or stack reference), then use it for the
1346            base term.  */
1347         if (tmp1 != 0
1348             && (GET_CODE (tmp1) == SYMBOL_REF
1349                 || GET_CODE (tmp1) == LABEL_REF
1350                 || (GET_CODE (tmp1) == ADDRESS
1351                     && GET_MODE (tmp1) != VOIDmode)))
1352           return tmp1;
1353
1354         if (tmp2 != 0
1355             && (GET_CODE (tmp2) == SYMBOL_REF
1356                 || GET_CODE (tmp2) == LABEL_REF
1357                 || (GET_CODE (tmp2) == ADDRESS
1358                     && GET_MODE (tmp2) != VOIDmode)))
1359           return tmp2;
1360
1361         /* We could not determine which of the two operands was the
1362            base register and which was the index.  So we can determine
1363            nothing from the base alias check.  */
1364         return 0;
1365       }
1366
1367     case AND:
1368       if (GET_CODE (XEXP (x, 1)) == CONST_INT && INTVAL (XEXP (x, 1)) != 0)
1369         return find_base_term (XEXP (x, 0));
1370       return 0;
1371
1372     case SYMBOL_REF:
1373     case LABEL_REF:
1374       return x;
1375
1376     case ADDRESSOF:
1377       return REG_BASE_VALUE (frame_pointer_rtx);
1378
1379     default:
1380       return 0;
1381     }
1382 }
1383
1384 /* Return 0 if the addresses X and Y are known to point to different
1385    objects, 1 if they might be pointers to the same object.  */
1386
1387 static int
1388 base_alias_check (x, y, x_mode, y_mode)
1389      rtx x, y;
1390      enum machine_mode x_mode, y_mode;
1391 {
1392   rtx x_base = find_base_term (x);
1393   rtx y_base = find_base_term (y);
1394
1395   /* If the address itself has no known base see if a known equivalent
1396      value has one.  If either address still has no known base, nothing
1397      is known about aliasing.  */
1398   if (x_base == 0)
1399     {
1400       rtx x_c;
1401
1402       if (! flag_expensive_optimizations || (x_c = canon_rtx (x)) == x)
1403         return 1;
1404
1405       x_base = find_base_term (x_c);
1406       if (x_base == 0)
1407         return 1;
1408     }
1409
1410   if (y_base == 0)
1411     {
1412       rtx y_c;
1413       if (! flag_expensive_optimizations || (y_c = canon_rtx (y)) == y)
1414         return 1;
1415
1416       y_base = find_base_term (y_c);
1417       if (y_base == 0)
1418         return 1;
1419     }
1420
1421   /* If the base addresses are equal nothing is known about aliasing.  */
1422   if (rtx_equal_p (x_base, y_base))
1423     return 1;
1424
1425   /* The base addresses of the read and write are different expressions.
1426      If they are both symbols and they are not accessed via AND, there is
1427      no conflict.  We can bring knowledge of object alignment into play
1428      here.  For example, on alpha, "char a, b;" can alias one another,
1429      though "char a; long b;" cannot.  */
1430   if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
1431     {
1432       if (GET_CODE (x) == AND && GET_CODE (y) == AND)
1433         return 1;
1434       if (GET_CODE (x) == AND
1435           && (GET_CODE (XEXP (x, 1)) != CONST_INT
1436               || (int) GET_MODE_UNIT_SIZE (y_mode) < -INTVAL (XEXP (x, 1))))
1437         return 1;
1438       if (GET_CODE (y) == AND
1439           && (GET_CODE (XEXP (y, 1)) != CONST_INT
1440               || (int) GET_MODE_UNIT_SIZE (x_mode) < -INTVAL (XEXP (y, 1))))
1441         return 1;
1442       /* Differing symbols never alias.  */
1443       return 0;
1444     }
1445
1446   /* If one address is a stack reference there can be no alias:
1447      stack references using different base registers do not alias,
1448      a stack reference can not alias a parameter, and a stack reference
1449      can not alias a global.  */
1450   if ((GET_CODE (x_base) == ADDRESS && GET_MODE (x_base) == Pmode)
1451       || (GET_CODE (y_base) == ADDRESS && GET_MODE (y_base) == Pmode))
1452     return 0;
1453
1454   if (! flag_argument_noalias)
1455     return 1;
1456
1457   if (flag_argument_noalias > 1)
1458     return 0;
1459
1460   /* Weak noalias assertion (arguments are distinct, but may match globals).  */
1461   return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode);
1462 }
1463
1464 /* Convert the address X into something we can use.  This is done by returning
1465    it unchanged unless it is a value; in the latter case we call cselib to get
1466    a more useful rtx.  */
1467
1468 rtx
1469 get_addr (x)
1470      rtx x;
1471 {
1472   cselib_val *v;
1473   struct elt_loc_list *l;
1474
1475   if (GET_CODE (x) != VALUE)
1476     return x;
1477   v = CSELIB_VAL_PTR (x);
1478   for (l = v->locs; l; l = l->next)
1479     if (CONSTANT_P (l->loc))
1480       return l->loc;
1481   for (l = v->locs; l; l = l->next)
1482     if (GET_CODE (l->loc) != REG && GET_CODE (l->loc) != MEM)
1483       return l->loc;
1484   if (v->locs)
1485     return v->locs->loc;
1486   return x;
1487 }
1488
1489 /*  Return the address of the (N_REFS + 1)th memory reference to ADDR
1490     where SIZE is the size in bytes of the memory reference.  If ADDR
1491     is not modified by the memory reference then ADDR is returned.  */
1492
1493 rtx
1494 addr_side_effect_eval (addr, size, n_refs)
1495      rtx addr;
1496      int size;
1497      int n_refs;
1498 {
1499   int offset = 0;
1500
1501   switch (GET_CODE (addr))
1502     {
1503     case PRE_INC:
1504       offset = (n_refs + 1) * size;
1505       break;
1506     case PRE_DEC:
1507       offset = -(n_refs + 1) * size;
1508       break;
1509     case POST_INC:
1510       offset = n_refs * size;
1511       break;
1512     case POST_DEC:
1513       offset = -n_refs * size;
1514       break;
1515
1516     default:
1517       return addr;
1518     }
1519
1520   if (offset)
1521     addr = gen_rtx_PLUS (GET_MODE (addr), XEXP (addr, 0), GEN_INT (offset));
1522   else
1523     addr = XEXP (addr, 0);
1524
1525   return addr;
1526 }
1527
1528 /* Return nonzero if X and Y (memory addresses) could reference the
1529    same location in memory.  C is an offset accumulator.  When
1530    C is nonzero, we are testing aliases between X and Y + C.
1531    XSIZE is the size in bytes of the X reference,
1532    similarly YSIZE is the size in bytes for Y.
1533
1534    If XSIZE or YSIZE is zero, we do not know the amount of memory being
1535    referenced (the reference was BLKmode), so make the most pessimistic
1536    assumptions.
1537
1538    If XSIZE or YSIZE is negative, we may access memory outside the object
1539    being referenced as a side effect.  This can happen when using AND to
1540    align memory references, as is done on the Alpha.
1541
1542    Nice to notice that varying addresses cannot conflict with fp if no
1543    local variables had their addresses taken, but that's too hard now.  */
1544
1545 static int
1546 memrefs_conflict_p (xsize, x, ysize, y, c)
1547      rtx x, y;
1548      int xsize, ysize;
1549      HOST_WIDE_INT c;
1550 {
1551   if (GET_CODE (x) == VALUE)
1552     x = get_addr (x);
1553   if (GET_CODE (y) == VALUE)
1554     y = get_addr (y);
1555   if (GET_CODE (x) == HIGH)
1556     x = XEXP (x, 0);
1557   else if (GET_CODE (x) == LO_SUM)
1558     x = XEXP (x, 1);
1559   else
1560     x = canon_rtx (addr_side_effect_eval (x, xsize, 0));
1561   if (GET_CODE (y) == HIGH)
1562     y = XEXP (y, 0);
1563   else if (GET_CODE (y) == LO_SUM)
1564     y = XEXP (y, 1);
1565   else
1566     y = canon_rtx (addr_side_effect_eval (y, ysize, 0));
1567
1568   if (rtx_equal_for_memref_p (x, y))
1569     {
1570       if (xsize <= 0 || ysize <= 0)
1571         return 1;
1572       if (c >= 0 && xsize > c)
1573         return 1;
1574       if (c < 0 && ysize+c > 0)
1575         return 1;
1576       return 0;
1577     }
1578
1579   /* This code used to check for conflicts involving stack references and
1580      globals but the base address alias code now handles these cases.  */
1581
1582   if (GET_CODE (x) == PLUS)
1583     {
1584       /* The fact that X is canonicalized means that this
1585          PLUS rtx is canonicalized.  */
1586       rtx x0 = XEXP (x, 0);
1587       rtx x1 = XEXP (x, 1);
1588
1589       if (GET_CODE (y) == PLUS)
1590         {
1591           /* The fact that Y is canonicalized means that this
1592              PLUS rtx is canonicalized.  */
1593           rtx y0 = XEXP (y, 0);
1594           rtx y1 = XEXP (y, 1);
1595
1596           if (rtx_equal_for_memref_p (x1, y1))
1597             return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1598           if (rtx_equal_for_memref_p (x0, y0))
1599             return memrefs_conflict_p (xsize, x1, ysize, y1, c);
1600           if (GET_CODE (x1) == CONST_INT)
1601             {
1602               if (GET_CODE (y1) == CONST_INT)
1603                 return memrefs_conflict_p (xsize, x0, ysize, y0,
1604                                            c - INTVAL (x1) + INTVAL (y1));
1605               else
1606                 return memrefs_conflict_p (xsize, x0, ysize, y,
1607                                            c - INTVAL (x1));
1608             }
1609           else if (GET_CODE (y1) == CONST_INT)
1610             return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1611
1612           return 1;
1613         }
1614       else if (GET_CODE (x1) == CONST_INT)
1615         return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
1616     }
1617   else if (GET_CODE (y) == PLUS)
1618     {
1619       /* The fact that Y is canonicalized means that this
1620          PLUS rtx is canonicalized.  */
1621       rtx y0 = XEXP (y, 0);
1622       rtx y1 = XEXP (y, 1);
1623
1624       if (GET_CODE (y1) == CONST_INT)
1625         return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1626       else
1627         return 1;
1628     }
1629
1630   if (GET_CODE (x) == GET_CODE (y))
1631     switch (GET_CODE (x))
1632       {
1633       case MULT:
1634         {
1635           /* Handle cases where we expect the second operands to be the
1636              same, and check only whether the first operand would conflict
1637              or not.  */
1638           rtx x0, y0;
1639           rtx x1 = canon_rtx (XEXP (x, 1));
1640           rtx y1 = canon_rtx (XEXP (y, 1));
1641           if (! rtx_equal_for_memref_p (x1, y1))
1642             return 1;
1643           x0 = canon_rtx (XEXP (x, 0));
1644           y0 = canon_rtx (XEXP (y, 0));
1645           if (rtx_equal_for_memref_p (x0, y0))
1646             return (xsize == 0 || ysize == 0
1647                     || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1648
1649           /* Can't properly adjust our sizes.  */
1650           if (GET_CODE (x1) != CONST_INT)
1651             return 1;
1652           xsize /= INTVAL (x1);
1653           ysize /= INTVAL (x1);
1654           c /= INTVAL (x1);
1655           return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1656         }
1657
1658       case REG:
1659         /* Are these registers known not to be equal?  */
1660         if (alias_invariant)
1661           {
1662             unsigned int r_x = REGNO (x), r_y = REGNO (y);
1663             rtx i_x, i_y;       /* invariant relationships of X and Y */
1664
1665             i_x = r_x >= reg_base_value_size ? 0 : alias_invariant[r_x];
1666             i_y = r_y >= reg_base_value_size ? 0 : alias_invariant[r_y];
1667
1668             if (i_x == 0 && i_y == 0)
1669               break;
1670
1671             if (! memrefs_conflict_p (xsize, i_x ? i_x : x,
1672                                       ysize, i_y ? i_y : y, c))
1673               return 0;
1674           }
1675         break;
1676
1677       default:
1678         break;
1679       }
1680
1681   /* Treat an access through an AND (e.g. a subword access on an Alpha)
1682      as an access with indeterminate size.  Assume that references
1683      besides AND are aligned, so if the size of the other reference is
1684      at least as large as the alignment, assume no other overlap.  */
1685   if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT)
1686     {
1687       if (GET_CODE (y) == AND || ysize < -INTVAL (XEXP (x, 1)))
1688         xsize = -1;
1689       return memrefs_conflict_p (xsize, XEXP (x, 0), ysize, y, c);
1690     }
1691   if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT)
1692     {
1693       /* ??? If we are indexing far enough into the array/structure, we
1694          may yet be able to determine that we can not overlap.  But we
1695          also need to that we are far enough from the end not to overlap
1696          a following reference, so we do nothing with that for now.  */
1697       if (GET_CODE (x) == AND || xsize < -INTVAL (XEXP (y, 1)))
1698         ysize = -1;
1699       return memrefs_conflict_p (xsize, x, ysize, XEXP (y, 0), c);
1700     }
1701
1702   if (GET_CODE (x) == ADDRESSOF)
1703     {
1704       if (y == frame_pointer_rtx
1705           || GET_CODE (y) == ADDRESSOF)
1706         return xsize <= 0 || ysize <= 0;
1707     }
1708   if (GET_CODE (y) == ADDRESSOF)
1709     {
1710       if (x == frame_pointer_rtx)
1711         return xsize <= 0 || ysize <= 0;
1712     }
1713
1714   if (CONSTANT_P (x))
1715     {
1716       if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
1717         {
1718           c += (INTVAL (y) - INTVAL (x));
1719           return (xsize <= 0 || ysize <= 0
1720                   || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1721         }
1722
1723       if (GET_CODE (x) == CONST)
1724         {
1725           if (GET_CODE (y) == CONST)
1726             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1727                                        ysize, canon_rtx (XEXP (y, 0)), c);
1728           else
1729             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1730                                        ysize, y, c);
1731         }
1732       if (GET_CODE (y) == CONST)
1733         return memrefs_conflict_p (xsize, x, ysize,
1734                                    canon_rtx (XEXP (y, 0)), c);
1735
1736       if (CONSTANT_P (y))
1737         return (xsize <= 0 || ysize <= 0
1738                 || (rtx_equal_for_memref_p (x, y)
1739                     && ((c >= 0 && xsize > c) || (c < 0 && ysize+c > 0))));
1740
1741       return 1;
1742     }
1743   return 1;
1744 }
1745
1746 /* Functions to compute memory dependencies.
1747
1748    Since we process the insns in execution order, we can build tables
1749    to keep track of what registers are fixed (and not aliased), what registers
1750    are varying in known ways, and what registers are varying in unknown
1751    ways.
1752
1753    If both memory references are volatile, then there must always be a
1754    dependence between the two references, since their order can not be
1755    changed.  A volatile and non-volatile reference can be interchanged
1756    though.
1757
1758    A MEM_IN_STRUCT reference at a non-AND varying address can never
1759    conflict with a non-MEM_IN_STRUCT reference at a fixed address.  We
1760    also must allow AND addresses, because they may generate accesses
1761    outside the object being referenced.  This is used to generate
1762    aligned addresses from unaligned addresses, for instance, the alpha
1763    storeqi_unaligned pattern.  */
1764
1765 /* Read dependence: X is read after read in MEM takes place.  There can
1766    only be a dependence here if both reads are volatile.  */
1767
1768 int
1769 read_dependence (mem, x)
1770      rtx mem;
1771      rtx x;
1772 {
1773   return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
1774 }
1775
1776 /* Returns MEM1 if and only if MEM1 is a scalar at a fixed address and
1777    MEM2 is a reference to a structure at a varying address, or returns
1778    MEM2 if vice versa.  Otherwise, returns NULL_RTX.  If a non-NULL
1779    value is returned MEM1 and MEM2 can never alias.  VARIES_P is used
1780    to decide whether or not an address may vary; it should return
1781    nonzero whenever variation is possible.
1782    MEM1_ADDR and MEM2_ADDR are the addresses of MEM1 and MEM2.  */
1783
1784 static rtx
1785 fixed_scalar_and_varying_struct_p (mem1, mem2, mem1_addr, mem2_addr, varies_p)
1786      rtx mem1, mem2;
1787      rtx mem1_addr, mem2_addr;
1788      int (*varies_p) PARAMS ((rtx, int));
1789 {
1790   if (! flag_strict_aliasing)
1791     return NULL_RTX;
1792
1793   if (MEM_SCALAR_P (mem1) && MEM_IN_STRUCT_P (mem2)
1794       && !varies_p (mem1_addr, 1) && varies_p (mem2_addr, 1))
1795     /* MEM1 is a scalar at a fixed address; MEM2 is a struct at a
1796        varying address.  */
1797     return mem1;
1798
1799   if (MEM_IN_STRUCT_P (mem1) && MEM_SCALAR_P (mem2)
1800       && varies_p (mem1_addr, 1) && !varies_p (mem2_addr, 1))
1801     /* MEM2 is a scalar at a fixed address; MEM1 is a struct at a
1802        varying address.  */
1803     return mem2;
1804
1805   return NULL_RTX;
1806 }
1807
1808 /* Returns nonzero if something about the mode or address format MEM1
1809    indicates that it might well alias *anything*.  */
1810
1811 static int
1812 aliases_everything_p (mem)
1813      rtx mem;
1814 {
1815   if (GET_CODE (XEXP (mem, 0)) == AND)
1816     /* If the address is an AND, its very hard to know at what it is
1817        actually pointing.  */
1818     return 1;
1819
1820   return 0;
1821 }
1822
1823 /* Return true if we can determine that the fields referenced cannot
1824    overlap for any pair of objects.  */
1825
1826 static bool
1827 nonoverlapping_component_refs_p (x, y)
1828      tree x, y;
1829 {
1830   tree fieldx, fieldy, typex, typey, orig_y;
1831
1832   do
1833     {
1834       /* The comparison has to be done at a common type, since we don't
1835          know how the inheritance hierarchy works.  */
1836       orig_y = y;
1837       do
1838         {
1839           fieldx = TREE_OPERAND (x, 1);
1840           typex = DECL_FIELD_CONTEXT (fieldx);
1841
1842           y = orig_y;
1843           do
1844             {
1845               fieldy = TREE_OPERAND (y, 1);
1846               typey = DECL_FIELD_CONTEXT (fieldy);
1847
1848               if (typex == typey)
1849                 goto found;
1850
1851               y = TREE_OPERAND (y, 0);
1852             }
1853           while (y && TREE_CODE (y) == COMPONENT_REF);
1854
1855           x = TREE_OPERAND (x, 0);
1856         }
1857       while (x && TREE_CODE (x) == COMPONENT_REF);
1858
1859       /* Never found a common type.  */
1860       return false;
1861
1862     found:
1863       /* If we're left with accessing different fields of a structure,
1864          then no overlap.  */
1865       if (TREE_CODE (typex) == RECORD_TYPE
1866           && fieldx != fieldy)
1867         return true;
1868
1869       /* The comparison on the current field failed.  If we're accessing
1870          a very nested structure, look at the next outer level.  */
1871       x = TREE_OPERAND (x, 0);
1872       y = TREE_OPERAND (y, 0);
1873     }
1874   while (x && y
1875          && TREE_CODE (x) == COMPONENT_REF
1876          && TREE_CODE (y) == COMPONENT_REF);
1877
1878   return false;
1879 }
1880
1881 /* Look at the bottom of the COMPONENT_REF list for a DECL, and return it.  */
1882
1883 static tree
1884 decl_for_component_ref (x)
1885      tree x;
1886 {
1887   do
1888     {
1889       x = TREE_OPERAND (x, 0);
1890     }
1891   while (x && TREE_CODE (x) == COMPONENT_REF);
1892
1893   return x && DECL_P (x) ? x : NULL_TREE;
1894 }
1895
1896 /* Walk up the COMPONENT_REF list and adjust OFFSET to compensate for the
1897    offset of the field reference.  */
1898
1899 static rtx
1900 adjust_offset_for_component_ref (x, offset)
1901      tree x;
1902      rtx offset;
1903 {
1904   HOST_WIDE_INT ioffset;
1905
1906   if (! offset)
1907     return NULL_RTX;
1908
1909   ioffset = INTVAL (offset);
1910   do
1911     {
1912       tree field = TREE_OPERAND (x, 1);
1913
1914       if (! host_integerp (DECL_FIELD_OFFSET (field), 1))
1915         return NULL_RTX;
1916       ioffset += (tree_low_cst (DECL_FIELD_OFFSET (field), 1)
1917                   + (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
1918                      / BITS_PER_UNIT));
1919
1920       x = TREE_OPERAND (x, 0);
1921     }
1922   while (x && TREE_CODE (x) == COMPONENT_REF);
1923
1924   return GEN_INT (ioffset);
1925 }
1926
1927 /* Return nonzero if we can deterimine the exprs corresponding to memrefs
1928    X and Y and they do not overlap.  */
1929
1930 static int
1931 nonoverlapping_memrefs_p (x, y)
1932      rtx x, y;
1933 {
1934   tree exprx = MEM_EXPR (x), expry = MEM_EXPR (y);
1935   rtx rtlx, rtly;
1936   rtx basex, basey;
1937   rtx moffsetx, moffsety;
1938   HOST_WIDE_INT offsetx = 0, offsety = 0, sizex, sizey, tem;
1939
1940   /* Unless both have exprs, we can't tell anything.  */
1941   if (exprx == 0 || expry == 0)
1942     return 0;
1943
1944   /* If both are field references, we may be able to determine something.  */
1945   if (TREE_CODE (exprx) == COMPONENT_REF
1946       && TREE_CODE (expry) == COMPONENT_REF
1947       && nonoverlapping_component_refs_p (exprx, expry))
1948     return 1;
1949
1950   /* If the field reference test failed, look at the DECLs involved.  */
1951   moffsetx = MEM_OFFSET (x);
1952   if (TREE_CODE (exprx) == COMPONENT_REF)
1953     {
1954       tree t = decl_for_component_ref (exprx);
1955       if (! t)
1956         return 0;
1957       moffsetx = adjust_offset_for_component_ref (exprx, moffsetx);
1958       exprx = t;
1959     }
1960   else if (TREE_CODE (exprx) == INDIRECT_REF)
1961     {
1962       exprx = TREE_OPERAND (exprx, 0);
1963       if (flag_argument_noalias < 2
1964           || TREE_CODE (exprx) != PARM_DECL)
1965         return 0;
1966     }
1967
1968   moffsety = MEM_OFFSET (y);
1969   if (TREE_CODE (expry) == COMPONENT_REF)
1970     {
1971       tree t = decl_for_component_ref (expry);
1972       if (! t)
1973         return 0;
1974       moffsety = adjust_offset_for_component_ref (expry, moffsety);
1975       expry = t;
1976     }
1977   else if (TREE_CODE (expry) == INDIRECT_REF)
1978     {
1979       expry = TREE_OPERAND (expry, 0);
1980       if (flag_argument_noalias < 2
1981           || TREE_CODE (expry) != PARM_DECL)
1982         return 0;
1983     }
1984
1985   if (! DECL_P (exprx) || ! DECL_P (expry))
1986     return 0;
1987
1988   rtlx = DECL_RTL (exprx);
1989   rtly = DECL_RTL (expry);
1990
1991   /* If either RTL is not a MEM, it must be a REG or CONCAT, meaning they
1992      can't overlap unless they are the same because we never reuse that part
1993      of the stack frame used for locals for spilled pseudos.  */
1994   if ((GET_CODE (rtlx) != MEM || GET_CODE (rtly) != MEM)
1995       && ! rtx_equal_p (rtlx, rtly))
1996     return 1;
1997
1998   /* Get the base and offsets of both decls.  If either is a register, we
1999      know both are and are the same, so use that as the base.  The only
2000      we can avoid overlap is if we can deduce that they are nonoverlapping
2001      pieces of that decl, which is very rare.  */
2002   basex = GET_CODE (rtlx) == MEM ? XEXP (rtlx, 0) : rtlx;
2003   if (GET_CODE (basex) == PLUS && GET_CODE (XEXP (basex, 1)) == CONST_INT)
2004     offsetx = INTVAL (XEXP (basex, 1)), basex = XEXP (basex, 0);
2005
2006   basey = GET_CODE (rtly) == MEM ? XEXP (rtly, 0) : rtly;
2007   if (GET_CODE (basey) == PLUS && GET_CODE (XEXP (basey, 1)) == CONST_INT)
2008     offsety = INTVAL (XEXP (basey, 1)), basey = XEXP (basey, 0);
2009
2010   /* If the bases are different, we know they do not overlap if both
2011      are constants or if one is a constant and the other a pointer into the
2012      stack frame.  Otherwise a different base means we can't tell if they
2013      overlap or not.  */
2014   if (! rtx_equal_p (basex, basey))
2015     return ((CONSTANT_P (basex) && CONSTANT_P (basey))
2016             || (CONSTANT_P (basex) && REG_P (basey)
2017                 && REGNO_PTR_FRAME_P (REGNO (basey)))
2018             || (CONSTANT_P (basey) && REG_P (basex)
2019                 && REGNO_PTR_FRAME_P (REGNO (basex))));
2020
2021   sizex = (GET_CODE (rtlx) != MEM ? (int) GET_MODE_SIZE (GET_MODE (rtlx))
2022            : MEM_SIZE (rtlx) ? INTVAL (MEM_SIZE (rtlx))
2023            : -1);
2024   sizey = (GET_CODE (rtly) != MEM ? (int) GET_MODE_SIZE (GET_MODE (rtly))
2025            : MEM_SIZE (rtly) ? INTVAL (MEM_SIZE (rtly)) :
2026            -1);
2027
2028   /* If we have an offset for either memref, it can update the values computed
2029      above.  */
2030   if (moffsetx)
2031     offsetx += INTVAL (moffsetx), sizex -= INTVAL (moffsetx);
2032   if (moffsety)
2033     offsety += INTVAL (moffsety), sizey -= INTVAL (moffsety);
2034
2035   /* If a memref has both a size and an offset, we can use the smaller size.
2036      We can't do this if the offset isn't known because we must view this
2037      memref as being anywhere inside the DECL's MEM.  */
2038   if (MEM_SIZE (x) && moffsetx)
2039     sizex = INTVAL (MEM_SIZE (x));
2040   if (MEM_SIZE (y) && moffsety)
2041     sizey = INTVAL (MEM_SIZE (y));
2042
2043   /* Put the values of the memref with the lower offset in X's values.  */
2044   if (offsetx > offsety)
2045     {
2046       tem = offsetx, offsetx = offsety, offsety = tem;
2047       tem = sizex, sizex = sizey, sizey = tem;
2048     }
2049
2050   /* If we don't know the size of the lower-offset value, we can't tell
2051      if they conflict.  Otherwise, we do the test.  */
2052   return sizex >= 0 && offsety >= offsetx + sizex;
2053 }
2054
2055 /* True dependence: X is read after store in MEM takes place.  */
2056
2057 int
2058 true_dependence (mem, mem_mode, x, varies)
2059      rtx mem;
2060      enum machine_mode mem_mode;
2061      rtx x;
2062      int (*varies) PARAMS ((rtx, int));
2063 {
2064   rtx x_addr, mem_addr;
2065   rtx base;
2066
2067   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2068     return 1;
2069
2070   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2071      This is used in epilogue deallocation functions.  */
2072   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
2073     return 1;
2074   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2075     return 1;
2076
2077   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2078     return 0;
2079
2080   /* Unchanging memory can't conflict with non-unchanging memory.
2081      A non-unchanging read can conflict with a non-unchanging write.
2082      An unchanging read can conflict with an unchanging write since
2083      there may be a single store to this address to initialize it.
2084      Note that an unchanging store can conflict with a non-unchanging read
2085      since we have to make conservative assumptions when we have a
2086      record with readonly fields and we are copying the whole thing.
2087      Just fall through to the code below to resolve potential conflicts.
2088      This won't handle all cases optimally, but the possible performance
2089      loss should be negligible.  */
2090   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
2091     return 0;
2092
2093   if (nonoverlapping_memrefs_p (mem, x))
2094     return 0;
2095
2096   if (mem_mode == VOIDmode)
2097     mem_mode = GET_MODE (mem);
2098
2099   x_addr = get_addr (XEXP (x, 0));
2100   mem_addr = get_addr (XEXP (mem, 0));
2101
2102   base = find_base_term (x_addr);
2103   if (base && (GET_CODE (base) == LABEL_REF
2104                || (GET_CODE (base) == SYMBOL_REF
2105                    && CONSTANT_POOL_ADDRESS_P (base))))
2106     return 0;
2107
2108   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
2109     return 0;
2110
2111   x_addr = canon_rtx (x_addr);
2112   mem_addr = canon_rtx (mem_addr);
2113
2114   if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
2115                             SIZE_FOR_MODE (x), x_addr, 0))
2116     return 0;
2117
2118   if (aliases_everything_p (x))
2119     return 1;
2120
2121   /* We cannot use aliases_everything_p to test MEM, since we must look
2122      at MEM_MODE, rather than GET_MODE (MEM).  */
2123   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
2124     return 1;
2125
2126   /* In true_dependence we also allow BLKmode to alias anything.  Why
2127      don't we do this in anti_dependence and output_dependence?  */
2128   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
2129     return 1;
2130
2131   return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2132                                               varies);
2133 }
2134
2135 /* Canonical true dependence: X is read after store in MEM takes place.
2136    Variant of true_dependence which assumes MEM has already been
2137    canonicalized (hence we no longer do that here).
2138    The mem_addr argument has been added, since true_dependence computed
2139    this value prior to canonicalizing.  */
2140
2141 int
2142 canon_true_dependence (mem, mem_mode, mem_addr, x, varies)
2143      rtx mem, mem_addr, x;
2144      enum machine_mode mem_mode;
2145      int (*varies) PARAMS ((rtx, int));
2146 {
2147   rtx x_addr;
2148
2149   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2150     return 1;
2151
2152   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2153      This is used in epilogue deallocation functions.  */
2154   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
2155     return 1;
2156   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2157     return 1;
2158
2159   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2160     return 0;
2161
2162   /* If X is an unchanging read, then it can't possibly conflict with any
2163      non-unchanging store.  It may conflict with an unchanging write though,
2164      because there may be a single store to this address to initialize it.
2165      Just fall through to the code below to resolve the case where we have
2166      both an unchanging read and an unchanging write.  This won't handle all
2167      cases optimally, but the possible performance loss should be
2168      negligible.  */
2169   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
2170     return 0;
2171
2172   if (nonoverlapping_memrefs_p (x, mem))
2173     return 0;
2174
2175   x_addr = get_addr (XEXP (x, 0));
2176
2177   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
2178     return 0;
2179
2180   x_addr = canon_rtx (x_addr);
2181   if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
2182                             SIZE_FOR_MODE (x), x_addr, 0))
2183     return 0;
2184
2185   if (aliases_everything_p (x))
2186     return 1;
2187
2188   /* We cannot use aliases_everything_p to test MEM, since we must look
2189      at MEM_MODE, rather than GET_MODE (MEM).  */
2190   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
2191     return 1;
2192
2193   /* In true_dependence we also allow BLKmode to alias anything.  Why
2194      don't we do this in anti_dependence and output_dependence?  */
2195   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
2196     return 1;
2197
2198   return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2199                                               varies);
2200 }
2201
2202 /* Returns non-zero if a write to X might alias a previous read from
2203    (or, if WRITEP is non-zero, a write to) MEM.  */
2204
2205 static int
2206 write_dependence_p (mem, x, writep)
2207      rtx mem;
2208      rtx x;
2209      int writep;
2210 {
2211   rtx x_addr, mem_addr;
2212   rtx fixed_scalar;
2213   rtx base;
2214
2215   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2216     return 1;
2217
2218   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2219      This is used in epilogue deallocation functions.  */
2220   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
2221     return 1;
2222   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2223     return 1;
2224
2225   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2226     return 0;
2227
2228   /* Unchanging memory can't conflict with non-unchanging memory.  */
2229   if (RTX_UNCHANGING_P (x) != RTX_UNCHANGING_P (mem))
2230     return 0;
2231
2232   /* If MEM is an unchanging read, then it can't possibly conflict with
2233      the store to X, because there is at most one store to MEM, and it must
2234      have occurred somewhere before MEM.  */
2235   if (! writep && RTX_UNCHANGING_P (mem))
2236     return 0;
2237
2238   if (nonoverlapping_memrefs_p (x, mem))
2239     return 0;
2240
2241   x_addr = get_addr (XEXP (x, 0));
2242   mem_addr = get_addr (XEXP (mem, 0));
2243
2244   if (! writep)
2245     {
2246       base = find_base_term (mem_addr);
2247       if (base && (GET_CODE (base) == LABEL_REF
2248                    || (GET_CODE (base) == SYMBOL_REF
2249                        && CONSTANT_POOL_ADDRESS_P (base))))
2250         return 0;
2251     }
2252
2253   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x),
2254                           GET_MODE (mem)))
2255     return 0;
2256
2257   x_addr = canon_rtx (x_addr);
2258   mem_addr = canon_rtx (mem_addr);
2259
2260   if (!memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
2261                            SIZE_FOR_MODE (x), x_addr, 0))
2262     return 0;
2263
2264   fixed_scalar
2265     = fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2266                                          rtx_addr_varies_p);
2267
2268   return (!(fixed_scalar == mem && !aliases_everything_p (x))
2269           && !(fixed_scalar == x && !aliases_everything_p (mem)));
2270 }
2271
2272 /* Anti dependence: X is written after read in MEM takes place.  */
2273
2274 int
2275 anti_dependence (mem, x)
2276      rtx mem;
2277      rtx x;
2278 {
2279   return write_dependence_p (mem, x, /*writep=*/0);
2280 }
2281
2282 /* Output dependence: X is written after store in MEM takes place.  */
2283
2284 int
2285 output_dependence (mem, x)
2286      rtx mem;
2287      rtx x;
2288 {
2289   return write_dependence_p (mem, x, /*writep=*/1);
2290 }
2291 \f
2292 /* A subroutine of nonlocal_mentioned_p, returns 1 if *LOC mentions
2293    something which is not local to the function and is not constant.  */
2294
2295 static int
2296 nonlocal_mentioned_p_1 (loc, data)
2297      rtx *loc;
2298      void *data ATTRIBUTE_UNUSED;
2299 {
2300   rtx x = *loc;
2301   rtx base;
2302   int regno;
2303
2304   if (! x)
2305     return 0;
2306
2307   switch (GET_CODE (x))
2308     {
2309     case SUBREG:
2310       if (GET_CODE (SUBREG_REG (x)) == REG)
2311         {
2312           /* Global registers are not local.  */
2313           if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER
2314               && global_regs[subreg_regno (x)])
2315             return 1;
2316           return 0;
2317         }
2318       break;
2319
2320     case REG:
2321       regno = REGNO (x);
2322       /* Global registers are not local.  */
2323       if (regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
2324         return 1;
2325       return 0;
2326
2327     case SCRATCH:
2328     case PC:
2329     case CC0:
2330     case CONST_INT:
2331     case CONST_DOUBLE:
2332     case CONST_VECTOR:
2333     case CONST:
2334     case LABEL_REF:
2335       return 0;
2336
2337     case SYMBOL_REF:
2338       /* Constants in the function's constants pool are constant.  */
2339       if (CONSTANT_POOL_ADDRESS_P (x))
2340         return 0;
2341       return 1;
2342
2343     case CALL:
2344       /* Non-constant calls and recursion are not local.  */
2345       return 1;
2346
2347     case MEM:
2348       /* Be overly conservative and consider any volatile memory
2349          reference as not local.  */
2350       if (MEM_VOLATILE_P (x))
2351         return 1;
2352       base = find_base_term (XEXP (x, 0));
2353       if (base)
2354         {
2355           /* A Pmode ADDRESS could be a reference via the structure value
2356              address or static chain.  Such memory references are nonlocal.
2357
2358              Thus, we have to examine the contents of the ADDRESS to find
2359              out if this is a local reference or not.  */
2360           if (GET_CODE (base) == ADDRESS
2361               && GET_MODE (base) == Pmode
2362               && (XEXP (base, 0) == stack_pointer_rtx
2363                   || XEXP (base, 0) == arg_pointer_rtx
2364 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2365                   || XEXP (base, 0) == hard_frame_pointer_rtx
2366 #endif
2367                   || XEXP (base, 0) == frame_pointer_rtx))
2368             return 0;
2369           /* Constants in the function's constant pool are constant.  */
2370           if (GET_CODE (base) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (base))
2371             return 0;
2372         }
2373       return 1;
2374
2375     case UNSPEC_VOLATILE:
2376     case ASM_INPUT:
2377       return 1;
2378
2379     case ASM_OPERANDS:
2380       if (MEM_VOLATILE_P (x))
2381         return 1;
2382
2383     /* FALLTHROUGH */
2384
2385     default:
2386       break;
2387     }
2388
2389   return 0;
2390 }
2391
2392 /* Returns non-zero if X might mention something which is not
2393    local to the function and is not constant.  */
2394
2395 static int
2396 nonlocal_mentioned_p (x)
2397      rtx x;
2398 {
2399
2400   if (INSN_P (x))
2401     {
2402       if (GET_CODE (x) == CALL_INSN)
2403         {
2404           if (! CONST_OR_PURE_CALL_P (x))
2405             return 1;
2406           x = CALL_INSN_FUNCTION_USAGE (x);
2407           if (x == 0)
2408             return 0;
2409         }
2410       else
2411         x = PATTERN (x);
2412     }
2413
2414   return for_each_rtx (&x, nonlocal_mentioned_p_1, NULL);
2415 }
2416
2417 /* A subroutine of nonlocal_referenced_p, returns 1 if *LOC references
2418    something which is not local to the function and is not constant.  */
2419
2420 static int
2421 nonlocal_referenced_p_1 (loc, data)
2422      rtx *loc;
2423      void *data ATTRIBUTE_UNUSED;
2424 {
2425   rtx x = *loc;
2426
2427   if (! x)
2428     return 0;
2429
2430   switch (GET_CODE (x))
2431     {
2432     case MEM:
2433     case REG:
2434     case SYMBOL_REF:
2435     case SUBREG:
2436       return nonlocal_mentioned_p (x);
2437
2438     case CALL:
2439       /* Non-constant calls and recursion are not local.  */
2440       return 1;
2441
2442     case SET:
2443       if (nonlocal_mentioned_p (SET_SRC (x)))
2444         return 1;
2445
2446       if (GET_CODE (SET_DEST (x)) == MEM)
2447         return nonlocal_mentioned_p (XEXP (SET_DEST (x), 0));
2448
2449       /* If the destination is anything other than a CC0, PC,
2450          MEM, REG, or a SUBREG of a REG that occupies all of
2451          the REG, then X references nonlocal memory if it is
2452          mentioned in the destination.  */
2453       if (GET_CODE (SET_DEST (x)) != CC0
2454           && GET_CODE (SET_DEST (x)) != PC
2455           && GET_CODE (SET_DEST (x)) != REG
2456           && ! (GET_CODE (SET_DEST (x)) == SUBREG
2457                 && GET_CODE (SUBREG_REG (SET_DEST (x))) == REG
2458                 && (((GET_MODE_SIZE (GET_MODE (SUBREG_REG (SET_DEST (x))))
2459                       + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
2460                     == ((GET_MODE_SIZE (GET_MODE (SET_DEST (x)))
2461                          + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD))))
2462         return nonlocal_mentioned_p (SET_DEST (x));
2463       return 0;
2464
2465     case CLOBBER:
2466       if (GET_CODE (XEXP (x, 0)) == MEM)
2467         return nonlocal_mentioned_p (XEXP (XEXP (x, 0), 0));
2468       return 0;
2469
2470     case USE:
2471       return nonlocal_mentioned_p (XEXP (x, 0));
2472
2473     case ASM_INPUT:
2474     case UNSPEC_VOLATILE:
2475       return 1;
2476
2477     case ASM_OPERANDS:
2478       if (MEM_VOLATILE_P (x))
2479         return 1;
2480
2481     /* FALLTHROUGH */
2482
2483     default:
2484       break;
2485     }
2486
2487   return 0;
2488 }
2489
2490 /* Returns non-zero if X might reference something which is not
2491    local to the function and is not constant.  */
2492
2493 static int
2494 nonlocal_referenced_p (x)
2495      rtx x;
2496 {
2497
2498   if (INSN_P (x))
2499     {
2500       if (GET_CODE (x) == CALL_INSN)
2501         {
2502           if (! CONST_OR_PURE_CALL_P (x))
2503             return 1;
2504           x = CALL_INSN_FUNCTION_USAGE (x);
2505           if (x == 0)
2506             return 0;
2507         }
2508       else
2509         x = PATTERN (x);
2510     }
2511
2512   return for_each_rtx (&x, nonlocal_referenced_p_1, NULL);
2513 }
2514
2515 /* A subroutine of nonlocal_set_p, returns 1 if *LOC sets
2516    something which is not local to the function and is not constant.  */
2517
2518 static int
2519 nonlocal_set_p_1 (loc, data)
2520      rtx *loc;
2521      void *data ATTRIBUTE_UNUSED;
2522 {
2523   rtx x = *loc;
2524
2525   if (! x)
2526     return 0;
2527
2528   switch (GET_CODE (x))
2529     {
2530     case CALL:
2531       /* Non-constant calls and recursion are not local.  */
2532       return 1;
2533
2534     case PRE_INC:
2535     case PRE_DEC:
2536     case POST_INC:
2537     case POST_DEC:
2538     case PRE_MODIFY:
2539     case POST_MODIFY:
2540       return nonlocal_mentioned_p (XEXP (x, 0));
2541
2542     case SET:
2543       if (nonlocal_mentioned_p (SET_DEST (x)))
2544         return 1;
2545       return nonlocal_set_p (SET_SRC (x));
2546
2547     case CLOBBER:
2548       return nonlocal_mentioned_p (XEXP (x, 0));
2549
2550     case USE:
2551       return 0;
2552
2553     case ASM_INPUT:
2554     case UNSPEC_VOLATILE:
2555       return 1;
2556
2557     case ASM_OPERANDS:
2558       if (MEM_VOLATILE_P (x))
2559         return 1;
2560
2561     /* FALLTHROUGH */
2562
2563     default:
2564       break;
2565     }
2566
2567   return 0;
2568 }
2569
2570 /* Returns non-zero if X might set something which is not
2571    local to the function and is not constant.  */
2572
2573 static int
2574 nonlocal_set_p (x)
2575      rtx x;
2576 {
2577
2578   if (INSN_P (x))
2579     {
2580       if (GET_CODE (x) == CALL_INSN)
2581         {
2582           if (! CONST_OR_PURE_CALL_P (x))
2583             return 1;
2584           x = CALL_INSN_FUNCTION_USAGE (x);
2585           if (x == 0)
2586             return 0;
2587         }
2588       else
2589         x = PATTERN (x);
2590     }
2591
2592   return for_each_rtx (&x, nonlocal_set_p_1, NULL);
2593 }
2594
2595 /* Mark the function if it is constant.  */
2596
2597 void
2598 mark_constant_function ()
2599 {
2600   rtx insn;
2601   int nonlocal_memory_referenced;
2602
2603   if (TREE_READONLY (current_function_decl)
2604       || DECL_IS_PURE (current_function_decl)
2605       || TREE_THIS_VOLATILE (current_function_decl)
2606       || TYPE_MODE (TREE_TYPE (current_function_decl)) == VOIDmode
2607       || current_function_has_nonlocal_goto
2608       || !(*targetm.binds_local_p) (current_function_decl))
2609     return;
2610
2611   /* A loop might not return which counts as a side effect.  */
2612   if (mark_dfs_back_edges ())
2613     return;
2614
2615   nonlocal_memory_referenced = 0;
2616
2617   init_alias_analysis ();
2618
2619   /* Determine if this is a constant or pure function.  */
2620
2621   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2622     {
2623       if (! INSN_P (insn))
2624         continue;
2625
2626       if (nonlocal_set_p (insn) || global_reg_mentioned_p (insn)
2627           || volatile_refs_p (PATTERN (insn)))
2628         break;
2629
2630       if (! nonlocal_memory_referenced)
2631         nonlocal_memory_referenced = nonlocal_referenced_p (insn);
2632     }
2633
2634   end_alias_analysis ();
2635
2636   /* Mark the function.  */
2637
2638   if (insn)
2639     ;
2640   else if (nonlocal_memory_referenced)
2641     DECL_IS_PURE (current_function_decl) = 1;
2642   else
2643     TREE_READONLY (current_function_decl) = 1;
2644 }
2645 \f
2646
2647 void
2648 init_alias_once ()
2649 {
2650   int i;
2651
2652 #ifndef OUTGOING_REGNO
2653 #define OUTGOING_REGNO(N) N
2654 #endif
2655   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2656     /* Check whether this register can hold an incoming pointer
2657        argument.  FUNCTION_ARG_REGNO_P tests outgoing register
2658        numbers, so translate if necessary due to register windows.  */
2659     if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i))
2660         && HARD_REGNO_MODE_OK (i, Pmode))
2661       static_reg_base_value[i]
2662         = gen_rtx_ADDRESS (VOIDmode, gen_rtx_REG (Pmode, i));
2663
2664   static_reg_base_value[STACK_POINTER_REGNUM]
2665     = gen_rtx_ADDRESS (Pmode, stack_pointer_rtx);
2666   static_reg_base_value[ARG_POINTER_REGNUM]
2667     = gen_rtx_ADDRESS (Pmode, arg_pointer_rtx);
2668   static_reg_base_value[FRAME_POINTER_REGNUM]
2669     = gen_rtx_ADDRESS (Pmode, frame_pointer_rtx);
2670 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2671   static_reg_base_value[HARD_FRAME_POINTER_REGNUM]
2672     = gen_rtx_ADDRESS (Pmode, hard_frame_pointer_rtx);
2673 #endif
2674
2675   alias_sets = splay_tree_new (splay_tree_compare_ints, 0, 0);
2676 }
2677
2678 /* Initialize the aliasing machinery.  Initialize the REG_KNOWN_VALUE
2679    array.  */
2680
2681 void
2682 init_alias_analysis ()
2683 {
2684   int maxreg = max_reg_num ();
2685   int changed, pass;
2686   int i;
2687   unsigned int ui;
2688   rtx insn;
2689
2690   reg_known_value_size = maxreg;
2691
2692   reg_known_value
2693     = (rtx *) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (rtx))
2694     - FIRST_PSEUDO_REGISTER;
2695   reg_known_equiv_p
2696     = (char*) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (char))
2697     - FIRST_PSEUDO_REGISTER;
2698
2699   /* Overallocate reg_base_value to allow some growth during loop
2700      optimization.  Loop unrolling can create a large number of
2701      registers.  */
2702   reg_base_value_size = maxreg * 2;
2703   reg_base_value = (rtx *) ggc_alloc_cleared (reg_base_value_size
2704                                               * sizeof (rtx));
2705
2706   new_reg_base_value = (rtx *) xmalloc (reg_base_value_size * sizeof (rtx));
2707   reg_seen = (char *) xmalloc (reg_base_value_size);
2708   if (! reload_completed && flag_unroll_loops)
2709     {
2710       /* ??? Why are we realloc'ing if we're just going to zero it?  */
2711       alias_invariant = (rtx *)xrealloc (alias_invariant,
2712                                          reg_base_value_size * sizeof (rtx));
2713       memset ((char *)alias_invariant, 0, reg_base_value_size * sizeof (rtx));
2714     }
2715
2716   /* The basic idea is that each pass through this loop will use the
2717      "constant" information from the previous pass to propagate alias
2718      information through another level of assignments.
2719
2720      This could get expensive if the assignment chains are long.  Maybe
2721      we should throttle the number of iterations, possibly based on
2722      the optimization level or flag_expensive_optimizations.
2723
2724      We could propagate more information in the first pass by making use
2725      of REG_N_SETS to determine immediately that the alias information
2726      for a pseudo is "constant".
2727
2728      A program with an uninitialized variable can cause an infinite loop
2729      here.  Instead of doing a full dataflow analysis to detect such problems
2730      we just cap the number of iterations for the loop.
2731
2732      The state of the arrays for the set chain in question does not matter
2733      since the program has undefined behavior.  */
2734
2735   pass = 0;
2736   do
2737     {
2738       /* Assume nothing will change this iteration of the loop.  */
2739       changed = 0;
2740
2741       /* We want to assign the same IDs each iteration of this loop, so
2742          start counting from zero each iteration of the loop.  */
2743       unique_id = 0;
2744
2745       /* We're at the start of the function each iteration through the
2746          loop, so we're copying arguments.  */
2747       copying_arguments = 1;
2748
2749       /* Wipe the potential alias information clean for this pass.  */
2750       memset ((char *) new_reg_base_value, 0, reg_base_value_size * sizeof (rtx));
2751
2752       /* Wipe the reg_seen array clean.  */
2753       memset ((char *) reg_seen, 0, reg_base_value_size);
2754
2755       /* Mark all hard registers which may contain an address.
2756          The stack, frame and argument pointers may contain an address.
2757          An argument register which can hold a Pmode value may contain
2758          an address even if it is not in BASE_REGS.
2759
2760          The address expression is VOIDmode for an argument and
2761          Pmode for other registers.  */
2762
2763       memcpy (new_reg_base_value, static_reg_base_value,
2764               FIRST_PSEUDO_REGISTER * sizeof (rtx));
2765
2766       /* Walk the insns adding values to the new_reg_base_value array.  */
2767       for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2768         {
2769           if (INSN_P (insn))
2770             {
2771               rtx note, set;
2772
2773 #if defined (HAVE_prologue) || defined (HAVE_epilogue)
2774               /* The prologue/epilogue insns are not threaded onto the
2775                  insn chain until after reload has completed.  Thus,
2776                  there is no sense wasting time checking if INSN is in
2777                  the prologue/epilogue until after reload has completed.  */
2778               if (reload_completed
2779                   && prologue_epilogue_contains (insn))
2780                 continue;
2781 #endif
2782
2783               /* If this insn has a noalias note, process it,  Otherwise,
2784                  scan for sets.  A simple set will have no side effects
2785                  which could change the base value of any other register.  */
2786
2787               if (GET_CODE (PATTERN (insn)) == SET
2788                   && REG_NOTES (insn) != 0
2789                   && find_reg_note (insn, REG_NOALIAS, NULL_RTX))
2790                 record_set (SET_DEST (PATTERN (insn)), NULL_RTX, NULL);
2791               else
2792                 note_stores (PATTERN (insn), record_set, NULL);
2793
2794               set = single_set (insn);
2795
2796               if (set != 0
2797                   && GET_CODE (SET_DEST (set)) == REG
2798                   && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER)
2799                 {
2800                   unsigned int regno = REGNO (SET_DEST (set));
2801                   rtx src = SET_SRC (set);
2802
2803                   if (REG_NOTES (insn) != 0
2804                       && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
2805                            && REG_N_SETS (regno) == 1)
2806                           || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
2807                       && GET_CODE (XEXP (note, 0)) != EXPR_LIST
2808                       && ! rtx_varies_p (XEXP (note, 0), 1)
2809                       && ! reg_overlap_mentioned_p (SET_DEST (set), XEXP (note, 0)))
2810                     {
2811                       reg_known_value[regno] = XEXP (note, 0);
2812                       reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV;
2813                     }
2814                   else if (REG_N_SETS (regno) == 1
2815                            && GET_CODE (src) == PLUS
2816                            && GET_CODE (XEXP (src, 0)) == REG
2817                            && REGNO (XEXP (src, 0)) >= FIRST_PSEUDO_REGISTER
2818                            && (reg_known_value[REGNO (XEXP (src, 0))])
2819                            && GET_CODE (XEXP (src, 1)) == CONST_INT)
2820                     {
2821                       rtx op0 = XEXP (src, 0);
2822                       op0 = reg_known_value[REGNO (op0)];
2823                       reg_known_value[regno]
2824                         = plus_constant (op0, INTVAL (XEXP (src, 1)));
2825                       reg_known_equiv_p[regno] = 0;
2826                     }
2827                   else if (REG_N_SETS (regno) == 1
2828                            && ! rtx_varies_p (src, 1))
2829                     {
2830                       reg_known_value[regno] = src;
2831                       reg_known_equiv_p[regno] = 0;
2832                     }
2833                 }
2834             }
2835           else if (GET_CODE (insn) == NOTE
2836                    && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
2837             copying_arguments = 0;
2838         }
2839
2840       /* Now propagate values from new_reg_base_value to reg_base_value.  */
2841       for (ui = 0; ui < reg_base_value_size; ui++)
2842         {
2843           if (new_reg_base_value[ui]
2844               && new_reg_base_value[ui] != reg_base_value[ui]
2845               && ! rtx_equal_p (new_reg_base_value[ui], reg_base_value[ui]))
2846             {
2847               reg_base_value[ui] = new_reg_base_value[ui];
2848               changed = 1;
2849             }
2850         }
2851     }
2852   while (changed && ++pass < MAX_ALIAS_LOOP_PASSES);
2853
2854   /* Fill in the remaining entries.  */
2855   for (i = FIRST_PSEUDO_REGISTER; i < maxreg; i++)
2856     if (reg_known_value[i] == 0)
2857       reg_known_value[i] = regno_reg_rtx[i];
2858
2859   /* Simplify the reg_base_value array so that no register refers to
2860      another register, except to special registers indirectly through
2861      ADDRESS expressions.
2862
2863      In theory this loop can take as long as O(registers^2), but unless
2864      there are very long dependency chains it will run in close to linear
2865      time.
2866
2867      This loop may not be needed any longer now that the main loop does
2868      a better job at propagating alias information.  */
2869   pass = 0;
2870   do
2871     {
2872       changed = 0;
2873       pass++;
2874       for (ui = 0; ui < reg_base_value_size; ui++)
2875         {
2876           rtx base = reg_base_value[ui];
2877           if (base && GET_CODE (base) == REG)
2878             {
2879               unsigned int base_regno = REGNO (base);
2880               if (base_regno == ui)             /* register set from itself */
2881                 reg_base_value[ui] = 0;
2882               else
2883                 reg_base_value[ui] = reg_base_value[base_regno];
2884               changed = 1;
2885             }
2886         }
2887     }
2888   while (changed && pass < MAX_ALIAS_LOOP_PASSES);
2889
2890   /* Clean up.  */
2891   free (new_reg_base_value);
2892   new_reg_base_value = 0;
2893   free (reg_seen);
2894   reg_seen = 0;
2895 }
2896
2897 void
2898 end_alias_analysis ()
2899 {
2900   free (reg_known_value + FIRST_PSEUDO_REGISTER);
2901   reg_known_value = 0;
2902   reg_known_value_size = 0;
2903   free (reg_known_equiv_p + FIRST_PSEUDO_REGISTER);
2904   reg_known_equiv_p = 0;
2905   reg_base_value = 0;
2906   reg_base_value_size = 0;
2907   if (alias_invariant)
2908     {
2909       free (alias_invariant);
2910       alias_invariant = 0;
2911     }
2912 }
2913
2914 #include "gt-alias.h"