OSDN Git Service

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