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