OSDN Git Service

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