OSDN Git Service

85db75569c81da54e3e70c3e39687226f3fbd8aa
[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 CONST:
1478       x = XEXP (x, 0);
1479       if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
1480         return 0;
1481       /* Fall through.  */
1482     case LO_SUM:
1483       /* The standard form is (lo_sum reg sym) so look only at the
1484          second operand.  */
1485       return find_base_term (XEXP (x, 1));
1486     case PLUS:
1487     case MINUS:
1488       {
1489         rtx tmp1 = XEXP (x, 0);
1490         rtx tmp2 = XEXP (x, 1);
1491
1492         /* This is a little bit tricky since we have to determine which of
1493            the two operands represents the real base address.  Otherwise this
1494            routine may return the index register instead of the base register.
1495
1496            That may cause us to believe no aliasing was possible, when in
1497            fact aliasing is possible.
1498
1499            We use a few simple tests to guess the base register.  Additional
1500            tests can certainly be added.  For example, if one of the operands
1501            is a shift or multiply, then it must be the index register and the
1502            other operand is the base register.  */
1503
1504         if (tmp1 == pic_offset_table_rtx && CONSTANT_P (tmp2))
1505           return find_base_term (tmp2);
1506
1507         /* If either operand is known to be a pointer, then use it
1508            to determine the base term.  */
1509         if (REG_P (tmp1) && REG_POINTER (tmp1))
1510           return find_base_term (tmp1);
1511
1512         if (REG_P (tmp2) && REG_POINTER (tmp2))
1513           return find_base_term (tmp2);
1514
1515         /* Neither operand was known to be a pointer.  Go ahead and find the
1516            base term for both operands.  */
1517         tmp1 = find_base_term (tmp1);
1518         tmp2 = find_base_term (tmp2);
1519
1520         /* If either base term is named object or a special address
1521            (like an argument or stack reference), then use it for the
1522            base term.  */
1523         if (tmp1 != 0
1524             && (GET_CODE (tmp1) == SYMBOL_REF
1525                 || GET_CODE (tmp1) == LABEL_REF
1526                 || (GET_CODE (tmp1) == ADDRESS
1527                     && GET_MODE (tmp1) != VOIDmode)))
1528           return tmp1;
1529
1530         if (tmp2 != 0
1531             && (GET_CODE (tmp2) == SYMBOL_REF
1532                 || GET_CODE (tmp2) == LABEL_REF
1533                 || (GET_CODE (tmp2) == ADDRESS
1534                     && GET_MODE (tmp2) != VOIDmode)))
1535           return tmp2;
1536
1537         /* We could not determine which of the two operands was the
1538            base register and which was the index.  So we can determine
1539            nothing from the base alias check.  */
1540         return 0;
1541       }
1542
1543     case AND:
1544       if (GET_CODE (XEXP (x, 1)) == CONST_INT && INTVAL (XEXP (x, 1)) != 0)
1545         return find_base_term (XEXP (x, 0));
1546       return 0;
1547
1548     case SYMBOL_REF:
1549     case LABEL_REF:
1550       return x;
1551
1552     default:
1553       return 0;
1554     }
1555 }
1556
1557 /* Return 0 if the addresses X and Y are known to point to different
1558    objects, 1 if they might be pointers to the same object.  */
1559
1560 static int
1561 base_alias_check (rtx x, rtx y, enum machine_mode x_mode,
1562                   enum machine_mode y_mode)
1563 {
1564   rtx x_base = find_base_term (x);
1565   rtx y_base = find_base_term (y);
1566
1567   /* If the address itself has no known base see if a known equivalent
1568      value has one.  If either address still has no known base, nothing
1569      is known about aliasing.  */
1570   if (x_base == 0)
1571     {
1572       rtx x_c;
1573
1574       if (! flag_expensive_optimizations || (x_c = canon_rtx (x)) == x)
1575         return 1;
1576
1577       x_base = find_base_term (x_c);
1578       if (x_base == 0)
1579         return 1;
1580     }
1581
1582   if (y_base == 0)
1583     {
1584       rtx y_c;
1585       if (! flag_expensive_optimizations || (y_c = canon_rtx (y)) == y)
1586         return 1;
1587
1588       y_base = find_base_term (y_c);
1589       if (y_base == 0)
1590         return 1;
1591     }
1592
1593   /* If the base addresses are equal nothing is known about aliasing.  */
1594   if (rtx_equal_p (x_base, y_base))
1595     return 1;
1596
1597   /* The base addresses are different expressions.  If they are not accessed
1598      via AND, there is no conflict.  We can bring knowledge of object
1599      alignment into play here.  For example, on alpha, "char a, b;" can
1600      alias one another, though "char a; long b;" cannot.  AND addesses may
1601      implicitly alias surrounding objects; i.e. unaligned access in DImode
1602      via AND address can alias all surrounding object types except those
1603      with aligment 8 or higher.  */
1604   if (GET_CODE (x) == AND && GET_CODE (y) == AND)
1605     return 1;
1606   if (GET_CODE (x) == AND
1607       && (GET_CODE (XEXP (x, 1)) != CONST_INT
1608           || (int) GET_MODE_UNIT_SIZE (y_mode) < -INTVAL (XEXP (x, 1))))
1609     return 1;
1610   if (GET_CODE (y) == AND
1611       && (GET_CODE (XEXP (y, 1)) != CONST_INT
1612           || (int) GET_MODE_UNIT_SIZE (x_mode) < -INTVAL (XEXP (y, 1))))
1613     return 1;
1614
1615   /* Differing symbols not accessed via AND never alias.  */
1616   if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
1617     return 0;
1618
1619   /* If one address is a stack reference there can be no alias:
1620      stack references using different base registers do not alias,
1621      a stack reference can not alias a parameter, and a stack reference
1622      can not alias a global.  */
1623   if ((GET_CODE (x_base) == ADDRESS && GET_MODE (x_base) == Pmode)
1624       || (GET_CODE (y_base) == ADDRESS && GET_MODE (y_base) == Pmode))
1625     return 0;
1626
1627   if (! flag_argument_noalias)
1628     return 1;
1629
1630   if (flag_argument_noalias > 1)
1631     return 0;
1632
1633   /* Weak noalias assertion (arguments are distinct, but may match globals).  */
1634   return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode);
1635 }
1636
1637 /* Convert the address X into something we can use.  This is done by returning
1638    it unchanged unless it is a value; in the latter case we call cselib to get
1639    a more useful rtx.  */
1640
1641 rtx
1642 get_addr (rtx x)
1643 {
1644   cselib_val *v;
1645   struct elt_loc_list *l;
1646
1647   if (GET_CODE (x) != VALUE)
1648     return x;
1649   v = CSELIB_VAL_PTR (x);
1650   if (v)
1651     {
1652       for (l = v->locs; l; l = l->next)
1653         if (CONSTANT_P (l->loc))
1654           return l->loc;
1655       for (l = v->locs; l; l = l->next)
1656         if (!REG_P (l->loc) && !MEM_P (l->loc))
1657           return l->loc;
1658       if (v->locs)
1659         return v->locs->loc;
1660     }
1661   return x;
1662 }
1663
1664 /*  Return the address of the (N_REFS + 1)th memory reference to ADDR
1665     where SIZE is the size in bytes of the memory reference.  If ADDR
1666     is not modified by the memory reference then ADDR is returned.  */
1667
1668 static rtx
1669 addr_side_effect_eval (rtx addr, int size, int n_refs)
1670 {
1671   int offset = 0;
1672
1673   switch (GET_CODE (addr))
1674     {
1675     case PRE_INC:
1676       offset = (n_refs + 1) * size;
1677       break;
1678     case PRE_DEC:
1679       offset = -(n_refs + 1) * size;
1680       break;
1681     case POST_INC:
1682       offset = n_refs * size;
1683       break;
1684     case POST_DEC:
1685       offset = -n_refs * size;
1686       break;
1687
1688     default:
1689       return addr;
1690     }
1691
1692   if (offset)
1693     addr = gen_rtx_PLUS (GET_MODE (addr), XEXP (addr, 0),
1694                          GEN_INT (offset));
1695   else
1696     addr = XEXP (addr, 0);
1697   addr = canon_rtx (addr);
1698
1699   return addr;
1700 }
1701
1702 /* Return nonzero if X and Y (memory addresses) could reference the
1703    same location in memory.  C is an offset accumulator.  When
1704    C is nonzero, we are testing aliases between X and Y + C.
1705    XSIZE is the size in bytes of the X reference,
1706    similarly YSIZE is the size in bytes for Y.
1707    Expect that canon_rtx has been already called for X and Y.
1708
1709    If XSIZE or YSIZE is zero, we do not know the amount of memory being
1710    referenced (the reference was BLKmode), so make the most pessimistic
1711    assumptions.
1712
1713    If XSIZE or YSIZE is negative, we may access memory outside the object
1714    being referenced as a side effect.  This can happen when using AND to
1715    align memory references, as is done on the Alpha.
1716
1717    Nice to notice that varying addresses cannot conflict with fp if no
1718    local variables had their addresses taken, but that's too hard now.  */
1719
1720 static int
1721 memrefs_conflict_p (int xsize, rtx x, int ysize, rtx y, HOST_WIDE_INT c)
1722 {
1723   if (GET_CODE (x) == VALUE)
1724     x = get_addr (x);
1725   if (GET_CODE (y) == VALUE)
1726     y = get_addr (y);
1727   if (GET_CODE (x) == HIGH)
1728     x = XEXP (x, 0);
1729   else if (GET_CODE (x) == LO_SUM)
1730     x = XEXP (x, 1);
1731   else
1732     x = addr_side_effect_eval (x, xsize, 0);
1733   if (GET_CODE (y) == HIGH)
1734     y = XEXP (y, 0);
1735   else if (GET_CODE (y) == LO_SUM)
1736     y = XEXP (y, 1);
1737   else
1738     y = addr_side_effect_eval (y, ysize, 0);
1739
1740   if (rtx_equal_for_memref_p (x, y))
1741     {
1742       if (xsize <= 0 || ysize <= 0)
1743         return 1;
1744       if (c >= 0 && xsize > c)
1745         return 1;
1746       if (c < 0 && ysize+c > 0)
1747         return 1;
1748       return 0;
1749     }
1750
1751   /* This code used to check for conflicts involving stack references and
1752      globals but the base address alias code now handles these cases.  */
1753
1754   if (GET_CODE (x) == PLUS)
1755     {
1756       /* The fact that X is canonicalized means that this
1757          PLUS rtx is canonicalized.  */
1758       rtx x0 = XEXP (x, 0);
1759       rtx x1 = XEXP (x, 1);
1760
1761       if (GET_CODE (y) == PLUS)
1762         {
1763           /* The fact that Y is canonicalized means that this
1764              PLUS rtx is canonicalized.  */
1765           rtx y0 = XEXP (y, 0);
1766           rtx y1 = XEXP (y, 1);
1767
1768           if (rtx_equal_for_memref_p (x1, y1))
1769             return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1770           if (rtx_equal_for_memref_p (x0, y0))
1771             return memrefs_conflict_p (xsize, x1, ysize, y1, c);
1772           if (GET_CODE (x1) == CONST_INT)
1773             {
1774               if (GET_CODE (y1) == CONST_INT)
1775                 return memrefs_conflict_p (xsize, x0, ysize, y0,
1776                                            c - INTVAL (x1) + INTVAL (y1));
1777               else
1778                 return memrefs_conflict_p (xsize, x0, ysize, y,
1779                                            c - INTVAL (x1));
1780             }
1781           else if (GET_CODE (y1) == CONST_INT)
1782             return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1783
1784           return 1;
1785         }
1786       else if (GET_CODE (x1) == CONST_INT)
1787         return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
1788     }
1789   else if (GET_CODE (y) == PLUS)
1790     {
1791       /* The fact that Y is canonicalized means that this
1792          PLUS rtx is canonicalized.  */
1793       rtx y0 = XEXP (y, 0);
1794       rtx y1 = XEXP (y, 1);
1795
1796       if (GET_CODE (y1) == CONST_INT)
1797         return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1798       else
1799         return 1;
1800     }
1801
1802   if (GET_CODE (x) == GET_CODE (y))
1803     switch (GET_CODE (x))
1804       {
1805       case MULT:
1806         {
1807           /* Handle cases where we expect the second operands to be the
1808              same, and check only whether the first operand would conflict
1809              or not.  */
1810           rtx x0, y0;
1811           rtx x1 = canon_rtx (XEXP (x, 1));
1812           rtx y1 = canon_rtx (XEXP (y, 1));
1813           if (! rtx_equal_for_memref_p (x1, y1))
1814             return 1;
1815           x0 = canon_rtx (XEXP (x, 0));
1816           y0 = canon_rtx (XEXP (y, 0));
1817           if (rtx_equal_for_memref_p (x0, y0))
1818             return (xsize == 0 || ysize == 0
1819                     || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1820
1821           /* Can't properly adjust our sizes.  */
1822           if (GET_CODE (x1) != CONST_INT)
1823             return 1;
1824           xsize /= INTVAL (x1);
1825           ysize /= INTVAL (x1);
1826           c /= INTVAL (x1);
1827           return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1828         }
1829
1830       default:
1831         break;
1832       }
1833
1834   /* Treat an access through an AND (e.g. a subword access on an Alpha)
1835      as an access with indeterminate size.  Assume that references
1836      besides AND are aligned, so if the size of the other reference is
1837      at least as large as the alignment, assume no other overlap.  */
1838   if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT)
1839     {
1840       if (GET_CODE (y) == AND || ysize < -INTVAL (XEXP (x, 1)))
1841         xsize = -1;
1842       return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)), ysize, y, c);
1843     }
1844   if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT)
1845     {
1846       /* ??? If we are indexing far enough into the array/structure, we
1847          may yet be able to determine that we can not overlap.  But we
1848          also need to that we are far enough from the end not to overlap
1849          a following reference, so we do nothing with that for now.  */
1850       if (GET_CODE (x) == AND || xsize < -INTVAL (XEXP (y, 1)))
1851         ysize = -1;
1852       return memrefs_conflict_p (xsize, x, ysize, canon_rtx (XEXP (y, 0)), c);
1853     }
1854
1855   if (CONSTANT_P (x))
1856     {
1857       if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
1858         {
1859           c += (INTVAL (y) - INTVAL (x));
1860           return (xsize <= 0 || ysize <= 0
1861                   || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1862         }
1863
1864       if (GET_CODE (x) == CONST)
1865         {
1866           if (GET_CODE (y) == CONST)
1867             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1868                                        ysize, canon_rtx (XEXP (y, 0)), c);
1869           else
1870             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1871                                        ysize, y, c);
1872         }
1873       if (GET_CODE (y) == CONST)
1874         return memrefs_conflict_p (xsize, x, ysize,
1875                                    canon_rtx (XEXP (y, 0)), c);
1876
1877       if (CONSTANT_P (y))
1878         return (xsize <= 0 || ysize <= 0
1879                 || (rtx_equal_for_memref_p (x, y)
1880                     && ((c >= 0 && xsize > c) || (c < 0 && ysize+c > 0))));
1881
1882       return 1;
1883     }
1884   return 1;
1885 }
1886
1887 /* Functions to compute memory dependencies.
1888
1889    Since we process the insns in execution order, we can build tables
1890    to keep track of what registers are fixed (and not aliased), what registers
1891    are varying in known ways, and what registers are varying in unknown
1892    ways.
1893
1894    If both memory references are volatile, then there must always be a
1895    dependence between the two references, since their order can not be
1896    changed.  A volatile and non-volatile reference can be interchanged
1897    though.
1898
1899    A MEM_IN_STRUCT reference at a non-AND varying address can never
1900    conflict with a non-MEM_IN_STRUCT reference at a fixed address.  We
1901    also must allow AND addresses, because they may generate accesses
1902    outside the object being referenced.  This is used to generate
1903    aligned addresses from unaligned addresses, for instance, the alpha
1904    storeqi_unaligned pattern.  */
1905
1906 /* Read dependence: X is read after read in MEM takes place.  There can
1907    only be a dependence here if both reads are volatile.  */
1908
1909 int
1910 read_dependence (const_rtx mem, const_rtx x)
1911 {
1912   return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
1913 }
1914
1915 /* Returns MEM1 if and only if MEM1 is a scalar at a fixed address and
1916    MEM2 is a reference to a structure at a varying address, or returns
1917    MEM2 if vice versa.  Otherwise, returns NULL_RTX.  If a non-NULL
1918    value is returned MEM1 and MEM2 can never alias.  VARIES_P is used
1919    to decide whether or not an address may vary; it should return
1920    nonzero whenever variation is possible.
1921    MEM1_ADDR and MEM2_ADDR are the addresses of MEM1 and MEM2.  */
1922
1923 static const_rtx
1924 fixed_scalar_and_varying_struct_p (const_rtx mem1, const_rtx mem2, rtx mem1_addr,
1925                                    rtx mem2_addr,
1926                                    bool (*varies_p) (const_rtx, bool))
1927 {
1928   if (! flag_strict_aliasing)
1929     return NULL_RTX;
1930
1931   if (MEM_ALIAS_SET (mem2)
1932       && MEM_SCALAR_P (mem1) && MEM_IN_STRUCT_P (mem2)
1933       && !varies_p (mem1_addr, 1) && varies_p (mem2_addr, 1))
1934     /* MEM1 is a scalar at a fixed address; MEM2 is a struct at a
1935        varying address.  */
1936     return mem1;
1937
1938   if (MEM_ALIAS_SET (mem1)
1939       && MEM_IN_STRUCT_P (mem1) && MEM_SCALAR_P (mem2)
1940       && varies_p (mem1_addr, 1) && !varies_p (mem2_addr, 1))
1941     /* MEM2 is a scalar at a fixed address; MEM1 is a struct at a
1942        varying address.  */
1943     return mem2;
1944
1945   return NULL_RTX;
1946 }
1947
1948 /* Returns nonzero if something about the mode or address format MEM1
1949    indicates that it might well alias *anything*.  */
1950
1951 static int
1952 aliases_everything_p (const_rtx mem)
1953 {
1954   if (GET_CODE (XEXP (mem, 0)) == AND)
1955     /* If the address is an AND, it's very hard to know at what it is
1956        actually pointing.  */
1957     return 1;
1958
1959   return 0;
1960 }
1961
1962 /* Return true if we can determine that the fields referenced cannot
1963    overlap for any pair of objects.  */
1964
1965 static bool
1966 nonoverlapping_component_refs_p (const_tree x, const_tree y)
1967 {
1968   const_tree fieldx, fieldy, typex, typey, orig_y;
1969
1970   do
1971     {
1972       /* The comparison has to be done at a common type, since we don't
1973          know how the inheritance hierarchy works.  */
1974       orig_y = y;
1975       do
1976         {
1977           fieldx = TREE_OPERAND (x, 1);
1978           typex = TYPE_MAIN_VARIANT (DECL_FIELD_CONTEXT (fieldx));
1979
1980           y = orig_y;
1981           do
1982             {
1983               fieldy = TREE_OPERAND (y, 1);
1984               typey = TYPE_MAIN_VARIANT (DECL_FIELD_CONTEXT (fieldy));
1985
1986               if (typex == typey)
1987                 goto found;
1988
1989               y = TREE_OPERAND (y, 0);
1990             }
1991           while (y && TREE_CODE (y) == COMPONENT_REF);
1992
1993           x = TREE_OPERAND (x, 0);
1994         }
1995       while (x && TREE_CODE (x) == COMPONENT_REF);
1996       /* Never found a common type.  */
1997       return false;
1998
1999     found:
2000       /* If we're left with accessing different fields of a structure,
2001          then no overlap.  */
2002       if (TREE_CODE (typex) == RECORD_TYPE
2003           && fieldx != fieldy)
2004         return true;
2005
2006       /* The comparison on the current field failed.  If we're accessing
2007          a very nested structure, look at the next outer level.  */
2008       x = TREE_OPERAND (x, 0);
2009       y = TREE_OPERAND (y, 0);
2010     }
2011   while (x && y
2012          && TREE_CODE (x) == COMPONENT_REF
2013          && TREE_CODE (y) == COMPONENT_REF);
2014
2015   return false;
2016 }
2017
2018 /* Look at the bottom of the COMPONENT_REF list for a DECL, and return it.  */
2019
2020 static tree
2021 decl_for_component_ref (tree x)
2022 {
2023   do
2024     {
2025       x = TREE_OPERAND (x, 0);
2026     }
2027   while (x && TREE_CODE (x) == COMPONENT_REF);
2028
2029   return x && DECL_P (x) ? x : NULL_TREE;
2030 }
2031
2032 /* Walk up the COMPONENT_REF list and adjust OFFSET to compensate for the
2033    offset of the field reference.  */
2034
2035 static rtx
2036 adjust_offset_for_component_ref (tree x, rtx offset)
2037 {
2038   HOST_WIDE_INT ioffset;
2039
2040   if (! offset)
2041     return NULL_RTX;
2042
2043   ioffset = INTVAL (offset);
2044   do
2045     {
2046       tree offset = component_ref_field_offset (x);
2047       tree field = TREE_OPERAND (x, 1);
2048
2049       if (! host_integerp (offset, 1))
2050         return NULL_RTX;
2051       ioffset += (tree_low_cst (offset, 1)
2052                   + (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
2053                      / BITS_PER_UNIT));
2054
2055       x = TREE_OPERAND (x, 0);
2056     }
2057   while (x && TREE_CODE (x) == COMPONENT_REF);
2058
2059   return GEN_INT (ioffset);
2060 }
2061
2062 /* Return nonzero if we can determine the exprs corresponding to memrefs
2063    X and Y and they do not overlap.  */
2064
2065 int
2066 nonoverlapping_memrefs_p (const_rtx x, const_rtx y)
2067 {
2068   tree exprx = MEM_EXPR (x), expry = MEM_EXPR (y);
2069   rtx rtlx, rtly;
2070   rtx basex, basey;
2071   rtx moffsetx, moffsety;
2072   HOST_WIDE_INT offsetx = 0, offsety = 0, sizex, sizey, tem;
2073
2074   /* Unless both have exprs, we can't tell anything.  */
2075   if (exprx == 0 || expry == 0)
2076     return 0;
2077
2078   /* If both are field references, we may be able to determine something.  */
2079   if (TREE_CODE (exprx) == COMPONENT_REF
2080       && TREE_CODE (expry) == COMPONENT_REF
2081       && nonoverlapping_component_refs_p (exprx, expry))
2082     return 1;
2083
2084
2085   /* If the field reference test failed, look at the DECLs involved.  */
2086   moffsetx = MEM_OFFSET (x);
2087   if (TREE_CODE (exprx) == COMPONENT_REF)
2088     {
2089       if (TREE_CODE (expry) == VAR_DECL
2090           && POINTER_TYPE_P (TREE_TYPE (expry)))
2091         {
2092          tree field = TREE_OPERAND (exprx, 1);
2093          tree fieldcontext = DECL_FIELD_CONTEXT (field);
2094          if (ipa_type_escape_field_does_not_clobber_p (fieldcontext,
2095                                                        TREE_TYPE (field)))
2096            return 1;
2097         }
2098       {
2099         tree t = decl_for_component_ref (exprx);
2100         if (! t)
2101           return 0;
2102         moffsetx = adjust_offset_for_component_ref (exprx, moffsetx);
2103         exprx = t;
2104       }
2105     }
2106   else if (INDIRECT_REF_P (exprx))
2107     {
2108       exprx = TREE_OPERAND (exprx, 0);
2109       if (flag_argument_noalias < 2
2110           || TREE_CODE (exprx) != PARM_DECL)
2111         return 0;
2112     }
2113
2114   moffsety = MEM_OFFSET (y);
2115   if (TREE_CODE (expry) == COMPONENT_REF)
2116     {
2117       if (TREE_CODE (exprx) == VAR_DECL
2118           && POINTER_TYPE_P (TREE_TYPE (exprx)))
2119         {
2120          tree field = TREE_OPERAND (expry, 1);
2121          tree fieldcontext = DECL_FIELD_CONTEXT (field);
2122          if (ipa_type_escape_field_does_not_clobber_p (fieldcontext,
2123                                                        TREE_TYPE (field)))
2124            return 1;
2125         }
2126       {
2127         tree t = decl_for_component_ref (expry);
2128         if (! t)
2129           return 0;
2130         moffsety = adjust_offset_for_component_ref (expry, moffsety);
2131         expry = t;
2132       }
2133     }
2134   else if (INDIRECT_REF_P (expry))
2135     {
2136       expry = TREE_OPERAND (expry, 0);
2137       if (flag_argument_noalias < 2
2138           || TREE_CODE (expry) != PARM_DECL)
2139         return 0;
2140     }
2141
2142   if (! DECL_P (exprx) || ! DECL_P (expry))
2143     return 0;
2144
2145   rtlx = DECL_RTL (exprx);
2146   rtly = DECL_RTL (expry);
2147
2148   /* If either RTL is not a MEM, it must be a REG or CONCAT, meaning they
2149      can't overlap unless they are the same because we never reuse that part
2150      of the stack frame used for locals for spilled pseudos.  */
2151   if ((!MEM_P (rtlx) || !MEM_P (rtly))
2152       && ! rtx_equal_p (rtlx, rtly))
2153     return 1;
2154
2155   /* Get the base and offsets of both decls.  If either is a register, we
2156      know both are and are the same, so use that as the base.  The only
2157      we can avoid overlap is if we can deduce that they are nonoverlapping
2158      pieces of that decl, which is very rare.  */
2159   basex = MEM_P (rtlx) ? XEXP (rtlx, 0) : rtlx;
2160   if (GET_CODE (basex) == PLUS && GET_CODE (XEXP (basex, 1)) == CONST_INT)
2161     offsetx = INTVAL (XEXP (basex, 1)), basex = XEXP (basex, 0);
2162
2163   basey = MEM_P (rtly) ? XEXP (rtly, 0) : rtly;
2164   if (GET_CODE (basey) == PLUS && GET_CODE (XEXP (basey, 1)) == CONST_INT)
2165     offsety = INTVAL (XEXP (basey, 1)), basey = XEXP (basey, 0);
2166
2167   /* If the bases are different, we know they do not overlap if both
2168      are constants or if one is a constant and the other a pointer into the
2169      stack frame.  Otherwise a different base means we can't tell if they
2170      overlap or not.  */
2171   if (! rtx_equal_p (basex, basey))
2172     return ((CONSTANT_P (basex) && CONSTANT_P (basey))
2173             || (CONSTANT_P (basex) && REG_P (basey)
2174                 && REGNO_PTR_FRAME_P (REGNO (basey)))
2175             || (CONSTANT_P (basey) && REG_P (basex)
2176                 && REGNO_PTR_FRAME_P (REGNO (basex))));
2177
2178   sizex = (!MEM_P (rtlx) ? (int) GET_MODE_SIZE (GET_MODE (rtlx))
2179            : MEM_SIZE (rtlx) ? INTVAL (MEM_SIZE (rtlx))
2180            : -1);
2181   sizey = (!MEM_P (rtly) ? (int) GET_MODE_SIZE (GET_MODE (rtly))
2182            : MEM_SIZE (rtly) ? INTVAL (MEM_SIZE (rtly)) :
2183            -1);
2184
2185   /* If we have an offset for either memref, it can update the values computed
2186      above.  */
2187   if (moffsetx)
2188     offsetx += INTVAL (moffsetx), sizex -= INTVAL (moffsetx);
2189   if (moffsety)
2190     offsety += INTVAL (moffsety), sizey -= INTVAL (moffsety);
2191
2192   /* If a memref has both a size and an offset, we can use the smaller size.
2193      We can't do this if the offset isn't known because we must view this
2194      memref as being anywhere inside the DECL's MEM.  */
2195   if (MEM_SIZE (x) && moffsetx)
2196     sizex = INTVAL (MEM_SIZE (x));
2197   if (MEM_SIZE (y) && moffsety)
2198     sizey = INTVAL (MEM_SIZE (y));
2199
2200   /* Put the values of the memref with the lower offset in X's values.  */
2201   if (offsetx > offsety)
2202     {
2203       tem = offsetx, offsetx = offsety, offsety = tem;
2204       tem = sizex, sizex = sizey, sizey = tem;
2205     }
2206
2207   /* If we don't know the size of the lower-offset value, we can't tell
2208      if they conflict.  Otherwise, we do the test.  */
2209   return sizex >= 0 && offsety >= offsetx + sizex;
2210 }
2211
2212 /* True dependence: X is read after store in MEM takes place.  */
2213
2214 int
2215 true_dependence (const_rtx mem, enum machine_mode mem_mode, const_rtx x,
2216                  bool (*varies) (const_rtx, bool))
2217 {
2218   rtx x_addr, mem_addr;
2219   rtx base;
2220
2221   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2222     return 1;
2223
2224   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2225      This is used in epilogue deallocation functions, and in cselib.  */
2226   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
2227     return 1;
2228   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2229     return 1;
2230   if (MEM_ALIAS_SET (x) == ALIAS_SET_MEMORY_BARRIER
2231       || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
2232     return 1;
2233
2234   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2235     return 0;
2236
2237   /* Read-only memory is by definition never modified, and therefore can't
2238      conflict with anything.  We don't expect to find read-only set on MEM,
2239      but stupid user tricks can produce them, so don't die.  */
2240   if (MEM_READONLY_P (x))
2241     return 0;
2242
2243   if (nonoverlapping_memrefs_p (mem, x))
2244     return 0;
2245
2246   if (mem_mode == VOIDmode)
2247     mem_mode = GET_MODE (mem);
2248
2249   x_addr = get_addr (XEXP (x, 0));
2250   mem_addr = get_addr (XEXP (mem, 0));
2251
2252   base = find_base_term (x_addr);
2253   if (base && (GET_CODE (base) == LABEL_REF
2254                || (GET_CODE (base) == SYMBOL_REF
2255                    && CONSTANT_POOL_ADDRESS_P (base))))
2256     return 0;
2257
2258   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
2259     return 0;
2260
2261   x_addr = canon_rtx (x_addr);
2262   mem_addr = canon_rtx (mem_addr);
2263
2264   if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
2265                             SIZE_FOR_MODE (x), x_addr, 0))
2266     return 0;
2267
2268   if (aliases_everything_p (x))
2269     return 1;
2270
2271   /* We cannot use aliases_everything_p to test MEM, since we must look
2272      at MEM_MODE, rather than GET_MODE (MEM).  */
2273   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
2274     return 1;
2275
2276   /* In true_dependence we also allow BLKmode to alias anything.  Why
2277      don't we do this in anti_dependence and output_dependence?  */
2278   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
2279     return 1;
2280
2281   return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2282                                               varies);
2283 }
2284
2285 /* Canonical true dependence: X is read after store in MEM takes place.
2286    Variant of true_dependence which assumes MEM has already been
2287    canonicalized (hence we no longer do that here).
2288    The mem_addr argument has been added, since true_dependence computed
2289    this value prior to canonicalizing.  */
2290
2291 int
2292 canon_true_dependence (const_rtx mem, enum machine_mode mem_mode, rtx mem_addr,
2293                        const_rtx x, bool (*varies) (const_rtx, bool))
2294 {
2295   rtx x_addr;
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   x_addr = get_addr (XEXP (x, 0));
2323
2324   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
2325     return 0;
2326
2327   x_addr = canon_rtx (x_addr);
2328   if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
2329                             SIZE_FOR_MODE (x), x_addr, 0))
2330     return 0;
2331
2332   if (aliases_everything_p (x))
2333     return 1;
2334
2335   /* We cannot use aliases_everything_p to test MEM, since we must look
2336      at MEM_MODE, rather than GET_MODE (MEM).  */
2337   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
2338     return 1;
2339
2340   /* In true_dependence we also allow BLKmode to alias anything.  Why
2341      don't we do this in anti_dependence and output_dependence?  */
2342   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
2343     return 1;
2344
2345   return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2346                                               varies);
2347 }
2348
2349 /* Returns nonzero if a write to X might alias a previous read from
2350    (or, if WRITEP is nonzero, a write to) MEM.  */
2351
2352 static int
2353 write_dependence_p (const_rtx mem, const_rtx x, int writep)
2354 {
2355   rtx x_addr, mem_addr;
2356   const_rtx fixed_scalar;
2357   rtx base;
2358
2359   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2360     return 1;
2361
2362   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2363      This is used in epilogue deallocation functions.  */
2364   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
2365     return 1;
2366   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2367     return 1;
2368   if (MEM_ALIAS_SET (x) == ALIAS_SET_MEMORY_BARRIER
2369       || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
2370     return 1;
2371
2372   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2373     return 0;
2374
2375   /* A read from read-only memory can't conflict with read-write memory.  */
2376   if (!writep && MEM_READONLY_P (mem))
2377     return 0;
2378
2379   if (nonoverlapping_memrefs_p (x, mem))
2380     return 0;
2381
2382   x_addr = get_addr (XEXP (x, 0));
2383   mem_addr = get_addr (XEXP (mem, 0));
2384
2385   if (! writep)
2386     {
2387       base = find_base_term (mem_addr);
2388       if (base && (GET_CODE (base) == LABEL_REF
2389                    || (GET_CODE (base) == SYMBOL_REF
2390                        && CONSTANT_POOL_ADDRESS_P (base))))
2391         return 0;
2392     }
2393
2394   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x),
2395                           GET_MODE (mem)))
2396     return 0;
2397
2398   x_addr = canon_rtx (x_addr);
2399   mem_addr = canon_rtx (mem_addr);
2400
2401   if (!memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
2402                            SIZE_FOR_MODE (x), x_addr, 0))
2403     return 0;
2404
2405   fixed_scalar
2406     = fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2407                                          rtx_addr_varies_p);
2408
2409   return (!(fixed_scalar == mem && !aliases_everything_p (x))
2410           && !(fixed_scalar == x && !aliases_everything_p (mem)));
2411 }
2412
2413 /* Anti dependence: X is written after read in MEM takes place.  */
2414
2415 int
2416 anti_dependence (const_rtx mem, const_rtx x)
2417 {
2418   return write_dependence_p (mem, x, /*writep=*/0);
2419 }
2420
2421 /* Output dependence: X is written after store in MEM takes place.  */
2422
2423 int
2424 output_dependence (const_rtx mem, const_rtx x)
2425 {
2426   return write_dependence_p (mem, x, /*writep=*/1);
2427 }
2428 \f
2429
2430 void
2431 init_alias_target (void)
2432 {
2433   int i;
2434
2435   memset (static_reg_base_value, 0, sizeof static_reg_base_value);
2436
2437   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2438     /* Check whether this register can hold an incoming pointer
2439        argument.  FUNCTION_ARG_REGNO_P tests outgoing register
2440        numbers, so translate if necessary due to register windows.  */
2441     if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i))
2442         && HARD_REGNO_MODE_OK (i, Pmode))
2443       static_reg_base_value[i]
2444         = gen_rtx_ADDRESS (VOIDmode, gen_rtx_REG (Pmode, i));
2445
2446   static_reg_base_value[STACK_POINTER_REGNUM]
2447     = gen_rtx_ADDRESS (Pmode, stack_pointer_rtx);
2448   static_reg_base_value[ARG_POINTER_REGNUM]
2449     = gen_rtx_ADDRESS (Pmode, arg_pointer_rtx);
2450   static_reg_base_value[FRAME_POINTER_REGNUM]
2451     = gen_rtx_ADDRESS (Pmode, frame_pointer_rtx);
2452 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2453   static_reg_base_value[HARD_FRAME_POINTER_REGNUM]
2454     = gen_rtx_ADDRESS (Pmode, hard_frame_pointer_rtx);
2455 #endif
2456 }
2457
2458 /* Set MEMORY_MODIFIED when X modifies DATA (that is assumed
2459    to be memory reference.  */
2460 static bool memory_modified;
2461 static void
2462 memory_modified_1 (rtx x, const_rtx pat ATTRIBUTE_UNUSED, void *data)
2463 {
2464   if (MEM_P (x))
2465     {
2466       if (anti_dependence (x, (const_rtx)data) || output_dependence (x, (const_rtx)data))
2467         memory_modified = true;
2468     }
2469 }
2470
2471
2472 /* Return true when INSN possibly modify memory contents of MEM
2473    (i.e. address can be modified).  */
2474 bool
2475 memory_modified_in_insn_p (const_rtx mem, const_rtx insn)
2476 {
2477   if (!INSN_P (insn))
2478     return false;
2479   memory_modified = false;
2480   note_stores (PATTERN (insn), memory_modified_1, CONST_CAST_RTX(mem));
2481   return memory_modified;
2482 }
2483
2484 /* Initialize the aliasing machinery.  Initialize the REG_KNOWN_VALUE
2485    array.  */
2486
2487 void
2488 init_alias_analysis (void)
2489 {
2490   unsigned int maxreg = max_reg_num ();
2491   int changed, pass;
2492   int i;
2493   unsigned int ui;
2494   rtx insn;
2495
2496   timevar_push (TV_ALIAS_ANALYSIS);
2497
2498   reg_known_value_size = maxreg - FIRST_PSEUDO_REGISTER;
2499   reg_known_value = GGC_CNEWVEC (rtx, reg_known_value_size);
2500   reg_known_equiv_p = XCNEWVEC (bool, reg_known_value_size);
2501
2502   /* If we have memory allocated from the previous run, use it.  */
2503   if (old_reg_base_value)
2504     reg_base_value = old_reg_base_value;
2505
2506   if (reg_base_value)
2507     VEC_truncate (rtx, reg_base_value, 0);
2508
2509   VEC_safe_grow_cleared (rtx, gc, reg_base_value, maxreg);
2510
2511   new_reg_base_value = XNEWVEC (rtx, maxreg);
2512   reg_seen = XNEWVEC (char, maxreg);
2513
2514   /* The basic idea is that each pass through this loop will use the
2515      "constant" information from the previous pass to propagate alias
2516      information through another level of assignments.
2517
2518      This could get expensive if the assignment chains are long.  Maybe
2519      we should throttle the number of iterations, possibly based on
2520      the optimization level or flag_expensive_optimizations.
2521
2522      We could propagate more information in the first pass by making use
2523      of DF_REG_DEF_COUNT to determine immediately that the alias information
2524      for a pseudo is "constant".
2525
2526      A program with an uninitialized variable can cause an infinite loop
2527      here.  Instead of doing a full dataflow analysis to detect such problems
2528      we just cap the number of iterations for the loop.
2529
2530      The state of the arrays for the set chain in question does not matter
2531      since the program has undefined behavior.  */
2532
2533   pass = 0;
2534   do
2535     {
2536       /* Assume nothing will change this iteration of the loop.  */
2537       changed = 0;
2538
2539       /* We want to assign the same IDs each iteration of this loop, so
2540          start counting from zero each iteration of the loop.  */
2541       unique_id = 0;
2542
2543       /* We're at the start of the function each iteration through the
2544          loop, so we're copying arguments.  */
2545       copying_arguments = true;
2546
2547       /* Wipe the potential alias information clean for this pass.  */
2548       memset (new_reg_base_value, 0, maxreg * sizeof (rtx));
2549
2550       /* Wipe the reg_seen array clean.  */
2551       memset (reg_seen, 0, maxreg);
2552
2553       /* Mark all hard registers which may contain an address.
2554          The stack, frame and argument pointers may contain an address.
2555          An argument register which can hold a Pmode value may contain
2556          an address even if it is not in BASE_REGS.
2557
2558          The address expression is VOIDmode for an argument and
2559          Pmode for other registers.  */
2560
2561       memcpy (new_reg_base_value, static_reg_base_value,
2562               FIRST_PSEUDO_REGISTER * sizeof (rtx));
2563
2564       /* Walk the insns adding values to the new_reg_base_value array.  */
2565       for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2566         {
2567           if (INSN_P (insn))
2568             {
2569               rtx note, set;
2570
2571 #if defined (HAVE_prologue) || defined (HAVE_epilogue)
2572               /* The prologue/epilogue insns are not threaded onto the
2573                  insn chain until after reload has completed.  Thus,
2574                  there is no sense wasting time checking if INSN is in
2575                  the prologue/epilogue until after reload has completed.  */
2576               if (reload_completed
2577                   && prologue_epilogue_contains (insn))
2578                 continue;
2579 #endif
2580
2581               /* If this insn has a noalias note, process it,  Otherwise,
2582                  scan for sets.  A simple set will have no side effects
2583                  which could change the base value of any other register.  */
2584
2585               if (GET_CODE (PATTERN (insn)) == SET
2586                   && REG_NOTES (insn) != 0
2587                   && find_reg_note (insn, REG_NOALIAS, NULL_RTX))
2588                 record_set (SET_DEST (PATTERN (insn)), NULL_RTX, NULL);
2589               else
2590                 note_stores (PATTERN (insn), record_set, NULL);
2591
2592               set = single_set (insn);
2593
2594               if (set != 0
2595                   && REG_P (SET_DEST (set))
2596                   && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER)
2597                 {
2598                   unsigned int regno = REGNO (SET_DEST (set));
2599                   rtx src = SET_SRC (set);
2600                   rtx t;
2601
2602                   note = find_reg_equal_equiv_note (insn);
2603                   if (note && REG_NOTE_KIND (note) == REG_EQUAL
2604                       && DF_REG_DEF_COUNT (regno) != 1)
2605                     note = NULL_RTX;
2606
2607                   if (note != NULL_RTX
2608                       && GET_CODE (XEXP (note, 0)) != EXPR_LIST
2609                       && ! rtx_varies_p (XEXP (note, 0), 1)
2610                       && ! reg_overlap_mentioned_p (SET_DEST (set),
2611                                                     XEXP (note, 0)))
2612                     {
2613                       set_reg_known_value (regno, XEXP (note, 0));
2614                       set_reg_known_equiv_p (regno,
2615                         REG_NOTE_KIND (note) == REG_EQUIV);
2616                     }
2617                   else if (DF_REG_DEF_COUNT (regno) == 1
2618                            && GET_CODE (src) == PLUS
2619                            && REG_P (XEXP (src, 0))
2620                            && (t = get_reg_known_value (REGNO (XEXP (src, 0))))
2621                            && GET_CODE (XEXP (src, 1)) == CONST_INT)
2622                     {
2623                       t = plus_constant (t, INTVAL (XEXP (src, 1)));
2624                       set_reg_known_value (regno, t);
2625                       set_reg_known_equiv_p (regno, 0);
2626                     }
2627                   else if (DF_REG_DEF_COUNT (regno) == 1
2628                            && ! rtx_varies_p (src, 1))
2629                     {
2630                       set_reg_known_value (regno, src);
2631                       set_reg_known_equiv_p (regno, 0);
2632                     }
2633                 }
2634             }
2635           else if (NOTE_P (insn)
2636                    && NOTE_KIND (insn) == NOTE_INSN_FUNCTION_BEG)
2637             copying_arguments = false;
2638         }
2639
2640       /* Now propagate values from new_reg_base_value to reg_base_value.  */
2641       gcc_assert (maxreg == (unsigned int) max_reg_num ());
2642
2643       for (ui = 0; ui < maxreg; ui++)
2644         {
2645           if (new_reg_base_value[ui]
2646               && new_reg_base_value[ui] != VEC_index (rtx, reg_base_value, ui)
2647               && ! rtx_equal_p (new_reg_base_value[ui],
2648                                 VEC_index (rtx, reg_base_value, ui)))
2649             {
2650               VEC_replace (rtx, reg_base_value, ui, new_reg_base_value[ui]);
2651               changed = 1;
2652             }
2653         }
2654     }
2655   while (changed && ++pass < MAX_ALIAS_LOOP_PASSES);
2656
2657   /* Fill in the remaining entries.  */
2658   for (i = 0; i < (int)reg_known_value_size; i++)
2659     if (reg_known_value[i] == 0)
2660       reg_known_value[i] = regno_reg_rtx[i + FIRST_PSEUDO_REGISTER];
2661
2662   /* Clean up.  */
2663   free (new_reg_base_value);
2664   new_reg_base_value = 0;
2665   free (reg_seen);
2666   reg_seen = 0;
2667   timevar_pop (TV_ALIAS_ANALYSIS);
2668 }
2669
2670 void
2671 end_alias_analysis (void)
2672 {
2673   old_reg_base_value = reg_base_value;
2674   ggc_free (reg_known_value);
2675   reg_known_value = 0;
2676   reg_known_value_size = 0;
2677   free (reg_known_equiv_p);
2678   reg_known_equiv_p = 0;
2679 }
2680
2681 #include "gt-alias.h"