OSDN Git Service

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