OSDN Git Service

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