OSDN Git Service

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