OSDN Git Service

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