OSDN Git Service

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