OSDN Git Service

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