OSDN Git Service

2008-09-17 Richard Guenther <rguenther@suse.de>
[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 /* Return 1 if the two specified alias sets will always conflict.  */
348
349 int
350 alias_sets_must_conflict_p (alias_set_type set1, alias_set_type set2)
351 {
352   if (set1 == 0 || set2 == 0 || set1 == set2)
353     return 1;
354
355   return 0;
356 }
357
358 /* Return 1 if any MEM object of type T1 will always conflict (using the
359    dependency routines in this file) with any MEM object of type T2.
360    This is used when allocating temporary storage.  If T1 and/or T2 are
361    NULL_TREE, it means we know nothing about the storage.  */
362
363 int
364 objects_must_conflict_p (tree t1, tree t2)
365 {
366   alias_set_type set1, set2;
367
368   /* If neither has a type specified, we don't know if they'll conflict
369      because we may be using them to store objects of various types, for
370      example the argument and local variables areas of inlined functions.  */
371   if (t1 == 0 && t2 == 0)
372     return 0;
373
374   /* If they are the same type, they must conflict.  */
375   if (t1 == t2
376       /* Likewise if both are volatile.  */
377       || (t1 != 0 && TYPE_VOLATILE (t1) && t2 != 0 && TYPE_VOLATILE (t2)))
378     return 1;
379
380   set1 = t1 ? get_alias_set (t1) : 0;
381   set2 = t2 ? get_alias_set (t2) : 0;
382
383   /* We can't use alias_sets_conflict_p because we must make sure
384      that every subtype of t1 will conflict with every subtype of
385      t2 for which a pair of subobjects of these respective subtypes
386      overlaps on the stack.  */
387   return alias_sets_must_conflict_p (set1, set2);
388 }
389 \f
390 /* T is an expression with pointer type.  Find the DECL on which this
391    expression is based.  (For example, in `a[i]' this would be `a'.)
392    If there is no such DECL, or a unique decl cannot be determined,
393    NULL_TREE is returned.  */
394
395 static tree
396 find_base_decl (tree t)
397 {
398   tree d0, d1;
399
400   if (t == 0 || t == error_mark_node || ! POINTER_TYPE_P (TREE_TYPE (t)))
401     return 0;
402
403   /* If this is a declaration, return it.  If T is based on a restrict
404      qualified decl, return that decl.  */
405   if (DECL_P (t))
406     {
407       if (TREE_CODE (t) == VAR_DECL && DECL_BASED_ON_RESTRICT_P (t))
408         t = DECL_GET_RESTRICT_BASE (t);
409       return t;
410     }
411
412   /* Handle general expressions.  It would be nice to deal with
413      COMPONENT_REFs here.  If we could tell that `a' and `b' were the
414      same, then `a->f' and `b->f' are also the same.  */
415   switch (TREE_CODE_CLASS (TREE_CODE (t)))
416     {
417     case tcc_unary:
418       return find_base_decl (TREE_OPERAND (t, 0));
419
420     case tcc_binary:
421       /* Return 0 if found in neither or both are the same.  */
422       d0 = find_base_decl (TREE_OPERAND (t, 0));
423       d1 = find_base_decl (TREE_OPERAND (t, 1));
424       if (d0 == d1)
425         return d0;
426       else if (d0 == 0)
427         return d1;
428       else if (d1 == 0)
429         return d0;
430       else
431         return 0;
432
433     default:
434       return 0;
435     }
436 }
437
438 /* Return true if all nested component references handled by
439    get_inner_reference in T are such that we should use the alias set
440    provided by the object at the heart of T.
441
442    This is true for non-addressable components (which don't have their
443    own alias set), as well as components of objects in alias set zero.
444    This later point is a special case wherein we wish to override the
445    alias set used by the component, but we don't have per-FIELD_DECL
446    assignable alias sets.  */
447
448 bool
449 component_uses_parent_alias_set (const_tree t)
450 {
451   while (1)
452     {
453       /* If we're at the end, it vacuously uses its own alias set.  */
454       if (!handled_component_p (t))
455         return false;
456
457       switch (TREE_CODE (t))
458         {
459         case COMPONENT_REF:
460           if (DECL_NONADDRESSABLE_P (TREE_OPERAND (t, 1)))
461             return true;
462           break;
463
464         case ARRAY_REF:
465         case ARRAY_RANGE_REF:
466           if (TYPE_NONALIASED_COMPONENT (TREE_TYPE (TREE_OPERAND (t, 0))))
467             return true;
468           break;
469
470         case REALPART_EXPR:
471         case IMAGPART_EXPR:
472           break;
473
474         default:
475           /* Bitfields and casts are never addressable.  */
476           return true;
477         }
478
479       t = TREE_OPERAND (t, 0);
480       if (get_alias_set (TREE_TYPE (t)) == 0)
481         return true;
482     }
483 }
484
485 /* Return the alias set for T, which may be either a type or an
486    expression.  Call language-specific routine for help, if needed.  */
487
488 alias_set_type
489 get_alias_set (tree t)
490 {
491   alias_set_type set;
492
493   /* If we're not doing any alias analysis, just assume everything
494      aliases everything else.  Also return 0 if this or its type is
495      an error.  */
496   if (! flag_strict_aliasing || t == error_mark_node
497       || (! TYPE_P (t)
498           && (TREE_TYPE (t) == 0 || TREE_TYPE (t) == error_mark_node)))
499     return 0;
500
501   /* We can be passed either an expression or a type.  This and the
502      language-specific routine may make mutually-recursive calls to each other
503      to figure out what to do.  At each juncture, we see if this is a tree
504      that the language may need to handle specially.  First handle things that
505      aren't types.  */
506   if (! TYPE_P (t))
507     {
508       tree inner = t;
509
510       /* Remove any nops, then give the language a chance to do
511          something with this tree before we look at it.  */
512       STRIP_NOPS (t);
513       set = lang_hooks.get_alias_set (t);
514       if (set != -1)
515         return set;
516
517       /* First see if the actual object referenced is an INDIRECT_REF from a
518          restrict-qualified pointer or a "void *".  */
519       while (handled_component_p (inner))
520         {
521           inner = TREE_OPERAND (inner, 0);
522           STRIP_NOPS (inner);
523         }
524
525       /* Check for accesses through restrict-qualified pointers.  */
526       if (INDIRECT_REF_P (inner))
527         {
528           tree decl;
529
530           if (TREE_CODE (TREE_OPERAND (inner, 0)) == SSA_NAME)
531             decl = SSA_NAME_VAR (TREE_OPERAND (inner, 0));
532           else
533             decl = find_base_decl (TREE_OPERAND (inner, 0));
534
535           if (decl && DECL_POINTER_ALIAS_SET_KNOWN_P (decl))
536             {
537               /* If we haven't computed the actual alias set, do it now.  */
538               if (DECL_POINTER_ALIAS_SET (decl) == -2)
539                 {
540                   tree pointed_to_type = TREE_TYPE (TREE_TYPE (decl));
541
542                   /* No two restricted pointers can point at the same thing.
543                      However, a restricted pointer can point at the same thing
544                      as an unrestricted pointer, if that unrestricted pointer
545                      is based on the restricted pointer.  So, we make the
546                      alias set for the restricted pointer a subset of the
547                      alias set for the type pointed to by the type of the
548                      decl.  */
549                   alias_set_type pointed_to_alias_set
550                     = get_alias_set (pointed_to_type);
551
552                   if (pointed_to_alias_set == 0)
553                     /* It's not legal to make a subset of alias set zero.  */
554                     DECL_POINTER_ALIAS_SET (decl) = 0;
555                   else if (AGGREGATE_TYPE_P (pointed_to_type))
556                     /* For an aggregate, we must treat the restricted
557                        pointer the same as an ordinary pointer.  If we
558                        were to make the type pointed to by the
559                        restricted pointer a subset of the pointed-to
560                        type, then we would believe that other subsets
561                        of the pointed-to type (such as fields of that
562                        type) do not conflict with the type pointed to
563                        by the restricted pointer.  */
564                     DECL_POINTER_ALIAS_SET (decl)
565                       = pointed_to_alias_set;
566                   else
567                     {
568                       DECL_POINTER_ALIAS_SET (decl) = new_alias_set ();
569                       record_alias_subset (pointed_to_alias_set,
570                                            DECL_POINTER_ALIAS_SET (decl));
571                     }
572                 }
573
574               /* We use the alias set indicated in the declaration.  */
575               return DECL_POINTER_ALIAS_SET (decl);
576             }
577
578           /* If we have an INDIRECT_REF via a void pointer, we don't
579              know anything about what that might alias.  Likewise if the
580              pointer is marked that way.  */
581           else if (TREE_CODE (TREE_TYPE (inner)) == VOID_TYPE
582                    || (TYPE_REF_CAN_ALIAS_ALL
583                        (TREE_TYPE (TREE_OPERAND (inner, 0)))))
584             return 0;
585         }
586
587       /* Otherwise, pick up the outermost object that we could have a pointer
588          to, processing conversions as above.  */
589       while (component_uses_parent_alias_set (t))
590         {
591           t = TREE_OPERAND (t, 0);
592           STRIP_NOPS (t);
593         }
594
595       /* If we've already determined the alias set for a decl, just return
596          it.  This is necessary for C++ anonymous unions, whose component
597          variables don't look like union members (boo!).  */
598       if (TREE_CODE (t) == VAR_DECL
599           && DECL_RTL_SET_P (t) && MEM_P (DECL_RTL (t)))
600         return MEM_ALIAS_SET (DECL_RTL (t));
601
602       /* Now all we care about is the type.  */
603       t = TREE_TYPE (t);
604     }
605
606   /* Variant qualifiers don't affect the alias set, so get the main
607      variant.  Always use the canonical type as well.
608      If this is a type with a known alias set, return it.  */
609   t = TYPE_MAIN_VARIANT (t);
610   if (TYPE_CANONICAL (t))
611     t = TYPE_CANONICAL (t);
612   if (TYPE_ALIAS_SET_KNOWN_P (t))
613     return TYPE_ALIAS_SET (t);
614
615   /* We don't want to set TYPE_ALIAS_SET for incomplete types.  */
616   if (!COMPLETE_TYPE_P (t))
617     {
618       /* For arrays with unknown size the conservative answer is the
619          alias set of the element type.  */
620       if (TREE_CODE (t) == ARRAY_TYPE)
621         return get_alias_set (TREE_TYPE (t));
622
623       /* But return zero as a conservative answer for incomplete types.  */
624       return 0;
625     }
626
627   /* See if the language has special handling for this type.  */
628   set = lang_hooks.get_alias_set (t);
629   if (set != -1)
630     return set;
631
632   /* There are no objects of FUNCTION_TYPE, so there's no point in
633      using up an alias set for them.  (There are, of course, pointers
634      and references to functions, but that's different.)  */
635   else if (TREE_CODE (t) == FUNCTION_TYPE
636            || TREE_CODE (t) == METHOD_TYPE)
637     set = 0;
638
639   /* Unless the language specifies otherwise, let vector types alias
640      their components.  This avoids some nasty type punning issues in
641      normal usage.  And indeed lets vectors be treated more like an
642      array slice.  */
643   else if (TREE_CODE (t) == VECTOR_TYPE)
644     set = get_alias_set (TREE_TYPE (t));
645
646   /* Unless the language specifies otherwise, treat array types the
647      same as their components.  This avoids the asymmetry we get
648      through recording the components.  Consider accessing a
649      character(kind=1) through a reference to a character(kind=1)[1:1].
650      Or consider if we want to assign integer(kind=4)[0:D.1387] and
651      integer(kind=4)[4] the same alias set or not.
652      Just be pragmatic here and make sure the array and its element
653      type get the same alias set assigned.  */
654   else if (TREE_CODE (t) == ARRAY_TYPE
655            && !TYPE_NONALIASED_COMPONENT (t))
656     set = get_alias_set (TREE_TYPE (t));
657
658   else
659     /* Otherwise make a new alias set for this type.  */
660     set = new_alias_set ();
661
662   TYPE_ALIAS_SET (t) = set;
663
664   /* If this is an aggregate type, we must record any component aliasing
665      information.  */
666   if (AGGREGATE_TYPE_P (t) || TREE_CODE (t) == COMPLEX_TYPE)
667     record_component_aliases (t);
668
669   return set;
670 }
671
672 /* Return a brand-new alias set.  */
673
674 alias_set_type
675 new_alias_set (void)
676 {
677   if (flag_strict_aliasing)
678     {
679       if (alias_sets == 0)
680         VEC_safe_push (alias_set_entry, gc, alias_sets, 0);
681       VEC_safe_push (alias_set_entry, gc, alias_sets, 0);
682       return VEC_length (alias_set_entry, alias_sets) - 1;
683     }
684   else
685     return 0;
686 }
687
688 /* Indicate that things in SUBSET can alias things in SUPERSET, but that
689    not everything that aliases SUPERSET also aliases SUBSET.  For example,
690    in C, a store to an `int' can alias a load of a structure containing an
691    `int', and vice versa.  But it can't alias a load of a 'double' member
692    of the same structure.  Here, the structure would be the SUPERSET and
693    `int' the SUBSET.  This relationship is also described in the comment at
694    the beginning of this file.
695
696    This function should be called only once per SUPERSET/SUBSET pair.
697
698    It is illegal for SUPERSET to be zero; everything is implicitly a
699    subset of alias set zero.  */
700
701 static void
702 record_alias_subset (alias_set_type superset, alias_set_type subset)
703 {
704   alias_set_entry superset_entry;
705   alias_set_entry subset_entry;
706
707   /* It is possible in complex type situations for both sets to be the same,
708      in which case we can ignore this operation.  */
709   if (superset == subset)
710     return;
711
712   gcc_assert (superset);
713
714   superset_entry = get_alias_set_entry (superset);
715   if (superset_entry == 0)
716     {
717       /* Create an entry for the SUPERSET, so that we have a place to
718          attach the SUBSET.  */
719       superset_entry = GGC_NEW (struct alias_set_entry);
720       superset_entry->alias_set = superset;
721       superset_entry->children
722         = splay_tree_new_ggc (splay_tree_compare_ints);
723       superset_entry->has_zero_child = 0;
724       VEC_replace (alias_set_entry, alias_sets, superset, superset_entry);
725     }
726
727   if (subset == 0)
728     superset_entry->has_zero_child = 1;
729   else
730     {
731       subset_entry = get_alias_set_entry (subset);
732       /* If there is an entry for the subset, enter all of its children
733          (if they are not already present) as children of the SUPERSET.  */
734       if (subset_entry)
735         {
736           if (subset_entry->has_zero_child)
737             superset_entry->has_zero_child = 1;
738
739           splay_tree_foreach (subset_entry->children, insert_subset_children,
740                               superset_entry->children);
741         }
742
743       /* Enter the SUBSET itself as a child of the SUPERSET.  */
744       splay_tree_insert (superset_entry->children,
745                          (splay_tree_key) subset, 0);
746     }
747 }
748
749 /* Record that component types of TYPE, if any, are part of that type for
750    aliasing purposes.  For record types, we only record component types
751    for fields that are not marked non-addressable.  For array types, we
752    only record the component type if it is not marked non-aliased.  */
753
754 void
755 record_component_aliases (tree type)
756 {
757   alias_set_type superset = get_alias_set (type);
758   tree field;
759
760   if (superset == 0)
761     return;
762
763   switch (TREE_CODE (type))
764     {
765     case RECORD_TYPE:
766     case UNION_TYPE:
767     case QUAL_UNION_TYPE:
768       /* Recursively record aliases for the base classes, if there are any.  */
769       if (TYPE_BINFO (type))
770         {
771           int i;
772           tree binfo, base_binfo;
773
774           for (binfo = TYPE_BINFO (type), i = 0;
775                BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
776             record_alias_subset (superset,
777                                  get_alias_set (BINFO_TYPE (base_binfo)));
778         }
779       for (field = TYPE_FIELDS (type); field != 0; field = TREE_CHAIN (field))
780         if (TREE_CODE (field) == FIELD_DECL && !DECL_NONADDRESSABLE_P (field))
781           record_alias_subset (superset, get_alias_set (TREE_TYPE (field)));
782       break;
783
784     case COMPLEX_TYPE:
785       record_alias_subset (superset, get_alias_set (TREE_TYPE (type)));
786       break;
787
788     /* VECTOR_TYPE and ARRAY_TYPE share the alias set with their
789        element type.  */
790
791     default:
792       break;
793     }
794 }
795
796 /* Allocate an alias set for use in storing and reading from the varargs
797    spill area.  */
798
799 static GTY(()) alias_set_type varargs_set = -1;
800
801 alias_set_type
802 get_varargs_alias_set (void)
803 {
804 #if 1
805   /* We now lower VA_ARG_EXPR, and there's currently no way to attach the
806      varargs alias set to an INDIRECT_REF (FIXME!), so we can't
807      consistently use the varargs alias set for loads from the varargs
808      area.  So don't use it anywhere.  */
809   return 0;
810 #else
811   if (varargs_set == -1)
812     varargs_set = new_alias_set ();
813
814   return varargs_set;
815 #endif
816 }
817
818 /* Likewise, but used for the fixed portions of the frame, e.g., register
819    save areas.  */
820
821 static GTY(()) alias_set_type frame_set = -1;
822
823 alias_set_type
824 get_frame_alias_set (void)
825 {
826   if (frame_set == -1)
827     frame_set = new_alias_set ();
828
829   return frame_set;
830 }
831
832 /* Inside SRC, the source of a SET, find a base address.  */
833
834 static rtx
835 find_base_value (rtx src)
836 {
837   unsigned int regno;
838
839   switch (GET_CODE (src))
840     {
841     case SYMBOL_REF:
842     case LABEL_REF:
843       return src;
844
845     case REG:
846       regno = REGNO (src);
847       /* At the start of a function, argument registers have known base
848          values which may be lost later.  Returning an ADDRESS
849          expression here allows optimization based on argument values
850          even when the argument registers are used for other purposes.  */
851       if (regno < FIRST_PSEUDO_REGISTER && copying_arguments)
852         return new_reg_base_value[regno];
853
854       /* If a pseudo has a known base value, return it.  Do not do this
855          for non-fixed hard regs since it can result in a circular
856          dependency chain for registers which have values at function entry.
857
858          The test above is not sufficient because the scheduler may move
859          a copy out of an arg reg past the NOTE_INSN_FUNCTION_BEGIN.  */
860       if ((regno >= FIRST_PSEUDO_REGISTER || fixed_regs[regno])
861           && regno < VEC_length (rtx, reg_base_value))
862         {
863           /* If we're inside init_alias_analysis, use new_reg_base_value
864              to reduce the number of relaxation iterations.  */
865           if (new_reg_base_value && new_reg_base_value[regno]
866               && DF_REG_DEF_COUNT (regno) == 1)
867             return new_reg_base_value[regno];
868
869           if (VEC_index (rtx, reg_base_value, regno))
870             return VEC_index (rtx, reg_base_value, regno);
871         }
872
873       return 0;
874
875     case MEM:
876       /* Check for an argument passed in memory.  Only record in the
877          copying-arguments block; it is too hard to track changes
878          otherwise.  */
879       if (copying_arguments
880           && (XEXP (src, 0) == arg_pointer_rtx
881               || (GET_CODE (XEXP (src, 0)) == PLUS
882                   && XEXP (XEXP (src, 0), 0) == arg_pointer_rtx)))
883         return gen_rtx_ADDRESS (VOIDmode, src);
884       return 0;
885
886     case CONST:
887       src = XEXP (src, 0);
888       if (GET_CODE (src) != PLUS && GET_CODE (src) != MINUS)
889         break;
890
891       /* ... fall through ...  */
892
893     case PLUS:
894     case MINUS:
895       {
896         rtx temp, src_0 = XEXP (src, 0), src_1 = XEXP (src, 1);
897
898         /* If either operand is a REG that is a known pointer, then it
899            is the base.  */
900         if (REG_P (src_0) && REG_POINTER (src_0))
901           return find_base_value (src_0);
902         if (REG_P (src_1) && REG_POINTER (src_1))
903           return find_base_value (src_1);
904
905         /* If either operand is a REG, then see if we already have
906            a known value for it.  */
907         if (REG_P (src_0))
908           {
909             temp = find_base_value (src_0);
910             if (temp != 0)
911               src_0 = temp;
912           }
913
914         if (REG_P (src_1))
915           {
916             temp = find_base_value (src_1);
917             if (temp!= 0)
918               src_1 = temp;
919           }
920
921         /* If either base is named object or a special address
922            (like an argument or stack reference), then use it for the
923            base term.  */
924         if (src_0 != 0
925             && (GET_CODE (src_0) == SYMBOL_REF
926                 || GET_CODE (src_0) == LABEL_REF
927                 || (GET_CODE (src_0) == ADDRESS
928                     && GET_MODE (src_0) != VOIDmode)))
929           return src_0;
930
931         if (src_1 != 0
932             && (GET_CODE (src_1) == SYMBOL_REF
933                 || GET_CODE (src_1) == LABEL_REF
934                 || (GET_CODE (src_1) == ADDRESS
935                     && GET_MODE (src_1) != VOIDmode)))
936           return src_1;
937
938         /* Guess which operand is the base address:
939            If either operand is a symbol, then it is the base.  If
940            either operand is a CONST_INT, then the other is the base.  */
941         if (GET_CODE (src_1) == CONST_INT || CONSTANT_P (src_0))
942           return find_base_value (src_0);
943         else if (GET_CODE (src_0) == CONST_INT || CONSTANT_P (src_1))
944           return find_base_value (src_1);
945
946         return 0;
947       }
948
949     case LO_SUM:
950       /* The standard form is (lo_sum reg sym) so look only at the
951          second operand.  */
952       return find_base_value (XEXP (src, 1));
953
954     case AND:
955       /* If the second operand is constant set the base
956          address to the first operand.  */
957       if (GET_CODE (XEXP (src, 1)) == CONST_INT && INTVAL (XEXP (src, 1)) != 0)
958         return find_base_value (XEXP (src, 0));
959       return 0;
960
961     case TRUNCATE:
962       if (GET_MODE_SIZE (GET_MODE (src)) < GET_MODE_SIZE (Pmode))
963         break;
964       /* Fall through.  */
965     case HIGH:
966     case PRE_INC:
967     case PRE_DEC:
968     case POST_INC:
969     case POST_DEC:
970     case PRE_MODIFY:
971     case POST_MODIFY:
972       return find_base_value (XEXP (src, 0));
973
974     case ZERO_EXTEND:
975     case SIGN_EXTEND:   /* used for NT/Alpha pointers */
976       {
977         rtx temp = find_base_value (XEXP (src, 0));
978
979         if (temp != 0 && CONSTANT_P (temp))
980           temp = convert_memory_address (Pmode, temp);
981
982         return temp;
983       }
984
985     default:
986       break;
987     }
988
989   return 0;
990 }
991
992 /* Called from init_alias_analysis indirectly through note_stores.  */
993
994 /* While scanning insns to find base values, reg_seen[N] is nonzero if
995    register N has been set in this function.  */
996 static char *reg_seen;
997
998 /* Addresses which are known not to alias anything else are identified
999    by a unique integer.  */
1000 static int unique_id;
1001
1002 static void
1003 record_set (rtx dest, const_rtx set, void *data ATTRIBUTE_UNUSED)
1004 {
1005   unsigned regno;
1006   rtx src;
1007   int n;
1008
1009   if (!REG_P (dest))
1010     return;
1011
1012   regno = REGNO (dest);
1013
1014   gcc_assert (regno < VEC_length (rtx, reg_base_value));
1015
1016   /* If this spans multiple hard registers, then we must indicate that every
1017      register has an unusable value.  */
1018   if (regno < FIRST_PSEUDO_REGISTER)
1019     n = hard_regno_nregs[regno][GET_MODE (dest)];
1020   else
1021     n = 1;
1022   if (n != 1)
1023     {
1024       while (--n >= 0)
1025         {
1026           reg_seen[regno + n] = 1;
1027           new_reg_base_value[regno + n] = 0;
1028         }
1029       return;
1030     }
1031
1032   if (set)
1033     {
1034       /* A CLOBBER wipes out any old value but does not prevent a previously
1035          unset register from acquiring a base address (i.e. reg_seen is not
1036          set).  */
1037       if (GET_CODE (set) == CLOBBER)
1038         {
1039           new_reg_base_value[regno] = 0;
1040           return;
1041         }
1042       src = SET_SRC (set);
1043     }
1044   else
1045     {
1046       if (reg_seen[regno])
1047         {
1048           new_reg_base_value[regno] = 0;
1049           return;
1050         }
1051       reg_seen[regno] = 1;
1052       new_reg_base_value[regno] = gen_rtx_ADDRESS (Pmode,
1053                                                    GEN_INT (unique_id++));
1054       return;
1055     }
1056
1057   /* If this is not the first set of REGNO, see whether the new value
1058      is related to the old one.  There are two cases of interest:
1059
1060         (1) The register might be assigned an entirely new value
1061             that has the same base term as the original set.
1062
1063         (2) The set might be a simple self-modification that
1064             cannot change REGNO's base value.
1065
1066      If neither case holds, reject the original base value as invalid.
1067      Note that the following situation is not detected:
1068
1069          extern int x, y;  int *p = &x; p += (&y-&x);
1070
1071      ANSI C does not allow computing the difference of addresses
1072      of distinct top level objects.  */
1073   if (new_reg_base_value[regno] != 0
1074       && find_base_value (src) != new_reg_base_value[regno])
1075     switch (GET_CODE (src))
1076       {
1077       case LO_SUM:
1078       case MINUS:
1079         if (XEXP (src, 0) != dest && XEXP (src, 1) != dest)
1080           new_reg_base_value[regno] = 0;
1081         break;
1082       case PLUS:
1083         /* If the value we add in the PLUS is also a valid base value,
1084            this might be the actual base value, and the original value
1085            an index.  */
1086         {
1087           rtx other = NULL_RTX;
1088
1089           if (XEXP (src, 0) == dest)
1090             other = XEXP (src, 1);
1091           else if (XEXP (src, 1) == dest)
1092             other = XEXP (src, 0);
1093
1094           if (! other || find_base_value (other))
1095             new_reg_base_value[regno] = 0;
1096           break;
1097         }
1098       case AND:
1099         if (XEXP (src, 0) != dest || GET_CODE (XEXP (src, 1)) != CONST_INT)
1100           new_reg_base_value[regno] = 0;
1101         break;
1102       default:
1103         new_reg_base_value[regno] = 0;
1104         break;
1105       }
1106   /* If this is the first set of a register, record the value.  */
1107   else if ((regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
1108            && ! reg_seen[regno] && new_reg_base_value[regno] == 0)
1109     new_reg_base_value[regno] = find_base_value (src);
1110
1111   reg_seen[regno] = 1;
1112 }
1113
1114 /* If a value is known for REGNO, return it.  */
1115
1116 rtx
1117 get_reg_known_value (unsigned int regno)
1118 {
1119   if (regno >= FIRST_PSEUDO_REGISTER)
1120     {
1121       regno -= FIRST_PSEUDO_REGISTER;
1122       if (regno < reg_known_value_size)
1123         return reg_known_value[regno];
1124     }
1125   return NULL;
1126 }
1127
1128 /* Set it.  */
1129
1130 static void
1131 set_reg_known_value (unsigned int regno, rtx val)
1132 {
1133   if (regno >= FIRST_PSEUDO_REGISTER)
1134     {
1135       regno -= FIRST_PSEUDO_REGISTER;
1136       if (regno < reg_known_value_size)
1137         reg_known_value[regno] = val;
1138     }
1139 }
1140
1141 /* Similarly for reg_known_equiv_p.  */
1142
1143 bool
1144 get_reg_known_equiv_p (unsigned int regno)
1145 {
1146   if (regno >= FIRST_PSEUDO_REGISTER)
1147     {
1148       regno -= FIRST_PSEUDO_REGISTER;
1149       if (regno < reg_known_value_size)
1150         return reg_known_equiv_p[regno];
1151     }
1152   return false;
1153 }
1154
1155 static void
1156 set_reg_known_equiv_p (unsigned int regno, bool val)
1157 {
1158   if (regno >= FIRST_PSEUDO_REGISTER)
1159     {
1160       regno -= FIRST_PSEUDO_REGISTER;
1161       if (regno < reg_known_value_size)
1162         reg_known_equiv_p[regno] = val;
1163     }
1164 }
1165
1166
1167 /* Returns a canonical version of X, from the point of view alias
1168    analysis.  (For example, if X is a MEM whose address is a register,
1169    and the register has a known value (say a SYMBOL_REF), then a MEM
1170    whose address is the SYMBOL_REF is returned.)  */
1171
1172 rtx
1173 canon_rtx (rtx x)
1174 {
1175   /* Recursively look for equivalences.  */
1176   if (REG_P (x) && REGNO (x) >= FIRST_PSEUDO_REGISTER)
1177     {
1178       rtx t = get_reg_known_value (REGNO (x));
1179       if (t == x)
1180         return x;
1181       if (t)
1182         return canon_rtx (t);
1183     }
1184
1185   if (GET_CODE (x) == PLUS)
1186     {
1187       rtx x0 = canon_rtx (XEXP (x, 0));
1188       rtx x1 = canon_rtx (XEXP (x, 1));
1189
1190       if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
1191         {
1192           if (GET_CODE (x0) == CONST_INT)
1193             return plus_constant (x1, INTVAL (x0));
1194           else if (GET_CODE (x1) == CONST_INT)
1195             return plus_constant (x0, INTVAL (x1));
1196           return gen_rtx_PLUS (GET_MODE (x), x0, x1);
1197         }
1198     }
1199
1200   /* This gives us much better alias analysis when called from
1201      the loop optimizer.   Note we want to leave the original
1202      MEM alone, but need to return the canonicalized MEM with
1203      all the flags with their original values.  */
1204   else if (MEM_P (x))
1205     x = replace_equiv_address_nv (x, canon_rtx (XEXP (x, 0)));
1206
1207   return x;
1208 }
1209
1210 /* Return 1 if X and Y are identical-looking rtx's.
1211    Expect that X and Y has been already canonicalized.
1212
1213    We use the data in reg_known_value above to see if two registers with
1214    different numbers are, in fact, equivalent.  */
1215
1216 static int
1217 rtx_equal_for_memref_p (const_rtx x, const_rtx y)
1218 {
1219   int i;
1220   int j;
1221   enum rtx_code code;
1222   const char *fmt;
1223
1224   if (x == 0 && y == 0)
1225     return 1;
1226   if (x == 0 || y == 0)
1227     return 0;
1228
1229   if (x == y)
1230     return 1;
1231
1232   code = GET_CODE (x);
1233   /* Rtx's of different codes cannot be equal.  */
1234   if (code != GET_CODE (y))
1235     return 0;
1236
1237   /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
1238      (REG:SI x) and (REG:HI x) are NOT equivalent.  */
1239
1240   if (GET_MODE (x) != GET_MODE (y))
1241     return 0;
1242
1243   /* Some RTL can be compared without a recursive examination.  */
1244   switch (code)
1245     {
1246     case REG:
1247       return REGNO (x) == REGNO (y);
1248
1249     case LABEL_REF:
1250       return XEXP (x, 0) == XEXP (y, 0);
1251
1252     case SYMBOL_REF:
1253       return XSTR (x, 0) == XSTR (y, 0);
1254
1255     case VALUE:
1256     case CONST_INT:
1257     case CONST_DOUBLE:
1258     case CONST_FIXED:
1259       /* There's no need to compare the contents of CONST_DOUBLEs or
1260          CONST_INTs because pointer equality is a good enough
1261          comparison for these nodes.  */
1262       return 0;
1263
1264     default:
1265       break;
1266     }
1267
1268   /* canon_rtx knows how to handle plus.  No need to canonicalize.  */
1269   if (code == PLUS)
1270     return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
1271              && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
1272             || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
1273                 && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
1274   /* For commutative operations, the RTX match if the operand match in any
1275      order.  Also handle the simple binary and unary cases without a loop.  */
1276   if (COMMUTATIVE_P (x))
1277     {
1278       rtx xop0 = canon_rtx (XEXP (x, 0));
1279       rtx yop0 = canon_rtx (XEXP (y, 0));
1280       rtx yop1 = canon_rtx (XEXP (y, 1));
1281
1282       return ((rtx_equal_for_memref_p (xop0, yop0)
1283                && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)), yop1))
1284               || (rtx_equal_for_memref_p (xop0, yop1)
1285                   && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)), yop0)));
1286     }
1287   else if (NON_COMMUTATIVE_P (x))
1288     {
1289       return (rtx_equal_for_memref_p (canon_rtx (XEXP (x, 0)),
1290                                       canon_rtx (XEXP (y, 0)))
1291               && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)),
1292                                          canon_rtx (XEXP (y, 1))));
1293     }
1294   else if (UNARY_P (x))
1295     return rtx_equal_for_memref_p (canon_rtx (XEXP (x, 0)),
1296                                    canon_rtx (XEXP (y, 0)));
1297
1298   /* Compare the elements.  If any pair of corresponding elements
1299      fail to match, return 0 for the whole things.
1300
1301      Limit cases to types which actually appear in addresses.  */
1302
1303   fmt = GET_RTX_FORMAT (code);
1304   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1305     {
1306       switch (fmt[i])
1307         {
1308         case 'i':
1309           if (XINT (x, i) != XINT (y, i))
1310             return 0;
1311           break;
1312
1313         case 'E':
1314           /* Two vectors must have the same length.  */
1315           if (XVECLEN (x, i) != XVECLEN (y, i))
1316             return 0;
1317
1318           /* And the corresponding elements must match.  */
1319           for (j = 0; j < XVECLEN (x, i); j++)
1320             if (rtx_equal_for_memref_p (canon_rtx (XVECEXP (x, i, j)),
1321                                         canon_rtx (XVECEXP (y, i, j))) == 0)
1322               return 0;
1323           break;
1324
1325         case 'e':
1326           if (rtx_equal_for_memref_p (canon_rtx (XEXP (x, i)),
1327                                       canon_rtx (XEXP (y, i))) == 0)
1328             return 0;
1329           break;
1330
1331           /* This can happen for asm operands.  */
1332         case 's':
1333           if (strcmp (XSTR (x, i), XSTR (y, i)))
1334             return 0;
1335           break;
1336
1337         /* This can happen for an asm which clobbers memory.  */
1338         case '0':
1339           break;
1340
1341           /* It is believed that rtx's at this level will never
1342              contain anything but integers and other rtx's,
1343              except for within LABEL_REFs and SYMBOL_REFs.  */
1344         default:
1345           gcc_unreachable ();
1346         }
1347     }
1348   return 1;
1349 }
1350
1351 rtx
1352 find_base_term (rtx x)
1353 {
1354   cselib_val *val;
1355   struct elt_loc_list *l;
1356
1357 #if defined (FIND_BASE_TERM)
1358   /* Try machine-dependent ways to find the base term.  */
1359   x = FIND_BASE_TERM (x);
1360 #endif
1361
1362   switch (GET_CODE (x))
1363     {
1364     case REG:
1365       return REG_BASE_VALUE (x);
1366
1367     case TRUNCATE:
1368       if (GET_MODE_SIZE (GET_MODE (x)) < GET_MODE_SIZE (Pmode))
1369         return 0;
1370       /* Fall through.  */
1371     case HIGH:
1372     case PRE_INC:
1373     case PRE_DEC:
1374     case POST_INC:
1375     case POST_DEC:
1376     case PRE_MODIFY:
1377     case POST_MODIFY:
1378       return find_base_term (XEXP (x, 0));
1379
1380     case ZERO_EXTEND:
1381     case SIGN_EXTEND:   /* Used for Alpha/NT pointers */
1382       {
1383         rtx temp = find_base_term (XEXP (x, 0));
1384
1385         if (temp != 0 && CONSTANT_P (temp))
1386           temp = convert_memory_address (Pmode, temp);
1387
1388         return temp;
1389       }
1390
1391     case VALUE:
1392       val = CSELIB_VAL_PTR (x);
1393       if (!val)
1394         return 0;
1395       for (l = val->locs; l; l = l->next)
1396         if ((x = find_base_term (l->loc)) != 0)
1397           return x;
1398       return 0;
1399
1400     case CONST:
1401       x = XEXP (x, 0);
1402       if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
1403         return 0;
1404       /* Fall through.  */
1405     case LO_SUM:
1406     case PLUS:
1407     case MINUS:
1408       {
1409         rtx tmp1 = XEXP (x, 0);
1410         rtx tmp2 = XEXP (x, 1);
1411
1412         /* This is a little bit tricky since we have to determine which of
1413            the two operands represents the real base address.  Otherwise this
1414            routine may return the index register instead of the base register.
1415
1416            That may cause us to believe no aliasing was possible, when in
1417            fact aliasing is possible.
1418
1419            We use a few simple tests to guess the base register.  Additional
1420            tests can certainly be added.  For example, if one of the operands
1421            is a shift or multiply, then it must be the index register and the
1422            other operand is the base register.  */
1423
1424         if (tmp1 == pic_offset_table_rtx && CONSTANT_P (tmp2))
1425           return find_base_term (tmp2);
1426
1427         /* If either operand is known to be a pointer, then use it
1428            to determine the base term.  */
1429         if (REG_P (tmp1) && REG_POINTER (tmp1))
1430           return find_base_term (tmp1);
1431
1432         if (REG_P (tmp2) && REG_POINTER (tmp2))
1433           return find_base_term (tmp2);
1434
1435         /* Neither operand was known to be a pointer.  Go ahead and find the
1436            base term for both operands.  */
1437         tmp1 = find_base_term (tmp1);
1438         tmp2 = find_base_term (tmp2);
1439
1440         /* If either base term is named object or a special address
1441            (like an argument or stack reference), then use it for the
1442            base term.  */
1443         if (tmp1 != 0
1444             && (GET_CODE (tmp1) == SYMBOL_REF
1445                 || GET_CODE (tmp1) == LABEL_REF
1446                 || (GET_CODE (tmp1) == ADDRESS
1447                     && GET_MODE (tmp1) != VOIDmode)))
1448           return tmp1;
1449
1450         if (tmp2 != 0
1451             && (GET_CODE (tmp2) == SYMBOL_REF
1452                 || GET_CODE (tmp2) == LABEL_REF
1453                 || (GET_CODE (tmp2) == ADDRESS
1454                     && GET_MODE (tmp2) != VOIDmode)))
1455           return tmp2;
1456
1457         /* We could not determine which of the two operands was the
1458            base register and which was the index.  So we can determine
1459            nothing from the base alias check.  */
1460         return 0;
1461       }
1462
1463     case AND:
1464       if (GET_CODE (XEXP (x, 1)) == CONST_INT && INTVAL (XEXP (x, 1)) != 0)
1465         return find_base_term (XEXP (x, 0));
1466       return 0;
1467
1468     case SYMBOL_REF:
1469     case LABEL_REF:
1470       return x;
1471
1472     default:
1473       return 0;
1474     }
1475 }
1476
1477 /* Return 0 if the addresses X and Y are known to point to different
1478    objects, 1 if they might be pointers to the same object.  */
1479
1480 static int
1481 base_alias_check (rtx x, rtx y, enum machine_mode x_mode,
1482                   enum machine_mode y_mode)
1483 {
1484   rtx x_base = find_base_term (x);
1485   rtx y_base = find_base_term (y);
1486
1487   /* If the address itself has no known base see if a known equivalent
1488      value has one.  If either address still has no known base, nothing
1489      is known about aliasing.  */
1490   if (x_base == 0)
1491     {
1492       rtx x_c;
1493
1494       if (! flag_expensive_optimizations || (x_c = canon_rtx (x)) == x)
1495         return 1;
1496
1497       x_base = find_base_term (x_c);
1498       if (x_base == 0)
1499         return 1;
1500     }
1501
1502   if (y_base == 0)
1503     {
1504       rtx y_c;
1505       if (! flag_expensive_optimizations || (y_c = canon_rtx (y)) == y)
1506         return 1;
1507
1508       y_base = find_base_term (y_c);
1509       if (y_base == 0)
1510         return 1;
1511     }
1512
1513   /* If the base addresses are equal nothing is known about aliasing.  */
1514   if (rtx_equal_p (x_base, y_base))
1515     return 1;
1516
1517   /* The base addresses of the read and write are different expressions.
1518      If they are both symbols and they are not accessed via AND, there is
1519      no conflict.  We can bring knowledge of object alignment into play
1520      here.  For example, on alpha, "char a, b;" can alias one another,
1521      though "char a; long b;" cannot.  */
1522   if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
1523     {
1524       if (GET_CODE (x) == AND && GET_CODE (y) == AND)
1525         return 1;
1526       if (GET_CODE (x) == AND
1527           && (GET_CODE (XEXP (x, 1)) != CONST_INT
1528               || (int) GET_MODE_UNIT_SIZE (y_mode) < -INTVAL (XEXP (x, 1))))
1529         return 1;
1530       if (GET_CODE (y) == AND
1531           && (GET_CODE (XEXP (y, 1)) != CONST_INT
1532               || (int) GET_MODE_UNIT_SIZE (x_mode) < -INTVAL (XEXP (y, 1))))
1533         return 1;
1534       /* Differing symbols never alias.  */
1535       return 0;
1536     }
1537
1538   /* If one address is a stack reference there can be no alias:
1539      stack references using different base registers do not alias,
1540      a stack reference can not alias a parameter, and a stack reference
1541      can not alias a global.  */
1542   if ((GET_CODE (x_base) == ADDRESS && GET_MODE (x_base) == Pmode)
1543       || (GET_CODE (y_base) == ADDRESS && GET_MODE (y_base) == Pmode))
1544     return 0;
1545
1546   if (! flag_argument_noalias)
1547     return 1;
1548
1549   if (flag_argument_noalias > 1)
1550     return 0;
1551
1552   /* Weak noalias assertion (arguments are distinct, but may match globals).  */
1553   return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode);
1554 }
1555
1556 /* Convert the address X into something we can use.  This is done by returning
1557    it unchanged unless it is a value; in the latter case we call cselib to get
1558    a more useful rtx.  */
1559
1560 rtx
1561 get_addr (rtx x)
1562 {
1563   cselib_val *v;
1564   struct elt_loc_list *l;
1565
1566   if (GET_CODE (x) != VALUE)
1567     return x;
1568   v = CSELIB_VAL_PTR (x);
1569   if (v)
1570     {
1571       for (l = v->locs; l; l = l->next)
1572         if (CONSTANT_P (l->loc))
1573           return l->loc;
1574       for (l = v->locs; l; l = l->next)
1575         if (!REG_P (l->loc) && !MEM_P (l->loc))
1576           return l->loc;
1577       if (v->locs)
1578         return v->locs->loc;
1579     }
1580   return x;
1581 }
1582
1583 /*  Return the address of the (N_REFS + 1)th memory reference to ADDR
1584     where SIZE is the size in bytes of the memory reference.  If ADDR
1585     is not modified by the memory reference then ADDR is returned.  */
1586
1587 static rtx
1588 addr_side_effect_eval (rtx addr, int size, int n_refs)
1589 {
1590   int offset = 0;
1591
1592   switch (GET_CODE (addr))
1593     {
1594     case PRE_INC:
1595       offset = (n_refs + 1) * size;
1596       break;
1597     case PRE_DEC:
1598       offset = -(n_refs + 1) * size;
1599       break;
1600     case POST_INC:
1601       offset = n_refs * size;
1602       break;
1603     case POST_DEC:
1604       offset = -n_refs * size;
1605       break;
1606
1607     default:
1608       return addr;
1609     }
1610
1611   if (offset)
1612     addr = gen_rtx_PLUS (GET_MODE (addr), XEXP (addr, 0),
1613                          GEN_INT (offset));
1614   else
1615     addr = XEXP (addr, 0);
1616   addr = canon_rtx (addr);
1617
1618   return addr;
1619 }
1620
1621 /* Return nonzero if X and Y (memory addresses) could reference the
1622    same location in memory.  C is an offset accumulator.  When
1623    C is nonzero, we are testing aliases between X and Y + C.
1624    XSIZE is the size in bytes of the X reference,
1625    similarly YSIZE is the size in bytes for Y.
1626    Expect that canon_rtx has been already called for X and Y.
1627
1628    If XSIZE or YSIZE is zero, we do not know the amount of memory being
1629    referenced (the reference was BLKmode), so make the most pessimistic
1630    assumptions.
1631
1632    If XSIZE or YSIZE is negative, we may access memory outside the object
1633    being referenced as a side effect.  This can happen when using AND to
1634    align memory references, as is done on the Alpha.
1635
1636    Nice to notice that varying addresses cannot conflict with fp if no
1637    local variables had their addresses taken, but that's too hard now.  */
1638
1639 static int
1640 memrefs_conflict_p (int xsize, rtx x, int ysize, rtx y, HOST_WIDE_INT c)
1641 {
1642   if (GET_CODE (x) == VALUE)
1643     x = get_addr (x);
1644   if (GET_CODE (y) == VALUE)
1645     y = get_addr (y);
1646   if (GET_CODE (x) == HIGH)
1647     x = XEXP (x, 0);
1648   else if (GET_CODE (x) == LO_SUM)
1649     x = XEXP (x, 1);
1650   else
1651     x = addr_side_effect_eval (x, xsize, 0);
1652   if (GET_CODE (y) == HIGH)
1653     y = XEXP (y, 0);
1654   else if (GET_CODE (y) == LO_SUM)
1655     y = XEXP (y, 1);
1656   else
1657     y = addr_side_effect_eval (y, ysize, 0);
1658
1659   if (rtx_equal_for_memref_p (x, y))
1660     {
1661       if (xsize <= 0 || ysize <= 0)
1662         return 1;
1663       if (c >= 0 && xsize > c)
1664         return 1;
1665       if (c < 0 && ysize+c > 0)
1666         return 1;
1667       return 0;
1668     }
1669
1670   /* This code used to check for conflicts involving stack references and
1671      globals but the base address alias code now handles these cases.  */
1672
1673   if (GET_CODE (x) == PLUS)
1674     {
1675       /* The fact that X is canonicalized means that this
1676          PLUS rtx is canonicalized.  */
1677       rtx x0 = XEXP (x, 0);
1678       rtx x1 = XEXP (x, 1);
1679
1680       if (GET_CODE (y) == PLUS)
1681         {
1682           /* The fact that Y is canonicalized means that this
1683              PLUS rtx is canonicalized.  */
1684           rtx y0 = XEXP (y, 0);
1685           rtx y1 = XEXP (y, 1);
1686
1687           if (rtx_equal_for_memref_p (x1, y1))
1688             return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1689           if (rtx_equal_for_memref_p (x0, y0))
1690             return memrefs_conflict_p (xsize, x1, ysize, y1, c);
1691           if (GET_CODE (x1) == CONST_INT)
1692             {
1693               if (GET_CODE (y1) == CONST_INT)
1694                 return memrefs_conflict_p (xsize, x0, ysize, y0,
1695                                            c - INTVAL (x1) + INTVAL (y1));
1696               else
1697                 return memrefs_conflict_p (xsize, x0, ysize, y,
1698                                            c - INTVAL (x1));
1699             }
1700           else if (GET_CODE (y1) == CONST_INT)
1701             return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1702
1703           return 1;
1704         }
1705       else if (GET_CODE (x1) == CONST_INT)
1706         return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
1707     }
1708   else if (GET_CODE (y) == PLUS)
1709     {
1710       /* The fact that Y is canonicalized means that this
1711          PLUS rtx is canonicalized.  */
1712       rtx y0 = XEXP (y, 0);
1713       rtx y1 = XEXP (y, 1);
1714
1715       if (GET_CODE (y1) == CONST_INT)
1716         return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1717       else
1718         return 1;
1719     }
1720
1721   if (GET_CODE (x) == GET_CODE (y))
1722     switch (GET_CODE (x))
1723       {
1724       case MULT:
1725         {
1726           /* Handle cases where we expect the second operands to be the
1727              same, and check only whether the first operand would conflict
1728              or not.  */
1729           rtx x0, y0;
1730           rtx x1 = canon_rtx (XEXP (x, 1));
1731           rtx y1 = canon_rtx (XEXP (y, 1));
1732           if (! rtx_equal_for_memref_p (x1, y1))
1733             return 1;
1734           x0 = canon_rtx (XEXP (x, 0));
1735           y0 = canon_rtx (XEXP (y, 0));
1736           if (rtx_equal_for_memref_p (x0, y0))
1737             return (xsize == 0 || ysize == 0
1738                     || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1739
1740           /* Can't properly adjust our sizes.  */
1741           if (GET_CODE (x1) != CONST_INT)
1742             return 1;
1743           xsize /= INTVAL (x1);
1744           ysize /= INTVAL (x1);
1745           c /= INTVAL (x1);
1746           return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1747         }
1748
1749       default:
1750         break;
1751       }
1752
1753   /* Treat an access through an AND (e.g. a subword access on an Alpha)
1754      as an access with indeterminate size.  Assume that references
1755      besides AND are aligned, so if the size of the other reference is
1756      at least as large as the alignment, assume no other overlap.  */
1757   if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT)
1758     {
1759       if (GET_CODE (y) == AND || ysize < -INTVAL (XEXP (x, 1)))
1760         xsize = -1;
1761       return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)), ysize, y, c);
1762     }
1763   if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT)
1764     {
1765       /* ??? If we are indexing far enough into the array/structure, we
1766          may yet be able to determine that we can not overlap.  But we
1767          also need to that we are far enough from the end not to overlap
1768          a following reference, so we do nothing with that for now.  */
1769       if (GET_CODE (x) == AND || xsize < -INTVAL (XEXP (y, 1)))
1770         ysize = -1;
1771       return memrefs_conflict_p (xsize, x, ysize, canon_rtx (XEXP (y, 0)), c);
1772     }
1773
1774   if (CONSTANT_P (x))
1775     {
1776       if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
1777         {
1778           c += (INTVAL (y) - INTVAL (x));
1779           return (xsize <= 0 || ysize <= 0
1780                   || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1781         }
1782
1783       if (GET_CODE (x) == CONST)
1784         {
1785           if (GET_CODE (y) == CONST)
1786             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1787                                        ysize, canon_rtx (XEXP (y, 0)), c);
1788           else
1789             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1790                                        ysize, y, c);
1791         }
1792       if (GET_CODE (y) == CONST)
1793         return memrefs_conflict_p (xsize, x, ysize,
1794                                    canon_rtx (XEXP (y, 0)), c);
1795
1796       if (CONSTANT_P (y))
1797         return (xsize <= 0 || ysize <= 0
1798                 || (rtx_equal_for_memref_p (x, y)
1799                     && ((c >= 0 && xsize > c) || (c < 0 && ysize+c > 0))));
1800
1801       return 1;
1802     }
1803   return 1;
1804 }
1805
1806 /* Functions to compute memory dependencies.
1807
1808    Since we process the insns in execution order, we can build tables
1809    to keep track of what registers are fixed (and not aliased), what registers
1810    are varying in known ways, and what registers are varying in unknown
1811    ways.
1812
1813    If both memory references are volatile, then there must always be a
1814    dependence between the two references, since their order can not be
1815    changed.  A volatile and non-volatile reference can be interchanged
1816    though.
1817
1818    A MEM_IN_STRUCT reference at a non-AND varying address can never
1819    conflict with a non-MEM_IN_STRUCT reference at a fixed address.  We
1820    also must allow AND addresses, because they may generate accesses
1821    outside the object being referenced.  This is used to generate
1822    aligned addresses from unaligned addresses, for instance, the alpha
1823    storeqi_unaligned pattern.  */
1824
1825 /* Read dependence: X is read after read in MEM takes place.  There can
1826    only be a dependence here if both reads are volatile.  */
1827
1828 int
1829 read_dependence (const_rtx mem, const_rtx x)
1830 {
1831   return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
1832 }
1833
1834 /* Returns MEM1 if and only if MEM1 is a scalar at a fixed address and
1835    MEM2 is a reference to a structure at a varying address, or returns
1836    MEM2 if vice versa.  Otherwise, returns NULL_RTX.  If a non-NULL
1837    value is returned MEM1 and MEM2 can never alias.  VARIES_P is used
1838    to decide whether or not an address may vary; it should return
1839    nonzero whenever variation is possible.
1840    MEM1_ADDR and MEM2_ADDR are the addresses of MEM1 and MEM2.  */
1841
1842 static const_rtx
1843 fixed_scalar_and_varying_struct_p (const_rtx mem1, const_rtx mem2, rtx mem1_addr,
1844                                    rtx mem2_addr,
1845                                    bool (*varies_p) (const_rtx, bool))
1846 {
1847   if (! flag_strict_aliasing)
1848     return NULL_RTX;
1849
1850   if (MEM_ALIAS_SET (mem2)
1851       && MEM_SCALAR_P (mem1) && MEM_IN_STRUCT_P (mem2)
1852       && !varies_p (mem1_addr, 1) && varies_p (mem2_addr, 1))
1853     /* MEM1 is a scalar at a fixed address; MEM2 is a struct at a
1854        varying address.  */
1855     return mem1;
1856
1857   if (MEM_ALIAS_SET (mem1)
1858       && MEM_IN_STRUCT_P (mem1) && MEM_SCALAR_P (mem2)
1859       && varies_p (mem1_addr, 1) && !varies_p (mem2_addr, 1))
1860     /* MEM2 is a scalar at a fixed address; MEM1 is a struct at a
1861        varying address.  */
1862     return mem2;
1863
1864   return NULL_RTX;
1865 }
1866
1867 /* Returns nonzero if something about the mode or address format MEM1
1868    indicates that it might well alias *anything*.  */
1869
1870 static int
1871 aliases_everything_p (const_rtx mem)
1872 {
1873   if (GET_CODE (XEXP (mem, 0)) == AND)
1874     /* If the address is an AND, it's very hard to know at what it is
1875        actually pointing.  */
1876     return 1;
1877
1878   return 0;
1879 }
1880
1881 /* Return true if we can determine that the fields referenced cannot
1882    overlap for any pair of objects.  */
1883
1884 static bool
1885 nonoverlapping_component_refs_p (const_tree x, const_tree y)
1886 {
1887   const_tree fieldx, fieldy, typex, typey, orig_y;
1888
1889   do
1890     {
1891       /* The comparison has to be done at a common type, since we don't
1892          know how the inheritance hierarchy works.  */
1893       orig_y = y;
1894       do
1895         {
1896           fieldx = TREE_OPERAND (x, 1);
1897           typex = TYPE_MAIN_VARIANT (DECL_FIELD_CONTEXT (fieldx));
1898
1899           y = orig_y;
1900           do
1901             {
1902               fieldy = TREE_OPERAND (y, 1);
1903               typey = TYPE_MAIN_VARIANT (DECL_FIELD_CONTEXT (fieldy));
1904
1905               if (typex == typey)
1906                 goto found;
1907
1908               y = TREE_OPERAND (y, 0);
1909             }
1910           while (y && TREE_CODE (y) == COMPONENT_REF);
1911
1912           x = TREE_OPERAND (x, 0);
1913         }
1914       while (x && TREE_CODE (x) == COMPONENT_REF);
1915       /* Never found a common type.  */
1916       return false;
1917
1918     found:
1919       /* If we're left with accessing different fields of a structure,
1920          then no overlap.  */
1921       if (TREE_CODE (typex) == RECORD_TYPE
1922           && fieldx != fieldy)
1923         return true;
1924
1925       /* The comparison on the current field failed.  If we're accessing
1926          a very nested structure, look at the next outer level.  */
1927       x = TREE_OPERAND (x, 0);
1928       y = TREE_OPERAND (y, 0);
1929     }
1930   while (x && y
1931          && TREE_CODE (x) == COMPONENT_REF
1932          && TREE_CODE (y) == COMPONENT_REF);
1933
1934   return false;
1935 }
1936
1937 /* Look at the bottom of the COMPONENT_REF list for a DECL, and return it.  */
1938
1939 static tree
1940 decl_for_component_ref (tree x)
1941 {
1942   do
1943     {
1944       x = TREE_OPERAND (x, 0);
1945     }
1946   while (x && TREE_CODE (x) == COMPONENT_REF);
1947
1948   return x && DECL_P (x) ? x : NULL_TREE;
1949 }
1950
1951 /* Walk up the COMPONENT_REF list and adjust OFFSET to compensate for the
1952    offset of the field reference.  */
1953
1954 static rtx
1955 adjust_offset_for_component_ref (tree x, rtx offset)
1956 {
1957   HOST_WIDE_INT ioffset;
1958
1959   if (! offset)
1960     return NULL_RTX;
1961
1962   ioffset = INTVAL (offset);
1963   do
1964     {
1965       tree offset = component_ref_field_offset (x);
1966       tree field = TREE_OPERAND (x, 1);
1967
1968       if (! host_integerp (offset, 1))
1969         return NULL_RTX;
1970       ioffset += (tree_low_cst (offset, 1)
1971                   + (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
1972                      / BITS_PER_UNIT));
1973
1974       x = TREE_OPERAND (x, 0);
1975     }
1976   while (x && TREE_CODE (x) == COMPONENT_REF);
1977
1978   return GEN_INT (ioffset);
1979 }
1980
1981 /* The function returns nonzero if X is an address containg VALUE.  */
1982 static int
1983 value_addr_p (rtx x)
1984 {
1985   if (GET_CODE (x) == VALUE)
1986     return 1;
1987   if (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 0)) == VALUE)
1988     return 1;
1989   return 0;
1990 }
1991
1992 /* The function returns nonzero if X is a stack address.  */
1993 static int
1994 stack_addr_p (rtx x)
1995 {
1996   if (x == hard_frame_pointer_rtx || x == frame_pointer_rtx
1997       || x == arg_pointer_rtx || x == stack_pointer_rtx)
1998     return 1;
1999   if (GET_CODE (x) == PLUS
2000       && (XEXP (x, 0) == hard_frame_pointer_rtx
2001           || XEXP (x, 0) == frame_pointer_rtx
2002           || XEXP (x, 0) == arg_pointer_rtx
2003           || XEXP (x, 0) == stack_pointer_rtx)
2004       && CONSTANT_P (XEXP (x, 1)))
2005     return 1;
2006   return 0;
2007 }
2008
2009 /* Return nonzero if we can determine the exprs corresponding to memrefs
2010    X and Y and they do not overlap.  */
2011
2012 int
2013 nonoverlapping_memrefs_p (const_rtx x, const_rtx y)
2014 {
2015   tree exprx = MEM_EXPR (x), expry = MEM_EXPR (y);
2016   rtx rtlx, rtly;
2017   rtx basex, basey;
2018   rtx x_addr, y_addr;
2019   rtx moffsetx, moffsety;
2020   HOST_WIDE_INT offsetx = 0, offsety = 0, sizex, sizey, tem;
2021
2022   if (flag_ira && optimize && reload_completed)
2023     {
2024       /* We need this code for IRA because of stack slot sharing.  RTL
2025          in decl can be different than RTL used in insns.  It is a
2026          safe code although it can be conservative sometime.  */
2027       x_addr = canon_rtx (get_addr (XEXP (x, 0)));
2028       y_addr = canon_rtx (get_addr (XEXP (y, 0)));
2029       
2030       if (value_addr_p (x_addr) || value_addr_p (y_addr))
2031         return 0;
2032        
2033       if (stack_addr_p (x_addr) && stack_addr_p (y_addr)
2034           && memrefs_conflict_p (SIZE_FOR_MODE (y), y_addr,
2035                                  SIZE_FOR_MODE (x), x_addr, 0))
2036         return 0;
2037     }
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"