OSDN Git Service

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