OSDN Git Service

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