OSDN Git Service

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