OSDN Git Service

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