OSDN Git Service

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