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