OSDN Git Service

* alias.c (record_set): Use hard_regno_nregs.
[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 VALUE:
1143       return CSELIB_VAL_PTR (x) == CSELIB_VAL_PTR (y);
1144
1145     case REG:
1146       return REGNO (x) == REGNO (y);
1147
1148     case LABEL_REF:
1149       return XEXP (x, 0) == XEXP (y, 0);
1150
1151     case SYMBOL_REF:
1152       return XSTR (x, 0) == XSTR (y, 0);
1153
1154     case CONST_INT:
1155     case CONST_DOUBLE:
1156       /* There's no need to compare the contents of CONST_DOUBLEs or
1157          CONST_INTs because pointer equality is a good enough
1158          comparison for these nodes.  */
1159       return 0;
1160
1161     case ADDRESSOF:
1162       return (XINT (x, 1) == XINT (y, 1)
1163               && rtx_equal_for_memref_p (XEXP (x, 0),
1164                                          XEXP (y, 0)));
1165
1166     default:
1167       break;
1168     }
1169
1170   /* canon_rtx knows how to handle plus.  No need to canonicalize.  */
1171   if (code == PLUS)
1172     return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
1173              && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
1174             || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
1175                 && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
1176   /* For commutative operations, the RTX match if the operand match in any
1177      order.  Also handle the simple binary and unary cases without a loop.  */
1178   if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
1179     {
1180       rtx xop0 = canon_rtx (XEXP (x, 0));
1181       rtx yop0 = canon_rtx (XEXP (y, 0));
1182       rtx yop1 = canon_rtx (XEXP (y, 1));
1183
1184       return ((rtx_equal_for_memref_p (xop0, yop0)
1185                && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)), yop1))
1186               || (rtx_equal_for_memref_p (xop0, yop1)
1187                   && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)), yop0)));
1188     }
1189   else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
1190     {
1191       return (rtx_equal_for_memref_p (canon_rtx (XEXP (x, 0)),
1192                                       canon_rtx (XEXP (y, 0)))
1193               && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)),
1194                                          canon_rtx (XEXP (y, 1))));
1195     }
1196   else if (GET_RTX_CLASS (code) == '1')
1197     return rtx_equal_for_memref_p (canon_rtx (XEXP (x, 0)),
1198                                    canon_rtx (XEXP (y, 0)));
1199
1200   /* Compare the elements.  If any pair of corresponding elements
1201      fail to match, return 0 for the whole things.
1202
1203      Limit cases to types which actually appear in addresses.  */
1204
1205   fmt = GET_RTX_FORMAT (code);
1206   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1207     {
1208       switch (fmt[i])
1209         {
1210         case 'i':
1211           if (XINT (x, i) != XINT (y, i))
1212             return 0;
1213           break;
1214
1215         case 'E':
1216           /* Two vectors must have the same length.  */
1217           if (XVECLEN (x, i) != XVECLEN (y, i))
1218             return 0;
1219
1220           /* And the corresponding elements must match.  */
1221           for (j = 0; j < XVECLEN (x, i); j++)
1222             if (rtx_equal_for_memref_p (canon_rtx (XVECEXP (x, i, j)),
1223                                         canon_rtx (XVECEXP (y, i, j))) == 0)
1224               return 0;
1225           break;
1226
1227         case 'e':
1228           if (rtx_equal_for_memref_p (canon_rtx (XEXP (x, i)),
1229                                       canon_rtx (XEXP (y, i))) == 0)
1230             return 0;
1231           break;
1232
1233           /* This can happen for asm operands.  */
1234         case 's':
1235           if (strcmp (XSTR (x, i), XSTR (y, i)))
1236             return 0;
1237           break;
1238
1239         /* This can happen for an asm which clobbers memory.  */
1240         case '0':
1241           break;
1242
1243           /* It is believed that rtx's at this level will never
1244              contain anything but integers and other rtx's,
1245              except for within LABEL_REFs and SYMBOL_REFs.  */
1246         default:
1247           abort ();
1248         }
1249     }
1250   return 1;
1251 }
1252
1253 /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
1254    X and return it, or return 0 if none found.  */
1255
1256 static rtx
1257 find_symbolic_term (rtx x)
1258 {
1259   int i;
1260   enum rtx_code code;
1261   const char *fmt;
1262
1263   code = GET_CODE (x);
1264   if (code == SYMBOL_REF || code == LABEL_REF)
1265     return x;
1266   if (GET_RTX_CLASS (code) == 'o')
1267     return 0;
1268
1269   fmt = GET_RTX_FORMAT (code);
1270   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1271     {
1272       rtx t;
1273
1274       if (fmt[i] == 'e')
1275         {
1276           t = find_symbolic_term (XEXP (x, i));
1277           if (t != 0)
1278             return t;
1279         }
1280       else if (fmt[i] == 'E')
1281         break;
1282     }
1283   return 0;
1284 }
1285
1286 rtx
1287 find_base_term (rtx x)
1288 {
1289   cselib_val *val;
1290   struct elt_loc_list *l;
1291
1292 #if defined (FIND_BASE_TERM)
1293   /* Try machine-dependent ways to find the base term.  */
1294   x = FIND_BASE_TERM (x);
1295 #endif
1296
1297   switch (GET_CODE (x))
1298     {
1299     case REG:
1300       return REG_BASE_VALUE (x);
1301
1302     case TRUNCATE:
1303       if (GET_MODE_SIZE (GET_MODE (x)) < GET_MODE_SIZE (Pmode))
1304         return 0;
1305       /* Fall through.  */
1306     case HIGH:
1307     case PRE_INC:
1308     case PRE_DEC:
1309     case POST_INC:
1310     case POST_DEC:
1311     case PRE_MODIFY:
1312     case POST_MODIFY:
1313       return find_base_term (XEXP (x, 0));
1314
1315     case ZERO_EXTEND:
1316     case SIGN_EXTEND:   /* Used for Alpha/NT pointers */
1317       {
1318         rtx temp = find_base_term (XEXP (x, 0));
1319
1320         if (temp != 0 && CONSTANT_P (temp))
1321           temp = convert_memory_address (Pmode, temp);
1322
1323         return temp;
1324       }
1325
1326     case VALUE:
1327       val = CSELIB_VAL_PTR (x);
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   for (l = v->locs; l; l = l->next)
1506     if (CONSTANT_P (l->loc))
1507       return l->loc;
1508   for (l = v->locs; l; l = l->next)
1509     if (GET_CODE (l->loc) != REG && GET_CODE (l->loc) != MEM)
1510       return l->loc;
1511   if (v->locs)
1512     return v->locs->loc;
1513   return x;
1514 }
1515
1516 /*  Return the address of the (N_REFS + 1)th memory reference to ADDR
1517     where SIZE is the size in bytes of the memory reference.  If ADDR
1518     is not modified by the memory reference then ADDR is returned.  */
1519
1520 rtx
1521 addr_side_effect_eval (rtx addr, int size, int n_refs)
1522 {
1523   int offset = 0;
1524
1525   switch (GET_CODE (addr))
1526     {
1527     case PRE_INC:
1528       offset = (n_refs + 1) * size;
1529       break;
1530     case PRE_DEC:
1531       offset = -(n_refs + 1) * size;
1532       break;
1533     case POST_INC:
1534       offset = n_refs * size;
1535       break;
1536     case POST_DEC:
1537       offset = -n_refs * size;
1538       break;
1539
1540     default:
1541       return addr;
1542     }
1543
1544   if (offset)
1545     addr = gen_rtx_PLUS (GET_MODE (addr), XEXP (addr, 0),
1546                          GEN_INT (offset));
1547   else
1548     addr = XEXP (addr, 0);
1549   addr = canon_rtx (addr);
1550
1551   return addr;
1552 }
1553
1554 /* Return nonzero if X and Y (memory addresses) could reference the
1555    same location in memory.  C is an offset accumulator.  When
1556    C is nonzero, we are testing aliases between X and Y + C.
1557    XSIZE is the size in bytes of the X reference,
1558    similarly YSIZE is the size in bytes for Y.
1559    Expect that canon_rtx has been already called for X and Y.
1560
1561    If XSIZE or YSIZE is zero, we do not know the amount of memory being
1562    referenced (the reference was BLKmode), so make the most pessimistic
1563    assumptions.
1564
1565    If XSIZE or YSIZE is negative, we may access memory outside the object
1566    being referenced as a side effect.  This can happen when using AND to
1567    align memory references, as is done on the Alpha.
1568
1569    Nice to notice that varying addresses cannot conflict with fp if no
1570    local variables had their addresses taken, but that's too hard now.  */
1571
1572 static int
1573 memrefs_conflict_p (int xsize, rtx x, int ysize, rtx y, HOST_WIDE_INT c)
1574 {
1575   if (GET_CODE (x) == VALUE)
1576     x = get_addr (x);
1577   if (GET_CODE (y) == VALUE)
1578     y = get_addr (y);
1579   if (GET_CODE (x) == HIGH)
1580     x = XEXP (x, 0);
1581   else if (GET_CODE (x) == LO_SUM)
1582     x = XEXP (x, 1);
1583   else
1584     x = addr_side_effect_eval (x, xsize, 0);
1585   if (GET_CODE (y) == HIGH)
1586     y = XEXP (y, 0);
1587   else if (GET_CODE (y) == LO_SUM)
1588     y = XEXP (y, 1);
1589   else
1590     y = addr_side_effect_eval (y, ysize, 0);
1591
1592   if (rtx_equal_for_memref_p (x, y))
1593     {
1594       if (xsize <= 0 || ysize <= 0)
1595         return 1;
1596       if (c >= 0 && xsize > c)
1597         return 1;
1598       if (c < 0 && ysize+c > 0)
1599         return 1;
1600       return 0;
1601     }
1602
1603   /* This code used to check for conflicts involving stack references and
1604      globals but the base address alias code now handles these cases.  */
1605
1606   if (GET_CODE (x) == PLUS)
1607     {
1608       /* The fact that X is canonicalized means that this
1609          PLUS rtx is canonicalized.  */
1610       rtx x0 = XEXP (x, 0);
1611       rtx x1 = XEXP (x, 1);
1612
1613       if (GET_CODE (y) == PLUS)
1614         {
1615           /* The fact that Y is canonicalized means that this
1616              PLUS rtx is canonicalized.  */
1617           rtx y0 = XEXP (y, 0);
1618           rtx y1 = XEXP (y, 1);
1619
1620           if (rtx_equal_for_memref_p (x1, y1))
1621             return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1622           if (rtx_equal_for_memref_p (x0, y0))
1623             return memrefs_conflict_p (xsize, x1, ysize, y1, c);
1624           if (GET_CODE (x1) == CONST_INT)
1625             {
1626               if (GET_CODE (y1) == CONST_INT)
1627                 return memrefs_conflict_p (xsize, x0, ysize, y0,
1628                                            c - INTVAL (x1) + INTVAL (y1));
1629               else
1630                 return memrefs_conflict_p (xsize, x0, ysize, y,
1631                                            c - INTVAL (x1));
1632             }
1633           else if (GET_CODE (y1) == CONST_INT)
1634             return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1635
1636           return 1;
1637         }
1638       else if (GET_CODE (x1) == CONST_INT)
1639         return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
1640     }
1641   else if (GET_CODE (y) == PLUS)
1642     {
1643       /* The fact that Y is canonicalized means that this
1644          PLUS rtx is canonicalized.  */
1645       rtx y0 = XEXP (y, 0);
1646       rtx y1 = XEXP (y, 1);
1647
1648       if (GET_CODE (y1) == CONST_INT)
1649         return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1650       else
1651         return 1;
1652     }
1653
1654   if (GET_CODE (x) == GET_CODE (y))
1655     switch (GET_CODE (x))
1656       {
1657       case MULT:
1658         {
1659           /* Handle cases where we expect the second operands to be the
1660              same, and check only whether the first operand would conflict
1661              or not.  */
1662           rtx x0, y0;
1663           rtx x1 = canon_rtx (XEXP (x, 1));
1664           rtx y1 = canon_rtx (XEXP (y, 1));
1665           if (! rtx_equal_for_memref_p (x1, y1))
1666             return 1;
1667           x0 = canon_rtx (XEXP (x, 0));
1668           y0 = canon_rtx (XEXP (y, 0));
1669           if (rtx_equal_for_memref_p (x0, y0))
1670             return (xsize == 0 || ysize == 0
1671                     || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1672
1673           /* Can't properly adjust our sizes.  */
1674           if (GET_CODE (x1) != CONST_INT)
1675             return 1;
1676           xsize /= INTVAL (x1);
1677           ysize /= INTVAL (x1);
1678           c /= INTVAL (x1);
1679           return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1680         }
1681
1682       case REG:
1683         /* Are these registers known not to be equal?  */
1684         if (alias_invariant)
1685           {
1686             unsigned int r_x = REGNO (x), r_y = REGNO (y);
1687             rtx i_x, i_y;       /* invariant relationships of X and Y */
1688
1689             i_x = r_x >= alias_invariant_size ? 0 : alias_invariant[r_x];
1690             i_y = r_y >= alias_invariant_size ? 0 : alias_invariant[r_y];
1691
1692             if (i_x == 0 && i_y == 0)
1693               break;
1694
1695             if (! memrefs_conflict_p (xsize, i_x ? i_x : x,
1696                                       ysize, i_y ? i_y : y, c))
1697               return 0;
1698           }
1699         break;
1700
1701       default:
1702         break;
1703       }
1704
1705   /* Treat an access through an AND (e.g. a subword access on an Alpha)
1706      as an access with indeterminate size.  Assume that references
1707      besides AND are aligned, so if the size of the other reference is
1708      at least as large as the alignment, assume no other overlap.  */
1709   if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT)
1710     {
1711       if (GET_CODE (y) == AND || ysize < -INTVAL (XEXP (x, 1)))
1712         xsize = -1;
1713       return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)), ysize, y, c);
1714     }
1715   if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT)
1716     {
1717       /* ??? If we are indexing far enough into the array/structure, we
1718          may yet be able to determine that we can not overlap.  But we
1719          also need to that we are far enough from the end not to overlap
1720          a following reference, so we do nothing with that for now.  */
1721       if (GET_CODE (x) == AND || xsize < -INTVAL (XEXP (y, 1)))
1722         ysize = -1;
1723       return memrefs_conflict_p (xsize, x, ysize, canon_rtx (XEXP (y, 0)), c);
1724     }
1725
1726   if (GET_CODE (x) == ADDRESSOF)
1727     {
1728       if (y == frame_pointer_rtx
1729           || GET_CODE (y) == ADDRESSOF)
1730         return xsize <= 0 || ysize <= 0;
1731     }
1732   if (GET_CODE (y) == ADDRESSOF)
1733     {
1734       if (x == frame_pointer_rtx)
1735         return xsize <= 0 || ysize <= 0;
1736     }
1737
1738   if (CONSTANT_P (x))
1739     {
1740       if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
1741         {
1742           c += (INTVAL (y) - INTVAL (x));
1743           return (xsize <= 0 || ysize <= 0
1744                   || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1745         }
1746
1747       if (GET_CODE (x) == CONST)
1748         {
1749           if (GET_CODE (y) == CONST)
1750             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1751                                        ysize, canon_rtx (XEXP (y, 0)), c);
1752           else
1753             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1754                                        ysize, y, c);
1755         }
1756       if (GET_CODE (y) == CONST)
1757         return memrefs_conflict_p (xsize, x, ysize,
1758                                    canon_rtx (XEXP (y, 0)), c);
1759
1760       if (CONSTANT_P (y))
1761         return (xsize <= 0 || ysize <= 0
1762                 || (rtx_equal_for_memref_p (x, y)
1763                     && ((c >= 0 && xsize > c) || (c < 0 && ysize+c > 0))));
1764
1765       return 1;
1766     }
1767   return 1;
1768 }
1769
1770 /* Functions to compute memory dependencies.
1771
1772    Since we process the insns in execution order, we can build tables
1773    to keep track of what registers are fixed (and not aliased), what registers
1774    are varying in known ways, and what registers are varying in unknown
1775    ways.
1776
1777    If both memory references are volatile, then there must always be a
1778    dependence between the two references, since their order can not be
1779    changed.  A volatile and non-volatile reference can be interchanged
1780    though.
1781
1782    A MEM_IN_STRUCT reference at a non-AND varying address can never
1783    conflict with a non-MEM_IN_STRUCT reference at a fixed address.  We
1784    also must allow AND addresses, because they may generate accesses
1785    outside the object being referenced.  This is used to generate
1786    aligned addresses from unaligned addresses, for instance, the alpha
1787    storeqi_unaligned pattern.  */
1788
1789 /* Read dependence: X is read after read in MEM takes place.  There can
1790    only be a dependence here if both reads are volatile.  */
1791
1792 int
1793 read_dependence (rtx mem, rtx x)
1794 {
1795   return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
1796 }
1797
1798 /* Returns MEM1 if and only if MEM1 is a scalar at a fixed address and
1799    MEM2 is a reference to a structure at a varying address, or returns
1800    MEM2 if vice versa.  Otherwise, returns NULL_RTX.  If a non-NULL
1801    value is returned MEM1 and MEM2 can never alias.  VARIES_P is used
1802    to decide whether or not an address may vary; it should return
1803    nonzero whenever variation is possible.
1804    MEM1_ADDR and MEM2_ADDR are the addresses of MEM1 and MEM2.  */
1805
1806 static rtx
1807 fixed_scalar_and_varying_struct_p (rtx mem1, rtx mem2, rtx mem1_addr,
1808                                    rtx mem2_addr,
1809                                    int (*varies_p) (rtx, int))
1810 {
1811   if (! flag_strict_aliasing)
1812     return NULL_RTX;
1813
1814   if (MEM_SCALAR_P (mem1) && MEM_IN_STRUCT_P (mem2)
1815       && !varies_p (mem1_addr, 1) && varies_p (mem2_addr, 1))
1816     /* MEM1 is a scalar at a fixed address; MEM2 is a struct at a
1817        varying address.  */
1818     return mem1;
1819
1820   if (MEM_IN_STRUCT_P (mem1) && MEM_SCALAR_P (mem2)
1821       && varies_p (mem1_addr, 1) && !varies_p (mem2_addr, 1))
1822     /* MEM2 is a scalar at a fixed address; MEM1 is a struct at a
1823        varying address.  */
1824     return mem2;
1825
1826   return NULL_RTX;
1827 }
1828
1829 /* Returns nonzero if something about the mode or address format MEM1
1830    indicates that it might well alias *anything*.  */
1831
1832 static int
1833 aliases_everything_p (rtx mem)
1834 {
1835   if (GET_CODE (XEXP (mem, 0)) == AND)
1836     /* If the address is an AND, its very hard to know at what it is
1837        actually pointing.  */
1838     return 1;
1839
1840   return 0;
1841 }
1842
1843 /* Return true if we can determine that the fields referenced cannot
1844    overlap for any pair of objects.  */
1845
1846 static bool
1847 nonoverlapping_component_refs_p (tree x, tree y)
1848 {
1849   tree fieldx, fieldy, typex, typey, orig_y;
1850
1851   do
1852     {
1853       /* The comparison has to be done at a common type, since we don't
1854          know how the inheritance hierarchy works.  */
1855       orig_y = y;
1856       do
1857         {
1858           fieldx = TREE_OPERAND (x, 1);
1859           typex = DECL_FIELD_CONTEXT (fieldx);
1860
1861           y = orig_y;
1862           do
1863             {
1864               fieldy = TREE_OPERAND (y, 1);
1865               typey = DECL_FIELD_CONTEXT (fieldy);
1866
1867               if (typex == typey)
1868                 goto found;
1869
1870               y = TREE_OPERAND (y, 0);
1871             }
1872           while (y && TREE_CODE (y) == COMPONENT_REF);
1873
1874           x = TREE_OPERAND (x, 0);
1875         }
1876       while (x && TREE_CODE (x) == COMPONENT_REF);
1877
1878       /* Never found a common type.  */
1879       return false;
1880
1881     found:
1882       /* If we're left with accessing different fields of a structure,
1883          then no overlap.  */
1884       if (TREE_CODE (typex) == RECORD_TYPE
1885           && fieldx != fieldy)
1886         return true;
1887
1888       /* The comparison on the current field failed.  If we're accessing
1889          a very nested structure, look at the next outer level.  */
1890       x = TREE_OPERAND (x, 0);
1891       y = TREE_OPERAND (y, 0);
1892     }
1893   while (x && y
1894          && TREE_CODE (x) == COMPONENT_REF
1895          && TREE_CODE (y) == COMPONENT_REF);
1896
1897   return false;
1898 }
1899
1900 /* Look at the bottom of the COMPONENT_REF list for a DECL, and return it.  */
1901
1902 static tree
1903 decl_for_component_ref (tree x)
1904 {
1905   do
1906     {
1907       x = TREE_OPERAND (x, 0);
1908     }
1909   while (x && TREE_CODE (x) == COMPONENT_REF);
1910
1911   return x && DECL_P (x) ? x : NULL_TREE;
1912 }
1913
1914 /* Walk up the COMPONENT_REF list and adjust OFFSET to compensate for the
1915    offset of the field reference.  */
1916
1917 static rtx
1918 adjust_offset_for_component_ref (tree x, rtx offset)
1919 {
1920   HOST_WIDE_INT ioffset;
1921
1922   if (! offset)
1923     return NULL_RTX;
1924
1925   ioffset = INTVAL (offset);
1926   do
1927     {
1928       tree field = TREE_OPERAND (x, 1);
1929
1930       if (! host_integerp (DECL_FIELD_OFFSET (field), 1))
1931         return NULL_RTX;
1932       ioffset += (tree_low_cst (DECL_FIELD_OFFSET (field), 1)
1933                   + (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
1934                      / BITS_PER_UNIT));
1935
1936       x = TREE_OPERAND (x, 0);
1937     }
1938   while (x && TREE_CODE (x) == COMPONENT_REF);
1939
1940   return GEN_INT (ioffset);
1941 }
1942
1943 /* Return nonzero if we can determine the exprs corresponding to memrefs
1944    X and Y and they do not overlap.  */
1945
1946 static int
1947 nonoverlapping_memrefs_p (rtx x, rtx y)
1948 {
1949   tree exprx = MEM_EXPR (x), expry = MEM_EXPR (y);
1950   rtx rtlx, rtly;
1951   rtx basex, basey;
1952   rtx moffsetx, moffsety;
1953   HOST_WIDE_INT offsetx = 0, offsety = 0, sizex, sizey, tem;
1954
1955   /* Unless both have exprs, we can't tell anything.  */
1956   if (exprx == 0 || expry == 0)
1957     return 0;
1958
1959   /* If both are field references, we may be able to determine something.  */
1960   if (TREE_CODE (exprx) == COMPONENT_REF
1961       && TREE_CODE (expry) == COMPONENT_REF
1962       && nonoverlapping_component_refs_p (exprx, expry))
1963     return 1;
1964
1965   /* If the field reference test failed, look at the DECLs involved.  */
1966   moffsetx = MEM_OFFSET (x);
1967   if (TREE_CODE (exprx) == COMPONENT_REF)
1968     {
1969       tree t = decl_for_component_ref (exprx);
1970       if (! t)
1971         return 0;
1972       moffsetx = adjust_offset_for_component_ref (exprx, moffsetx);
1973       exprx = t;
1974     }
1975   else if (TREE_CODE (exprx) == INDIRECT_REF)
1976     {
1977       exprx = TREE_OPERAND (exprx, 0);
1978       if (flag_argument_noalias < 2
1979           || TREE_CODE (exprx) != PARM_DECL)
1980         return 0;
1981     }
1982
1983   moffsety = MEM_OFFSET (y);
1984   if (TREE_CODE (expry) == COMPONENT_REF)
1985     {
1986       tree t = decl_for_component_ref (expry);
1987       if (! t)
1988         return 0;
1989       moffsety = adjust_offset_for_component_ref (expry, moffsety);
1990       expry = t;
1991     }
1992   else if (TREE_CODE (expry) == INDIRECT_REF)
1993     {
1994       expry = TREE_OPERAND (expry, 0);
1995       if (flag_argument_noalias < 2
1996           || TREE_CODE (expry) != PARM_DECL)
1997         return 0;
1998     }
1999
2000   if (! DECL_P (exprx) || ! DECL_P (expry))
2001     return 0;
2002
2003   rtlx = DECL_RTL (exprx);
2004   rtly = DECL_RTL (expry);
2005
2006   /* If either RTL is not a MEM, it must be a REG or CONCAT, meaning they
2007      can't overlap unless they are the same because we never reuse that part
2008      of the stack frame used for locals for spilled pseudos.  */
2009   if ((GET_CODE (rtlx) != MEM || GET_CODE (rtly) != MEM)
2010       && ! rtx_equal_p (rtlx, rtly))
2011     return 1;
2012
2013   /* Get the base and offsets of both decls.  If either is a register, we
2014      know both are and are the same, so use that as the base.  The only
2015      we can avoid overlap is if we can deduce that they are nonoverlapping
2016      pieces of that decl, which is very rare.  */
2017   basex = GET_CODE (rtlx) == MEM ? XEXP (rtlx, 0) : rtlx;
2018   if (GET_CODE (basex) == PLUS && GET_CODE (XEXP (basex, 1)) == CONST_INT)
2019     offsetx = INTVAL (XEXP (basex, 1)), basex = XEXP (basex, 0);
2020
2021   basey = GET_CODE (rtly) == MEM ? XEXP (rtly, 0) : rtly;
2022   if (GET_CODE (basey) == PLUS && GET_CODE (XEXP (basey, 1)) == CONST_INT)
2023     offsety = INTVAL (XEXP (basey, 1)), basey = XEXP (basey, 0);
2024
2025   /* If the bases are different, we know they do not overlap if both
2026      are constants or if one is a constant and the other a pointer into the
2027      stack frame.  Otherwise a different base means we can't tell if they
2028      overlap or not.  */
2029   if (! rtx_equal_p (basex, basey))
2030     return ((CONSTANT_P (basex) && CONSTANT_P (basey))
2031             || (CONSTANT_P (basex) && REG_P (basey)
2032                 && REGNO_PTR_FRAME_P (REGNO (basey)))
2033             || (CONSTANT_P (basey) && REG_P (basex)
2034                 && REGNO_PTR_FRAME_P (REGNO (basex))));
2035
2036   sizex = (GET_CODE (rtlx) != MEM ? (int) GET_MODE_SIZE (GET_MODE (rtlx))
2037            : MEM_SIZE (rtlx) ? INTVAL (MEM_SIZE (rtlx))
2038            : -1);
2039   sizey = (GET_CODE (rtly) != MEM ? (int) GET_MODE_SIZE (GET_MODE (rtly))
2040            : MEM_SIZE (rtly) ? INTVAL (MEM_SIZE (rtly)) :
2041            -1);
2042
2043   /* If we have an offset for either memref, it can update the values computed
2044      above.  */
2045   if (moffsetx)
2046     offsetx += INTVAL (moffsetx), sizex -= INTVAL (moffsetx);
2047   if (moffsety)
2048     offsety += INTVAL (moffsety), sizey -= INTVAL (moffsety);
2049
2050   /* If a memref has both a size and an offset, we can use the smaller size.
2051      We can't do this if the offset isn't known because we must view this
2052      memref as being anywhere inside the DECL's MEM.  */
2053   if (MEM_SIZE (x) && moffsetx)
2054     sizex = INTVAL (MEM_SIZE (x));
2055   if (MEM_SIZE (y) && moffsety)
2056     sizey = INTVAL (MEM_SIZE (y));
2057
2058   /* Put the values of the memref with the lower offset in X's values.  */
2059   if (offsetx > offsety)
2060     {
2061       tem = offsetx, offsetx = offsety, offsety = tem;
2062       tem = sizex, sizex = sizey, sizey = tem;
2063     }
2064
2065   /* If we don't know the size of the lower-offset value, we can't tell
2066      if they conflict.  Otherwise, we do the test.  */
2067   return sizex >= 0 && offsety >= offsetx + sizex;
2068 }
2069
2070 /* True dependence: X is read after store in MEM takes place.  */
2071
2072 int
2073 true_dependence (rtx mem, enum machine_mode mem_mode, rtx x,
2074                  int (*varies) (rtx, int))
2075 {
2076   rtx x_addr, mem_addr;
2077   rtx base;
2078
2079   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2080     return 1;
2081
2082   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2083      This is used in epilogue deallocation functions.  */
2084   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
2085     return 1;
2086   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2087     return 1;
2088
2089   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2090     return 0;
2091
2092   /* Unchanging memory can't conflict with non-unchanging memory.
2093      A non-unchanging read can conflict with a non-unchanging write.
2094      An unchanging read can conflict with an unchanging write since
2095      there may be a single store to this address to initialize it.
2096      Note that an unchanging store can conflict with a non-unchanging read
2097      since we have to make conservative assumptions when we have a
2098      record with readonly fields and we are copying the whole thing.
2099      Just fall through to the code below to resolve potential conflicts.
2100      This won't handle all cases optimally, but the possible performance
2101      loss should be negligible.  */
2102   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
2103     return 0;
2104
2105   if (nonoverlapping_memrefs_p (mem, x))
2106     return 0;
2107
2108   if (mem_mode == VOIDmode)
2109     mem_mode = GET_MODE (mem);
2110
2111   x_addr = get_addr (XEXP (x, 0));
2112   mem_addr = get_addr (XEXP (mem, 0));
2113
2114   base = find_base_term (x_addr);
2115   if (base && (GET_CODE (base) == LABEL_REF
2116                || (GET_CODE (base) == SYMBOL_REF
2117                    && CONSTANT_POOL_ADDRESS_P (base))))
2118     return 0;
2119
2120   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
2121     return 0;
2122
2123   x_addr = canon_rtx (x_addr);
2124   mem_addr = canon_rtx (mem_addr);
2125
2126   if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
2127                             SIZE_FOR_MODE (x), x_addr, 0))
2128     return 0;
2129
2130   if (aliases_everything_p (x))
2131     return 1;
2132
2133   /* We cannot use aliases_everything_p to test MEM, since we must look
2134      at MEM_MODE, rather than GET_MODE (MEM).  */
2135   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
2136     return 1;
2137
2138   /* In true_dependence we also allow BLKmode to alias anything.  Why
2139      don't we do this in anti_dependence and output_dependence?  */
2140   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
2141     return 1;
2142
2143   return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2144                                               varies);
2145 }
2146
2147 /* Canonical true dependence: X is read after store in MEM takes place.
2148    Variant of true_dependence which assumes MEM has already been
2149    canonicalized (hence we no longer do that here).
2150    The mem_addr argument has been added, since true_dependence computed
2151    this value prior to canonicalizing.  */
2152
2153 int
2154 canon_true_dependence (rtx mem, enum machine_mode mem_mode, rtx mem_addr,
2155                        rtx x, int (*varies) (rtx, int))
2156 {
2157   rtx x_addr;
2158
2159   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2160     return 1;
2161
2162   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2163      This is used in epilogue deallocation functions.  */
2164   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
2165     return 1;
2166   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2167     return 1;
2168
2169   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2170     return 0;
2171
2172   /* If X is an unchanging read, then it can't possibly conflict with any
2173      non-unchanging store.  It may conflict with an unchanging write though,
2174      because there may be a single store to this address to initialize it.
2175      Just fall through to the code below to resolve the case where we have
2176      both an unchanging read and an unchanging write.  This won't handle all
2177      cases optimally, but the possible performance loss should be
2178      negligible.  */
2179   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
2180     return 0;
2181
2182   if (nonoverlapping_memrefs_p (x, mem))
2183     return 0;
2184
2185   x_addr = get_addr (XEXP (x, 0));
2186
2187   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
2188     return 0;
2189
2190   x_addr = canon_rtx (x_addr);
2191   if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
2192                             SIZE_FOR_MODE (x), x_addr, 0))
2193     return 0;
2194
2195   if (aliases_everything_p (x))
2196     return 1;
2197
2198   /* We cannot use aliases_everything_p to test MEM, since we must look
2199      at MEM_MODE, rather than GET_MODE (MEM).  */
2200   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
2201     return 1;
2202
2203   /* In true_dependence we also allow BLKmode to alias anything.  Why
2204      don't we do this in anti_dependence and output_dependence?  */
2205   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
2206     return 1;
2207
2208   return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2209                                               varies);
2210 }
2211
2212 /* Returns nonzero if a write to X might alias a previous read from
2213    (or, if WRITEP is nonzero, a write to) MEM.  If CONSTP is nonzero,
2214    honor the RTX_UNCHANGING_P flags on X and MEM.  */
2215
2216 static int
2217 write_dependence_p (rtx mem, rtx x, int writep, int constp)
2218 {
2219   rtx x_addr, mem_addr;
2220   rtx fixed_scalar;
2221   rtx base;
2222
2223   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2224     return 1;
2225
2226   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2227      This is used in epilogue deallocation functions.  */
2228   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
2229     return 1;
2230   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2231     return 1;
2232
2233   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2234     return 0;
2235
2236   if (constp)
2237     {
2238       /* Unchanging memory can't conflict with non-unchanging memory.  */
2239       if (RTX_UNCHANGING_P (x) != RTX_UNCHANGING_P (mem))
2240         return 0;
2241
2242       /* If MEM is an unchanging read, then it can't possibly conflict with
2243          the store to X, because there is at most one store to MEM, and it
2244          must have occurred somewhere before MEM.  */
2245       if (! writep && RTX_UNCHANGING_P (mem))
2246         return 0;
2247     }
2248
2249   if (nonoverlapping_memrefs_p (x, mem))
2250     return 0;
2251
2252   x_addr = get_addr (XEXP (x, 0));
2253   mem_addr = get_addr (XEXP (mem, 0));
2254
2255   if (! writep)
2256     {
2257       base = find_base_term (mem_addr);
2258       if (base && (GET_CODE (base) == LABEL_REF
2259                    || (GET_CODE (base) == SYMBOL_REF
2260                        && CONSTANT_POOL_ADDRESS_P (base))))
2261         return 0;
2262     }
2263
2264   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x),
2265                           GET_MODE (mem)))
2266     return 0;
2267
2268   x_addr = canon_rtx (x_addr);
2269   mem_addr = canon_rtx (mem_addr);
2270
2271   if (!memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
2272                            SIZE_FOR_MODE (x), x_addr, 0))
2273     return 0;
2274
2275   fixed_scalar
2276     = fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2277                                          rtx_addr_varies_p);
2278
2279   return (!(fixed_scalar == mem && !aliases_everything_p (x))
2280           && !(fixed_scalar == x && !aliases_everything_p (mem)));
2281 }
2282
2283 /* Anti dependence: X is written after read in MEM takes place.  */
2284
2285 int
2286 anti_dependence (rtx mem, rtx x)
2287 {
2288   return write_dependence_p (mem, x, /*writep=*/0, /*constp*/1);
2289 }
2290
2291 /* Output dependence: X is written after store in MEM takes place.  */
2292
2293 int
2294 output_dependence (rtx mem, rtx x)
2295 {
2296   return write_dependence_p (mem, x, /*writep=*/1, /*constp*/1);
2297 }
2298
2299 /* Unchanging anti dependence: Like anti_dependence but ignores
2300    the UNCHANGING_RTX_P property on const variable references.  */
2301
2302 int
2303 unchanging_anti_dependence (rtx mem, rtx x)
2304 {
2305   return write_dependence_p (mem, x, /*writep=*/0, /*constp*/0);
2306 }
2307 \f
2308 /* A subroutine of nonlocal_mentioned_p, returns 1 if *LOC mentions
2309    something which is not local to the function and is not constant.  */
2310
2311 static int
2312 nonlocal_mentioned_p_1 (rtx *loc, void *data ATTRIBUTE_UNUSED)
2313 {
2314   rtx x = *loc;
2315   rtx base;
2316   int regno;
2317
2318   if (! x)
2319     return 0;
2320
2321   switch (GET_CODE (x))
2322     {
2323     case SUBREG:
2324       if (GET_CODE (SUBREG_REG (x)) == REG)
2325         {
2326           /* Global registers are not local.  */
2327           if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER
2328               && global_regs[subreg_regno (x)])
2329             return 1;
2330           return 0;
2331         }
2332       break;
2333
2334     case REG:
2335       regno = REGNO (x);
2336       /* Global registers are not local.  */
2337       if (regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
2338         return 1;
2339       return 0;
2340
2341     case SCRATCH:
2342     case PC:
2343     case CC0:
2344     case CONST_INT:
2345     case CONST_DOUBLE:
2346     case CONST_VECTOR:
2347     case CONST:
2348     case LABEL_REF:
2349       return 0;
2350
2351     case SYMBOL_REF:
2352       /* Constants in the function's constants pool are constant.  */
2353       if (CONSTANT_POOL_ADDRESS_P (x))
2354         return 0;
2355       return 1;
2356
2357     case CALL:
2358       /* Non-constant calls and recursion are not local.  */
2359       return 1;
2360
2361     case MEM:
2362       /* Be overly conservative and consider any volatile memory
2363          reference as not local.  */
2364       if (MEM_VOLATILE_P (x))
2365         return 1;
2366       base = find_base_term (XEXP (x, 0));
2367       if (base)
2368         {
2369           /* A Pmode ADDRESS could be a reference via the structure value
2370              address or static chain.  Such memory references are nonlocal.
2371
2372              Thus, we have to examine the contents of the ADDRESS to find
2373              out if this is a local reference or not.  */
2374           if (GET_CODE (base) == ADDRESS
2375               && GET_MODE (base) == Pmode
2376               && (XEXP (base, 0) == stack_pointer_rtx
2377                   || XEXP (base, 0) == arg_pointer_rtx
2378 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2379                   || XEXP (base, 0) == hard_frame_pointer_rtx
2380 #endif
2381                   || XEXP (base, 0) == frame_pointer_rtx))
2382             return 0;
2383           /* Constants in the function's constant pool are constant.  */
2384           if (GET_CODE (base) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (base))
2385             return 0;
2386         }
2387       return 1;
2388
2389     case UNSPEC_VOLATILE:
2390     case ASM_INPUT:
2391       return 1;
2392
2393     case ASM_OPERANDS:
2394       if (MEM_VOLATILE_P (x))
2395         return 1;
2396
2397     /* Fall through.  */
2398
2399     default:
2400       break;
2401     }
2402
2403   return 0;
2404 }
2405
2406 /* Returns nonzero if X might mention something which is not
2407    local to the function and is not constant.  */
2408
2409 static int
2410 nonlocal_mentioned_p (rtx x)
2411 {
2412   if (INSN_P (x))
2413     {
2414       if (GET_CODE (x) == CALL_INSN)
2415         {
2416           if (! CONST_OR_PURE_CALL_P (x))
2417             return 1;
2418           x = CALL_INSN_FUNCTION_USAGE (x);
2419           if (x == 0)
2420             return 0;
2421         }
2422       else
2423         x = PATTERN (x);
2424     }
2425
2426   return for_each_rtx (&x, nonlocal_mentioned_p_1, NULL);
2427 }
2428
2429 /* A subroutine of nonlocal_referenced_p, returns 1 if *LOC references
2430    something which is not local to the function and is not constant.  */
2431
2432 static int
2433 nonlocal_referenced_p_1 (rtx *loc, void *data ATTRIBUTE_UNUSED)
2434 {
2435   rtx x = *loc;
2436
2437   if (! x)
2438     return 0;
2439
2440   switch (GET_CODE (x))
2441     {
2442     case MEM:
2443     case REG:
2444     case SYMBOL_REF:
2445     case SUBREG:
2446       return nonlocal_mentioned_p (x);
2447
2448     case CALL:
2449       /* Non-constant calls and recursion are not local.  */
2450       return 1;
2451
2452     case SET:
2453       if (nonlocal_mentioned_p (SET_SRC (x)))
2454         return 1;
2455
2456       if (GET_CODE (SET_DEST (x)) == MEM)
2457         return nonlocal_mentioned_p (XEXP (SET_DEST (x), 0));
2458
2459       /* If the destination is anything other than a CC0, PC,
2460          MEM, REG, or a SUBREG of a REG that occupies all of
2461          the REG, then X references nonlocal memory if it is
2462          mentioned in the destination.  */
2463       if (GET_CODE (SET_DEST (x)) != CC0
2464           && GET_CODE (SET_DEST (x)) != PC
2465           && GET_CODE (SET_DEST (x)) != REG
2466           && ! (GET_CODE (SET_DEST (x)) == SUBREG
2467                 && GET_CODE (SUBREG_REG (SET_DEST (x))) == REG
2468                 && (((GET_MODE_SIZE (GET_MODE (SUBREG_REG (SET_DEST (x))))
2469                       + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
2470                     == ((GET_MODE_SIZE (GET_MODE (SET_DEST (x)))
2471                          + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD))))
2472         return nonlocal_mentioned_p (SET_DEST (x));
2473       return 0;
2474
2475     case CLOBBER:
2476       if (GET_CODE (XEXP (x, 0)) == MEM)
2477         return nonlocal_mentioned_p (XEXP (XEXP (x, 0), 0));
2478       return 0;
2479
2480     case USE:
2481       return nonlocal_mentioned_p (XEXP (x, 0));
2482
2483     case ASM_INPUT:
2484     case UNSPEC_VOLATILE:
2485       return 1;
2486
2487     case ASM_OPERANDS:
2488       if (MEM_VOLATILE_P (x))
2489         return 1;
2490
2491     /* Fall through.  */
2492
2493     default:
2494       break;
2495     }
2496
2497   return 0;
2498 }
2499
2500 /* Returns nonzero if X might reference something which is not
2501    local to the function and is not constant.  */
2502
2503 static int
2504 nonlocal_referenced_p (rtx x)
2505 {
2506   if (INSN_P (x))
2507     {
2508       if (GET_CODE (x) == CALL_INSN)
2509         {
2510           if (! CONST_OR_PURE_CALL_P (x))
2511             return 1;
2512           x = CALL_INSN_FUNCTION_USAGE (x);
2513           if (x == 0)
2514             return 0;
2515         }
2516       else
2517         x = PATTERN (x);
2518     }
2519
2520   return for_each_rtx (&x, nonlocal_referenced_p_1, NULL);
2521 }
2522
2523 /* A subroutine of nonlocal_set_p, returns 1 if *LOC sets
2524    something which is not local to the function and is not constant.  */
2525
2526 static int
2527 nonlocal_set_p_1 (rtx *loc, void *data ATTRIBUTE_UNUSED)
2528 {
2529   rtx x = *loc;
2530
2531   if (! x)
2532     return 0;
2533
2534   switch (GET_CODE (x))
2535     {
2536     case CALL:
2537       /* Non-constant calls and recursion are not local.  */
2538       return 1;
2539
2540     case PRE_INC:
2541     case PRE_DEC:
2542     case POST_INC:
2543     case POST_DEC:
2544     case PRE_MODIFY:
2545     case POST_MODIFY:
2546       return nonlocal_mentioned_p (XEXP (x, 0));
2547
2548     case SET:
2549       if (nonlocal_mentioned_p (SET_DEST (x)))
2550         return 1;
2551       return nonlocal_set_p (SET_SRC (x));
2552
2553     case CLOBBER:
2554       return nonlocal_mentioned_p (XEXP (x, 0));
2555
2556     case USE:
2557       return 0;
2558
2559     case ASM_INPUT:
2560     case UNSPEC_VOLATILE:
2561       return 1;
2562
2563     case ASM_OPERANDS:
2564       if (MEM_VOLATILE_P (x))
2565         return 1;
2566
2567     /* Fall through.  */
2568
2569     default:
2570       break;
2571     }
2572
2573   return 0;
2574 }
2575
2576 /* Returns nonzero if X might set something which is not
2577    local to the function and is not constant.  */
2578
2579 static int
2580 nonlocal_set_p (rtx x)
2581 {
2582   if (INSN_P (x))
2583     {
2584       if (GET_CODE (x) == CALL_INSN)
2585         {
2586           if (! CONST_OR_PURE_CALL_P (x))
2587             return 1;
2588           x = CALL_INSN_FUNCTION_USAGE (x);
2589           if (x == 0)
2590             return 0;
2591         }
2592       else
2593         x = PATTERN (x);
2594     }
2595
2596   return for_each_rtx (&x, nonlocal_set_p_1, NULL);
2597 }
2598
2599 /* Mark the function if it is pure or constant.  */
2600
2601 void
2602 mark_constant_function (void)
2603 {
2604   rtx insn;
2605   int nonlocal_memory_referenced;
2606
2607   if (TREE_READONLY (current_function_decl)
2608       || DECL_IS_PURE (current_function_decl)
2609       || TREE_THIS_VOLATILE (current_function_decl)
2610       || current_function_has_nonlocal_goto
2611       || !(*targetm.binds_local_p) (current_function_decl))
2612     return;
2613
2614   /* A loop might not return which counts as a side effect.  */
2615   if (mark_dfs_back_edges ())
2616     return;
2617
2618   nonlocal_memory_referenced = 0;
2619
2620   init_alias_analysis ();
2621
2622   /* Determine if this is a constant or pure function.  */
2623
2624   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2625     {
2626       if (! INSN_P (insn))
2627         continue;
2628
2629       if (nonlocal_set_p (insn) || global_reg_mentioned_p (insn)
2630           || volatile_refs_p (PATTERN (insn)))
2631         break;
2632
2633       if (! nonlocal_memory_referenced)
2634         nonlocal_memory_referenced = nonlocal_referenced_p (insn);
2635     }
2636
2637   end_alias_analysis ();
2638
2639   /* Mark the function.  */
2640
2641   if (insn)
2642     ;
2643   else if (nonlocal_memory_referenced)
2644     {
2645       cgraph_rtl_info (current_function_decl)->pure_function = 1;
2646       DECL_IS_PURE (current_function_decl) = 1;
2647     }
2648   else
2649     {
2650       cgraph_rtl_info (current_function_decl)->const_function = 1;
2651       TREE_READONLY (current_function_decl) = 1;
2652     }
2653 }
2654 \f
2655
2656 void
2657 init_alias_once (void)
2658 {
2659   int i;
2660
2661 #ifndef OUTGOING_REGNO
2662 #define OUTGOING_REGNO(N) N
2663 #endif
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"