OSDN Git Service

* tree-inline.c (find_builtin_longjmp_call): Save and restore
[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
45 /* The alias sets assigned to MEMs assist the back-end in determining
46    which MEMs can alias which other MEMs.  In general, two MEMs in
47    different alias sets cannot alias each other, with one important
48    exception.  Consider something like:
49
50      struct S {int i; double d; };
51
52    a store to an `S' can alias something of either type `int' or type
53    `double'.  (However, a store to an `int' cannot alias a `double'
54    and vice versa.)  We indicate this via a tree structure that looks
55    like:
56            struct S
57             /   \
58            /     \
59          |/_     _\|
60          int    double
61
62    (The arrows are directed and point downwards.)
63     In this situation we say the alias set for `struct S' is the
64    `superset' and that those for `int' and `double' are `subsets'.
65
66    To see whether two alias sets can point to the same memory, we must
67    see if either alias set is a subset of the other. We need not trace
68    past immediate descendants, however, since we propagate all
69    grandchildren up one level.
70
71    Alias set zero is implicitly a superset of all other alias sets.
72    However, this is no actual entry for alias set zero.  It is an
73    error to attempt to explicitly construct a subset of zero.  */
74
75 typedef struct alias_set_entry
76 {
77   /* The alias set number, as stored in MEM_ALIAS_SET.  */
78   HOST_WIDE_INT alias_set;
79
80   /* The children of the alias set.  These are not just the immediate
81      children, but, in fact, all descendants.  So, if we have:
82
83        struct T { struct S s; float f; }
84
85      continuing our example above, the children here will be all of
86      `int', `double', `float', and `struct S'.  */
87   splay_tree children;
88
89   /* Nonzero if would have a child of zero: this effectively makes this
90      alias set the same as alias set zero.  */
91   int has_zero_child;
92 } *alias_set_entry;
93
94 static int rtx_equal_for_memref_p       PARAMS ((rtx, rtx));
95 static rtx find_symbolic_term           PARAMS ((rtx));
96 rtx get_addr                            PARAMS ((rtx));
97 static int memrefs_conflict_p           PARAMS ((int, rtx, int, rtx,
98                                                  HOST_WIDE_INT));
99 static void record_set                  PARAMS ((rtx, rtx, void *));
100 static rtx find_base_term               PARAMS ((rtx));
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
1121    We use the data in reg_known_value above to see if two registers with
1122    different numbers are, in fact, equivalent.  */
1123
1124 static int
1125 rtx_equal_for_memref_p (x, y)
1126      rtx x, y;
1127 {
1128   int i;
1129   int j;
1130   enum rtx_code code;
1131   const char *fmt;
1132
1133   if (x == 0 && y == 0)
1134     return 1;
1135   if (x == 0 || y == 0)
1136     return 0;
1137
1138   x = canon_rtx (x);
1139   y = canon_rtx (y);
1140
1141   if (x == y)
1142     return 1;
1143
1144   code = GET_CODE (x);
1145   /* Rtx's of different codes cannot be equal.  */
1146   if (code != GET_CODE (y))
1147     return 0;
1148
1149   /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
1150      (REG:SI x) and (REG:HI x) are NOT equivalent.  */
1151
1152   if (GET_MODE (x) != GET_MODE (y))
1153     return 0;
1154
1155   /* Some RTL can be compared without a recursive examination.  */
1156   switch (code)
1157     {
1158     case VALUE:
1159       return CSELIB_VAL_PTR (x) == CSELIB_VAL_PTR (y);
1160
1161     case REG:
1162       return REGNO (x) == REGNO (y);
1163
1164     case LABEL_REF:
1165       return XEXP (x, 0) == XEXP (y, 0);
1166
1167     case SYMBOL_REF:
1168       return XSTR (x, 0) == XSTR (y, 0);
1169
1170     case CONST_INT:
1171     case CONST_DOUBLE:
1172       /* There's no need to compare the contents of CONST_DOUBLEs or
1173          CONST_INTs because pointer equality is a good enough
1174          comparison for these nodes.  */
1175       return 0;
1176
1177     case ADDRESSOF:
1178       return (XINT (x, 1) == XINT (y, 1)
1179               && rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0)));
1180
1181     default:
1182       break;
1183     }
1184
1185   /* For commutative operations, the RTX match if the operand match in any
1186      order.  Also handle the simple binary and unary cases without a loop.  */
1187   if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
1188     return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
1189              && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
1190             || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
1191                 && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
1192   else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
1193     return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
1194             && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)));
1195   else if (GET_RTX_CLASS (code) == '1')
1196     return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0));
1197
1198   /* Compare the elements.  If any pair of corresponding elements
1199      fail to match, return 0 for the whole things.
1200
1201      Limit cases to types which actually appear in addresses.  */
1202
1203   fmt = GET_RTX_FORMAT (code);
1204   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1205     {
1206       switch (fmt[i])
1207         {
1208         case 'i':
1209           if (XINT (x, i) != XINT (y, i))
1210             return 0;
1211           break;
1212
1213         case 'E':
1214           /* Two vectors must have the same length.  */
1215           if (XVECLEN (x, i) != XVECLEN (y, i))
1216             return 0;
1217
1218           /* And the corresponding elements must match.  */
1219           for (j = 0; j < XVECLEN (x, i); j++)
1220             if (rtx_equal_for_memref_p (XVECEXP (x, i, j),
1221                                         XVECEXP (y, i, j)) == 0)
1222               return 0;
1223           break;
1224
1225         case 'e':
1226           if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0)
1227             return 0;
1228           break;
1229
1230           /* This can happen for asm operands.  */
1231         case 's':
1232           if (strcmp (XSTR (x, i), XSTR (y, i)))
1233             return 0;
1234           break;
1235
1236         /* This can happen for an asm which clobbers memory.  */
1237         case '0':
1238           break;
1239
1240           /* It is believed that rtx's at this level will never
1241              contain anything but integers and other rtx's,
1242              except for within LABEL_REFs and SYMBOL_REFs.  */
1243         default:
1244           abort ();
1245         }
1246     }
1247   return 1;
1248 }
1249
1250 /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
1251    X and return it, or return 0 if none found.  */
1252
1253 static rtx
1254 find_symbolic_term (x)
1255      rtx x;
1256 {
1257   int i;
1258   enum rtx_code code;
1259   const char *fmt;
1260
1261   code = GET_CODE (x);
1262   if (code == SYMBOL_REF || code == LABEL_REF)
1263     return x;
1264   if (GET_RTX_CLASS (code) == 'o')
1265     return 0;
1266
1267   fmt = GET_RTX_FORMAT (code);
1268   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1269     {
1270       rtx t;
1271
1272       if (fmt[i] == 'e')
1273         {
1274           t = find_symbolic_term (XEXP (x, i));
1275           if (t != 0)
1276             return t;
1277         }
1278       else if (fmt[i] == 'E')
1279         break;
1280     }
1281   return 0;
1282 }
1283
1284 static rtx
1285 find_base_term (x)
1286      rtx x;
1287 {
1288   cselib_val *val;
1289   struct elt_loc_list *l;
1290
1291 #if defined (FIND_BASE_TERM)
1292   /* Try machine-dependent ways to find the base term.  */
1293   x = FIND_BASE_TERM (x);
1294 #endif
1295
1296   switch (GET_CODE (x))
1297     {
1298     case REG:
1299       return REG_BASE_VALUE (x);
1300
1301     case TRUNCATE:
1302       if (GET_MODE_SIZE (GET_MODE (x)) < GET_MODE_SIZE (Pmode))
1303         return 0;
1304       /* Fall through.  */
1305     case HIGH:
1306     case PRE_INC:
1307     case PRE_DEC:
1308     case POST_INC:
1309     case POST_DEC:
1310     case PRE_MODIFY:
1311     case POST_MODIFY:
1312       return find_base_term (XEXP (x, 0));
1313
1314     case ZERO_EXTEND:
1315     case SIGN_EXTEND:   /* Used for Alpha/NT pointers */
1316       {
1317         rtx temp = find_base_term (XEXP (x, 0));
1318
1319 #ifdef POINTERS_EXTEND_UNSIGNED
1320         if (temp != 0 && CONSTANT_P (temp) && GET_MODE (temp) != Pmode)
1321           temp = convert_memory_address (Pmode, temp);
1322 #endif
1323
1324         return temp;
1325       }
1326
1327     case VALUE:
1328       val = CSELIB_VAL_PTR (x);
1329       for (l = val->locs; l; l = l->next)
1330         if ((x = find_base_term (l->loc)) != 0)
1331           return x;
1332       return 0;
1333
1334     case CONST:
1335       x = XEXP (x, 0);
1336       if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
1337         return 0;
1338       /* fall through */
1339     case LO_SUM:
1340     case PLUS:
1341     case MINUS:
1342       {
1343         rtx tmp1 = XEXP (x, 0);
1344         rtx tmp2 = XEXP (x, 1);
1345
1346         /* This is a little bit tricky since we have to determine which of
1347            the two operands represents the real base address.  Otherwise this
1348            routine may return the index register instead of the base register.
1349
1350            That may cause us to believe no aliasing was possible, when in
1351            fact aliasing is possible.
1352
1353            We use a few simple tests to guess the base register.  Additional
1354            tests can certainly be added.  For example, if one of the operands
1355            is a shift or multiply, then it must be the index register and the
1356            other operand is the base register.  */
1357
1358         if (tmp1 == pic_offset_table_rtx && CONSTANT_P (tmp2))
1359           return find_base_term (tmp2);
1360
1361         /* If either operand is known to be a pointer, then use it
1362            to determine the base term.  */
1363         if (REG_P (tmp1) && REG_POINTER (tmp1))
1364           return find_base_term (tmp1);
1365
1366         if (REG_P (tmp2) && REG_POINTER (tmp2))
1367           return find_base_term (tmp2);
1368
1369         /* Neither operand was known to be a pointer.  Go ahead and find the
1370            base term for both operands.  */
1371         tmp1 = find_base_term (tmp1);
1372         tmp2 = find_base_term (tmp2);
1373
1374         /* If either base term is named object or a special address
1375            (like an argument or stack reference), then use it for the
1376            base term.  */
1377         if (tmp1 != 0
1378             && (GET_CODE (tmp1) == SYMBOL_REF
1379                 || GET_CODE (tmp1) == LABEL_REF
1380                 || (GET_CODE (tmp1) == ADDRESS
1381                     && GET_MODE (tmp1) != VOIDmode)))
1382           return tmp1;
1383
1384         if (tmp2 != 0
1385             && (GET_CODE (tmp2) == SYMBOL_REF
1386                 || GET_CODE (tmp2) == LABEL_REF
1387                 || (GET_CODE (tmp2) == ADDRESS
1388                     && GET_MODE (tmp2) != VOIDmode)))
1389           return tmp2;
1390
1391         /* We could not determine which of the two operands was the
1392            base register and which was the index.  So we can determine
1393            nothing from the base alias check.  */
1394         return 0;
1395       }
1396
1397     case AND:
1398       if (GET_CODE (XEXP (x, 1)) == CONST_INT && INTVAL (XEXP (x, 1)) != 0)
1399         return find_base_term (XEXP (x, 0));
1400       return 0;
1401
1402     case SYMBOL_REF:
1403     case LABEL_REF:
1404       return x;
1405
1406     case ADDRESSOF:
1407       return REG_BASE_VALUE (frame_pointer_rtx);
1408
1409     default:
1410       return 0;
1411     }
1412 }
1413
1414 /* Return 0 if the addresses X and Y are known to point to different
1415    objects, 1 if they might be pointers to the same object.  */
1416
1417 static int
1418 base_alias_check (x, y, x_mode, y_mode)
1419      rtx x, y;
1420      enum machine_mode x_mode, y_mode;
1421 {
1422   rtx x_base = find_base_term (x);
1423   rtx y_base = find_base_term (y);
1424
1425   /* If the address itself has no known base see if a known equivalent
1426      value has one.  If either address still has no known base, nothing
1427      is known about aliasing.  */
1428   if (x_base == 0)
1429     {
1430       rtx x_c;
1431
1432       if (! flag_expensive_optimizations || (x_c = canon_rtx (x)) == x)
1433         return 1;
1434
1435       x_base = find_base_term (x_c);
1436       if (x_base == 0)
1437         return 1;
1438     }
1439
1440   if (y_base == 0)
1441     {
1442       rtx y_c;
1443       if (! flag_expensive_optimizations || (y_c = canon_rtx (y)) == y)
1444         return 1;
1445
1446       y_base = find_base_term (y_c);
1447       if (y_base == 0)
1448         return 1;
1449     }
1450
1451   /* If the base addresses are equal nothing is known about aliasing.  */
1452   if (rtx_equal_p (x_base, y_base))
1453     return 1;
1454
1455   /* The base addresses of the read and write are different expressions.
1456      If they are both symbols and they are not accessed via AND, there is
1457      no conflict.  We can bring knowledge of object alignment into play
1458      here.  For example, on alpha, "char a, b;" can alias one another,
1459      though "char a; long b;" cannot.  */
1460   if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
1461     {
1462       if (GET_CODE (x) == AND && GET_CODE (y) == AND)
1463         return 1;
1464       if (GET_CODE (x) == AND
1465           && (GET_CODE (XEXP (x, 1)) != CONST_INT
1466               || (int) GET_MODE_UNIT_SIZE (y_mode) < -INTVAL (XEXP (x, 1))))
1467         return 1;
1468       if (GET_CODE (y) == AND
1469           && (GET_CODE (XEXP (y, 1)) != CONST_INT
1470               || (int) GET_MODE_UNIT_SIZE (x_mode) < -INTVAL (XEXP (y, 1))))
1471         return 1;
1472       /* Differing symbols never alias.  */
1473       return 0;
1474     }
1475
1476   /* If one address is a stack reference there can be no alias:
1477      stack references using different base registers do not alias,
1478      a stack reference can not alias a parameter, and a stack reference
1479      can not alias a global.  */
1480   if ((GET_CODE (x_base) == ADDRESS && GET_MODE (x_base) == Pmode)
1481       || (GET_CODE (y_base) == ADDRESS && GET_MODE (y_base) == Pmode))
1482     return 0;
1483
1484   if (! flag_argument_noalias)
1485     return 1;
1486
1487   if (flag_argument_noalias > 1)
1488     return 0;
1489
1490   /* Weak noalias assertion (arguments are distinct, but may match globals).  */
1491   return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode);
1492 }
1493
1494 /* Convert the address X into something we can use.  This is done by returning
1495    it unchanged unless it is a value; in the latter case we call cselib to get
1496    a more useful rtx.  */
1497
1498 rtx
1499 get_addr (x)
1500      rtx x;
1501 {
1502   cselib_val *v;
1503   struct elt_loc_list *l;
1504
1505   if (GET_CODE (x) != VALUE)
1506     return x;
1507   v = CSELIB_VAL_PTR (x);
1508   for (l = v->locs; l; l = l->next)
1509     if (CONSTANT_P (l->loc))
1510       return l->loc;
1511   for (l = v->locs; l; l = l->next)
1512     if (GET_CODE (l->loc) != REG && GET_CODE (l->loc) != MEM)
1513       return l->loc;
1514   if (v->locs)
1515     return v->locs->loc;
1516   return x;
1517 }
1518
1519 /*  Return the address of the (N_REFS + 1)th memory reference to ADDR
1520     where SIZE is the size in bytes of the memory reference.  If ADDR
1521     is not modified by the memory reference then ADDR is returned.  */
1522
1523 rtx
1524 addr_side_effect_eval (addr, size, n_refs)
1525      rtx addr;
1526      int size;
1527      int n_refs;
1528 {
1529   int offset = 0;
1530
1531   switch (GET_CODE (addr))
1532     {
1533     case PRE_INC:
1534       offset = (n_refs + 1) * size;
1535       break;
1536     case PRE_DEC:
1537       offset = -(n_refs + 1) * size;
1538       break;
1539     case POST_INC:
1540       offset = n_refs * size;
1541       break;
1542     case POST_DEC:
1543       offset = -n_refs * size;
1544       break;
1545
1546     default:
1547       return addr;
1548     }
1549
1550   if (offset)
1551     addr = gen_rtx_PLUS (GET_MODE (addr), XEXP (addr, 0), GEN_INT (offset));
1552   else
1553     addr = XEXP (addr, 0);
1554
1555   return addr;
1556 }
1557
1558 /* Return nonzero if X and Y (memory addresses) could reference the
1559    same location in memory.  C is an offset accumulator.  When
1560    C is nonzero, we are testing aliases between X and Y + C.
1561    XSIZE is the size in bytes of the X reference,
1562    similarly YSIZE is the size in bytes for Y.
1563
1564    If XSIZE or YSIZE is zero, we do not know the amount of memory being
1565    referenced (the reference was BLKmode), so make the most pessimistic
1566    assumptions.
1567
1568    If XSIZE or YSIZE is negative, we may access memory outside the object
1569    being referenced as a side effect.  This can happen when using AND to
1570    align memory references, as is done on the Alpha.
1571
1572    Nice to notice that varying addresses cannot conflict with fp if no
1573    local variables had their addresses taken, but that's too hard now.  */
1574
1575 static int
1576 memrefs_conflict_p (xsize, x, ysize, y, c)
1577      rtx x, y;
1578      int xsize, ysize;
1579      HOST_WIDE_INT c;
1580 {
1581   if (GET_CODE (x) == VALUE)
1582     x = get_addr (x);
1583   if (GET_CODE (y) == VALUE)
1584     y = get_addr (y);
1585   if (GET_CODE (x) == HIGH)
1586     x = XEXP (x, 0);
1587   else if (GET_CODE (x) == LO_SUM)
1588     x = XEXP (x, 1);
1589   else
1590     x = canon_rtx (addr_side_effect_eval (x, xsize, 0));
1591   if (GET_CODE (y) == HIGH)
1592     y = XEXP (y, 0);
1593   else if (GET_CODE (y) == LO_SUM)
1594     y = XEXP (y, 1);
1595   else
1596     y = canon_rtx (addr_side_effect_eval (y, ysize, 0));
1597
1598   if (rtx_equal_for_memref_p (x, y))
1599     {
1600       if (xsize <= 0 || ysize <= 0)
1601         return 1;
1602       if (c >= 0 && xsize > c)
1603         return 1;
1604       if (c < 0 && ysize+c > 0)
1605         return 1;
1606       return 0;
1607     }
1608
1609   /* This code used to check for conflicts involving stack references and
1610      globals but the base address alias code now handles these cases.  */
1611
1612   if (GET_CODE (x) == PLUS)
1613     {
1614       /* The fact that X is canonicalized means that this
1615          PLUS rtx is canonicalized.  */
1616       rtx x0 = XEXP (x, 0);
1617       rtx x1 = XEXP (x, 1);
1618
1619       if (GET_CODE (y) == PLUS)
1620         {
1621           /* The fact that Y is canonicalized means that this
1622              PLUS rtx is canonicalized.  */
1623           rtx y0 = XEXP (y, 0);
1624           rtx y1 = XEXP (y, 1);
1625
1626           if (rtx_equal_for_memref_p (x1, y1))
1627             return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1628           if (rtx_equal_for_memref_p (x0, y0))
1629             return memrefs_conflict_p (xsize, x1, ysize, y1, c);
1630           if (GET_CODE (x1) == CONST_INT)
1631             {
1632               if (GET_CODE (y1) == CONST_INT)
1633                 return memrefs_conflict_p (xsize, x0, ysize, y0,
1634                                            c - INTVAL (x1) + INTVAL (y1));
1635               else
1636                 return memrefs_conflict_p (xsize, x0, ysize, y,
1637                                            c - INTVAL (x1));
1638             }
1639           else if (GET_CODE (y1) == CONST_INT)
1640             return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1641
1642           return 1;
1643         }
1644       else if (GET_CODE (x1) == CONST_INT)
1645         return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
1646     }
1647   else if (GET_CODE (y) == PLUS)
1648     {
1649       /* The fact that Y is canonicalized means that this
1650          PLUS rtx is canonicalized.  */
1651       rtx y0 = XEXP (y, 0);
1652       rtx y1 = XEXP (y, 1);
1653
1654       if (GET_CODE (y1) == CONST_INT)
1655         return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1656       else
1657         return 1;
1658     }
1659
1660   if (GET_CODE (x) == GET_CODE (y))
1661     switch (GET_CODE (x))
1662       {
1663       case MULT:
1664         {
1665           /* Handle cases where we expect the second operands to be the
1666              same, and check only whether the first operand would conflict
1667              or not.  */
1668           rtx x0, y0;
1669           rtx x1 = canon_rtx (XEXP (x, 1));
1670           rtx y1 = canon_rtx (XEXP (y, 1));
1671           if (! rtx_equal_for_memref_p (x1, y1))
1672             return 1;
1673           x0 = canon_rtx (XEXP (x, 0));
1674           y0 = canon_rtx (XEXP (y, 0));
1675           if (rtx_equal_for_memref_p (x0, y0))
1676             return (xsize == 0 || ysize == 0
1677                     || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1678
1679           /* Can't properly adjust our sizes.  */
1680           if (GET_CODE (x1) != CONST_INT)
1681             return 1;
1682           xsize /= INTVAL (x1);
1683           ysize /= INTVAL (x1);
1684           c /= INTVAL (x1);
1685           return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1686         }
1687
1688       case REG:
1689         /* Are these registers known not to be equal?  */
1690         if (alias_invariant)
1691           {
1692             unsigned int r_x = REGNO (x), r_y = REGNO (y);
1693             rtx i_x, i_y;       /* invariant relationships of X and Y */
1694
1695             i_x = r_x >= reg_base_value_size ? 0 : alias_invariant[r_x];
1696             i_y = r_y >= reg_base_value_size ? 0 : alias_invariant[r_y];
1697
1698             if (i_x == 0 && i_y == 0)
1699               break;
1700
1701             if (! memrefs_conflict_p (xsize, i_x ? i_x : x,
1702                                       ysize, i_y ? i_y : y, c))
1703               return 0;
1704           }
1705         break;
1706
1707       default:
1708         break;
1709       }
1710
1711   /* Treat an access through an AND (e.g. a subword access on an Alpha)
1712      as an access with indeterminate size.  Assume that references
1713      besides AND are aligned, so if the size of the other reference is
1714      at least as large as the alignment, assume no other overlap.  */
1715   if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT)
1716     {
1717       if (GET_CODE (y) == AND || ysize < -INTVAL (XEXP (x, 1)))
1718         xsize = -1;
1719       return memrefs_conflict_p (xsize, XEXP (x, 0), ysize, y, c);
1720     }
1721   if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT)
1722     {
1723       /* ??? If we are indexing far enough into the array/structure, we
1724          may yet be able to determine that we can not overlap.  But we
1725          also need to that we are far enough from the end not to overlap
1726          a following reference, so we do nothing with that for now.  */
1727       if (GET_CODE (x) == AND || xsize < -INTVAL (XEXP (y, 1)))
1728         ysize = -1;
1729       return memrefs_conflict_p (xsize, x, ysize, XEXP (y, 0), c);
1730     }
1731
1732   if (GET_CODE (x) == ADDRESSOF)
1733     {
1734       if (y == frame_pointer_rtx
1735           || GET_CODE (y) == ADDRESSOF)
1736         return xsize <= 0 || ysize <= 0;
1737     }
1738   if (GET_CODE (y) == ADDRESSOF)
1739     {
1740       if (x == frame_pointer_rtx)
1741         return xsize <= 0 || ysize <= 0;
1742     }
1743
1744   if (CONSTANT_P (x))
1745     {
1746       if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
1747         {
1748           c += (INTVAL (y) - INTVAL (x));
1749           return (xsize <= 0 || ysize <= 0
1750                   || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1751         }
1752
1753       if (GET_CODE (x) == CONST)
1754         {
1755           if (GET_CODE (y) == CONST)
1756             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1757                                        ysize, canon_rtx (XEXP (y, 0)), c);
1758           else
1759             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1760                                        ysize, y, c);
1761         }
1762       if (GET_CODE (y) == CONST)
1763         return memrefs_conflict_p (xsize, x, ysize,
1764                                    canon_rtx (XEXP (y, 0)), c);
1765
1766       if (CONSTANT_P (y))
1767         return (xsize <= 0 || ysize <= 0
1768                 || (rtx_equal_for_memref_p (x, y)
1769                     && ((c >= 0 && xsize > c) || (c < 0 && ysize+c > 0))));
1770
1771       return 1;
1772     }
1773   return 1;
1774 }
1775
1776 /* Functions to compute memory dependencies.
1777
1778    Since we process the insns in execution order, we can build tables
1779    to keep track of what registers are fixed (and not aliased), what registers
1780    are varying in known ways, and what registers are varying in unknown
1781    ways.
1782
1783    If both memory references are volatile, then there must always be a
1784    dependence between the two references, since their order can not be
1785    changed.  A volatile and non-volatile reference can be interchanged
1786    though.
1787
1788    A MEM_IN_STRUCT reference at a non-AND varying address can never
1789    conflict with a non-MEM_IN_STRUCT reference at a fixed address.  We
1790    also must allow AND addresses, because they may generate accesses
1791    outside the object being referenced.  This is used to generate
1792    aligned addresses from unaligned addresses, for instance, the alpha
1793    storeqi_unaligned pattern.  */
1794
1795 /* Read dependence: X is read after read in MEM takes place.  There can
1796    only be a dependence here if both reads are volatile.  */
1797
1798 int
1799 read_dependence (mem, x)
1800      rtx mem;
1801      rtx x;
1802 {
1803   return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
1804 }
1805
1806 /* Returns MEM1 if and only if MEM1 is a scalar at a fixed address and
1807    MEM2 is a reference to a structure at a varying address, or returns
1808    MEM2 if vice versa.  Otherwise, returns NULL_RTX.  If a non-NULL
1809    value is returned MEM1 and MEM2 can never alias.  VARIES_P is used
1810    to decide whether or not an address may vary; it should return
1811    nonzero whenever variation is possible.
1812    MEM1_ADDR and MEM2_ADDR are the addresses of MEM1 and MEM2.  */
1813
1814 static rtx
1815 fixed_scalar_and_varying_struct_p (mem1, mem2, mem1_addr, mem2_addr, varies_p)
1816      rtx mem1, mem2;
1817      rtx mem1_addr, mem2_addr;
1818      int (*varies_p) PARAMS ((rtx, int));
1819 {
1820   if (! flag_strict_aliasing)
1821     return NULL_RTX;
1822
1823   if (MEM_SCALAR_P (mem1) && MEM_IN_STRUCT_P (mem2)
1824       && !varies_p (mem1_addr, 1) && varies_p (mem2_addr, 1))
1825     /* MEM1 is a scalar at a fixed address; MEM2 is a struct at a
1826        varying address.  */
1827     return mem1;
1828
1829   if (MEM_IN_STRUCT_P (mem1) && MEM_SCALAR_P (mem2)
1830       && varies_p (mem1_addr, 1) && !varies_p (mem2_addr, 1))
1831     /* MEM2 is a scalar at a fixed address; MEM1 is a struct at a
1832        varying address.  */
1833     return mem2;
1834
1835   return NULL_RTX;
1836 }
1837
1838 /* Returns nonzero if something about the mode or address format MEM1
1839    indicates that it might well alias *anything*.  */
1840
1841 static int
1842 aliases_everything_p (mem)
1843      rtx mem;
1844 {
1845   if (GET_CODE (XEXP (mem, 0)) == AND)
1846     /* If the address is an AND, its very hard to know at what it is
1847        actually pointing.  */
1848     return 1;
1849
1850   return 0;
1851 }
1852
1853 /* Return true if we can determine that the fields referenced cannot
1854    overlap for any pair of objects.  */
1855
1856 static bool
1857 nonoverlapping_component_refs_p (x, y)
1858      tree x, y;
1859 {
1860   tree fieldx, fieldy, typex, typey, orig_y;
1861
1862   do
1863     {
1864       /* The comparison has to be done at a common type, since we don't
1865          know how the inheritance hierarchy works.  */
1866       orig_y = y;
1867       do
1868         {
1869           fieldx = TREE_OPERAND (x, 1);
1870           typex = DECL_FIELD_CONTEXT (fieldx);
1871
1872           y = orig_y;
1873           do
1874             {
1875               fieldy = TREE_OPERAND (y, 1);
1876               typey = DECL_FIELD_CONTEXT (fieldy);
1877
1878               if (typex == typey)
1879                 goto found;
1880
1881               y = TREE_OPERAND (y, 0);
1882             }
1883           while (y && TREE_CODE (y) == COMPONENT_REF);
1884
1885           x = TREE_OPERAND (x, 0);
1886         }
1887       while (x && TREE_CODE (x) == COMPONENT_REF);
1888
1889       /* Never found a common type.  */
1890       return false;
1891
1892     found:
1893       /* If we're left with accessing different fields of a structure,
1894          then no overlap.  */
1895       if (TREE_CODE (typex) == RECORD_TYPE
1896           && fieldx != fieldy)
1897         return true;
1898
1899       /* The comparison on the current field failed.  If we're accessing
1900          a very nested structure, look at the next outer level.  */
1901       x = TREE_OPERAND (x, 0);
1902       y = TREE_OPERAND (y, 0);
1903     }
1904   while (x && y
1905          && TREE_CODE (x) == COMPONENT_REF
1906          && TREE_CODE (y) == COMPONENT_REF);
1907
1908   return false;
1909 }
1910
1911 /* Look at the bottom of the COMPONENT_REF list for a DECL, and return it.  */
1912
1913 static tree
1914 decl_for_component_ref (x)
1915      tree x;
1916 {
1917   do
1918     {
1919       x = TREE_OPERAND (x, 0);
1920     }
1921   while (x && TREE_CODE (x) == COMPONENT_REF);
1922
1923   return x && DECL_P (x) ? x : NULL_TREE;
1924 }
1925
1926 /* Walk up the COMPONENT_REF list and adjust OFFSET to compensate for the
1927    offset of the field reference.  */
1928
1929 static rtx
1930 adjust_offset_for_component_ref (x, offset)
1931      tree x;
1932      rtx offset;
1933 {
1934   HOST_WIDE_INT ioffset;
1935
1936   if (! offset)
1937     return NULL_RTX;
1938
1939   ioffset = INTVAL (offset);
1940   do
1941     {
1942       tree field = TREE_OPERAND (x, 1);
1943
1944       if (! host_integerp (DECL_FIELD_OFFSET (field), 1))
1945         return NULL_RTX;
1946       ioffset += (tree_low_cst (DECL_FIELD_OFFSET (field), 1)
1947                   + (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
1948                      / BITS_PER_UNIT));
1949
1950       x = TREE_OPERAND (x, 0);
1951     }
1952   while (x && TREE_CODE (x) == COMPONENT_REF);
1953
1954   return GEN_INT (ioffset);
1955 }
1956
1957 /* Return nonzero if we can determine the exprs corresponding to memrefs
1958    X and Y and they do not overlap.  */
1959
1960 static int
1961 nonoverlapping_memrefs_p (x, y)
1962      rtx x, y;
1963 {
1964   tree exprx = MEM_EXPR (x), expry = MEM_EXPR (y);
1965   rtx rtlx, rtly;
1966   rtx basex, basey;
1967   rtx moffsetx, moffsety;
1968   HOST_WIDE_INT offsetx = 0, offsety = 0, sizex, sizey, tem;
1969
1970   /* Unless both have exprs, we can't tell anything.  */
1971   if (exprx == 0 || expry == 0)
1972     return 0;
1973
1974   /* If both are field references, we may be able to determine something.  */
1975   if (TREE_CODE (exprx) == COMPONENT_REF
1976       && TREE_CODE (expry) == COMPONENT_REF
1977       && nonoverlapping_component_refs_p (exprx, expry))
1978     return 1;
1979
1980   /* If the field reference test failed, look at the DECLs involved.  */
1981   moffsetx = MEM_OFFSET (x);
1982   if (TREE_CODE (exprx) == COMPONENT_REF)
1983     {
1984       tree t = decl_for_component_ref (exprx);
1985       if (! t)
1986         return 0;
1987       moffsetx = adjust_offset_for_component_ref (exprx, moffsetx);
1988       exprx = t;
1989     }
1990   else if (TREE_CODE (exprx) == INDIRECT_REF)
1991     {
1992       exprx = TREE_OPERAND (exprx, 0);
1993       if (flag_argument_noalias < 2
1994           || TREE_CODE (exprx) != PARM_DECL)
1995         return 0;
1996     }
1997
1998   moffsety = MEM_OFFSET (y);
1999   if (TREE_CODE (expry) == COMPONENT_REF)
2000     {
2001       tree t = decl_for_component_ref (expry);
2002       if (! t)
2003         return 0;
2004       moffsety = adjust_offset_for_component_ref (expry, moffsety);
2005       expry = t;
2006     }
2007   else if (TREE_CODE (expry) == INDIRECT_REF)
2008     {
2009       expry = TREE_OPERAND (expry, 0);
2010       if (flag_argument_noalias < 2
2011           || TREE_CODE (expry) != PARM_DECL)
2012         return 0;
2013     }
2014
2015   if (! DECL_P (exprx) || ! DECL_P (expry))
2016     return 0;
2017
2018   rtlx = DECL_RTL (exprx);
2019   rtly = DECL_RTL (expry);
2020
2021   /* If either RTL is not a MEM, it must be a REG or CONCAT, meaning they
2022      can't overlap unless they are the same because we never reuse that part
2023      of the stack frame used for locals for spilled pseudos.  */
2024   if ((GET_CODE (rtlx) != MEM || GET_CODE (rtly) != MEM)
2025       && ! rtx_equal_p (rtlx, rtly))
2026     return 1;
2027
2028   /* Get the base and offsets of both decls.  If either is a register, we
2029      know both are and are the same, so use that as the base.  The only
2030      we can avoid overlap is if we can deduce that they are nonoverlapping
2031      pieces of that decl, which is very rare.  */
2032   basex = GET_CODE (rtlx) == MEM ? XEXP (rtlx, 0) : rtlx;
2033   if (GET_CODE (basex) == PLUS && GET_CODE (XEXP (basex, 1)) == CONST_INT)
2034     offsetx = INTVAL (XEXP (basex, 1)), basex = XEXP (basex, 0);
2035
2036   basey = GET_CODE (rtly) == MEM ? XEXP (rtly, 0) : rtly;
2037   if (GET_CODE (basey) == PLUS && GET_CODE (XEXP (basey, 1)) == CONST_INT)
2038     offsety = INTVAL (XEXP (basey, 1)), basey = XEXP (basey, 0);
2039
2040   /* If the bases are different, we know they do not overlap if both
2041      are constants or if one is a constant and the other a pointer into the
2042      stack frame.  Otherwise a different base means we can't tell if they
2043      overlap or not.  */
2044   if (! rtx_equal_p (basex, basey))
2045     return ((CONSTANT_P (basex) && CONSTANT_P (basey))
2046             || (CONSTANT_P (basex) && REG_P (basey)
2047                 && REGNO_PTR_FRAME_P (REGNO (basey)))
2048             || (CONSTANT_P (basey) && REG_P (basex)
2049                 && REGNO_PTR_FRAME_P (REGNO (basex))));
2050
2051   sizex = (GET_CODE (rtlx) != MEM ? (int) GET_MODE_SIZE (GET_MODE (rtlx))
2052            : MEM_SIZE (rtlx) ? INTVAL (MEM_SIZE (rtlx))
2053            : -1);
2054   sizey = (GET_CODE (rtly) != MEM ? (int) GET_MODE_SIZE (GET_MODE (rtly))
2055            : MEM_SIZE (rtly) ? INTVAL (MEM_SIZE (rtly)) :
2056            -1);
2057
2058   /* If we have an offset for either memref, it can update the values computed
2059      above.  */
2060   if (moffsetx)
2061     offsetx += INTVAL (moffsetx), sizex -= INTVAL (moffsetx);
2062   if (moffsety)
2063     offsety += INTVAL (moffsety), sizey -= INTVAL (moffsety);
2064
2065   /* If a memref has both a size and an offset, we can use the smaller size.
2066      We can't do this if the offset isn't known because we must view this
2067      memref as being anywhere inside the DECL's MEM.  */
2068   if (MEM_SIZE (x) && moffsetx)
2069     sizex = INTVAL (MEM_SIZE (x));
2070   if (MEM_SIZE (y) && moffsety)
2071     sizey = INTVAL (MEM_SIZE (y));
2072
2073   /* Put the values of the memref with the lower offset in X's values.  */
2074   if (offsetx > offsety)
2075     {
2076       tem = offsetx, offsetx = offsety, offsety = tem;
2077       tem = sizex, sizex = sizey, sizey = tem;
2078     }
2079
2080   /* If we don't know the size of the lower-offset value, we can't tell
2081      if they conflict.  Otherwise, we do the test.  */
2082   return sizex >= 0 && offsety >= offsetx + sizex;
2083 }
2084
2085 /* True dependence: X is read after store in MEM takes place.  */
2086
2087 int
2088 true_dependence (mem, mem_mode, x, varies)
2089      rtx mem;
2090      enum machine_mode mem_mode;
2091      rtx x;
2092      int (*varies) PARAMS ((rtx, int));
2093 {
2094   rtx x_addr, mem_addr;
2095   rtx base;
2096
2097   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2098     return 1;
2099
2100   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2101      This is used in epilogue deallocation functions.  */
2102   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
2103     return 1;
2104   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2105     return 1;
2106
2107   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2108     return 0;
2109
2110   /* Unchanging memory can't conflict with non-unchanging memory.
2111      A non-unchanging read can conflict with a non-unchanging write.
2112      An unchanging read can conflict with an unchanging write since
2113      there may be a single store to this address to initialize it.
2114      Note that an unchanging store can conflict with a non-unchanging read
2115      since we have to make conservative assumptions when we have a
2116      record with readonly fields and we are copying the whole thing.
2117      Just fall through to the code below to resolve potential conflicts.
2118      This won't handle all cases optimally, but the possible performance
2119      loss should be negligible.  */
2120   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
2121     return 0;
2122
2123   if (nonoverlapping_memrefs_p (mem, x))
2124     return 0;
2125
2126   if (mem_mode == VOIDmode)
2127     mem_mode = GET_MODE (mem);
2128
2129   x_addr = get_addr (XEXP (x, 0));
2130   mem_addr = get_addr (XEXP (mem, 0));
2131
2132   base = find_base_term (x_addr);
2133   if (base && (GET_CODE (base) == LABEL_REF
2134                || (GET_CODE (base) == SYMBOL_REF
2135                    && CONSTANT_POOL_ADDRESS_P (base))))
2136     return 0;
2137
2138   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
2139     return 0;
2140
2141   x_addr = canon_rtx (x_addr);
2142   mem_addr = canon_rtx (mem_addr);
2143
2144   if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
2145                             SIZE_FOR_MODE (x), x_addr, 0))
2146     return 0;
2147
2148   if (aliases_everything_p (x))
2149     return 1;
2150
2151   /* We cannot use aliases_everything_p to test MEM, since we must look
2152      at MEM_MODE, rather than GET_MODE (MEM).  */
2153   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
2154     return 1;
2155
2156   /* In true_dependence we also allow BLKmode to alias anything.  Why
2157      don't we do this in anti_dependence and output_dependence?  */
2158   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
2159     return 1;
2160
2161   return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2162                                               varies);
2163 }
2164
2165 /* Canonical true dependence: X is read after store in MEM takes place.
2166    Variant of true_dependence which assumes MEM has already been
2167    canonicalized (hence we no longer do that here).
2168    The mem_addr argument has been added, since true_dependence computed
2169    this value prior to canonicalizing.  */
2170
2171 int
2172 canon_true_dependence (mem, mem_mode, mem_addr, x, varies)
2173      rtx mem, mem_addr, x;
2174      enum machine_mode mem_mode;
2175      int (*varies) PARAMS ((rtx, int));
2176 {
2177   rtx x_addr;
2178
2179   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2180     return 1;
2181
2182   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2183      This is used in epilogue deallocation functions.  */
2184   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
2185     return 1;
2186   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2187     return 1;
2188
2189   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2190     return 0;
2191
2192   /* If X is an unchanging read, then it can't possibly conflict with any
2193      non-unchanging store.  It may conflict with an unchanging write though,
2194      because there may be a single store to this address to initialize it.
2195      Just fall through to the code below to resolve the case where we have
2196      both an unchanging read and an unchanging write.  This won't handle all
2197      cases optimally, but the possible performance loss should be
2198      negligible.  */
2199   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
2200     return 0;
2201
2202   if (nonoverlapping_memrefs_p (x, mem))
2203     return 0;
2204
2205   x_addr = get_addr (XEXP (x, 0));
2206
2207   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
2208     return 0;
2209
2210   x_addr = canon_rtx (x_addr);
2211   if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
2212                             SIZE_FOR_MODE (x), x_addr, 0))
2213     return 0;
2214
2215   if (aliases_everything_p (x))
2216     return 1;
2217
2218   /* We cannot use aliases_everything_p to test MEM, since we must look
2219      at MEM_MODE, rather than GET_MODE (MEM).  */
2220   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
2221     return 1;
2222
2223   /* In true_dependence we also allow BLKmode to alias anything.  Why
2224      don't we do this in anti_dependence and output_dependence?  */
2225   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
2226     return 1;
2227
2228   return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2229                                               varies);
2230 }
2231
2232 /* Returns nonzero if a write to X might alias a previous read from
2233    (or, if WRITEP is nonzero, a write to) MEM.  */
2234
2235 static int
2236 write_dependence_p (mem, x, writep)
2237      rtx mem;
2238      rtx x;
2239      int writep;
2240 {
2241   rtx x_addr, mem_addr;
2242   rtx fixed_scalar;
2243   rtx base;
2244
2245   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2246     return 1;
2247
2248   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2249      This is used in epilogue deallocation functions.  */
2250   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
2251     return 1;
2252   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2253     return 1;
2254
2255   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2256     return 0;
2257
2258   /* Unchanging memory can't conflict with non-unchanging memory.  */
2259   if (RTX_UNCHANGING_P (x) != RTX_UNCHANGING_P (mem))
2260     return 0;
2261
2262   /* If MEM is an unchanging read, then it can't possibly conflict with
2263      the store to X, because there is at most one store to MEM, and it must
2264      have occurred somewhere before MEM.  */
2265   if (! writep && RTX_UNCHANGING_P (mem))
2266     return 0;
2267
2268   if (nonoverlapping_memrefs_p (x, mem))
2269     return 0;
2270
2271   x_addr = get_addr (XEXP (x, 0));
2272   mem_addr = get_addr (XEXP (mem, 0));
2273
2274   if (! writep)
2275     {
2276       base = find_base_term (mem_addr);
2277       if (base && (GET_CODE (base) == LABEL_REF
2278                    || (GET_CODE (base) == SYMBOL_REF
2279                        && CONSTANT_POOL_ADDRESS_P (base))))
2280         return 0;
2281     }
2282
2283   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x),
2284                           GET_MODE (mem)))
2285     return 0;
2286
2287   x_addr = canon_rtx (x_addr);
2288   mem_addr = canon_rtx (mem_addr);
2289
2290   if (!memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
2291                            SIZE_FOR_MODE (x), x_addr, 0))
2292     return 0;
2293
2294   fixed_scalar
2295     = fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2296                                          rtx_addr_varies_p);
2297
2298   return (!(fixed_scalar == mem && !aliases_everything_p (x))
2299           && !(fixed_scalar == x && !aliases_everything_p (mem)));
2300 }
2301
2302 /* Anti dependence: X is written after read in MEM takes place.  */
2303
2304 int
2305 anti_dependence (mem, x)
2306      rtx mem;
2307      rtx x;
2308 {
2309   return write_dependence_p (mem, x, /*writep=*/0);
2310 }
2311
2312 /* Output dependence: X is written after store in MEM takes place.  */
2313
2314 int
2315 output_dependence (mem, x)
2316      rtx mem;
2317      rtx x;
2318 {
2319   return write_dependence_p (mem, x, /*writep=*/1);
2320 }
2321 \f
2322 /* A subroutine of nonlocal_mentioned_p, returns 1 if *LOC mentions
2323    something which is not local to the function and is not constant.  */
2324
2325 static int
2326 nonlocal_mentioned_p_1 (loc, data)
2327      rtx *loc;
2328      void *data ATTRIBUTE_UNUSED;
2329 {
2330   rtx x = *loc;
2331   rtx base;
2332   int regno;
2333
2334   if (! x)
2335     return 0;
2336
2337   switch (GET_CODE (x))
2338     {
2339     case SUBREG:
2340       if (GET_CODE (SUBREG_REG (x)) == REG)
2341         {
2342           /* Global registers are not local.  */
2343           if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER
2344               && global_regs[subreg_regno (x)])
2345             return 1;
2346           return 0;
2347         }
2348       break;
2349
2350     case REG:
2351       regno = REGNO (x);
2352       /* Global registers are not local.  */
2353       if (regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
2354         return 1;
2355       return 0;
2356
2357     case SCRATCH:
2358     case PC:
2359     case CC0:
2360     case CONST_INT:
2361     case CONST_DOUBLE:
2362     case CONST_VECTOR:
2363     case CONST:
2364     case LABEL_REF:
2365       return 0;
2366
2367     case SYMBOL_REF:
2368       /* Constants in the function's constants pool are constant.  */
2369       if (CONSTANT_POOL_ADDRESS_P (x))
2370         return 0;
2371       return 1;
2372
2373     case CALL:
2374       /* Non-constant calls and recursion are not local.  */
2375       return 1;
2376
2377     case MEM:
2378       /* Be overly conservative and consider any volatile memory
2379          reference as not local.  */
2380       if (MEM_VOLATILE_P (x))
2381         return 1;
2382       base = find_base_term (XEXP (x, 0));
2383       if (base)
2384         {
2385           /* A Pmode ADDRESS could be a reference via the structure value
2386              address or static chain.  Such memory references are nonlocal.
2387
2388              Thus, we have to examine the contents of the ADDRESS to find
2389              out if this is a local reference or not.  */
2390           if (GET_CODE (base) == ADDRESS
2391               && GET_MODE (base) == Pmode
2392               && (XEXP (base, 0) == stack_pointer_rtx
2393                   || XEXP (base, 0) == arg_pointer_rtx
2394 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2395                   || XEXP (base, 0) == hard_frame_pointer_rtx
2396 #endif
2397                   || XEXP (base, 0) == frame_pointer_rtx))
2398             return 0;
2399           /* Constants in the function's constant pool are constant.  */
2400           if (GET_CODE (base) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (base))
2401             return 0;
2402         }
2403       return 1;
2404
2405     case UNSPEC_VOLATILE:
2406     case ASM_INPUT:
2407       return 1;
2408
2409     case ASM_OPERANDS:
2410       if (MEM_VOLATILE_P (x))
2411         return 1;
2412
2413     /* FALLTHROUGH */
2414
2415     default:
2416       break;
2417     }
2418
2419   return 0;
2420 }
2421
2422 /* Returns nonzero if X might mention something which is not
2423    local to the function and is not constant.  */
2424
2425 static int
2426 nonlocal_mentioned_p (x)
2427      rtx x;
2428 {
2429
2430   if (INSN_P (x))
2431     {
2432       if (GET_CODE (x) == CALL_INSN)
2433         {
2434           if (! CONST_OR_PURE_CALL_P (x))
2435             return 1;
2436           x = CALL_INSN_FUNCTION_USAGE (x);
2437           if (x == 0)
2438             return 0;
2439         }
2440       else
2441         x = PATTERN (x);
2442     }
2443
2444   return for_each_rtx (&x, nonlocal_mentioned_p_1, NULL);
2445 }
2446
2447 /* A subroutine of nonlocal_referenced_p, returns 1 if *LOC references
2448    something which is not local to the function and is not constant.  */
2449
2450 static int
2451 nonlocal_referenced_p_1 (loc, data)
2452      rtx *loc;
2453      void *data ATTRIBUTE_UNUSED;
2454 {
2455   rtx x = *loc;
2456
2457   if (! x)
2458     return 0;
2459
2460   switch (GET_CODE (x))
2461     {
2462     case MEM:
2463     case REG:
2464     case SYMBOL_REF:
2465     case SUBREG:
2466       return nonlocal_mentioned_p (x);
2467
2468     case CALL:
2469       /* Non-constant calls and recursion are not local.  */
2470       return 1;
2471
2472     case SET:
2473       if (nonlocal_mentioned_p (SET_SRC (x)))
2474         return 1;
2475
2476       if (GET_CODE (SET_DEST (x)) == MEM)
2477         return nonlocal_mentioned_p (XEXP (SET_DEST (x), 0));
2478
2479       /* If the destination is anything other than a CC0, PC,
2480          MEM, REG, or a SUBREG of a REG that occupies all of
2481          the REG, then X references nonlocal memory if it is
2482          mentioned in the destination.  */
2483       if (GET_CODE (SET_DEST (x)) != CC0
2484           && GET_CODE (SET_DEST (x)) != PC
2485           && GET_CODE (SET_DEST (x)) != REG
2486           && ! (GET_CODE (SET_DEST (x)) == SUBREG
2487                 && GET_CODE (SUBREG_REG (SET_DEST (x))) == REG
2488                 && (((GET_MODE_SIZE (GET_MODE (SUBREG_REG (SET_DEST (x))))
2489                       + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
2490                     == ((GET_MODE_SIZE (GET_MODE (SET_DEST (x)))
2491                          + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD))))
2492         return nonlocal_mentioned_p (SET_DEST (x));
2493       return 0;
2494
2495     case CLOBBER:
2496       if (GET_CODE (XEXP (x, 0)) == MEM)
2497         return nonlocal_mentioned_p (XEXP (XEXP (x, 0), 0));
2498       return 0;
2499
2500     case USE:
2501       return nonlocal_mentioned_p (XEXP (x, 0));
2502
2503     case ASM_INPUT:
2504     case UNSPEC_VOLATILE:
2505       return 1;
2506
2507     case ASM_OPERANDS:
2508       if (MEM_VOLATILE_P (x))
2509         return 1;
2510
2511     /* FALLTHROUGH */
2512
2513     default:
2514       break;
2515     }
2516
2517   return 0;
2518 }
2519
2520 /* Returns nonzero if X might reference something which is not
2521    local to the function and is not constant.  */
2522
2523 static int
2524 nonlocal_referenced_p (x)
2525      rtx x;
2526 {
2527
2528   if (INSN_P (x))
2529     {
2530       if (GET_CODE (x) == CALL_INSN)
2531         {
2532           if (! CONST_OR_PURE_CALL_P (x))
2533             return 1;
2534           x = CALL_INSN_FUNCTION_USAGE (x);
2535           if (x == 0)
2536             return 0;
2537         }
2538       else
2539         x = PATTERN (x);
2540     }
2541
2542   return for_each_rtx (&x, nonlocal_referenced_p_1, NULL);
2543 }
2544
2545 /* A subroutine of nonlocal_set_p, returns 1 if *LOC sets
2546    something which is not local to the function and is not constant.  */
2547
2548 static int
2549 nonlocal_set_p_1 (loc, data)
2550      rtx *loc;
2551      void *data ATTRIBUTE_UNUSED;
2552 {
2553   rtx x = *loc;
2554
2555   if (! x)
2556     return 0;
2557
2558   switch (GET_CODE (x))
2559     {
2560     case CALL:
2561       /* Non-constant calls and recursion are not local.  */
2562       return 1;
2563
2564     case PRE_INC:
2565     case PRE_DEC:
2566     case POST_INC:
2567     case POST_DEC:
2568     case PRE_MODIFY:
2569     case POST_MODIFY:
2570       return nonlocal_mentioned_p (XEXP (x, 0));
2571
2572     case SET:
2573       if (nonlocal_mentioned_p (SET_DEST (x)))
2574         return 1;
2575       return nonlocal_set_p (SET_SRC (x));
2576
2577     case CLOBBER:
2578       return nonlocal_mentioned_p (XEXP (x, 0));
2579
2580     case USE:
2581       return 0;
2582
2583     case ASM_INPUT:
2584     case UNSPEC_VOLATILE:
2585       return 1;
2586
2587     case ASM_OPERANDS:
2588       if (MEM_VOLATILE_P (x))
2589         return 1;
2590
2591     /* FALLTHROUGH */
2592
2593     default:
2594       break;
2595     }
2596
2597   return 0;
2598 }
2599
2600 /* Returns nonzero if X might set something which is not
2601    local to the function and is not constant.  */
2602
2603 static int
2604 nonlocal_set_p (x)
2605      rtx x;
2606 {
2607
2608   if (INSN_P (x))
2609     {
2610       if (GET_CODE (x) == CALL_INSN)
2611         {
2612           if (! CONST_OR_PURE_CALL_P (x))
2613             return 1;
2614           x = CALL_INSN_FUNCTION_USAGE (x);
2615           if (x == 0)
2616             return 0;
2617         }
2618       else
2619         x = PATTERN (x);
2620     }
2621
2622   return for_each_rtx (&x, nonlocal_set_p_1, NULL);
2623 }
2624
2625 /* Mark the function if it is constant.  */
2626
2627 void
2628 mark_constant_function ()
2629 {
2630   rtx insn;
2631   int nonlocal_memory_referenced;
2632
2633   if (TREE_READONLY (current_function_decl)
2634       || DECL_IS_PURE (current_function_decl)
2635       || TREE_THIS_VOLATILE (current_function_decl)
2636       || TYPE_MODE (TREE_TYPE (current_function_decl)) == VOIDmode
2637       || current_function_has_nonlocal_goto
2638       || !(*targetm.binds_local_p) (current_function_decl))
2639     return;
2640
2641   /* A loop might not return which counts as a side effect.  */
2642   if (mark_dfs_back_edges ())
2643     return;
2644
2645   nonlocal_memory_referenced = 0;
2646
2647   init_alias_analysis ();
2648
2649   /* Determine if this is a constant or pure function.  */
2650
2651   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2652     {
2653       if (! INSN_P (insn))
2654         continue;
2655
2656       if (nonlocal_set_p (insn) || global_reg_mentioned_p (insn)
2657           || volatile_refs_p (PATTERN (insn)))
2658         break;
2659
2660       if (! nonlocal_memory_referenced)
2661         nonlocal_memory_referenced = nonlocal_referenced_p (insn);
2662     }
2663
2664   end_alias_analysis ();
2665
2666   /* Mark the function.  */
2667
2668   if (insn)
2669     ;
2670   else if (nonlocal_memory_referenced)
2671     DECL_IS_PURE (current_function_decl) = 1;
2672   else
2673     TREE_READONLY (current_function_decl) = 1;
2674 }
2675 \f
2676
2677 void
2678 init_alias_once ()
2679 {
2680   int i;
2681
2682 #ifndef OUTGOING_REGNO
2683 #define OUTGOING_REGNO(N) N
2684 #endif
2685   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2686     /* Check whether this register can hold an incoming pointer
2687        argument.  FUNCTION_ARG_REGNO_P tests outgoing register
2688        numbers, so translate if necessary due to register windows.  */
2689     if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i))
2690         && HARD_REGNO_MODE_OK (i, Pmode))
2691       static_reg_base_value[i]
2692         = gen_rtx_ADDRESS (VOIDmode, gen_rtx_REG (Pmode, i));
2693
2694   static_reg_base_value[STACK_POINTER_REGNUM]
2695     = gen_rtx_ADDRESS (Pmode, stack_pointer_rtx);
2696   static_reg_base_value[ARG_POINTER_REGNUM]
2697     = gen_rtx_ADDRESS (Pmode, arg_pointer_rtx);
2698   static_reg_base_value[FRAME_POINTER_REGNUM]
2699     = gen_rtx_ADDRESS (Pmode, frame_pointer_rtx);
2700 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2701   static_reg_base_value[HARD_FRAME_POINTER_REGNUM]
2702     = gen_rtx_ADDRESS (Pmode, hard_frame_pointer_rtx);
2703 #endif
2704
2705   alias_sets = splay_tree_new (splay_tree_compare_ints, 0, 0);
2706 }
2707
2708 /* Set MEMORY_MODIFIED when X modifies DATA (that is assumed
2709    to be memory reference.  */
2710 static bool memory_modified;
2711 static void
2712 memory_modified_1 (x, pat, data)
2713         rtx x, pat ATTRIBUTE_UNUSED;
2714         void *data;
2715 {
2716   if (GET_CODE (x) == MEM)
2717     {
2718       if (anti_dependence (x, (rtx)data) || output_dependence (x, (rtx)data))
2719         memory_modified = true;
2720     }
2721 }
2722
2723
2724 /* Return true when INSN possibly modify memory contents of MEM
2725    (ie address can be modified).  */
2726 bool
2727 memory_modified_in_insn_p (mem, insn)
2728      rtx mem, insn;
2729 {
2730   if (!INSN_P (insn))
2731     return false;
2732   memory_modified = false;
2733   note_stores (PATTERN (insn), memory_modified_1, mem);
2734   return memory_modified;
2735 }
2736
2737 /* Initialize the aliasing machinery.  Initialize the REG_KNOWN_VALUE
2738    array.  */
2739
2740 void
2741 init_alias_analysis ()
2742 {
2743   int maxreg = max_reg_num ();
2744   int changed, pass;
2745   int i;
2746   unsigned int ui;
2747   rtx insn;
2748
2749   timevar_push (TV_ALIAS_ANALYSIS);
2750
2751   reg_known_value_size = maxreg;
2752
2753   reg_known_value
2754     = (rtx *) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (rtx))
2755     - FIRST_PSEUDO_REGISTER;
2756   reg_known_equiv_p
2757     = (char*) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (char))
2758     - FIRST_PSEUDO_REGISTER;
2759
2760   /* Overallocate reg_base_value to allow some growth during loop
2761      optimization.  Loop unrolling can create a large number of
2762      registers.  */
2763   reg_base_value_size = maxreg * 2;
2764   reg_base_value = (rtx *) ggc_alloc_cleared (reg_base_value_size
2765                                               * sizeof (rtx));
2766
2767   new_reg_base_value = (rtx *) xmalloc (reg_base_value_size * sizeof (rtx));
2768   reg_seen = (char *) xmalloc (reg_base_value_size);
2769   if (! reload_completed && flag_old_unroll_loops)
2770     {
2771       /* ??? Why are we realloc'ing if we're just going to zero it?  */
2772       alias_invariant = (rtx *)xrealloc (alias_invariant,
2773                                          reg_base_value_size * sizeof (rtx));
2774       memset ((char *)alias_invariant, 0, reg_base_value_size * sizeof (rtx));
2775     }
2776
2777   /* The basic idea is that each pass through this loop will use the
2778      "constant" information from the previous pass to propagate alias
2779      information through another level of assignments.
2780
2781      This could get expensive if the assignment chains are long.  Maybe
2782      we should throttle the number of iterations, possibly based on
2783      the optimization level or flag_expensive_optimizations.
2784
2785      We could propagate more information in the first pass by making use
2786      of REG_N_SETS to determine immediately that the alias information
2787      for a pseudo is "constant".
2788
2789      A program with an uninitialized variable can cause an infinite loop
2790      here.  Instead of doing a full dataflow analysis to detect such problems
2791      we just cap the number of iterations for the loop.
2792
2793      The state of the arrays for the set chain in question does not matter
2794      since the program has undefined behavior.  */
2795
2796   pass = 0;
2797   do
2798     {
2799       /* Assume nothing will change this iteration of the loop.  */
2800       changed = 0;
2801
2802       /* We want to assign the same IDs each iteration of this loop, so
2803          start counting from zero each iteration of the loop.  */
2804       unique_id = 0;
2805
2806       /* We're at the start of the function each iteration through the
2807          loop, so we're copying arguments.  */
2808       copying_arguments = true;
2809
2810       /* Wipe the potential alias information clean for this pass.  */
2811       memset ((char *) new_reg_base_value, 0, reg_base_value_size * sizeof (rtx));
2812
2813       /* Wipe the reg_seen array clean.  */
2814       memset ((char *) reg_seen, 0, reg_base_value_size);
2815
2816       /* Mark all hard registers which may contain an address.
2817          The stack, frame and argument pointers may contain an address.
2818          An argument register which can hold a Pmode value may contain
2819          an address even if it is not in BASE_REGS.
2820
2821          The address expression is VOIDmode for an argument and
2822          Pmode for other registers.  */
2823
2824       memcpy (new_reg_base_value, static_reg_base_value,
2825               FIRST_PSEUDO_REGISTER * sizeof (rtx));
2826
2827       /* Walk the insns adding values to the new_reg_base_value array.  */
2828       for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2829         {
2830           if (INSN_P (insn))
2831             {
2832               rtx note, set;
2833
2834 #if defined (HAVE_prologue) || defined (HAVE_epilogue)
2835               /* The prologue/epilogue insns are not threaded onto the
2836                  insn chain until after reload has completed.  Thus,
2837                  there is no sense wasting time checking if INSN is in
2838                  the prologue/epilogue until after reload has completed.  */
2839               if (reload_completed
2840                   && prologue_epilogue_contains (insn))
2841                 continue;
2842 #endif
2843
2844               /* If this insn has a noalias note, process it,  Otherwise,
2845                  scan for sets.  A simple set will have no side effects
2846                  which could change the base value of any other register.  */
2847
2848               if (GET_CODE (PATTERN (insn)) == SET
2849                   && REG_NOTES (insn) != 0
2850                   && find_reg_note (insn, REG_NOALIAS, NULL_RTX))
2851                 record_set (SET_DEST (PATTERN (insn)), NULL_RTX, NULL);
2852               else
2853                 note_stores (PATTERN (insn), record_set, NULL);
2854
2855               set = single_set (insn);
2856
2857               if (set != 0
2858                   && GET_CODE (SET_DEST (set)) == REG
2859                   && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER)
2860                 {
2861                   unsigned int regno = REGNO (SET_DEST (set));
2862                   rtx src = SET_SRC (set);
2863
2864                   if (REG_NOTES (insn) != 0
2865                       && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
2866                            && REG_N_SETS (regno) == 1)
2867                           || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
2868                       && GET_CODE (XEXP (note, 0)) != EXPR_LIST
2869                       && ! rtx_varies_p (XEXP (note, 0), 1)
2870                       && ! reg_overlap_mentioned_p (SET_DEST (set), XEXP (note, 0)))
2871                     {
2872                       reg_known_value[regno] = XEXP (note, 0);
2873                       reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV;
2874                     }
2875                   else if (REG_N_SETS (regno) == 1
2876                            && GET_CODE (src) == PLUS
2877                            && GET_CODE (XEXP (src, 0)) == REG
2878                            && REGNO (XEXP (src, 0)) >= FIRST_PSEUDO_REGISTER
2879                            && (reg_known_value[REGNO (XEXP (src, 0))])
2880                            && GET_CODE (XEXP (src, 1)) == CONST_INT)
2881                     {
2882                       rtx op0 = XEXP (src, 0);
2883                       op0 = reg_known_value[REGNO (op0)];
2884                       reg_known_value[regno]
2885                         = plus_constant (op0, INTVAL (XEXP (src, 1)));
2886                       reg_known_equiv_p[regno] = 0;
2887                     }
2888                   else if (REG_N_SETS (regno) == 1
2889                            && ! rtx_varies_p (src, 1))
2890                     {
2891                       reg_known_value[regno] = src;
2892                       reg_known_equiv_p[regno] = 0;
2893                     }
2894                 }
2895             }
2896           else if (GET_CODE (insn) == NOTE
2897                    && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
2898             copying_arguments = false;
2899         }
2900
2901       /* Now propagate values from new_reg_base_value to reg_base_value.  */
2902       for (ui = 0; ui < reg_base_value_size; ui++)
2903         {
2904           if (new_reg_base_value[ui]
2905               && new_reg_base_value[ui] != reg_base_value[ui]
2906               && ! rtx_equal_p (new_reg_base_value[ui], reg_base_value[ui]))
2907             {
2908               reg_base_value[ui] = new_reg_base_value[ui];
2909               changed = 1;
2910             }
2911         }
2912     }
2913   while (changed && ++pass < MAX_ALIAS_LOOP_PASSES);
2914
2915   /* Fill in the remaining entries.  */
2916   for (i = FIRST_PSEUDO_REGISTER; i < maxreg; i++)
2917     if (reg_known_value[i] == 0)
2918       reg_known_value[i] = regno_reg_rtx[i];
2919
2920   /* Simplify the reg_base_value array so that no register refers to
2921      another register, except to special registers indirectly through
2922      ADDRESS expressions.
2923
2924      In theory this loop can take as long as O(registers^2), but unless
2925      there are very long dependency chains it will run in close to linear
2926      time.
2927
2928      This loop may not be needed any longer now that the main loop does
2929      a better job at propagating alias information.  */
2930   pass = 0;
2931   do
2932     {
2933       changed = 0;
2934       pass++;
2935       for (ui = 0; ui < reg_base_value_size; ui++)
2936         {
2937           rtx base = reg_base_value[ui];
2938           if (base && GET_CODE (base) == REG)
2939             {
2940               unsigned int base_regno = REGNO (base);
2941               if (base_regno == ui)             /* register set from itself */
2942                 reg_base_value[ui] = 0;
2943               else
2944                 reg_base_value[ui] = reg_base_value[base_regno];
2945               changed = 1;
2946             }
2947         }
2948     }
2949   while (changed && pass < MAX_ALIAS_LOOP_PASSES);
2950
2951   /* Clean up.  */
2952   free (new_reg_base_value);
2953   new_reg_base_value = 0;
2954   free (reg_seen);
2955   reg_seen = 0;
2956   timevar_pop (TV_ALIAS_ANALYSIS);
2957 }
2958
2959 void
2960 end_alias_analysis ()
2961 {
2962   free (reg_known_value + FIRST_PSEUDO_REGISTER);
2963   reg_known_value = 0;
2964   reg_known_value_size = 0;
2965   free (reg_known_equiv_p + FIRST_PSEUDO_REGISTER);
2966   reg_known_equiv_p = 0;
2967   reg_base_value = 0;
2968   reg_base_value_size = 0;
2969   if (alias_invariant)
2970     {
2971       free (alias_invariant);
2972       alias_invariant = 0;
2973     }
2974 }
2975
2976 #include "gt-alias.h"