OSDN Git Service

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