OSDN Git Service

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