OSDN Git Service

* alias.c (find_base_value): Use new_reg_base_value if it's live.
[pf3gnuchains/gcc-fork.git] / gcc / alias.c
1 /* Alias analysis for GNU C
2    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 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 bool 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 && lang_hooks.honor_readonly && TYPE_READONLY (t1))
336       || (t2 != 0 && lang_hooks.honor_readonly && 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         {
786           /* If we're inside init_alias_analysis, use new_reg_base_value
787              to reduce the number of relaxation iterations.  */
788           if (new_reg_base_value && new_reg_base_value[regno])
789             return new_reg_base_value[regno];
790
791           if (reg_base_value[regno])
792             return reg_base_value[regno];
793         }
794
795       return src;
796
797     case MEM:
798       /* Check for an argument passed in memory.  Only record in the
799          copying-arguments block; it is too hard to track changes
800          otherwise.  */
801       if (copying_arguments
802           && (XEXP (src, 0) == arg_pointer_rtx
803               || (GET_CODE (XEXP (src, 0)) == PLUS
804                   && XEXP (XEXP (src, 0), 0) == arg_pointer_rtx)))
805         return gen_rtx_ADDRESS (VOIDmode, src);
806       return 0;
807
808     case CONST:
809       src = XEXP (src, 0);
810       if (GET_CODE (src) != PLUS && GET_CODE (src) != MINUS)
811         break;
812
813       /* ... fall through ...  */
814
815     case PLUS:
816     case MINUS:
817       {
818         rtx temp, src_0 = XEXP (src, 0), src_1 = XEXP (src, 1);
819
820         /* If either operand is a REG that is a known pointer, then it
821            is the base.  */
822         if (REG_P (src_0) && REG_POINTER (src_0))
823           return find_base_value (src_0);
824         if (REG_P (src_1) && REG_POINTER (src_1))
825           return find_base_value (src_1);
826
827         /* If either operand is a REG, then see if we already have
828            a known value for it.  */
829         if (REG_P (src_0))
830           {
831             temp = find_base_value (src_0);
832             if (temp != 0)
833               src_0 = temp;
834           }
835
836         if (REG_P (src_1))
837           {
838             temp = find_base_value (src_1);
839             if (temp!= 0)
840               src_1 = temp;
841           }
842
843         /* If either base is named object or a special address
844            (like an argument or stack reference), then use it for the
845            base term.  */
846         if (src_0 != 0
847             && (GET_CODE (src_0) == SYMBOL_REF
848                 || GET_CODE (src_0) == LABEL_REF
849                 || (GET_CODE (src_0) == ADDRESS
850                     && GET_MODE (src_0) != VOIDmode)))
851           return src_0;
852
853         if (src_1 != 0
854             && (GET_CODE (src_1) == SYMBOL_REF
855                 || GET_CODE (src_1) == LABEL_REF
856                 || (GET_CODE (src_1) == ADDRESS
857                     && GET_MODE (src_1) != VOIDmode)))
858           return src_1;
859
860         /* Guess which operand is the base address:
861            If either operand is a symbol, then it is the base.  If
862            either operand is a CONST_INT, then the other is the base.  */
863         if (GET_CODE (src_1) == CONST_INT || CONSTANT_P (src_0))
864           return find_base_value (src_0);
865         else if (GET_CODE (src_0) == CONST_INT || CONSTANT_P (src_1))
866           return find_base_value (src_1);
867
868         return 0;
869       }
870
871     case LO_SUM:
872       /* The standard form is (lo_sum reg sym) so look only at the
873          second operand.  */
874       return find_base_value (XEXP (src, 1));
875
876     case AND:
877       /* If the second operand is constant set the base
878          address to the first operand.  */
879       if (GET_CODE (XEXP (src, 1)) == CONST_INT && INTVAL (XEXP (src, 1)) != 0)
880         return find_base_value (XEXP (src, 0));
881       return 0;
882
883     case TRUNCATE:
884       if (GET_MODE_SIZE (GET_MODE (src)) < GET_MODE_SIZE (Pmode))
885         break;
886       /* Fall through.  */
887     case HIGH:
888     case PRE_INC:
889     case PRE_DEC:
890     case POST_INC:
891     case POST_DEC:
892     case PRE_MODIFY:
893     case POST_MODIFY:
894       return find_base_value (XEXP (src, 0));
895
896     case ZERO_EXTEND:
897     case SIGN_EXTEND:   /* used for NT/Alpha pointers */
898       {
899         rtx temp = find_base_value (XEXP (src, 0));
900
901 #ifdef POINTERS_EXTEND_UNSIGNED
902         if (temp != 0 && CONSTANT_P (temp) && GET_MODE (temp) != Pmode)
903           temp = convert_memory_address (Pmode, temp);
904 #endif
905
906         return temp;
907       }
908
909     default:
910       break;
911     }
912
913   return 0;
914 }
915
916 /* Called from init_alias_analysis indirectly through note_stores.  */
917
918 /* While scanning insns to find base values, reg_seen[N] is nonzero if
919    register N has been set in this function.  */
920 static char *reg_seen;
921
922 /* Addresses which are known not to alias anything else are identified
923    by a unique integer.  */
924 static int unique_id;
925
926 static void
927 record_set (dest, set, data)
928      rtx dest, set;
929      void *data ATTRIBUTE_UNUSED;
930 {
931   unsigned regno;
932   rtx src;
933
934   if (GET_CODE (dest) != REG)
935     return;
936
937   regno = REGNO (dest);
938
939   if (regno >= reg_base_value_size)
940     abort ();
941
942   if (set)
943     {
944       /* A CLOBBER wipes out any old value but does not prevent a previously
945          unset register from acquiring a base address (i.e. reg_seen is not
946          set).  */
947       if (GET_CODE (set) == CLOBBER)
948         {
949           new_reg_base_value[regno] = 0;
950           return;
951         }
952       src = SET_SRC (set);
953     }
954   else
955     {
956       if (reg_seen[regno])
957         {
958           new_reg_base_value[regno] = 0;
959           return;
960         }
961       reg_seen[regno] = 1;
962       new_reg_base_value[regno] = gen_rtx_ADDRESS (Pmode,
963                                                    GEN_INT (unique_id++));
964       return;
965     }
966
967   /* This is not the first set.  If the new value is not related to the
968      old value, forget the base value. Note that the following code is
969      not detected:
970      extern int x, y;  int *p = &x; p += (&y-&x);
971      ANSI C does not allow computing the difference of addresses
972      of distinct top level objects.  */
973   if (new_reg_base_value[regno])
974     switch (GET_CODE (src))
975       {
976       case LO_SUM:
977       case MINUS:
978         if (XEXP (src, 0) != dest && XEXP (src, 1) != dest)
979           new_reg_base_value[regno] = 0;
980         break;
981       case PLUS:
982         /* If the value we add in the PLUS is also a valid base value,
983            this might be the actual base value, and the original value
984            an index.  */
985         {
986           rtx other = NULL_RTX;
987
988           if (XEXP (src, 0) == dest)
989             other = XEXP (src, 1);
990           else if (XEXP (src, 1) == dest)
991             other = XEXP (src, 0);
992
993           if (! other || find_base_value (other))
994             new_reg_base_value[regno] = 0;
995           break;
996         }
997       case AND:
998         if (XEXP (src, 0) != dest || GET_CODE (XEXP (src, 1)) != CONST_INT)
999           new_reg_base_value[regno] = 0;
1000         break;
1001       default:
1002         new_reg_base_value[regno] = 0;
1003         break;
1004       }
1005   /* If this is the first set of a register, record the value.  */
1006   else if ((regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
1007            && ! reg_seen[regno] && new_reg_base_value[regno] == 0)
1008     new_reg_base_value[regno] = find_base_value (src);
1009
1010   reg_seen[regno] = 1;
1011 }
1012
1013 /* Called from loop optimization when a new pseudo-register is
1014    created.  It indicates that REGNO is being set to VAL.  f INVARIANT
1015    is true then this value also describes an invariant relationship
1016    which can be used to deduce that two registers with unknown values
1017    are different.  */
1018
1019 void
1020 record_base_value (regno, val, invariant)
1021      unsigned int regno;
1022      rtx val;
1023      int invariant;
1024 {
1025   if (regno >= reg_base_value_size)
1026     return;
1027
1028   if (invariant && alias_invariant)
1029     alias_invariant[regno] = val;
1030
1031   if (GET_CODE (val) == REG)
1032     {
1033       if (REGNO (val) < reg_base_value_size)
1034         reg_base_value[regno] = reg_base_value[REGNO (val)];
1035
1036       return;
1037     }
1038
1039   reg_base_value[regno] = find_base_value (val);
1040 }
1041
1042 /* Clear alias info for a register.  This is used if an RTL transformation
1043    changes the value of a register.  This is used in flow by AUTO_INC_DEC
1044    optimizations.  We don't need to clear reg_base_value, since flow only
1045    changes the offset.  */
1046
1047 void
1048 clear_reg_alias_info (reg)
1049      rtx reg;
1050 {
1051   unsigned int regno = REGNO (reg);
1052
1053   if (regno < reg_known_value_size && regno >= FIRST_PSEUDO_REGISTER)
1054     reg_known_value[regno] = reg;
1055 }
1056
1057 /* Returns a canonical version of X, from the point of view alias
1058    analysis.  (For example, if X is a MEM whose address is a register,
1059    and the register has a known value (say a SYMBOL_REF), then a MEM
1060    whose address is the SYMBOL_REF is returned.)  */
1061
1062 rtx
1063 canon_rtx (x)
1064      rtx x;
1065 {
1066   /* Recursively look for equivalences.  */
1067   if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
1068       && REGNO (x) < reg_known_value_size)
1069     return reg_known_value[REGNO (x)] == x
1070       ? x : canon_rtx (reg_known_value[REGNO (x)]);
1071   else if (GET_CODE (x) == PLUS)
1072     {
1073       rtx x0 = canon_rtx (XEXP (x, 0));
1074       rtx x1 = canon_rtx (XEXP (x, 1));
1075
1076       if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
1077         {
1078           if (GET_CODE (x0) == CONST_INT)
1079             return plus_constant (x1, INTVAL (x0));
1080           else if (GET_CODE (x1) == CONST_INT)
1081             return plus_constant (x0, INTVAL (x1));
1082           return gen_rtx_PLUS (GET_MODE (x), x0, x1);
1083         }
1084     }
1085
1086   /* This gives us much better alias analysis when called from
1087      the loop optimizer.   Note we want to leave the original
1088      MEM alone, but need to return the canonicalized MEM with
1089      all the flags with their original values.  */
1090   else if (GET_CODE (x) == MEM)
1091     x = replace_equiv_address_nv (x, canon_rtx (XEXP (x, 0)));
1092
1093   return x;
1094 }
1095
1096 /* Return 1 if X and Y are identical-looking rtx's.
1097
1098    We use the data in reg_known_value above to see if two registers with
1099    different numbers are, in fact, equivalent.  */
1100
1101 static int
1102 rtx_equal_for_memref_p (x, y)
1103      rtx x, y;
1104 {
1105   int i;
1106   int j;
1107   enum rtx_code code;
1108   const char *fmt;
1109
1110   if (x == 0 && y == 0)
1111     return 1;
1112   if (x == 0 || y == 0)
1113     return 0;
1114
1115   x = canon_rtx (x);
1116   y = canon_rtx (y);
1117
1118   if (x == y)
1119     return 1;
1120
1121   code = GET_CODE (x);
1122   /* Rtx's of different codes cannot be equal.  */
1123   if (code != GET_CODE (y))
1124     return 0;
1125
1126   /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
1127      (REG:SI x) and (REG:HI x) are NOT equivalent.  */
1128
1129   if (GET_MODE (x) != GET_MODE (y))
1130     return 0;
1131
1132   /* Some RTL can be compared without a recursive examination.  */
1133   switch (code)
1134     {
1135     case VALUE:
1136       return CSELIB_VAL_PTR (x) == CSELIB_VAL_PTR (y);
1137
1138     case REG:
1139       return REGNO (x) == REGNO (y);
1140
1141     case LABEL_REF:
1142       return XEXP (x, 0) == XEXP (y, 0);
1143
1144     case SYMBOL_REF:
1145       return XSTR (x, 0) == XSTR (y, 0);
1146
1147     case CONST_INT:
1148     case CONST_DOUBLE:
1149       /* There's no need to compare the contents of CONST_DOUBLEs or
1150          CONST_INTs because pointer equality is a good enough
1151          comparison for these nodes.  */
1152       return 0;
1153
1154     case ADDRESSOF:
1155       return (XINT (x, 1) == XINT (y, 1)
1156               && rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0)));
1157
1158     default:
1159       break;
1160     }
1161
1162   /* For commutative operations, the RTX match if the operand match in any
1163      order.  Also handle the simple binary and unary cases without a loop.  */
1164   if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
1165     return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
1166              && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
1167             || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
1168                 && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
1169   else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
1170     return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
1171             && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)));
1172   else if (GET_RTX_CLASS (code) == '1')
1173     return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0));
1174
1175   /* Compare the elements.  If any pair of corresponding elements
1176      fail to match, return 0 for the whole things.
1177
1178      Limit cases to types which actually appear in addresses.  */
1179
1180   fmt = GET_RTX_FORMAT (code);
1181   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1182     {
1183       switch (fmt[i])
1184         {
1185         case 'i':
1186           if (XINT (x, i) != XINT (y, i))
1187             return 0;
1188           break;
1189
1190         case 'E':
1191           /* Two vectors must have the same length.  */
1192           if (XVECLEN (x, i) != XVECLEN (y, i))
1193             return 0;
1194
1195           /* And the corresponding elements must match.  */
1196           for (j = 0; j < XVECLEN (x, i); j++)
1197             if (rtx_equal_for_memref_p (XVECEXP (x, i, j),
1198                                         XVECEXP (y, i, j)) == 0)
1199               return 0;
1200           break;
1201
1202         case 'e':
1203           if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0)
1204             return 0;
1205           break;
1206
1207           /* This can happen for asm operands.  */
1208         case 's':
1209           if (strcmp (XSTR (x, i), XSTR (y, i)))
1210             return 0;
1211           break;
1212
1213         /* This can happen for an asm which clobbers memory.  */
1214         case '0':
1215           break;
1216
1217           /* It is believed that rtx's at this level will never
1218              contain anything but integers and other rtx's,
1219              except for within LABEL_REFs and SYMBOL_REFs.  */
1220         default:
1221           abort ();
1222         }
1223     }
1224   return 1;
1225 }
1226
1227 /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
1228    X and return it, or return 0 if none found.  */
1229
1230 static rtx
1231 find_symbolic_term (x)
1232      rtx x;
1233 {
1234   int i;
1235   enum rtx_code code;
1236   const char *fmt;
1237
1238   code = GET_CODE (x);
1239   if (code == SYMBOL_REF || code == LABEL_REF)
1240     return x;
1241   if (GET_RTX_CLASS (code) == 'o')
1242     return 0;
1243
1244   fmt = GET_RTX_FORMAT (code);
1245   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1246     {
1247       rtx t;
1248
1249       if (fmt[i] == 'e')
1250         {
1251           t = find_symbolic_term (XEXP (x, i));
1252           if (t != 0)
1253             return t;
1254         }
1255       else if (fmt[i] == 'E')
1256         break;
1257     }
1258   return 0;
1259 }
1260
1261 static rtx
1262 find_base_term (x)
1263      rtx x;
1264 {
1265   cselib_val *val;
1266   struct elt_loc_list *l;
1267
1268 #if defined (FIND_BASE_TERM)
1269   /* Try machine-dependent ways to find the base term.  */
1270   x = FIND_BASE_TERM (x);
1271 #endif
1272
1273   switch (GET_CODE (x))
1274     {
1275     case REG:
1276       return REG_BASE_VALUE (x);
1277
1278     case TRUNCATE:
1279       if (GET_MODE_SIZE (GET_MODE (x)) < GET_MODE_SIZE (Pmode))
1280         return 0;
1281       /* Fall through.  */
1282     case HIGH:
1283     case PRE_INC:
1284     case PRE_DEC:
1285     case POST_INC:
1286     case POST_DEC:
1287     case PRE_MODIFY:
1288     case POST_MODIFY:
1289       return find_base_term (XEXP (x, 0));
1290
1291     case ZERO_EXTEND:
1292     case SIGN_EXTEND:   /* Used for Alpha/NT pointers */
1293       {
1294         rtx temp = find_base_term (XEXP (x, 0));
1295
1296 #ifdef POINTERS_EXTEND_UNSIGNED
1297         if (temp != 0 && CONSTANT_P (temp) && GET_MODE (temp) != Pmode)
1298           temp = convert_memory_address (Pmode, temp);
1299 #endif
1300
1301         return temp;
1302       }
1303
1304     case VALUE:
1305       val = CSELIB_VAL_PTR (x);
1306       for (l = val->locs; l; l = l->next)
1307         if ((x = find_base_term (l->loc)) != 0)
1308           return x;
1309       return 0;
1310
1311     case CONST:
1312       x = XEXP (x, 0);
1313       if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
1314         return 0;
1315       /* fall through */
1316     case LO_SUM:
1317     case PLUS:
1318     case MINUS:
1319       {
1320         rtx tmp1 = XEXP (x, 0);
1321         rtx tmp2 = XEXP (x, 1);
1322
1323         /* This is a little bit tricky since we have to determine which of
1324            the two operands represents the real base address.  Otherwise this
1325            routine may return the index register instead of the base register.
1326
1327            That may cause us to believe no aliasing was possible, when in
1328            fact aliasing is possible.
1329
1330            We use a few simple tests to guess the base register.  Additional
1331            tests can certainly be added.  For example, if one of the operands
1332            is a shift or multiply, then it must be the index register and the
1333            other operand is the base register.  */
1334
1335         if (tmp1 == pic_offset_table_rtx && CONSTANT_P (tmp2))
1336           return find_base_term (tmp2);
1337
1338         /* If either operand is known to be a pointer, then use it
1339            to determine the base term.  */
1340         if (REG_P (tmp1) && REG_POINTER (tmp1))
1341           return find_base_term (tmp1);
1342
1343         if (REG_P (tmp2) && REG_POINTER (tmp2))
1344           return find_base_term (tmp2);
1345
1346         /* Neither operand was known to be a pointer.  Go ahead and find the
1347            base term for both operands.  */
1348         tmp1 = find_base_term (tmp1);
1349         tmp2 = find_base_term (tmp2);
1350
1351         /* If either base term is named object or a special address
1352            (like an argument or stack reference), then use it for the
1353            base term.  */
1354         if (tmp1 != 0
1355             && (GET_CODE (tmp1) == SYMBOL_REF
1356                 || GET_CODE (tmp1) == LABEL_REF
1357                 || (GET_CODE (tmp1) == ADDRESS
1358                     && GET_MODE (tmp1) != VOIDmode)))
1359           return tmp1;
1360
1361         if (tmp2 != 0
1362             && (GET_CODE (tmp2) == SYMBOL_REF
1363                 || GET_CODE (tmp2) == LABEL_REF
1364                 || (GET_CODE (tmp2) == ADDRESS
1365                     && GET_MODE (tmp2) != VOIDmode)))
1366           return tmp2;
1367
1368         /* We could not determine which of the two operands was the
1369            base register and which was the index.  So we can determine
1370            nothing from the base alias check.  */
1371         return 0;
1372       }
1373
1374     case AND:
1375       if (GET_CODE (XEXP (x, 1)) == CONST_INT && INTVAL (XEXP (x, 1)) != 0)
1376         return find_base_term (XEXP (x, 0));
1377       return 0;
1378
1379     case SYMBOL_REF:
1380     case LABEL_REF:
1381       return x;
1382
1383     case ADDRESSOF:
1384       return REG_BASE_VALUE (frame_pointer_rtx);
1385
1386     default:
1387       return 0;
1388     }
1389 }
1390
1391 /* Return 0 if the addresses X and Y are known to point to different
1392    objects, 1 if they might be pointers to the same object.  */
1393
1394 static int
1395 base_alias_check (x, y, x_mode, y_mode)
1396      rtx x, y;
1397      enum machine_mode x_mode, y_mode;
1398 {
1399   rtx x_base = find_base_term (x);
1400   rtx y_base = find_base_term (y);
1401
1402   /* If the address itself has no known base see if a known equivalent
1403      value has one.  If either address still has no known base, nothing
1404      is known about aliasing.  */
1405   if (x_base == 0)
1406     {
1407       rtx x_c;
1408
1409       if (! flag_expensive_optimizations || (x_c = canon_rtx (x)) == x)
1410         return 1;
1411
1412       x_base = find_base_term (x_c);
1413       if (x_base == 0)
1414         return 1;
1415     }
1416
1417   if (y_base == 0)
1418     {
1419       rtx y_c;
1420       if (! flag_expensive_optimizations || (y_c = canon_rtx (y)) == y)
1421         return 1;
1422
1423       y_base = find_base_term (y_c);
1424       if (y_base == 0)
1425         return 1;
1426     }
1427
1428   /* If the base addresses are equal nothing is known about aliasing.  */
1429   if (rtx_equal_p (x_base, y_base))
1430     return 1;
1431
1432   /* The base addresses of the read and write are different expressions.
1433      If they are both symbols and they are not accessed via AND, there is
1434      no conflict.  We can bring knowledge of object alignment into play
1435      here.  For example, on alpha, "char a, b;" can alias one another,
1436      though "char a; long b;" cannot.  */
1437   if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
1438     {
1439       if (GET_CODE (x) == AND && GET_CODE (y) == AND)
1440         return 1;
1441       if (GET_CODE (x) == AND
1442           && (GET_CODE (XEXP (x, 1)) != CONST_INT
1443               || (int) GET_MODE_UNIT_SIZE (y_mode) < -INTVAL (XEXP (x, 1))))
1444         return 1;
1445       if (GET_CODE (y) == AND
1446           && (GET_CODE (XEXP (y, 1)) != CONST_INT
1447               || (int) GET_MODE_UNIT_SIZE (x_mode) < -INTVAL (XEXP (y, 1))))
1448         return 1;
1449       /* Differing symbols never alias.  */
1450       return 0;
1451     }
1452
1453   /* If one address is a stack reference there can be no alias:
1454      stack references using different base registers do not alias,
1455      a stack reference can not alias a parameter, and a stack reference
1456      can not alias a global.  */
1457   if ((GET_CODE (x_base) == ADDRESS && GET_MODE (x_base) == Pmode)
1458       || (GET_CODE (y_base) == ADDRESS && GET_MODE (y_base) == Pmode))
1459     return 0;
1460
1461   if (! flag_argument_noalias)
1462     return 1;
1463
1464   if (flag_argument_noalias > 1)
1465     return 0;
1466
1467   /* Weak noalias assertion (arguments are distinct, but may match globals).  */
1468   return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode);
1469 }
1470
1471 /* Convert the address X into something we can use.  This is done by returning
1472    it unchanged unless it is a value; in the latter case we call cselib to get
1473    a more useful rtx.  */
1474
1475 rtx
1476 get_addr (x)
1477      rtx x;
1478 {
1479   cselib_val *v;
1480   struct elt_loc_list *l;
1481
1482   if (GET_CODE (x) != VALUE)
1483     return x;
1484   v = CSELIB_VAL_PTR (x);
1485   for (l = v->locs; l; l = l->next)
1486     if (CONSTANT_P (l->loc))
1487       return l->loc;
1488   for (l = v->locs; l; l = l->next)
1489     if (GET_CODE (l->loc) != REG && GET_CODE (l->loc) != MEM)
1490       return l->loc;
1491   if (v->locs)
1492     return v->locs->loc;
1493   return x;
1494 }
1495
1496 /*  Return the address of the (N_REFS + 1)th memory reference to ADDR
1497     where SIZE is the size in bytes of the memory reference.  If ADDR
1498     is not modified by the memory reference then ADDR is returned.  */
1499
1500 rtx
1501 addr_side_effect_eval (addr, size, n_refs)
1502      rtx addr;
1503      int size;
1504      int n_refs;
1505 {
1506   int offset = 0;
1507
1508   switch (GET_CODE (addr))
1509     {
1510     case PRE_INC:
1511       offset = (n_refs + 1) * size;
1512       break;
1513     case PRE_DEC:
1514       offset = -(n_refs + 1) * size;
1515       break;
1516     case POST_INC:
1517       offset = n_refs * size;
1518       break;
1519     case POST_DEC:
1520       offset = -n_refs * size;
1521       break;
1522
1523     default:
1524       return addr;
1525     }
1526
1527   if (offset)
1528     addr = gen_rtx_PLUS (GET_MODE (addr), XEXP (addr, 0), GEN_INT (offset));
1529   else
1530     addr = XEXP (addr, 0);
1531
1532   return addr;
1533 }
1534
1535 /* Return nonzero if X and Y (memory addresses) could reference the
1536    same location in memory.  C is an offset accumulator.  When
1537    C is nonzero, we are testing aliases between X and Y + C.
1538    XSIZE is the size in bytes of the X reference,
1539    similarly YSIZE is the size in bytes for Y.
1540
1541    If XSIZE or YSIZE is zero, we do not know the amount of memory being
1542    referenced (the reference was BLKmode), so make the most pessimistic
1543    assumptions.
1544
1545    If XSIZE or YSIZE is negative, we may access memory outside the object
1546    being referenced as a side effect.  This can happen when using AND to
1547    align memory references, as is done on the Alpha.
1548
1549    Nice to notice that varying addresses cannot conflict with fp if no
1550    local variables had their addresses taken, but that's too hard now.  */
1551
1552 static int
1553 memrefs_conflict_p (xsize, x, ysize, y, c)
1554      rtx x, y;
1555      int xsize, ysize;
1556      HOST_WIDE_INT c;
1557 {
1558   if (GET_CODE (x) == VALUE)
1559     x = get_addr (x);
1560   if (GET_CODE (y) == VALUE)
1561     y = get_addr (y);
1562   if (GET_CODE (x) == HIGH)
1563     x = XEXP (x, 0);
1564   else if (GET_CODE (x) == LO_SUM)
1565     x = XEXP (x, 1);
1566   else
1567     x = canon_rtx (addr_side_effect_eval (x, xsize, 0));
1568   if (GET_CODE (y) == HIGH)
1569     y = XEXP (y, 0);
1570   else if (GET_CODE (y) == LO_SUM)
1571     y = XEXP (y, 1);
1572   else
1573     y = canon_rtx (addr_side_effect_eval (y, ysize, 0));
1574
1575   if (rtx_equal_for_memref_p (x, y))
1576     {
1577       if (xsize <= 0 || ysize <= 0)
1578         return 1;
1579       if (c >= 0 && xsize > c)
1580         return 1;
1581       if (c < 0 && ysize+c > 0)
1582         return 1;
1583       return 0;
1584     }
1585
1586   /* This code used to check for conflicts involving stack references and
1587      globals but the base address alias code now handles these cases.  */
1588
1589   if (GET_CODE (x) == PLUS)
1590     {
1591       /* The fact that X is canonicalized means that this
1592          PLUS rtx is canonicalized.  */
1593       rtx x0 = XEXP (x, 0);
1594       rtx x1 = XEXP (x, 1);
1595
1596       if (GET_CODE (y) == PLUS)
1597         {
1598           /* The fact that Y is canonicalized means that this
1599              PLUS rtx is canonicalized.  */
1600           rtx y0 = XEXP (y, 0);
1601           rtx y1 = XEXP (y, 1);
1602
1603           if (rtx_equal_for_memref_p (x1, y1))
1604             return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1605           if (rtx_equal_for_memref_p (x0, y0))
1606             return memrefs_conflict_p (xsize, x1, ysize, y1, c);
1607           if (GET_CODE (x1) == CONST_INT)
1608             {
1609               if (GET_CODE (y1) == CONST_INT)
1610                 return memrefs_conflict_p (xsize, x0, ysize, y0,
1611                                            c - INTVAL (x1) + INTVAL (y1));
1612               else
1613                 return memrefs_conflict_p (xsize, x0, ysize, y,
1614                                            c - INTVAL (x1));
1615             }
1616           else if (GET_CODE (y1) == CONST_INT)
1617             return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1618
1619           return 1;
1620         }
1621       else if (GET_CODE (x1) == CONST_INT)
1622         return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
1623     }
1624   else if (GET_CODE (y) == PLUS)
1625     {
1626       /* The fact that Y is canonicalized means that this
1627          PLUS rtx is canonicalized.  */
1628       rtx y0 = XEXP (y, 0);
1629       rtx y1 = XEXP (y, 1);
1630
1631       if (GET_CODE (y1) == CONST_INT)
1632         return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1633       else
1634         return 1;
1635     }
1636
1637   if (GET_CODE (x) == GET_CODE (y))
1638     switch (GET_CODE (x))
1639       {
1640       case MULT:
1641         {
1642           /* Handle cases where we expect the second operands to be the
1643              same, and check only whether the first operand would conflict
1644              or not.  */
1645           rtx x0, y0;
1646           rtx x1 = canon_rtx (XEXP (x, 1));
1647           rtx y1 = canon_rtx (XEXP (y, 1));
1648           if (! rtx_equal_for_memref_p (x1, y1))
1649             return 1;
1650           x0 = canon_rtx (XEXP (x, 0));
1651           y0 = canon_rtx (XEXP (y, 0));
1652           if (rtx_equal_for_memref_p (x0, y0))
1653             return (xsize == 0 || ysize == 0
1654                     || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1655
1656           /* Can't properly adjust our sizes.  */
1657           if (GET_CODE (x1) != CONST_INT)
1658             return 1;
1659           xsize /= INTVAL (x1);
1660           ysize /= INTVAL (x1);
1661           c /= INTVAL (x1);
1662           return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1663         }
1664
1665       case REG:
1666         /* Are these registers known not to be equal?  */
1667         if (alias_invariant)
1668           {
1669             unsigned int r_x = REGNO (x), r_y = REGNO (y);
1670             rtx i_x, i_y;       /* invariant relationships of X and Y */
1671
1672             i_x = r_x >= reg_base_value_size ? 0 : alias_invariant[r_x];
1673             i_y = r_y >= reg_base_value_size ? 0 : alias_invariant[r_y];
1674
1675             if (i_x == 0 && i_y == 0)
1676               break;
1677
1678             if (! memrefs_conflict_p (xsize, i_x ? i_x : x,
1679                                       ysize, i_y ? i_y : y, c))
1680               return 0;
1681           }
1682         break;
1683
1684       default:
1685         break;
1686       }
1687
1688   /* Treat an access through an AND (e.g. a subword access on an Alpha)
1689      as an access with indeterminate size.  Assume that references
1690      besides AND are aligned, so if the size of the other reference is
1691      at least as large as the alignment, assume no other overlap.  */
1692   if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT)
1693     {
1694       if (GET_CODE (y) == AND || ysize < -INTVAL (XEXP (x, 1)))
1695         xsize = -1;
1696       return memrefs_conflict_p (xsize, XEXP (x, 0), ysize, y, c);
1697     }
1698   if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT)
1699     {
1700       /* ??? If we are indexing far enough into the array/structure, we
1701          may yet be able to determine that we can not overlap.  But we
1702          also need to that we are far enough from the end not to overlap
1703          a following reference, so we do nothing with that for now.  */
1704       if (GET_CODE (x) == AND || xsize < -INTVAL (XEXP (y, 1)))
1705         ysize = -1;
1706       return memrefs_conflict_p (xsize, x, ysize, XEXP (y, 0), c);
1707     }
1708
1709   if (GET_CODE (x) == ADDRESSOF)
1710     {
1711       if (y == frame_pointer_rtx
1712           || GET_CODE (y) == ADDRESSOF)
1713         return xsize <= 0 || ysize <= 0;
1714     }
1715   if (GET_CODE (y) == ADDRESSOF)
1716     {
1717       if (x == frame_pointer_rtx)
1718         return xsize <= 0 || ysize <= 0;
1719     }
1720
1721   if (CONSTANT_P (x))
1722     {
1723       if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
1724         {
1725           c += (INTVAL (y) - INTVAL (x));
1726           return (xsize <= 0 || ysize <= 0
1727                   || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1728         }
1729
1730       if (GET_CODE (x) == CONST)
1731         {
1732           if (GET_CODE (y) == CONST)
1733             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1734                                        ysize, canon_rtx (XEXP (y, 0)), c);
1735           else
1736             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1737                                        ysize, y, c);
1738         }
1739       if (GET_CODE (y) == CONST)
1740         return memrefs_conflict_p (xsize, x, ysize,
1741                                    canon_rtx (XEXP (y, 0)), c);
1742
1743       if (CONSTANT_P (y))
1744         return (xsize <= 0 || ysize <= 0
1745                 || (rtx_equal_for_memref_p (x, y)
1746                     && ((c >= 0 && xsize > c) || (c < 0 && ysize+c > 0))));
1747
1748       return 1;
1749     }
1750   return 1;
1751 }
1752
1753 /* Functions to compute memory dependencies.
1754
1755    Since we process the insns in execution order, we can build tables
1756    to keep track of what registers are fixed (and not aliased), what registers
1757    are varying in known ways, and what registers are varying in unknown
1758    ways.
1759
1760    If both memory references are volatile, then there must always be a
1761    dependence between the two references, since their order can not be
1762    changed.  A volatile and non-volatile reference can be interchanged
1763    though.
1764
1765    A MEM_IN_STRUCT reference at a non-AND varying address can never
1766    conflict with a non-MEM_IN_STRUCT reference at a fixed address.  We
1767    also must allow AND addresses, because they may generate accesses
1768    outside the object being referenced.  This is used to generate
1769    aligned addresses from unaligned addresses, for instance, the alpha
1770    storeqi_unaligned pattern.  */
1771
1772 /* Read dependence: X is read after read in MEM takes place.  There can
1773    only be a dependence here if both reads are volatile.  */
1774
1775 int
1776 read_dependence (mem, x)
1777      rtx mem;
1778      rtx x;
1779 {
1780   return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
1781 }
1782
1783 /* Returns MEM1 if and only if MEM1 is a scalar at a fixed address and
1784    MEM2 is a reference to a structure at a varying address, or returns
1785    MEM2 if vice versa.  Otherwise, returns NULL_RTX.  If a non-NULL
1786    value is returned MEM1 and MEM2 can never alias.  VARIES_P is used
1787    to decide whether or not an address may vary; it should return
1788    nonzero whenever variation is possible.
1789    MEM1_ADDR and MEM2_ADDR are the addresses of MEM1 and MEM2.  */
1790
1791 static rtx
1792 fixed_scalar_and_varying_struct_p (mem1, mem2, mem1_addr, mem2_addr, varies_p)
1793      rtx mem1, mem2;
1794      rtx mem1_addr, mem2_addr;
1795      int (*varies_p) PARAMS ((rtx, int));
1796 {
1797   if (! flag_strict_aliasing)
1798     return NULL_RTX;
1799
1800   if (MEM_SCALAR_P (mem1) && MEM_IN_STRUCT_P (mem2)
1801       && !varies_p (mem1_addr, 1) && varies_p (mem2_addr, 1))
1802     /* MEM1 is a scalar at a fixed address; MEM2 is a struct at a
1803        varying address.  */
1804     return mem1;
1805
1806   if (MEM_IN_STRUCT_P (mem1) && MEM_SCALAR_P (mem2)
1807       && varies_p (mem1_addr, 1) && !varies_p (mem2_addr, 1))
1808     /* MEM2 is a scalar at a fixed address; MEM1 is a struct at a
1809        varying address.  */
1810     return mem2;
1811
1812   return NULL_RTX;
1813 }
1814
1815 /* Returns nonzero if something about the mode or address format MEM1
1816    indicates that it might well alias *anything*.  */
1817
1818 static int
1819 aliases_everything_p (mem)
1820      rtx mem;
1821 {
1822   if (GET_CODE (XEXP (mem, 0)) == AND)
1823     /* If the address is an AND, its very hard to know at what it is
1824        actually pointing.  */
1825     return 1;
1826
1827   return 0;
1828 }
1829
1830 /* Return true if we can determine that the fields referenced cannot
1831    overlap for any pair of objects.  */
1832
1833 static bool
1834 nonoverlapping_component_refs_p (x, y)
1835      tree x, y;
1836 {
1837   tree fieldx, fieldy, typex, typey, orig_y;
1838
1839   do
1840     {
1841       /* The comparison has to be done at a common type, since we don't
1842          know how the inheritance hierarchy works.  */
1843       orig_y = y;
1844       do
1845         {
1846           fieldx = TREE_OPERAND (x, 1);
1847           typex = DECL_FIELD_CONTEXT (fieldx);
1848
1849           y = orig_y;
1850           do
1851             {
1852               fieldy = TREE_OPERAND (y, 1);
1853               typey = DECL_FIELD_CONTEXT (fieldy);
1854
1855               if (typex == typey)
1856                 goto found;
1857
1858               y = TREE_OPERAND (y, 0);
1859             }
1860           while (y && TREE_CODE (y) == COMPONENT_REF);
1861
1862           x = TREE_OPERAND (x, 0);
1863         }
1864       while (x && TREE_CODE (x) == COMPONENT_REF);
1865
1866       /* Never found a common type.  */
1867       return false;
1868
1869     found:
1870       /* If we're left with accessing different fields of a structure,
1871          then no overlap.  */
1872       if (TREE_CODE (typex) == RECORD_TYPE
1873           && fieldx != fieldy)
1874         return true;
1875
1876       /* The comparison on the current field failed.  If we're accessing
1877          a very nested structure, look at the next outer level.  */
1878       x = TREE_OPERAND (x, 0);
1879       y = TREE_OPERAND (y, 0);
1880     }
1881   while (x && y
1882          && TREE_CODE (x) == COMPONENT_REF
1883          && TREE_CODE (y) == COMPONENT_REF);
1884
1885   return false;
1886 }
1887
1888 /* Look at the bottom of the COMPONENT_REF list for a DECL, and return it.  */
1889
1890 static tree
1891 decl_for_component_ref (x)
1892      tree x;
1893 {
1894   do
1895     {
1896       x = TREE_OPERAND (x, 0);
1897     }
1898   while (x && TREE_CODE (x) == COMPONENT_REF);
1899
1900   return x && DECL_P (x) ? x : NULL_TREE;
1901 }
1902
1903 /* Walk up the COMPONENT_REF list and adjust OFFSET to compensate for the
1904    offset of the field reference.  */
1905
1906 static rtx
1907 adjust_offset_for_component_ref (x, offset)
1908      tree x;
1909      rtx offset;
1910 {
1911   HOST_WIDE_INT ioffset;
1912
1913   if (! offset)
1914     return NULL_RTX;
1915
1916   ioffset = INTVAL (offset);
1917   do
1918     {
1919       tree field = TREE_OPERAND (x, 1);
1920
1921       if (! host_integerp (DECL_FIELD_OFFSET (field), 1))
1922         return NULL_RTX;
1923       ioffset += (tree_low_cst (DECL_FIELD_OFFSET (field), 1)
1924                   + (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
1925                      / BITS_PER_UNIT));
1926
1927       x = TREE_OPERAND (x, 0);
1928     }
1929   while (x && TREE_CODE (x) == COMPONENT_REF);
1930
1931   return GEN_INT (ioffset);
1932 }
1933
1934 /* Return nonzero if we can deterimine the exprs corresponding to memrefs
1935    X and Y and they do not overlap.  */
1936
1937 static int
1938 nonoverlapping_memrefs_p (x, y)
1939      rtx x, y;
1940 {
1941   tree exprx = MEM_EXPR (x), expry = MEM_EXPR (y);
1942   rtx rtlx, rtly;
1943   rtx basex, basey;
1944   rtx moffsetx, moffsety;
1945   HOST_WIDE_INT offsetx = 0, offsety = 0, sizex, sizey, tem;
1946
1947   /* Unless both have exprs, we can't tell anything.  */
1948   if (exprx == 0 || expry == 0)
1949     return 0;
1950
1951   /* If both are field references, we may be able to determine something.  */
1952   if (TREE_CODE (exprx) == COMPONENT_REF
1953       && TREE_CODE (expry) == COMPONENT_REF
1954       && nonoverlapping_component_refs_p (exprx, expry))
1955     return 1;
1956
1957   /* If the field reference test failed, look at the DECLs involved.  */
1958   moffsetx = MEM_OFFSET (x);
1959   if (TREE_CODE (exprx) == COMPONENT_REF)
1960     {
1961       tree t = decl_for_component_ref (exprx);
1962       if (! t)
1963         return 0;
1964       moffsetx = adjust_offset_for_component_ref (exprx, moffsetx);
1965       exprx = t;
1966     }
1967   else if (TREE_CODE (exprx) == INDIRECT_REF)
1968     {
1969       exprx = TREE_OPERAND (exprx, 0);
1970       if (flag_argument_noalias < 2
1971           || TREE_CODE (exprx) != PARM_DECL)
1972         return 0;
1973     }
1974
1975   moffsety = MEM_OFFSET (y);
1976   if (TREE_CODE (expry) == COMPONENT_REF)
1977     {
1978       tree t = decl_for_component_ref (expry);
1979       if (! t)
1980         return 0;
1981       moffsety = adjust_offset_for_component_ref (expry, moffsety);
1982       expry = t;
1983     }
1984   else if (TREE_CODE (expry) == INDIRECT_REF)
1985     {
1986       expry = TREE_OPERAND (expry, 0);
1987       if (flag_argument_noalias < 2
1988           || TREE_CODE (expry) != PARM_DECL)
1989         return 0;
1990     }
1991
1992   if (! DECL_P (exprx) || ! DECL_P (expry))
1993     return 0;
1994
1995   rtlx = DECL_RTL (exprx);
1996   rtly = DECL_RTL (expry);
1997
1998   /* If either RTL is not a MEM, it must be a REG or CONCAT, meaning they
1999      can't overlap unless they are the same because we never reuse that part
2000      of the stack frame used for locals for spilled pseudos.  */
2001   if ((GET_CODE (rtlx) != MEM || GET_CODE (rtly) != MEM)
2002       && ! rtx_equal_p (rtlx, rtly))
2003     return 1;
2004
2005   /* Get the base and offsets of both decls.  If either is a register, we
2006      know both are and are the same, so use that as the base.  The only
2007      we can avoid overlap is if we can deduce that they are nonoverlapping
2008      pieces of that decl, which is very rare.  */
2009   basex = GET_CODE (rtlx) == MEM ? XEXP (rtlx, 0) : rtlx;
2010   if (GET_CODE (basex) == PLUS && GET_CODE (XEXP (basex, 1)) == CONST_INT)
2011     offsetx = INTVAL (XEXP (basex, 1)), basex = XEXP (basex, 0);
2012
2013   basey = GET_CODE (rtly) == MEM ? XEXP (rtly, 0) : rtly;
2014   if (GET_CODE (basey) == PLUS && GET_CODE (XEXP (basey, 1)) == CONST_INT)
2015     offsety = INTVAL (XEXP (basey, 1)), basey = XEXP (basey, 0);
2016
2017   /* If the bases are different, we know they do not overlap if both
2018      are constants or if one is a constant and the other a pointer into the
2019      stack frame.  Otherwise a different base means we can't tell if they
2020      overlap or not.  */
2021   if (! rtx_equal_p (basex, basey))
2022     return ((CONSTANT_P (basex) && CONSTANT_P (basey))
2023             || (CONSTANT_P (basex) && REG_P (basey)
2024                 && REGNO_PTR_FRAME_P (REGNO (basey)))
2025             || (CONSTANT_P (basey) && REG_P (basex)
2026                 && REGNO_PTR_FRAME_P (REGNO (basex))));
2027
2028   sizex = (GET_CODE (rtlx) != MEM ? (int) GET_MODE_SIZE (GET_MODE (rtlx))
2029            : MEM_SIZE (rtlx) ? INTVAL (MEM_SIZE (rtlx))
2030            : -1);
2031   sizey = (GET_CODE (rtly) != MEM ? (int) GET_MODE_SIZE (GET_MODE (rtly))
2032            : MEM_SIZE (rtly) ? INTVAL (MEM_SIZE (rtly)) :
2033            -1);
2034
2035   /* If we have an offset for either memref, it can update the values computed
2036      above.  */
2037   if (moffsetx)
2038     offsetx += INTVAL (moffsetx), sizex -= INTVAL (moffsetx);
2039   if (moffsety)
2040     offsety += INTVAL (moffsety), sizey -= INTVAL (moffsety);
2041
2042   /* If a memref has both a size and an offset, we can use the smaller size.
2043      We can't do this if the offset isn't known because we must view this
2044      memref as being anywhere inside the DECL's MEM.  */
2045   if (MEM_SIZE (x) && moffsetx)
2046     sizex = INTVAL (MEM_SIZE (x));
2047   if (MEM_SIZE (y) && moffsety)
2048     sizey = INTVAL (MEM_SIZE (y));
2049
2050   /* Put the values of the memref with the lower offset in X's values.  */
2051   if (offsetx > offsety)
2052     {
2053       tem = offsetx, offsetx = offsety, offsety = tem;
2054       tem = sizex, sizex = sizey, sizey = tem;
2055     }
2056
2057   /* If we don't know the size of the lower-offset value, we can't tell
2058      if they conflict.  Otherwise, we do the test.  */
2059   return sizex >= 0 && offsety >= offsetx + sizex;
2060 }
2061
2062 /* True dependence: X is read after store in MEM takes place.  */
2063
2064 int
2065 true_dependence (mem, mem_mode, x, varies)
2066      rtx mem;
2067      enum machine_mode mem_mode;
2068      rtx x;
2069      int (*varies) PARAMS ((rtx, int));
2070 {
2071   rtx x_addr, mem_addr;
2072   rtx base;
2073
2074   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2075     return 1;
2076
2077   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2078      This is used in epilogue deallocation functions.  */
2079   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
2080     return 1;
2081   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2082     return 1;
2083
2084   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2085     return 0;
2086
2087   /* Unchanging memory can't conflict with non-unchanging memory.
2088      A non-unchanging read can conflict with a non-unchanging write.
2089      An unchanging read can conflict with an unchanging write since
2090      there may be a single store to this address to initialize it.
2091      Note that an unchanging store can conflict with a non-unchanging read
2092      since we have to make conservative assumptions when we have a
2093      record with readonly fields and we are copying the whole thing.
2094      Just fall through to the code below to resolve potential conflicts.
2095      This won't handle all cases optimally, but the possible performance
2096      loss should be negligible.  */
2097   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
2098     return 0;
2099
2100   if (nonoverlapping_memrefs_p (mem, x))
2101     return 0;
2102
2103   if (mem_mode == VOIDmode)
2104     mem_mode = GET_MODE (mem);
2105
2106   x_addr = get_addr (XEXP (x, 0));
2107   mem_addr = get_addr (XEXP (mem, 0));
2108
2109   base = find_base_term (x_addr);
2110   if (base && (GET_CODE (base) == LABEL_REF
2111                || (GET_CODE (base) == SYMBOL_REF
2112                    && CONSTANT_POOL_ADDRESS_P (base))))
2113     return 0;
2114
2115   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
2116     return 0;
2117
2118   x_addr = canon_rtx (x_addr);
2119   mem_addr = canon_rtx (mem_addr);
2120
2121   if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
2122                             SIZE_FOR_MODE (x), x_addr, 0))
2123     return 0;
2124
2125   if (aliases_everything_p (x))
2126     return 1;
2127
2128   /* We cannot use aliases_everything_p to test MEM, since we must look
2129      at MEM_MODE, rather than GET_MODE (MEM).  */
2130   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
2131     return 1;
2132
2133   /* In true_dependence we also allow BLKmode to alias anything.  Why
2134      don't we do this in anti_dependence and output_dependence?  */
2135   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
2136     return 1;
2137
2138   return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2139                                               varies);
2140 }
2141
2142 /* Canonical true dependence: X is read after store in MEM takes place.
2143    Variant of true_dependence which assumes MEM has already been
2144    canonicalized (hence we no longer do that here).
2145    The mem_addr argument has been added, since true_dependence computed
2146    this value prior to canonicalizing.  */
2147
2148 int
2149 canon_true_dependence (mem, mem_mode, mem_addr, x, varies)
2150      rtx mem, mem_addr, x;
2151      enum machine_mode mem_mode;
2152      int (*varies) PARAMS ((rtx, int));
2153 {
2154   rtx x_addr;
2155
2156   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2157     return 1;
2158
2159   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2160      This is used in epilogue deallocation functions.  */
2161   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
2162     return 1;
2163   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2164     return 1;
2165
2166   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2167     return 0;
2168
2169   /* If X is an unchanging read, then it can't possibly conflict with any
2170      non-unchanging store.  It may conflict with an unchanging write though,
2171      because there may be a single store to this address to initialize it.
2172      Just fall through to the code below to resolve the case where we have
2173      both an unchanging read and an unchanging write.  This won't handle all
2174      cases optimally, but the possible performance loss should be
2175      negligible.  */
2176   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
2177     return 0;
2178
2179   if (nonoverlapping_memrefs_p (x, mem))
2180     return 0;
2181
2182   x_addr = get_addr (XEXP (x, 0));
2183
2184   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
2185     return 0;
2186
2187   x_addr = canon_rtx (x_addr);
2188   if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
2189                             SIZE_FOR_MODE (x), x_addr, 0))
2190     return 0;
2191
2192   if (aliases_everything_p (x))
2193     return 1;
2194
2195   /* We cannot use aliases_everything_p to test MEM, since we must look
2196      at MEM_MODE, rather than GET_MODE (MEM).  */
2197   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
2198     return 1;
2199
2200   /* In true_dependence we also allow BLKmode to alias anything.  Why
2201      don't we do this in anti_dependence and output_dependence?  */
2202   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
2203     return 1;
2204
2205   return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2206                                               varies);
2207 }
2208
2209 /* Returns nonzero if a write to X might alias a previous read from
2210    (or, if WRITEP is nonzero, a write to) MEM.  */
2211
2212 static int
2213 write_dependence_p (mem, x, writep)
2214      rtx mem;
2215      rtx x;
2216      int writep;
2217 {
2218   rtx x_addr, mem_addr;
2219   rtx fixed_scalar;
2220   rtx base;
2221
2222   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2223     return 1;
2224
2225   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2226      This is used in epilogue deallocation functions.  */
2227   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
2228     return 1;
2229   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2230     return 1;
2231
2232   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2233     return 0;
2234
2235   /* Unchanging memory can't conflict with non-unchanging memory.  */
2236   if (RTX_UNCHANGING_P (x) != RTX_UNCHANGING_P (mem))
2237     return 0;
2238
2239   /* If MEM is an unchanging read, then it can't possibly conflict with
2240      the store to X, because there is at most one store to MEM, and it must
2241      have occurred somewhere before MEM.  */
2242   if (! writep && RTX_UNCHANGING_P (mem))
2243     return 0;
2244
2245   if (nonoverlapping_memrefs_p (x, mem))
2246     return 0;
2247
2248   x_addr = get_addr (XEXP (x, 0));
2249   mem_addr = get_addr (XEXP (mem, 0));
2250
2251   if (! writep)
2252     {
2253       base = find_base_term (mem_addr);
2254       if (base && (GET_CODE (base) == LABEL_REF
2255                    || (GET_CODE (base) == SYMBOL_REF
2256                        && CONSTANT_POOL_ADDRESS_P (base))))
2257         return 0;
2258     }
2259
2260   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x),
2261                           GET_MODE (mem)))
2262     return 0;
2263
2264   x_addr = canon_rtx (x_addr);
2265   mem_addr = canon_rtx (mem_addr);
2266
2267   if (!memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
2268                            SIZE_FOR_MODE (x), x_addr, 0))
2269     return 0;
2270
2271   fixed_scalar
2272     = fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2273                                          rtx_addr_varies_p);
2274
2275   return (!(fixed_scalar == mem && !aliases_everything_p (x))
2276           && !(fixed_scalar == x && !aliases_everything_p (mem)));
2277 }
2278
2279 /* Anti dependence: X is written after read in MEM takes place.  */
2280
2281 int
2282 anti_dependence (mem, x)
2283      rtx mem;
2284      rtx x;
2285 {
2286   return write_dependence_p (mem, x, /*writep=*/0);
2287 }
2288
2289 /* Output dependence: X is written after store in MEM takes place.  */
2290
2291 int
2292 output_dependence (mem, x)
2293      rtx mem;
2294      rtx x;
2295 {
2296   return write_dependence_p (mem, x, /*writep=*/1);
2297 }
2298 \f
2299 /* A subroutine of nonlocal_mentioned_p, returns 1 if *LOC mentions
2300    something which is not local to the function and is not constant.  */
2301
2302 static int
2303 nonlocal_mentioned_p_1 (loc, data)
2304      rtx *loc;
2305      void *data ATTRIBUTE_UNUSED;
2306 {
2307   rtx x = *loc;
2308   rtx base;
2309   int regno;
2310
2311   if (! x)
2312     return 0;
2313
2314   switch (GET_CODE (x))
2315     {
2316     case SUBREG:
2317       if (GET_CODE (SUBREG_REG (x)) == REG)
2318         {
2319           /* Global registers are not local.  */
2320           if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER
2321               && global_regs[subreg_regno (x)])
2322             return 1;
2323           return 0;
2324         }
2325       break;
2326
2327     case REG:
2328       regno = REGNO (x);
2329       /* Global registers are not local.  */
2330       if (regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
2331         return 1;
2332       return 0;
2333
2334     case SCRATCH:
2335     case PC:
2336     case CC0:
2337     case CONST_INT:
2338     case CONST_DOUBLE:
2339     case CONST_VECTOR:
2340     case CONST:
2341     case LABEL_REF:
2342       return 0;
2343
2344     case SYMBOL_REF:
2345       /* Constants in the function's constants pool are constant.  */
2346       if (CONSTANT_POOL_ADDRESS_P (x))
2347         return 0;
2348       return 1;
2349
2350     case CALL:
2351       /* Non-constant calls and recursion are not local.  */
2352       return 1;
2353
2354     case MEM:
2355       /* Be overly conservative and consider any volatile memory
2356          reference as not local.  */
2357       if (MEM_VOLATILE_P (x))
2358         return 1;
2359       base = find_base_term (XEXP (x, 0));
2360       if (base)
2361         {
2362           /* A Pmode ADDRESS could be a reference via the structure value
2363              address or static chain.  Such memory references are nonlocal.
2364
2365              Thus, we have to examine the contents of the ADDRESS to find
2366              out if this is a local reference or not.  */
2367           if (GET_CODE (base) == ADDRESS
2368               && GET_MODE (base) == Pmode
2369               && (XEXP (base, 0) == stack_pointer_rtx
2370                   || XEXP (base, 0) == arg_pointer_rtx
2371 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2372                   || XEXP (base, 0) == hard_frame_pointer_rtx
2373 #endif
2374                   || XEXP (base, 0) == frame_pointer_rtx))
2375             return 0;
2376           /* Constants in the function's constant pool are constant.  */
2377           if (GET_CODE (base) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (base))
2378             return 0;
2379         }
2380       return 1;
2381
2382     case UNSPEC_VOLATILE:
2383     case ASM_INPUT:
2384       return 1;
2385
2386     case ASM_OPERANDS:
2387       if (MEM_VOLATILE_P (x))
2388         return 1;
2389
2390     /* FALLTHROUGH */
2391
2392     default:
2393       break;
2394     }
2395
2396   return 0;
2397 }
2398
2399 /* Returns nonzero if X might mention something which is not
2400    local to the function and is not constant.  */
2401
2402 static int
2403 nonlocal_mentioned_p (x)
2404      rtx x;
2405 {
2406
2407   if (INSN_P (x))
2408     {
2409       if (GET_CODE (x) == CALL_INSN)
2410         {
2411           if (! CONST_OR_PURE_CALL_P (x))
2412             return 1;
2413           x = CALL_INSN_FUNCTION_USAGE (x);
2414           if (x == 0)
2415             return 0;
2416         }
2417       else
2418         x = PATTERN (x);
2419     }
2420
2421   return for_each_rtx (&x, nonlocal_mentioned_p_1, NULL);
2422 }
2423
2424 /* A subroutine of nonlocal_referenced_p, returns 1 if *LOC references
2425    something which is not local to the function and is not constant.  */
2426
2427 static int
2428 nonlocal_referenced_p_1 (loc, data)
2429      rtx *loc;
2430      void *data ATTRIBUTE_UNUSED;
2431 {
2432   rtx x = *loc;
2433
2434   if (! x)
2435     return 0;
2436
2437   switch (GET_CODE (x))
2438     {
2439     case MEM:
2440     case REG:
2441     case SYMBOL_REF:
2442     case SUBREG:
2443       return nonlocal_mentioned_p (x);
2444
2445     case CALL:
2446       /* Non-constant calls and recursion are not local.  */
2447       return 1;
2448
2449     case SET:
2450       if (nonlocal_mentioned_p (SET_SRC (x)))
2451         return 1;
2452
2453       if (GET_CODE (SET_DEST (x)) == MEM)
2454         return nonlocal_mentioned_p (XEXP (SET_DEST (x), 0));
2455
2456       /* If the destination is anything other than a CC0, PC,
2457          MEM, REG, or a SUBREG of a REG that occupies all of
2458          the REG, then X references nonlocal memory if it is
2459          mentioned in the destination.  */
2460       if (GET_CODE (SET_DEST (x)) != CC0
2461           && GET_CODE (SET_DEST (x)) != PC
2462           && GET_CODE (SET_DEST (x)) != REG
2463           && ! (GET_CODE (SET_DEST (x)) == SUBREG
2464                 && GET_CODE (SUBREG_REG (SET_DEST (x))) == REG
2465                 && (((GET_MODE_SIZE (GET_MODE (SUBREG_REG (SET_DEST (x))))
2466                       + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
2467                     == ((GET_MODE_SIZE (GET_MODE (SET_DEST (x)))
2468                          + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD))))
2469         return nonlocal_mentioned_p (SET_DEST (x));
2470       return 0;
2471
2472     case CLOBBER:
2473       if (GET_CODE (XEXP (x, 0)) == MEM)
2474         return nonlocal_mentioned_p (XEXP (XEXP (x, 0), 0));
2475       return 0;
2476
2477     case USE:
2478       return nonlocal_mentioned_p (XEXP (x, 0));
2479
2480     case ASM_INPUT:
2481     case UNSPEC_VOLATILE:
2482       return 1;
2483
2484     case ASM_OPERANDS:
2485       if (MEM_VOLATILE_P (x))
2486         return 1;
2487
2488     /* FALLTHROUGH */
2489
2490     default:
2491       break;
2492     }
2493
2494   return 0;
2495 }
2496
2497 /* Returns nonzero if X might reference something which is not
2498    local to the function and is not constant.  */
2499
2500 static int
2501 nonlocal_referenced_p (x)
2502      rtx x;
2503 {
2504
2505   if (INSN_P (x))
2506     {
2507       if (GET_CODE (x) == CALL_INSN)
2508         {
2509           if (! CONST_OR_PURE_CALL_P (x))
2510             return 1;
2511           x = CALL_INSN_FUNCTION_USAGE (x);
2512           if (x == 0)
2513             return 0;
2514         }
2515       else
2516         x = PATTERN (x);
2517     }
2518
2519   return for_each_rtx (&x, nonlocal_referenced_p_1, NULL);
2520 }
2521
2522 /* A subroutine of nonlocal_set_p, returns 1 if *LOC sets
2523    something which is not local to the function and is not constant.  */
2524
2525 static int
2526 nonlocal_set_p_1 (loc, data)
2527      rtx *loc;
2528      void *data ATTRIBUTE_UNUSED;
2529 {
2530   rtx x = *loc;
2531
2532   if (! x)
2533     return 0;
2534
2535   switch (GET_CODE (x))
2536     {
2537     case CALL:
2538       /* Non-constant calls and recursion are not local.  */
2539       return 1;
2540
2541     case PRE_INC:
2542     case PRE_DEC:
2543     case POST_INC:
2544     case POST_DEC:
2545     case PRE_MODIFY:
2546     case POST_MODIFY:
2547       return nonlocal_mentioned_p (XEXP (x, 0));
2548
2549     case SET:
2550       if (nonlocal_mentioned_p (SET_DEST (x)))
2551         return 1;
2552       return nonlocal_set_p (SET_SRC (x));
2553
2554     case CLOBBER:
2555       return nonlocal_mentioned_p (XEXP (x, 0));
2556
2557     case USE:
2558       return 0;
2559
2560     case ASM_INPUT:
2561     case UNSPEC_VOLATILE:
2562       return 1;
2563
2564     case ASM_OPERANDS:
2565       if (MEM_VOLATILE_P (x))
2566         return 1;
2567
2568     /* FALLTHROUGH */
2569
2570     default:
2571       break;
2572     }
2573
2574   return 0;
2575 }
2576
2577 /* Returns nonzero if X might set something which is not
2578    local to the function and is not constant.  */
2579
2580 static int
2581 nonlocal_set_p (x)
2582      rtx x;
2583 {
2584
2585   if (INSN_P (x))
2586     {
2587       if (GET_CODE (x) == CALL_INSN)
2588         {
2589           if (! CONST_OR_PURE_CALL_P (x))
2590             return 1;
2591           x = CALL_INSN_FUNCTION_USAGE (x);
2592           if (x == 0)
2593             return 0;
2594         }
2595       else
2596         x = PATTERN (x);
2597     }
2598
2599   return for_each_rtx (&x, nonlocal_set_p_1, NULL);
2600 }
2601
2602 /* Mark the function if it is constant.  */
2603
2604 void
2605 mark_constant_function ()
2606 {
2607   rtx insn;
2608   int nonlocal_memory_referenced;
2609
2610   if (TREE_READONLY (current_function_decl)
2611       || DECL_IS_PURE (current_function_decl)
2612       || TREE_THIS_VOLATILE (current_function_decl)
2613       || TYPE_MODE (TREE_TYPE (current_function_decl)) == VOIDmode
2614       || current_function_has_nonlocal_goto
2615       || !(*targetm.binds_local_p) (current_function_decl))
2616     return;
2617
2618   /* A loop might not return which counts as a side effect.  */
2619   if (mark_dfs_back_edges ())
2620     return;
2621
2622   nonlocal_memory_referenced = 0;
2623
2624   init_alias_analysis ();
2625
2626   /* Determine if this is a constant or pure function.  */
2627
2628   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2629     {
2630       if (! INSN_P (insn))
2631         continue;
2632
2633       if (nonlocal_set_p (insn) || global_reg_mentioned_p (insn)
2634           || volatile_refs_p (PATTERN (insn)))
2635         break;
2636
2637       if (! nonlocal_memory_referenced)
2638         nonlocal_memory_referenced = nonlocal_referenced_p (insn);
2639     }
2640
2641   end_alias_analysis ();
2642
2643   /* Mark the function.  */
2644
2645   if (insn)
2646     ;
2647   else if (nonlocal_memory_referenced)
2648     DECL_IS_PURE (current_function_decl) = 1;
2649   else
2650     TREE_READONLY (current_function_decl) = 1;
2651 }
2652 \f
2653
2654 void
2655 init_alias_once ()
2656 {
2657   int i;
2658
2659 #ifndef OUTGOING_REGNO
2660 #define OUTGOING_REGNO(N) N
2661 #endif
2662   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2663     /* Check whether this register can hold an incoming pointer
2664        argument.  FUNCTION_ARG_REGNO_P tests outgoing register
2665        numbers, so translate if necessary due to register windows.  */
2666     if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i))
2667         && HARD_REGNO_MODE_OK (i, Pmode))
2668       static_reg_base_value[i]
2669         = gen_rtx_ADDRESS (VOIDmode, gen_rtx_REG (Pmode, i));
2670
2671   static_reg_base_value[STACK_POINTER_REGNUM]
2672     = gen_rtx_ADDRESS (Pmode, stack_pointer_rtx);
2673   static_reg_base_value[ARG_POINTER_REGNUM]
2674     = gen_rtx_ADDRESS (Pmode, arg_pointer_rtx);
2675   static_reg_base_value[FRAME_POINTER_REGNUM]
2676     = gen_rtx_ADDRESS (Pmode, frame_pointer_rtx);
2677 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2678   static_reg_base_value[HARD_FRAME_POINTER_REGNUM]
2679     = gen_rtx_ADDRESS (Pmode, hard_frame_pointer_rtx);
2680 #endif
2681
2682   alias_sets = splay_tree_new (splay_tree_compare_ints, 0, 0);
2683 }
2684
2685 /* Initialize the aliasing machinery.  Initialize the REG_KNOWN_VALUE
2686    array.  */
2687
2688 void
2689 init_alias_analysis ()
2690 {
2691   int maxreg = max_reg_num ();
2692   int changed, pass;
2693   int i;
2694   unsigned int ui;
2695   rtx insn;
2696
2697   reg_known_value_size = maxreg;
2698
2699   reg_known_value
2700     = (rtx *) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (rtx))
2701     - FIRST_PSEUDO_REGISTER;
2702   reg_known_equiv_p
2703     = (char*) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (char))
2704     - FIRST_PSEUDO_REGISTER;
2705
2706   /* Overallocate reg_base_value to allow some growth during loop
2707      optimization.  Loop unrolling can create a large number of
2708      registers.  */
2709   reg_base_value_size = maxreg * 2;
2710   reg_base_value = (rtx *) ggc_alloc_cleared (reg_base_value_size
2711                                               * sizeof (rtx));
2712
2713   new_reg_base_value = (rtx *) xmalloc (reg_base_value_size * sizeof (rtx));
2714   reg_seen = (char *) xmalloc (reg_base_value_size);
2715   if (! reload_completed && flag_unroll_loops)
2716     {
2717       /* ??? Why are we realloc'ing if we're just going to zero it?  */
2718       alias_invariant = (rtx *)xrealloc (alias_invariant,
2719                                          reg_base_value_size * sizeof (rtx));
2720       memset ((char *)alias_invariant, 0, reg_base_value_size * sizeof (rtx));
2721     }
2722
2723   /* The basic idea is that each pass through this loop will use the
2724      "constant" information from the previous pass to propagate alias
2725      information through another level of assignments.
2726
2727      This could get expensive if the assignment chains are long.  Maybe
2728      we should throttle the number of iterations, possibly based on
2729      the optimization level or flag_expensive_optimizations.
2730
2731      We could propagate more information in the first pass by making use
2732      of REG_N_SETS to determine immediately that the alias information
2733      for a pseudo is "constant".
2734
2735      A program with an uninitialized variable can cause an infinite loop
2736      here.  Instead of doing a full dataflow analysis to detect such problems
2737      we just cap the number of iterations for the loop.
2738
2739      The state of the arrays for the set chain in question does not matter
2740      since the program has undefined behavior.  */
2741
2742   pass = 0;
2743   do
2744     {
2745       /* Assume nothing will change this iteration of the loop.  */
2746       changed = 0;
2747
2748       /* We want to assign the same IDs each iteration of this loop, so
2749          start counting from zero each iteration of the loop.  */
2750       unique_id = 0;
2751
2752       /* We're at the start of the function each iteration through the
2753          loop, so we're copying arguments.  */
2754       copying_arguments = true;
2755
2756       /* Wipe the potential alias information clean for this pass.  */
2757       memset ((char *) new_reg_base_value, 0, reg_base_value_size * sizeof (rtx));
2758
2759       /* Wipe the reg_seen array clean.  */
2760       memset ((char *) reg_seen, 0, reg_base_value_size);
2761
2762       /* Mark all hard registers which may contain an address.
2763          The stack, frame and argument pointers may contain an address.
2764          An argument register which can hold a Pmode value may contain
2765          an address even if it is not in BASE_REGS.
2766
2767          The address expression is VOIDmode for an argument and
2768          Pmode for other registers.  */
2769
2770       memcpy (new_reg_base_value, static_reg_base_value,
2771               FIRST_PSEUDO_REGISTER * sizeof (rtx));
2772
2773       /* Walk the insns adding values to the new_reg_base_value array.  */
2774       for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2775         {
2776           if (INSN_P (insn))
2777             {
2778               rtx note, set;
2779
2780 #if defined (HAVE_prologue) || defined (HAVE_epilogue)
2781               /* The prologue/epilogue insns are not threaded onto the
2782                  insn chain until after reload has completed.  Thus,
2783                  there is no sense wasting time checking if INSN is in
2784                  the prologue/epilogue until after reload has completed.  */
2785               if (reload_completed
2786                   && prologue_epilogue_contains (insn))
2787                 continue;
2788 #endif
2789
2790               /* If this insn has a noalias note, process it,  Otherwise,
2791                  scan for sets.  A simple set will have no side effects
2792                  which could change the base value of any other register.  */
2793
2794               if (GET_CODE (PATTERN (insn)) == SET
2795                   && REG_NOTES (insn) != 0
2796                   && find_reg_note (insn, REG_NOALIAS, NULL_RTX))
2797                 record_set (SET_DEST (PATTERN (insn)), NULL_RTX, NULL);
2798               else
2799                 note_stores (PATTERN (insn), record_set, NULL);
2800
2801               set = single_set (insn);
2802
2803               if (set != 0
2804                   && GET_CODE (SET_DEST (set)) == REG
2805                   && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER)
2806                 {
2807                   unsigned int regno = REGNO (SET_DEST (set));
2808                   rtx src = SET_SRC (set);
2809
2810                   if (REG_NOTES (insn) != 0
2811                       && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
2812                            && REG_N_SETS (regno) == 1)
2813                           || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
2814                       && GET_CODE (XEXP (note, 0)) != EXPR_LIST
2815                       && ! rtx_varies_p (XEXP (note, 0), 1)
2816                       && ! reg_overlap_mentioned_p (SET_DEST (set), XEXP (note, 0)))
2817                     {
2818                       reg_known_value[regno] = XEXP (note, 0);
2819                       reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV;
2820                     }
2821                   else if (REG_N_SETS (regno) == 1
2822                            && GET_CODE (src) == PLUS
2823                            && GET_CODE (XEXP (src, 0)) == REG
2824                            && REGNO (XEXP (src, 0)) >= FIRST_PSEUDO_REGISTER
2825                            && (reg_known_value[REGNO (XEXP (src, 0))])
2826                            && GET_CODE (XEXP (src, 1)) == CONST_INT)
2827                     {
2828                       rtx op0 = XEXP (src, 0);
2829                       op0 = reg_known_value[REGNO (op0)];
2830                       reg_known_value[regno]
2831                         = plus_constant (op0, INTVAL (XEXP (src, 1)));
2832                       reg_known_equiv_p[regno] = 0;
2833                     }
2834                   else if (REG_N_SETS (regno) == 1
2835                            && ! rtx_varies_p (src, 1))
2836                     {
2837                       reg_known_value[regno] = src;
2838                       reg_known_equiv_p[regno] = 0;
2839                     }
2840                 }
2841             }
2842           else if (GET_CODE (insn) == NOTE
2843                    && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
2844             copying_arguments = false;
2845         }
2846
2847       /* Now propagate values from new_reg_base_value to reg_base_value.  */
2848       for (ui = 0; ui < reg_base_value_size; ui++)
2849         {
2850           if (new_reg_base_value[ui]
2851               && new_reg_base_value[ui] != reg_base_value[ui]
2852               && ! rtx_equal_p (new_reg_base_value[ui], reg_base_value[ui]))
2853             {
2854               reg_base_value[ui] = new_reg_base_value[ui];
2855               changed = 1;
2856             }
2857         }
2858     }
2859   while (changed && ++pass < MAX_ALIAS_LOOP_PASSES);
2860
2861   /* Fill in the remaining entries.  */
2862   for (i = FIRST_PSEUDO_REGISTER; i < maxreg; i++)
2863     if (reg_known_value[i] == 0)
2864       reg_known_value[i] = regno_reg_rtx[i];
2865
2866   /* Simplify the reg_base_value array so that no register refers to
2867      another register, except to special registers indirectly through
2868      ADDRESS expressions.
2869
2870      In theory this loop can take as long as O(registers^2), but unless
2871      there are very long dependency chains it will run in close to linear
2872      time.
2873
2874      This loop may not be needed any longer now that the main loop does
2875      a better job at propagating alias information.  */
2876   pass = 0;
2877   do
2878     {
2879       changed = 0;
2880       pass++;
2881       for (ui = 0; ui < reg_base_value_size; ui++)
2882         {
2883           rtx base = reg_base_value[ui];
2884           if (base && GET_CODE (base) == REG)
2885             {
2886               unsigned int base_regno = REGNO (base);
2887               if (base_regno == ui)             /* register set from itself */
2888                 reg_base_value[ui] = 0;
2889               else
2890                 reg_base_value[ui] = reg_base_value[base_regno];
2891               changed = 1;
2892             }
2893         }
2894     }
2895   while (changed && pass < MAX_ALIAS_LOOP_PASSES);
2896
2897   /* Clean up.  */
2898   free (new_reg_base_value);
2899   new_reg_base_value = 0;
2900   free (reg_seen);
2901   reg_seen = 0;
2902 }
2903
2904 void
2905 end_alias_analysis ()
2906 {
2907   free (reg_known_value + FIRST_PSEUDO_REGISTER);
2908   reg_known_value = 0;
2909   reg_known_value_size = 0;
2910   free (reg_known_equiv_p + FIRST_PSEUDO_REGISTER);
2911   reg_known_equiv_p = 0;
2912   reg_base_value = 0;
2913   reg_base_value_size = 0;
2914   if (alias_invariant)
2915     {
2916       free (alias_invariant);
2917       alias_invariant = 0;
2918     }
2919 }
2920
2921 #include "gt-alias.h"