OSDN Git Service

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