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