OSDN Git Service

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