OSDN Git Service

e46c8e9741a746f473a0daa952d6bedec6702fe0
[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   t = TYPE_CANONICAL (t);
732   /* Canonical types shouldn't form a tree nor should the canonical
733      type require structural equality checks.  */
734   gcc_checking_assert (!TYPE_STRUCTURAL_EQUALITY_P (t) && TYPE_CANONICAL (t) == t);
735
736   /* If this is a type with a known alias set, return it.  */
737   if (TYPE_ALIAS_SET_KNOWN_P (t))
738     return TYPE_ALIAS_SET (t);
739
740   /* We don't want to set TYPE_ALIAS_SET for incomplete types.  */
741   if (!COMPLETE_TYPE_P (t))
742     {
743       /* For arrays with unknown size the conservative answer is the
744          alias set of the element type.  */
745       if (TREE_CODE (t) == ARRAY_TYPE)
746         return get_alias_set (TREE_TYPE (t));
747
748       /* But return zero as a conservative answer for incomplete types.  */
749       return 0;
750     }
751
752   /* See if the language has special handling for this type.  */
753   set = lang_hooks.get_alias_set (t);
754   if (set != -1)
755     return set;
756
757   /* There are no objects of FUNCTION_TYPE, so there's no point in
758      using up an alias set for them.  (There are, of course, pointers
759      and references to functions, but that's different.)  */
760   else if (TREE_CODE (t) == FUNCTION_TYPE
761            || TREE_CODE (t) == METHOD_TYPE)
762     set = 0;
763
764   /* Unless the language specifies otherwise, let vector types alias
765      their components.  This avoids some nasty type punning issues in
766      normal usage.  And indeed lets vectors be treated more like an
767      array slice.  */
768   else if (TREE_CODE (t) == VECTOR_TYPE)
769     set = get_alias_set (TREE_TYPE (t));
770
771   /* Unless the language specifies otherwise, treat array types the
772      same as their components.  This avoids the asymmetry we get
773      through recording the components.  Consider accessing a
774      character(kind=1) through a reference to a character(kind=1)[1:1].
775      Or consider if we want to assign integer(kind=4)[0:D.1387] and
776      integer(kind=4)[4] the same alias set or not.
777      Just be pragmatic here and make sure the array and its element
778      type get the same alias set assigned.  */
779   else if (TREE_CODE (t) == ARRAY_TYPE
780            && !TYPE_NONALIASED_COMPONENT (t))
781     set = get_alias_set (TREE_TYPE (t));
782
783   else
784     /* Otherwise make a new alias set for this type.  */
785     set = new_alias_set ();
786
787   TYPE_ALIAS_SET (t) = set;
788
789   /* If this is an aggregate type, we must record any component aliasing
790      information.  */
791   if (AGGREGATE_TYPE_P (t) || TREE_CODE (t) == COMPLEX_TYPE)
792     record_component_aliases (t);
793
794   return set;
795 }
796
797 /* Return a brand-new alias set.  */
798
799 alias_set_type
800 new_alias_set (void)
801 {
802   if (flag_strict_aliasing)
803     {
804       if (alias_sets == 0)
805         VEC_safe_push (alias_set_entry, gc, alias_sets, 0);
806       VEC_safe_push (alias_set_entry, gc, alias_sets, 0);
807       return VEC_length (alias_set_entry, alias_sets) - 1;
808     }
809   else
810     return 0;
811 }
812
813 /* Indicate that things in SUBSET can alias things in SUPERSET, but that
814    not everything that aliases SUPERSET also aliases SUBSET.  For example,
815    in C, a store to an `int' can alias a load of a structure containing an
816    `int', and vice versa.  But it can't alias a load of a 'double' member
817    of the same structure.  Here, the structure would be the SUPERSET and
818    `int' the SUBSET.  This relationship is also described in the comment at
819    the beginning of this file.
820
821    This function should be called only once per SUPERSET/SUBSET pair.
822
823    It is illegal for SUPERSET to be zero; everything is implicitly a
824    subset of alias set zero.  */
825
826 void
827 record_alias_subset (alias_set_type superset, alias_set_type subset)
828 {
829   alias_set_entry superset_entry;
830   alias_set_entry subset_entry;
831
832   /* It is possible in complex type situations for both sets to be the same,
833      in which case we can ignore this operation.  */
834   if (superset == subset)
835     return;
836
837   gcc_assert (superset);
838
839   superset_entry = get_alias_set_entry (superset);
840   if (superset_entry == 0)
841     {
842       /* Create an entry for the SUPERSET, so that we have a place to
843          attach the SUBSET.  */
844       superset_entry = ggc_alloc_cleared_alias_set_entry_d ();
845       superset_entry->alias_set = superset;
846       superset_entry->children
847         = splay_tree_new_ggc (splay_tree_compare_ints,
848                               ggc_alloc_splay_tree_scalar_scalar_splay_tree_s,
849                               ggc_alloc_splay_tree_scalar_scalar_splay_tree_node_s);
850       superset_entry->has_zero_child = 0;
851       VEC_replace (alias_set_entry, alias_sets, superset, superset_entry);
852     }
853
854   if (subset == 0)
855     superset_entry->has_zero_child = 1;
856   else
857     {
858       subset_entry = get_alias_set_entry (subset);
859       /* If there is an entry for the subset, enter all of its children
860          (if they are not already present) as children of the SUPERSET.  */
861       if (subset_entry)
862         {
863           if (subset_entry->has_zero_child)
864             superset_entry->has_zero_child = 1;
865
866           splay_tree_foreach (subset_entry->children, insert_subset_children,
867                               superset_entry->children);
868         }
869
870       /* Enter the SUBSET itself as a child of the SUPERSET.  */
871       splay_tree_insert (superset_entry->children,
872                          (splay_tree_key) subset, 0);
873     }
874 }
875
876 /* Record that component types of TYPE, if any, are part of that type for
877    aliasing purposes.  For record types, we only record component types
878    for fields that are not marked non-addressable.  For array types, we
879    only record the component type if it is not marked non-aliased.  */
880
881 void
882 record_component_aliases (tree type)
883 {
884   alias_set_type superset = get_alias_set (type);
885   tree field;
886
887   if (superset == 0)
888     return;
889
890   switch (TREE_CODE (type))
891     {
892     case RECORD_TYPE:
893     case UNION_TYPE:
894     case QUAL_UNION_TYPE:
895       /* Recursively record aliases for the base classes, if there are any.  */
896       if (TYPE_BINFO (type))
897         {
898           int i;
899           tree binfo, base_binfo;
900
901           for (binfo = TYPE_BINFO (type), i = 0;
902                BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
903             record_alias_subset (superset,
904                                  get_alias_set (BINFO_TYPE (base_binfo)));
905         }
906       for (field = TYPE_FIELDS (type); field != 0; field = TREE_CHAIN (field))
907         if (TREE_CODE (field) == FIELD_DECL && !DECL_NONADDRESSABLE_P (field))
908           record_alias_subset (superset, get_alias_set (TREE_TYPE (field)));
909       break;
910
911     case COMPLEX_TYPE:
912       record_alias_subset (superset, get_alias_set (TREE_TYPE (type)));
913       break;
914
915     /* VECTOR_TYPE and ARRAY_TYPE share the alias set with their
916        element type.  */
917
918     default:
919       break;
920     }
921 }
922
923 /* Allocate an alias set for use in storing and reading from the varargs
924    spill area.  */
925
926 static GTY(()) alias_set_type varargs_set = -1;
927
928 alias_set_type
929 get_varargs_alias_set (void)
930 {
931 #if 1
932   /* We now lower VA_ARG_EXPR, and there's currently no way to attach the
933      varargs alias set to an INDIRECT_REF (FIXME!), so we can't
934      consistently use the varargs alias set for loads from the varargs
935      area.  So don't use it anywhere.  */
936   return 0;
937 #else
938   if (varargs_set == -1)
939     varargs_set = new_alias_set ();
940
941   return varargs_set;
942 #endif
943 }
944
945 /* Likewise, but used for the fixed portions of the frame, e.g., register
946    save areas.  */
947
948 static GTY(()) alias_set_type frame_set = -1;
949
950 alias_set_type
951 get_frame_alias_set (void)
952 {
953   if (frame_set == -1)
954     frame_set = new_alias_set ();
955
956   return frame_set;
957 }
958
959 /* Inside SRC, the source of a SET, find a base address.  */
960
961 static rtx
962 find_base_value (rtx src)
963 {
964   unsigned int regno;
965
966 #if defined (FIND_BASE_TERM)
967   /* Try machine-dependent ways to find the base term.  */
968   src = FIND_BASE_TERM (src);
969 #endif
970
971   switch (GET_CODE (src))
972     {
973     case SYMBOL_REF:
974     case LABEL_REF:
975       return src;
976
977     case REG:
978       regno = REGNO (src);
979       /* At the start of a function, argument registers have known base
980          values which may be lost later.  Returning an ADDRESS
981          expression here allows optimization based on argument values
982          even when the argument registers are used for other purposes.  */
983       if (regno < FIRST_PSEUDO_REGISTER && copying_arguments)
984         return new_reg_base_value[regno];
985
986       /* If a pseudo has a known base value, return it.  Do not do this
987          for non-fixed hard regs since it can result in a circular
988          dependency chain for registers which have values at function entry.
989
990          The test above is not sufficient because the scheduler may move
991          a copy out of an arg reg past the NOTE_INSN_FUNCTION_BEGIN.  */
992       if ((regno >= FIRST_PSEUDO_REGISTER || fixed_regs[regno])
993           && regno < VEC_length (rtx, reg_base_value))
994         {
995           /* If we're inside init_alias_analysis, use new_reg_base_value
996              to reduce the number of relaxation iterations.  */
997           if (new_reg_base_value && new_reg_base_value[regno]
998               && DF_REG_DEF_COUNT (regno) == 1)
999             return new_reg_base_value[regno];
1000
1001           if (VEC_index (rtx, reg_base_value, regno))
1002             return VEC_index (rtx, reg_base_value, regno);
1003         }
1004
1005       return 0;
1006
1007     case MEM:
1008       /* Check for an argument passed in memory.  Only record in the
1009          copying-arguments block; it is too hard to track changes
1010          otherwise.  */
1011       if (copying_arguments
1012           && (XEXP (src, 0) == arg_pointer_rtx
1013               || (GET_CODE (XEXP (src, 0)) == PLUS
1014                   && XEXP (XEXP (src, 0), 0) == arg_pointer_rtx)))
1015         return gen_rtx_ADDRESS (VOIDmode, src);
1016       return 0;
1017
1018     case CONST:
1019       src = XEXP (src, 0);
1020       if (GET_CODE (src) != PLUS && GET_CODE (src) != MINUS)
1021         break;
1022
1023       /* ... fall through ...  */
1024
1025     case PLUS:
1026     case MINUS:
1027       {
1028         rtx temp, src_0 = XEXP (src, 0), src_1 = XEXP (src, 1);
1029
1030         /* If either operand is a REG that is a known pointer, then it
1031            is the base.  */
1032         if (REG_P (src_0) && REG_POINTER (src_0))
1033           return find_base_value (src_0);
1034         if (REG_P (src_1) && REG_POINTER (src_1))
1035           return find_base_value (src_1);
1036
1037         /* If either operand is a REG, then see if we already have
1038            a known value for it.  */
1039         if (REG_P (src_0))
1040           {
1041             temp = find_base_value (src_0);
1042             if (temp != 0)
1043               src_0 = temp;
1044           }
1045
1046         if (REG_P (src_1))
1047           {
1048             temp = find_base_value (src_1);
1049             if (temp!= 0)
1050               src_1 = temp;
1051           }
1052
1053         /* If either base is named object or a special address
1054            (like an argument or stack reference), then use it for the
1055            base term.  */
1056         if (src_0 != 0
1057             && (GET_CODE (src_0) == SYMBOL_REF
1058                 || GET_CODE (src_0) == LABEL_REF
1059                 || (GET_CODE (src_0) == ADDRESS
1060                     && GET_MODE (src_0) != VOIDmode)))
1061           return src_0;
1062
1063         if (src_1 != 0
1064             && (GET_CODE (src_1) == SYMBOL_REF
1065                 || GET_CODE (src_1) == LABEL_REF
1066                 || (GET_CODE (src_1) == ADDRESS
1067                     && GET_MODE (src_1) != VOIDmode)))
1068           return src_1;
1069
1070         /* Guess which operand is the base address:
1071            If either operand is a symbol, then it is the base.  If
1072            either operand is a CONST_INT, then the other is the base.  */
1073         if (CONST_INT_P (src_1) || CONSTANT_P (src_0))
1074           return find_base_value (src_0);
1075         else if (CONST_INT_P (src_0) || CONSTANT_P (src_1))
1076           return find_base_value (src_1);
1077
1078         return 0;
1079       }
1080
1081     case LO_SUM:
1082       /* The standard form is (lo_sum reg sym) so look only at the
1083          second operand.  */
1084       return find_base_value (XEXP (src, 1));
1085
1086     case AND:
1087       /* If the second operand is constant set the base
1088          address to the first operand.  */
1089       if (CONST_INT_P (XEXP (src, 1)) && INTVAL (XEXP (src, 1)) != 0)
1090         return find_base_value (XEXP (src, 0));
1091       return 0;
1092
1093     case TRUNCATE:
1094       /* As we do not know which address space the pointer is refering to, we can
1095          handle this only if the target does not support different pointer or
1096          address modes depending on the address space.  */
1097       if (!target_default_pointer_address_modes_p ())
1098         break;
1099       if (GET_MODE_SIZE (GET_MODE (src)) < GET_MODE_SIZE (Pmode))
1100         break;
1101       /* Fall through.  */
1102     case HIGH:
1103     case PRE_INC:
1104     case PRE_DEC:
1105     case POST_INC:
1106     case POST_DEC:
1107     case PRE_MODIFY:
1108     case POST_MODIFY:
1109       return find_base_value (XEXP (src, 0));
1110
1111     case ZERO_EXTEND:
1112     case SIGN_EXTEND:   /* used for NT/Alpha pointers */
1113       /* As we do not know which address space the pointer is refering to, we can
1114          handle this only if the target does not support different pointer or
1115          address modes depending on the address space.  */
1116       if (!target_default_pointer_address_modes_p ())
1117         break;
1118
1119       {
1120         rtx temp = find_base_value (XEXP (src, 0));
1121
1122         if (temp != 0 && CONSTANT_P (temp))
1123           temp = convert_memory_address (Pmode, temp);
1124
1125         return temp;
1126       }
1127
1128     default:
1129       break;
1130     }
1131
1132   return 0;
1133 }
1134
1135 /* Called from init_alias_analysis indirectly through note_stores.  */
1136
1137 /* While scanning insns to find base values, reg_seen[N] is nonzero if
1138    register N has been set in this function.  */
1139 static char *reg_seen;
1140
1141 /* Addresses which are known not to alias anything else are identified
1142    by a unique integer.  */
1143 static int unique_id;
1144
1145 static void
1146 record_set (rtx dest, const_rtx set, void *data ATTRIBUTE_UNUSED)
1147 {
1148   unsigned regno;
1149   rtx src;
1150   int n;
1151
1152   if (!REG_P (dest))
1153     return;
1154
1155   regno = REGNO (dest);
1156
1157   gcc_checking_assert (regno < VEC_length (rtx, reg_base_value));
1158
1159   /* If this spans multiple hard registers, then we must indicate that every
1160      register has an unusable value.  */
1161   if (regno < FIRST_PSEUDO_REGISTER)
1162     n = hard_regno_nregs[regno][GET_MODE (dest)];
1163   else
1164     n = 1;
1165   if (n != 1)
1166     {
1167       while (--n >= 0)
1168         {
1169           reg_seen[regno + n] = 1;
1170           new_reg_base_value[regno + n] = 0;
1171         }
1172       return;
1173     }
1174
1175   if (set)
1176     {
1177       /* A CLOBBER wipes out any old value but does not prevent a previously
1178          unset register from acquiring a base address (i.e. reg_seen is not
1179          set).  */
1180       if (GET_CODE (set) == CLOBBER)
1181         {
1182           new_reg_base_value[regno] = 0;
1183           return;
1184         }
1185       src = SET_SRC (set);
1186     }
1187   else
1188     {
1189       if (reg_seen[regno])
1190         {
1191           new_reg_base_value[regno] = 0;
1192           return;
1193         }
1194       reg_seen[regno] = 1;
1195       new_reg_base_value[regno] = gen_rtx_ADDRESS (Pmode,
1196                                                    GEN_INT (unique_id++));
1197       return;
1198     }
1199
1200   /* If this is not the first set of REGNO, see whether the new value
1201      is related to the old one.  There are two cases of interest:
1202
1203         (1) The register might be assigned an entirely new value
1204             that has the same base term as the original set.
1205
1206         (2) The set might be a simple self-modification that
1207             cannot change REGNO's base value.
1208
1209      If neither case holds, reject the original base value as invalid.
1210      Note that the following situation is not detected:
1211
1212          extern int x, y;  int *p = &x; p += (&y-&x);
1213
1214      ANSI C does not allow computing the difference of addresses
1215      of distinct top level objects.  */
1216   if (new_reg_base_value[regno] != 0
1217       && find_base_value (src) != new_reg_base_value[regno])
1218     switch (GET_CODE (src))
1219       {
1220       case LO_SUM:
1221       case MINUS:
1222         if (XEXP (src, 0) != dest && XEXP (src, 1) != dest)
1223           new_reg_base_value[regno] = 0;
1224         break;
1225       case PLUS:
1226         /* If the value we add in the PLUS is also a valid base value,
1227            this might be the actual base value, and the original value
1228            an index.  */
1229         {
1230           rtx other = NULL_RTX;
1231
1232           if (XEXP (src, 0) == dest)
1233             other = XEXP (src, 1);
1234           else if (XEXP (src, 1) == dest)
1235             other = XEXP (src, 0);
1236
1237           if (! other || find_base_value (other))
1238             new_reg_base_value[regno] = 0;
1239           break;
1240         }
1241       case AND:
1242         if (XEXP (src, 0) != dest || !CONST_INT_P (XEXP (src, 1)))
1243           new_reg_base_value[regno] = 0;
1244         break;
1245       default:
1246         new_reg_base_value[regno] = 0;
1247         break;
1248       }
1249   /* If this is the first set of a register, record the value.  */
1250   else if ((regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
1251            && ! reg_seen[regno] && new_reg_base_value[regno] == 0)
1252     new_reg_base_value[regno] = find_base_value (src);
1253
1254   reg_seen[regno] = 1;
1255 }
1256
1257 /* If a value is known for REGNO, return it.  */
1258
1259 rtx
1260 get_reg_known_value (unsigned int regno)
1261 {
1262   if (regno >= FIRST_PSEUDO_REGISTER)
1263     {
1264       regno -= FIRST_PSEUDO_REGISTER;
1265       if (regno < reg_known_value_size)
1266         return reg_known_value[regno];
1267     }
1268   return NULL;
1269 }
1270
1271 /* Set it.  */
1272
1273 static void
1274 set_reg_known_value (unsigned int regno, rtx val)
1275 {
1276   if (regno >= FIRST_PSEUDO_REGISTER)
1277     {
1278       regno -= FIRST_PSEUDO_REGISTER;
1279       if (regno < reg_known_value_size)
1280         reg_known_value[regno] = val;
1281     }
1282 }
1283
1284 /* Similarly for reg_known_equiv_p.  */
1285
1286 bool
1287 get_reg_known_equiv_p (unsigned int regno)
1288 {
1289   if (regno >= FIRST_PSEUDO_REGISTER)
1290     {
1291       regno -= FIRST_PSEUDO_REGISTER;
1292       if (regno < reg_known_value_size)
1293         return reg_known_equiv_p[regno];
1294     }
1295   return false;
1296 }
1297
1298 static void
1299 set_reg_known_equiv_p (unsigned int regno, bool val)
1300 {
1301   if (regno >= FIRST_PSEUDO_REGISTER)
1302     {
1303       regno -= FIRST_PSEUDO_REGISTER;
1304       if (regno < reg_known_value_size)
1305         reg_known_equiv_p[regno] = val;
1306     }
1307 }
1308
1309
1310 /* Returns a canonical version of X, from the point of view alias
1311    analysis.  (For example, if X is a MEM whose address is a register,
1312    and the register has a known value (say a SYMBOL_REF), then a MEM
1313    whose address is the SYMBOL_REF is returned.)  */
1314
1315 rtx
1316 canon_rtx (rtx x)
1317 {
1318   /* Recursively look for equivalences.  */
1319   if (REG_P (x) && REGNO (x) >= FIRST_PSEUDO_REGISTER)
1320     {
1321       rtx t = get_reg_known_value (REGNO (x));
1322       if (t == x)
1323         return x;
1324       if (t)
1325         return canon_rtx (t);
1326     }
1327
1328   if (GET_CODE (x) == PLUS)
1329     {
1330       rtx x0 = canon_rtx (XEXP (x, 0));
1331       rtx x1 = canon_rtx (XEXP (x, 1));
1332
1333       if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
1334         {
1335           if (CONST_INT_P (x0))
1336             return plus_constant (x1, INTVAL (x0));
1337           else if (CONST_INT_P (x1))
1338             return plus_constant (x0, INTVAL (x1));
1339           return gen_rtx_PLUS (GET_MODE (x), x0, x1);
1340         }
1341     }
1342
1343   /* This gives us much better alias analysis when called from
1344      the loop optimizer.   Note we want to leave the original
1345      MEM alone, but need to return the canonicalized MEM with
1346      all the flags with their original values.  */
1347   else if (MEM_P (x))
1348     x = replace_equiv_address_nv (x, canon_rtx (XEXP (x, 0)));
1349
1350   return x;
1351 }
1352
1353 /* Return 1 if X and Y are identical-looking rtx's.
1354    Expect that X and Y has been already canonicalized.
1355
1356    We use the data in reg_known_value above to see if two registers with
1357    different numbers are, in fact, equivalent.  */
1358
1359 static int
1360 rtx_equal_for_memref_p (const_rtx x, const_rtx y)
1361 {
1362   int i;
1363   int j;
1364   enum rtx_code code;
1365   const char *fmt;
1366
1367   if (x == 0 && y == 0)
1368     return 1;
1369   if (x == 0 || y == 0)
1370     return 0;
1371
1372   if (x == y)
1373     return 1;
1374
1375   code = GET_CODE (x);
1376   /* Rtx's of different codes cannot be equal.  */
1377   if (code != GET_CODE (y))
1378     return 0;
1379
1380   /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
1381      (REG:SI x) and (REG:HI x) are NOT equivalent.  */
1382
1383   if (GET_MODE (x) != GET_MODE (y))
1384     return 0;
1385
1386   /* Some RTL can be compared without a recursive examination.  */
1387   switch (code)
1388     {
1389     case REG:
1390       return REGNO (x) == REGNO (y);
1391
1392     case LABEL_REF:
1393       return XEXP (x, 0) == XEXP (y, 0);
1394
1395     case SYMBOL_REF:
1396       return XSTR (x, 0) == XSTR (y, 0);
1397
1398     case VALUE:
1399     case CONST_INT:
1400     case CONST_DOUBLE:
1401     case CONST_FIXED:
1402       /* There's no need to compare the contents of CONST_DOUBLEs or
1403          CONST_INTs because pointer equality is a good enough
1404          comparison for these nodes.  */
1405       return 0;
1406
1407     default:
1408       break;
1409     }
1410
1411   /* canon_rtx knows how to handle plus.  No need to canonicalize.  */
1412   if (code == PLUS)
1413     return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
1414              && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
1415             || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
1416                 && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
1417   /* For commutative operations, the RTX match if the operand match in any
1418      order.  Also handle the simple binary and unary cases without a loop.  */
1419   if (COMMUTATIVE_P (x))
1420     {
1421       rtx xop0 = canon_rtx (XEXP (x, 0));
1422       rtx yop0 = canon_rtx (XEXP (y, 0));
1423       rtx yop1 = canon_rtx (XEXP (y, 1));
1424
1425       return ((rtx_equal_for_memref_p (xop0, yop0)
1426                && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)), yop1))
1427               || (rtx_equal_for_memref_p (xop0, yop1)
1428                   && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)), yop0)));
1429     }
1430   else if (NON_COMMUTATIVE_P (x))
1431     {
1432       return (rtx_equal_for_memref_p (canon_rtx (XEXP (x, 0)),
1433                                       canon_rtx (XEXP (y, 0)))
1434               && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)),
1435                                          canon_rtx (XEXP (y, 1))));
1436     }
1437   else if (UNARY_P (x))
1438     return rtx_equal_for_memref_p (canon_rtx (XEXP (x, 0)),
1439                                    canon_rtx (XEXP (y, 0)));
1440
1441   /* Compare the elements.  If any pair of corresponding elements
1442      fail to match, return 0 for the whole things.
1443
1444      Limit cases to types which actually appear in addresses.  */
1445
1446   fmt = GET_RTX_FORMAT (code);
1447   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1448     {
1449       switch (fmt[i])
1450         {
1451         case 'i':
1452           if (XINT (x, i) != XINT (y, i))
1453             return 0;
1454           break;
1455
1456         case 'E':
1457           /* Two vectors must have the same length.  */
1458           if (XVECLEN (x, i) != XVECLEN (y, i))
1459             return 0;
1460
1461           /* And the corresponding elements must match.  */
1462           for (j = 0; j < XVECLEN (x, i); j++)
1463             if (rtx_equal_for_memref_p (canon_rtx (XVECEXP (x, i, j)),
1464                                         canon_rtx (XVECEXP (y, i, j))) == 0)
1465               return 0;
1466           break;
1467
1468         case 'e':
1469           if (rtx_equal_for_memref_p (canon_rtx (XEXP (x, i)),
1470                                       canon_rtx (XEXP (y, i))) == 0)
1471             return 0;
1472           break;
1473
1474           /* This can happen for asm operands.  */
1475         case 's':
1476           if (strcmp (XSTR (x, i), XSTR (y, i)))
1477             return 0;
1478           break;
1479
1480         /* This can happen for an asm which clobbers memory.  */
1481         case '0':
1482           break;
1483
1484           /* It is believed that rtx's at this level will never
1485              contain anything but integers and other rtx's,
1486              except for within LABEL_REFs and SYMBOL_REFs.  */
1487         default:
1488           gcc_unreachable ();
1489         }
1490     }
1491   return 1;
1492 }
1493
1494 rtx
1495 find_base_term (rtx x)
1496 {
1497   cselib_val *val;
1498   struct elt_loc_list *l;
1499
1500 #if defined (FIND_BASE_TERM)
1501   /* Try machine-dependent ways to find the base term.  */
1502   x = FIND_BASE_TERM (x);
1503 #endif
1504
1505   switch (GET_CODE (x))
1506     {
1507     case REG:
1508       return REG_BASE_VALUE (x);
1509
1510     case TRUNCATE:
1511       /* As we do not know which address space the pointer is refering to, we can
1512          handle this only if the target does not support different pointer or
1513          address modes depending on the address space.  */
1514       if (!target_default_pointer_address_modes_p ())
1515         return 0;
1516       if (GET_MODE_SIZE (GET_MODE (x)) < GET_MODE_SIZE (Pmode))
1517         return 0;
1518       /* Fall through.  */
1519     case HIGH:
1520     case PRE_INC:
1521     case PRE_DEC:
1522     case POST_INC:
1523     case POST_DEC:
1524     case PRE_MODIFY:
1525     case POST_MODIFY:
1526       return find_base_term (XEXP (x, 0));
1527
1528     case ZERO_EXTEND:
1529     case SIGN_EXTEND:   /* Used for Alpha/NT pointers */
1530       /* As we do not know which address space the pointer is refering to, we can
1531          handle this only if the target does not support different pointer or
1532          address modes depending on the address space.  */
1533       if (!target_default_pointer_address_modes_p ())
1534         return 0;
1535
1536       {
1537         rtx temp = find_base_term (XEXP (x, 0));
1538
1539         if (temp != 0 && CONSTANT_P (temp))
1540           temp = convert_memory_address (Pmode, temp);
1541
1542         return temp;
1543       }
1544
1545     case VALUE:
1546       val = CSELIB_VAL_PTR (x);
1547       if (!val)
1548         return 0;
1549       for (l = val->locs; l; l = l->next)
1550         if ((x = find_base_term (l->loc)) != 0)
1551           return x;
1552       return 0;
1553
1554     case LO_SUM:
1555       /* The standard form is (lo_sum reg sym) so look only at the
1556          second operand.  */
1557       return find_base_term (XEXP (x, 1));
1558
1559     case CONST:
1560       x = XEXP (x, 0);
1561       if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
1562         return 0;
1563       /* Fall through.  */
1564     case PLUS:
1565     case MINUS:
1566       {
1567         rtx tmp1 = XEXP (x, 0);
1568         rtx tmp2 = XEXP (x, 1);
1569
1570         /* This is a little bit tricky since we have to determine which of
1571            the two operands represents the real base address.  Otherwise this
1572            routine may return the index register instead of the base register.
1573
1574            That may cause us to believe no aliasing was possible, when in
1575            fact aliasing is possible.
1576
1577            We use a few simple tests to guess the base register.  Additional
1578            tests can certainly be added.  For example, if one of the operands
1579            is a shift or multiply, then it must be the index register and the
1580            other operand is the base register.  */
1581
1582         if (tmp1 == pic_offset_table_rtx && CONSTANT_P (tmp2))
1583           return find_base_term (tmp2);
1584
1585         /* If either operand is known to be a pointer, then use it
1586            to determine the base term.  */
1587         if (REG_P (tmp1) && REG_POINTER (tmp1))
1588           {
1589             rtx base = find_base_term (tmp1);
1590             if (base)
1591               return base;
1592           }
1593
1594         if (REG_P (tmp2) && REG_POINTER (tmp2))
1595           {
1596             rtx base = find_base_term (tmp2);
1597             if (base)
1598               return base;
1599           }
1600
1601         /* Neither operand was known to be a pointer.  Go ahead and find the
1602            base term for both operands.  */
1603         tmp1 = find_base_term (tmp1);
1604         tmp2 = find_base_term (tmp2);
1605
1606         /* If either base term is named object or a special address
1607            (like an argument or stack reference), then use it for the
1608            base term.  */
1609         if (tmp1 != 0
1610             && (GET_CODE (tmp1) == SYMBOL_REF
1611                 || GET_CODE (tmp1) == LABEL_REF
1612                 || (GET_CODE (tmp1) == ADDRESS
1613                     && GET_MODE (tmp1) != VOIDmode)))
1614           return tmp1;
1615
1616         if (tmp2 != 0
1617             && (GET_CODE (tmp2) == SYMBOL_REF
1618                 || GET_CODE (tmp2) == LABEL_REF
1619                 || (GET_CODE (tmp2) == ADDRESS
1620                     && GET_MODE (tmp2) != VOIDmode)))
1621           return tmp2;
1622
1623         /* We could not determine which of the two operands was the
1624            base register and which was the index.  So we can determine
1625            nothing from the base alias check.  */
1626         return 0;
1627       }
1628
1629     case AND:
1630       if (CONST_INT_P (XEXP (x, 1)) && INTVAL (XEXP (x, 1)) != 0)
1631         return find_base_term (XEXP (x, 0));
1632       return 0;
1633
1634     case SYMBOL_REF:
1635     case LABEL_REF:
1636       return x;
1637
1638     default:
1639       return 0;
1640     }
1641 }
1642
1643 /* Return 0 if the addresses X and Y are known to point to different
1644    objects, 1 if they might be pointers to the same object.  */
1645
1646 static int
1647 base_alias_check (rtx x, rtx y, enum machine_mode x_mode,
1648                   enum machine_mode y_mode)
1649 {
1650   rtx x_base = find_base_term (x);
1651   rtx y_base = find_base_term (y);
1652
1653   /* If the address itself has no known base see if a known equivalent
1654      value has one.  If either address still has no known base, nothing
1655      is known about aliasing.  */
1656   if (x_base == 0)
1657     {
1658       rtx x_c;
1659
1660       if (! flag_expensive_optimizations || (x_c = canon_rtx (x)) == x)
1661         return 1;
1662
1663       x_base = find_base_term (x_c);
1664       if (x_base == 0)
1665         return 1;
1666     }
1667
1668   if (y_base == 0)
1669     {
1670       rtx y_c;
1671       if (! flag_expensive_optimizations || (y_c = canon_rtx (y)) == y)
1672         return 1;
1673
1674       y_base = find_base_term (y_c);
1675       if (y_base == 0)
1676         return 1;
1677     }
1678
1679   /* If the base addresses are equal nothing is known about aliasing.  */
1680   if (rtx_equal_p (x_base, y_base))
1681     return 1;
1682
1683   /* The base addresses are different expressions.  If they are not accessed
1684      via AND, there is no conflict.  We can bring knowledge of object
1685      alignment into play here.  For example, on alpha, "char a, b;" can
1686      alias one another, though "char a; long b;" cannot.  AND addesses may
1687      implicitly alias surrounding objects; i.e. unaligned access in DImode
1688      via AND address can alias all surrounding object types except those
1689      with aligment 8 or higher.  */
1690   if (GET_CODE (x) == AND && GET_CODE (y) == AND)
1691     return 1;
1692   if (GET_CODE (x) == AND
1693       && (!CONST_INT_P (XEXP (x, 1))
1694           || (int) GET_MODE_UNIT_SIZE (y_mode) < -INTVAL (XEXP (x, 1))))
1695     return 1;
1696   if (GET_CODE (y) == AND
1697       && (!CONST_INT_P (XEXP (y, 1))
1698           || (int) GET_MODE_UNIT_SIZE (x_mode) < -INTVAL (XEXP (y, 1))))
1699     return 1;
1700
1701   /* Differing symbols not accessed via AND never alias.  */
1702   if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
1703     return 0;
1704
1705   /* If one address is a stack reference there can be no alias:
1706      stack references using different base registers do not alias,
1707      a stack reference can not alias a parameter, and a stack reference
1708      can not alias a global.  */
1709   if ((GET_CODE (x_base) == ADDRESS && GET_MODE (x_base) == Pmode)
1710       || (GET_CODE (y_base) == ADDRESS && GET_MODE (y_base) == Pmode))
1711     return 0;
1712
1713   return 1;
1714 }
1715
1716 /* Convert the address X into something we can use.  This is done by returning
1717    it unchanged unless it is a value; in the latter case we call cselib to get
1718    a more useful rtx.  */
1719
1720 rtx
1721 get_addr (rtx x)
1722 {
1723   cselib_val *v;
1724   struct elt_loc_list *l;
1725
1726   if (GET_CODE (x) != VALUE)
1727     return x;
1728   v = CSELIB_VAL_PTR (x);
1729   if (v)
1730     {
1731       for (l = v->locs; l; l = l->next)
1732         if (CONSTANT_P (l->loc))
1733           return l->loc;
1734       for (l = v->locs; l; l = l->next)
1735         if (!REG_P (l->loc) && !MEM_P (l->loc))
1736           return l->loc;
1737       if (v->locs)
1738         return v->locs->loc;
1739     }
1740   return x;
1741 }
1742
1743 /*  Return the address of the (N_REFS + 1)th memory reference to ADDR
1744     where SIZE is the size in bytes of the memory reference.  If ADDR
1745     is not modified by the memory reference then ADDR is returned.  */
1746
1747 static rtx
1748 addr_side_effect_eval (rtx addr, int size, int n_refs)
1749 {
1750   int offset = 0;
1751
1752   switch (GET_CODE (addr))
1753     {
1754     case PRE_INC:
1755       offset = (n_refs + 1) * size;
1756       break;
1757     case PRE_DEC:
1758       offset = -(n_refs + 1) * size;
1759       break;
1760     case POST_INC:
1761       offset = n_refs * size;
1762       break;
1763     case POST_DEC:
1764       offset = -n_refs * size;
1765       break;
1766
1767     default:
1768       return addr;
1769     }
1770
1771   if (offset)
1772     addr = gen_rtx_PLUS (GET_MODE (addr), XEXP (addr, 0),
1773                          GEN_INT (offset));
1774   else
1775     addr = XEXP (addr, 0);
1776   addr = canon_rtx (addr);
1777
1778   return addr;
1779 }
1780
1781 /* Return one if X and Y (memory addresses) reference the
1782    same location in memory or if the references overlap.
1783    Return zero if they do not overlap, else return
1784    minus one in which case they still might reference the same location.
1785
1786    C is an offset accumulator.  When
1787    C is nonzero, we are testing aliases between X and Y + C.
1788    XSIZE is the size in bytes of the X reference,
1789    similarly YSIZE is the size in bytes for Y.
1790    Expect that canon_rtx has been already called for X and Y.
1791
1792    If XSIZE or YSIZE is zero, we do not know the amount of memory being
1793    referenced (the reference was BLKmode), so make the most pessimistic
1794    assumptions.
1795
1796    If XSIZE or YSIZE is negative, we may access memory outside the object
1797    being referenced as a side effect.  This can happen when using AND to
1798    align memory references, as is done on the Alpha.
1799
1800    Nice to notice that varying addresses cannot conflict with fp if no
1801    local variables had their addresses taken, but that's too hard now.
1802
1803    ???  Contrary to the tree alias oracle this does not return
1804    one for X + non-constant and Y + non-constant when X and Y are equal.
1805    If that is fixed the TBAA hack for union type-punning can be removed.  */
1806
1807 static int
1808 memrefs_conflict_p (int xsize, rtx x, int ysize, rtx y, HOST_WIDE_INT c)
1809 {
1810   if (GET_CODE (x) == VALUE)
1811     {
1812       if (REG_P (y))
1813         {
1814           struct elt_loc_list *l = NULL;
1815           if (CSELIB_VAL_PTR (x))
1816             for (l = CSELIB_VAL_PTR (x)->locs; l; l = l->next)
1817               if (REG_P (l->loc) && rtx_equal_for_memref_p (l->loc, y))
1818                 break;
1819           if (l)
1820             x = y;
1821           else
1822             x = get_addr (x);
1823         }
1824       /* Don't call get_addr if y is the same VALUE.  */
1825       else if (x != y)
1826         x = get_addr (x);
1827     }
1828   if (GET_CODE (y) == VALUE)
1829     {
1830       if (REG_P (x))
1831         {
1832           struct elt_loc_list *l = NULL;
1833           if (CSELIB_VAL_PTR (y))
1834             for (l = CSELIB_VAL_PTR (y)->locs; l; l = l->next)
1835               if (REG_P (l->loc) && rtx_equal_for_memref_p (l->loc, x))
1836                 break;
1837           if (l)
1838             y = x;
1839           else
1840             y = get_addr (y);
1841         }
1842       /* Don't call get_addr if x is the same VALUE.  */
1843       else if (y != x)
1844         y = get_addr (y);
1845     }
1846   if (GET_CODE (x) == HIGH)
1847     x = XEXP (x, 0);
1848   else if (GET_CODE (x) == LO_SUM)
1849     x = XEXP (x, 1);
1850   else
1851     x = addr_side_effect_eval (x, xsize, 0);
1852   if (GET_CODE (y) == HIGH)
1853     y = XEXP (y, 0);
1854   else if (GET_CODE (y) == LO_SUM)
1855     y = XEXP (y, 1);
1856   else
1857     y = addr_side_effect_eval (y, ysize, 0);
1858
1859   if (rtx_equal_for_memref_p (x, y))
1860     {
1861       if (xsize <= 0 || ysize <= 0)
1862         return 1;
1863       if (c >= 0 && xsize > c)
1864         return 1;
1865       if (c < 0 && ysize+c > 0)
1866         return 1;
1867       return 0;
1868     }
1869
1870   /* This code used to check for conflicts involving stack references and
1871      globals but the base address alias code now handles these cases.  */
1872
1873   if (GET_CODE (x) == PLUS)
1874     {
1875       /* The fact that X is canonicalized means that this
1876          PLUS rtx is canonicalized.  */
1877       rtx x0 = XEXP (x, 0);
1878       rtx x1 = XEXP (x, 1);
1879
1880       if (GET_CODE (y) == PLUS)
1881         {
1882           /* The fact that Y is canonicalized means that this
1883              PLUS rtx is canonicalized.  */
1884           rtx y0 = XEXP (y, 0);
1885           rtx y1 = XEXP (y, 1);
1886
1887           if (rtx_equal_for_memref_p (x1, y1))
1888             return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1889           if (rtx_equal_for_memref_p (x0, y0))
1890             return memrefs_conflict_p (xsize, x1, ysize, y1, c);
1891           if (CONST_INT_P (x1))
1892             {
1893               if (CONST_INT_P (y1))
1894                 return memrefs_conflict_p (xsize, x0, ysize, y0,
1895                                            c - INTVAL (x1) + INTVAL (y1));
1896               else
1897                 return memrefs_conflict_p (xsize, x0, ysize, y,
1898                                            c - INTVAL (x1));
1899             }
1900           else if (CONST_INT_P (y1))
1901             return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1902
1903           return -1;
1904         }
1905       else if (CONST_INT_P (x1))
1906         return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
1907     }
1908   else if (GET_CODE (y) == PLUS)
1909     {
1910       /* The fact that Y is canonicalized means that this
1911          PLUS rtx is canonicalized.  */
1912       rtx y0 = XEXP (y, 0);
1913       rtx y1 = XEXP (y, 1);
1914
1915       if (CONST_INT_P (y1))
1916         return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1917       else
1918         return -1;
1919     }
1920
1921   if (GET_CODE (x) == GET_CODE (y))
1922     switch (GET_CODE (x))
1923       {
1924       case MULT:
1925         {
1926           /* Handle cases where we expect the second operands to be the
1927              same, and check only whether the first operand would conflict
1928              or not.  */
1929           rtx x0, y0;
1930           rtx x1 = canon_rtx (XEXP (x, 1));
1931           rtx y1 = canon_rtx (XEXP (y, 1));
1932           if (! rtx_equal_for_memref_p (x1, y1))
1933             return -1;
1934           x0 = canon_rtx (XEXP (x, 0));
1935           y0 = canon_rtx (XEXP (y, 0));
1936           if (rtx_equal_for_memref_p (x0, y0))
1937             return (xsize == 0 || ysize == 0
1938                     || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1939
1940           /* Can't properly adjust our sizes.  */
1941           if (!CONST_INT_P (x1))
1942             return -1;
1943           xsize /= INTVAL (x1);
1944           ysize /= INTVAL (x1);
1945           c /= INTVAL (x1);
1946           return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1947         }
1948
1949       default:
1950         break;
1951       }
1952
1953   /* Treat an access through an AND (e.g. a subword access on an Alpha)
1954      as an access with indeterminate size.  Assume that references
1955      besides AND are aligned, so if the size of the other reference is
1956      at least as large as the alignment, assume no other overlap.  */
1957   if (GET_CODE (x) == AND && CONST_INT_P (XEXP (x, 1)))
1958     {
1959       if (GET_CODE (y) == AND || ysize < -INTVAL (XEXP (x, 1)))
1960         xsize = -1;
1961       return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)), ysize, y, c);
1962     }
1963   if (GET_CODE (y) == AND && CONST_INT_P (XEXP (y, 1)))
1964     {
1965       /* ??? If we are indexing far enough into the array/structure, we
1966          may yet be able to determine that we can not overlap.  But we
1967          also need to that we are far enough from the end not to overlap
1968          a following reference, so we do nothing with that for now.  */
1969       if (GET_CODE (x) == AND || xsize < -INTVAL (XEXP (y, 1)))
1970         ysize = -1;
1971       return memrefs_conflict_p (xsize, x, ysize, canon_rtx (XEXP (y, 0)), c);
1972     }
1973
1974   if (CONSTANT_P (x))
1975     {
1976       if (CONST_INT_P (x) && CONST_INT_P (y))
1977         {
1978           c += (INTVAL (y) - INTVAL (x));
1979           return (xsize <= 0 || ysize <= 0
1980                   || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1981         }
1982
1983       if (GET_CODE (x) == CONST)
1984         {
1985           if (GET_CODE (y) == CONST)
1986             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1987                                        ysize, canon_rtx (XEXP (y, 0)), c);
1988           else
1989             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1990                                        ysize, y, c);
1991         }
1992       if (GET_CODE (y) == CONST)
1993         return memrefs_conflict_p (xsize, x, ysize,
1994                                    canon_rtx (XEXP (y, 0)), c);
1995
1996       if (CONSTANT_P (y))
1997         return (xsize <= 0 || ysize <= 0
1998                 || (rtx_equal_for_memref_p (x, y)
1999                     && ((c >= 0 && xsize > c) || (c < 0 && ysize+c > 0))));
2000
2001       return -1;
2002     }
2003
2004   return -1;
2005 }
2006
2007 /* Functions to compute memory dependencies.
2008
2009    Since we process the insns in execution order, we can build tables
2010    to keep track of what registers are fixed (and not aliased), what registers
2011    are varying in known ways, and what registers are varying in unknown
2012    ways.
2013
2014    If both memory references are volatile, then there must always be a
2015    dependence between the two references, since their order can not be
2016    changed.  A volatile and non-volatile reference can be interchanged
2017    though.
2018
2019    A MEM_IN_STRUCT reference at a non-AND varying address can never
2020    conflict with a non-MEM_IN_STRUCT reference at a fixed address.  We
2021    also must allow AND addresses, because they may generate accesses
2022    outside the object being referenced.  This is used to generate
2023    aligned addresses from unaligned addresses, for instance, the alpha
2024    storeqi_unaligned pattern.  */
2025
2026 /* Read dependence: X is read after read in MEM takes place.  There can
2027    only be a dependence here if both reads are volatile.  */
2028
2029 int
2030 read_dependence (const_rtx mem, const_rtx x)
2031 {
2032   return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
2033 }
2034
2035 /* Returns MEM1 if and only if MEM1 is a scalar at a fixed address and
2036    MEM2 is a reference to a structure at a varying address, or returns
2037    MEM2 if vice versa.  Otherwise, returns NULL_RTX.  If a non-NULL
2038    value is returned MEM1 and MEM2 can never alias.  VARIES_P is used
2039    to decide whether or not an address may vary; it should return
2040    nonzero whenever variation is possible.
2041    MEM1_ADDR and MEM2_ADDR are the addresses of MEM1 and MEM2.  */
2042
2043 static const_rtx
2044 fixed_scalar_and_varying_struct_p (const_rtx mem1, const_rtx mem2, rtx mem1_addr,
2045                                    rtx mem2_addr,
2046                                    bool (*varies_p) (const_rtx, bool))
2047 {
2048   if (! flag_strict_aliasing)
2049     return NULL_RTX;
2050
2051   if (MEM_ALIAS_SET (mem2)
2052       && MEM_SCALAR_P (mem1) && MEM_IN_STRUCT_P (mem2)
2053       && !varies_p (mem1_addr, 1) && varies_p (mem2_addr, 1))
2054     /* MEM1 is a scalar at a fixed address; MEM2 is a struct at a
2055        varying address.  */
2056     return mem1;
2057
2058   if (MEM_ALIAS_SET (mem1)
2059       && MEM_IN_STRUCT_P (mem1) && MEM_SCALAR_P (mem2)
2060       && varies_p (mem1_addr, 1) && !varies_p (mem2_addr, 1))
2061     /* MEM2 is a scalar at a fixed address; MEM1 is a struct at a
2062        varying address.  */
2063     return mem2;
2064
2065   return NULL_RTX;
2066 }
2067
2068 /* Returns nonzero if something about the mode or address format MEM1
2069    indicates that it might well alias *anything*.  */
2070
2071 static int
2072 aliases_everything_p (const_rtx mem)
2073 {
2074   if (GET_CODE (XEXP (mem, 0)) == AND)
2075     /* If the address is an AND, it's very hard to know at what it is
2076        actually pointing.  */
2077     return 1;
2078
2079   return 0;
2080 }
2081
2082 /* Return true if we can determine that the fields referenced cannot
2083    overlap for any pair of objects.  */
2084
2085 static bool
2086 nonoverlapping_component_refs_p (const_tree x, const_tree y)
2087 {
2088   const_tree fieldx, fieldy, typex, typey, orig_y;
2089
2090   if (!flag_strict_aliasing)
2091     return false;
2092
2093   do
2094     {
2095       /* The comparison has to be done at a common type, since we don't
2096          know how the inheritance hierarchy works.  */
2097       orig_y = y;
2098       do
2099         {
2100           fieldx = TREE_OPERAND (x, 1);
2101           typex = TYPE_MAIN_VARIANT (DECL_FIELD_CONTEXT (fieldx));
2102
2103           y = orig_y;
2104           do
2105             {
2106               fieldy = TREE_OPERAND (y, 1);
2107               typey = TYPE_MAIN_VARIANT (DECL_FIELD_CONTEXT (fieldy));
2108
2109               if (typex == typey)
2110                 goto found;
2111
2112               y = TREE_OPERAND (y, 0);
2113             }
2114           while (y && TREE_CODE (y) == COMPONENT_REF);
2115
2116           x = TREE_OPERAND (x, 0);
2117         }
2118       while (x && TREE_CODE (x) == COMPONENT_REF);
2119       /* Never found a common type.  */
2120       return false;
2121
2122     found:
2123       /* If we're left with accessing different fields of a structure,
2124          then no overlap.  */
2125       if (TREE_CODE (typex) == RECORD_TYPE
2126           && fieldx != fieldy)
2127         return true;
2128
2129       /* The comparison on the current field failed.  If we're accessing
2130          a very nested structure, look at the next outer level.  */
2131       x = TREE_OPERAND (x, 0);
2132       y = TREE_OPERAND (y, 0);
2133     }
2134   while (x && y
2135          && TREE_CODE (x) == COMPONENT_REF
2136          && TREE_CODE (y) == COMPONENT_REF);
2137
2138   return false;
2139 }
2140
2141 /* Look at the bottom of the COMPONENT_REF list for a DECL, and return it.  */
2142
2143 static tree
2144 decl_for_component_ref (tree x)
2145 {
2146   do
2147     {
2148       x = TREE_OPERAND (x, 0);
2149     }
2150   while (x && TREE_CODE (x) == COMPONENT_REF);
2151
2152   return x && DECL_P (x) ? x : NULL_TREE;
2153 }
2154
2155 /* Walk up the COMPONENT_REF list and adjust OFFSET to compensate for the
2156    offset of the field reference.  */
2157
2158 static rtx
2159 adjust_offset_for_component_ref (tree x, rtx offset)
2160 {
2161   HOST_WIDE_INT ioffset;
2162
2163   if (! offset)
2164     return NULL_RTX;
2165
2166   ioffset = INTVAL (offset);
2167   do
2168     {
2169       tree offset = component_ref_field_offset (x);
2170       tree field = TREE_OPERAND (x, 1);
2171
2172       if (! host_integerp (offset, 1))
2173         return NULL_RTX;
2174       ioffset += (tree_low_cst (offset, 1)
2175                   + (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
2176                      / BITS_PER_UNIT));
2177
2178       x = TREE_OPERAND (x, 0);
2179     }
2180   while (x && TREE_CODE (x) == COMPONENT_REF);
2181
2182   return GEN_INT (ioffset);
2183 }
2184
2185 /* Return nonzero if we can determine the exprs corresponding to memrefs
2186    X and Y and they do not overlap.  */
2187
2188 int
2189 nonoverlapping_memrefs_p (const_rtx x, const_rtx y)
2190 {
2191   tree exprx = MEM_EXPR (x), expry = MEM_EXPR (y);
2192   rtx rtlx, rtly;
2193   rtx basex, basey;
2194   rtx moffsetx, moffsety;
2195   HOST_WIDE_INT offsetx = 0, offsety = 0, sizex, sizey, tem;
2196
2197   /* Unless both have exprs, we can't tell anything.  */
2198   if (exprx == 0 || expry == 0)
2199     return 0;
2200
2201   /* For spill-slot accesses make sure we have valid offsets.  */
2202   if ((exprx == get_spill_slot_decl (false)
2203        && ! MEM_OFFSET (x))
2204       || (expry == get_spill_slot_decl (false)
2205           && ! MEM_OFFSET (y)))
2206     return 0;
2207
2208   /* If both are field references, we may be able to determine something.  */
2209   if (TREE_CODE (exprx) == COMPONENT_REF
2210       && TREE_CODE (expry) == COMPONENT_REF
2211       && nonoverlapping_component_refs_p (exprx, expry))
2212     return 1;
2213
2214
2215   /* If the field reference test failed, look at the DECLs involved.  */
2216   moffsetx = MEM_OFFSET (x);
2217   if (TREE_CODE (exprx) == COMPONENT_REF)
2218     {
2219       tree t = decl_for_component_ref (exprx);
2220       if (! t)
2221         return 0;
2222       moffsetx = adjust_offset_for_component_ref (exprx, moffsetx);
2223       exprx = t;
2224     }
2225
2226   moffsety = MEM_OFFSET (y);
2227   if (TREE_CODE (expry) == COMPONENT_REF)
2228     {
2229       tree t = decl_for_component_ref (expry);
2230       if (! t)
2231         return 0;
2232       moffsety = adjust_offset_for_component_ref (expry, moffsety);
2233       expry = t;
2234     }
2235
2236   if (! DECL_P (exprx) || ! DECL_P (expry))
2237     return 0;
2238
2239   /* With invalid code we can end up storing into the constant pool.
2240      Bail out to avoid ICEing when creating RTL for this.
2241      See gfortran.dg/lto/20091028-2_0.f90.  */
2242   if (TREE_CODE (exprx) == CONST_DECL
2243       || TREE_CODE (expry) == CONST_DECL)
2244     return 1;
2245
2246   rtlx = DECL_RTL (exprx);
2247   rtly = DECL_RTL (expry);
2248
2249   /* If either RTL is not a MEM, it must be a REG or CONCAT, meaning they
2250      can't overlap unless they are the same because we never reuse that part
2251      of the stack frame used for locals for spilled pseudos.  */
2252   if ((!MEM_P (rtlx) || !MEM_P (rtly))
2253       && ! rtx_equal_p (rtlx, rtly))
2254     return 1;
2255
2256   /* If we have MEMs refering to different address spaces (which can
2257      potentially overlap), we cannot easily tell from the addresses
2258      whether the references overlap.  */
2259   if (MEM_P (rtlx) && MEM_P (rtly)
2260       && MEM_ADDR_SPACE (rtlx) != MEM_ADDR_SPACE (rtly))
2261     return 0;
2262
2263   /* Get the base and offsets of both decls.  If either is a register, we
2264      know both are and are the same, so use that as the base.  The only
2265      we can avoid overlap is if we can deduce that they are nonoverlapping
2266      pieces of that decl, which is very rare.  */
2267   basex = MEM_P (rtlx) ? XEXP (rtlx, 0) : rtlx;
2268   if (GET_CODE (basex) == PLUS && CONST_INT_P (XEXP (basex, 1)))
2269     offsetx = INTVAL (XEXP (basex, 1)), basex = XEXP (basex, 0);
2270
2271   basey = MEM_P (rtly) ? XEXP (rtly, 0) : rtly;
2272   if (GET_CODE (basey) == PLUS && CONST_INT_P (XEXP (basey, 1)))
2273     offsety = INTVAL (XEXP (basey, 1)), basey = XEXP (basey, 0);
2274
2275   /* If the bases are different, we know they do not overlap if both
2276      are constants or if one is a constant and the other a pointer into the
2277      stack frame.  Otherwise a different base means we can't tell if they
2278      overlap or not.  */
2279   if (! rtx_equal_p (basex, basey))
2280     return ((CONSTANT_P (basex) && CONSTANT_P (basey))
2281             || (CONSTANT_P (basex) && REG_P (basey)
2282                 && REGNO_PTR_FRAME_P (REGNO (basey)))
2283             || (CONSTANT_P (basey) && REG_P (basex)
2284                 && REGNO_PTR_FRAME_P (REGNO (basex))));
2285
2286   sizex = (!MEM_P (rtlx) ? (int) GET_MODE_SIZE (GET_MODE (rtlx))
2287            : MEM_SIZE (rtlx) ? INTVAL (MEM_SIZE (rtlx))
2288            : -1);
2289   sizey = (!MEM_P (rtly) ? (int) GET_MODE_SIZE (GET_MODE (rtly))
2290            : MEM_SIZE (rtly) ? INTVAL (MEM_SIZE (rtly)) :
2291            -1);
2292
2293   /* If we have an offset for either memref, it can update the values computed
2294      above.  */
2295   if (moffsetx)
2296     offsetx += INTVAL (moffsetx), sizex -= INTVAL (moffsetx);
2297   if (moffsety)
2298     offsety += INTVAL (moffsety), sizey -= INTVAL (moffsety);
2299
2300   /* If a memref has both a size and an offset, we can use the smaller size.
2301      We can't do this if the offset isn't known because we must view this
2302      memref as being anywhere inside the DECL's MEM.  */
2303   if (MEM_SIZE (x) && moffsetx)
2304     sizex = INTVAL (MEM_SIZE (x));
2305   if (MEM_SIZE (y) && moffsety)
2306     sizey = INTVAL (MEM_SIZE (y));
2307
2308   /* Put the values of the memref with the lower offset in X's values.  */
2309   if (offsetx > offsety)
2310     {
2311       tem = offsetx, offsetx = offsety, offsety = tem;
2312       tem = sizex, sizex = sizey, sizey = tem;
2313     }
2314
2315   /* If we don't know the size of the lower-offset value, we can't tell
2316      if they conflict.  Otherwise, we do the test.  */
2317   return sizex >= 0 && offsety >= offsetx + sizex;
2318 }
2319
2320 /* True dependence: X is read after store in MEM takes place.  */
2321
2322 int
2323 true_dependence (const_rtx mem, enum machine_mode mem_mode, const_rtx x,
2324                  bool (*varies) (const_rtx, bool))
2325 {
2326   rtx x_addr, mem_addr;
2327   rtx base;
2328   int ret;
2329
2330   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2331     return 1;
2332
2333   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2334      This is used in epilogue deallocation functions, and in cselib.  */
2335   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
2336     return 1;
2337   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2338     return 1;
2339   if (MEM_ALIAS_SET (x) == ALIAS_SET_MEMORY_BARRIER
2340       || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
2341     return 1;
2342
2343   /* Read-only memory is by definition never modified, and therefore can't
2344      conflict with anything.  We don't expect to find read-only set on MEM,
2345      but stupid user tricks can produce them, so don't die.  */
2346   if (MEM_READONLY_P (x))
2347     return 0;
2348
2349   /* If we have MEMs refering to different address spaces (which can
2350      potentially overlap), we cannot easily tell from the addresses
2351      whether the references overlap.  */
2352   if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
2353     return 1;
2354
2355   if (mem_mode == VOIDmode)
2356     mem_mode = GET_MODE (mem);
2357
2358   x_addr = XEXP (x, 0);
2359   mem_addr = XEXP (mem, 0);
2360   if (!((GET_CODE (x_addr) == VALUE
2361          && GET_CODE (mem_addr) != VALUE
2362          && reg_mentioned_p (x_addr, mem_addr))
2363         || (GET_CODE (x_addr) != VALUE
2364             && GET_CODE (mem_addr) == VALUE
2365             && reg_mentioned_p (mem_addr, x_addr))))
2366     {
2367       x_addr = get_addr (x_addr);
2368       mem_addr = get_addr (mem_addr);
2369     }
2370
2371   base = find_base_term (x_addr);
2372   if (base && (GET_CODE (base) == LABEL_REF
2373                || (GET_CODE (base) == SYMBOL_REF
2374                    && CONSTANT_POOL_ADDRESS_P (base))))
2375     return 0;
2376
2377   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
2378     return 0;
2379
2380   x_addr = canon_rtx (x_addr);
2381   mem_addr = canon_rtx (mem_addr);
2382
2383   if ((ret = memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
2384                                  SIZE_FOR_MODE (x), x_addr, 0)) != -1)
2385     return ret;
2386
2387   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2388     return 0;
2389
2390   if (nonoverlapping_memrefs_p (mem, x))
2391     return 0;
2392
2393   if (aliases_everything_p (x))
2394     return 1;
2395
2396   /* We cannot use aliases_everything_p to test MEM, since we must look
2397      at MEM_MODE, rather than GET_MODE (MEM).  */
2398   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
2399     return 1;
2400
2401   /* In true_dependence we also allow BLKmode to alias anything.  Why
2402      don't we do this in anti_dependence and output_dependence?  */
2403   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
2404     return 1;
2405
2406   if (fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr, varies))
2407     return 0;
2408
2409   return rtx_refs_may_alias_p (x, mem, true);
2410 }
2411
2412 /* Canonical true dependence: X is read after store in MEM takes place.
2413    Variant of true_dependence which assumes MEM has already been
2414    canonicalized (hence we no longer do that here).
2415    The mem_addr argument has been added, since true_dependence computed
2416    this value prior to canonicalizing.
2417    If x_addr is non-NULL, it is used in preference of XEXP (x, 0).  */
2418
2419 int
2420 canon_true_dependence (const_rtx mem, enum machine_mode mem_mode, rtx mem_addr,
2421                        const_rtx x, rtx x_addr, bool (*varies) (const_rtx, bool))
2422 {
2423   int ret;
2424
2425   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2426     return 1;
2427
2428   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2429      This is used in epilogue deallocation functions.  */
2430   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
2431     return 1;
2432   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2433     return 1;
2434   if (MEM_ALIAS_SET (x) == ALIAS_SET_MEMORY_BARRIER
2435       || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
2436     return 1;
2437
2438   /* Read-only memory is by definition never modified, and therefore can't
2439      conflict with anything.  We don't expect to find read-only set on MEM,
2440      but stupid user tricks can produce them, so don't die.  */
2441   if (MEM_READONLY_P (x))
2442     return 0;
2443
2444   /* If we have MEMs refering to different address spaces (which can
2445      potentially overlap), we cannot easily tell from the addresses
2446      whether the references overlap.  */
2447   if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
2448     return 1;
2449
2450   if (! x_addr)
2451     {
2452       x_addr = XEXP (x, 0);
2453       if (!((GET_CODE (x_addr) == VALUE
2454              && GET_CODE (mem_addr) != VALUE
2455              && reg_mentioned_p (x_addr, mem_addr))
2456             || (GET_CODE (x_addr) != VALUE
2457                 && GET_CODE (mem_addr) == VALUE
2458                 && reg_mentioned_p (mem_addr, x_addr))))
2459         x_addr = get_addr (x_addr);
2460     }
2461
2462   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
2463     return 0;
2464
2465   x_addr = canon_rtx (x_addr);
2466   if ((ret = memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
2467                                  SIZE_FOR_MODE (x), x_addr, 0)) != -1)
2468     return ret;
2469
2470   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2471     return 0;
2472
2473   if (nonoverlapping_memrefs_p (x, mem))
2474     return 0;
2475
2476   if (aliases_everything_p (x))
2477     return 1;
2478
2479   /* We cannot use aliases_everything_p to test MEM, since we must look
2480      at MEM_MODE, rather than GET_MODE (MEM).  */
2481   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
2482     return 1;
2483
2484   /* In true_dependence we also allow BLKmode to alias anything.  Why
2485      don't we do this in anti_dependence and output_dependence?  */
2486   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
2487     return 1;
2488
2489   if (fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr, varies))
2490     return 0;
2491
2492   return rtx_refs_may_alias_p (x, mem, true);
2493 }
2494
2495 /* Returns nonzero if a write to X might alias a previous read from
2496    (or, if WRITEP is nonzero, a write to) MEM.  */
2497
2498 static int
2499 write_dependence_p (const_rtx mem, const_rtx x, int writep)
2500 {
2501   rtx x_addr, mem_addr;
2502   const_rtx fixed_scalar;
2503   rtx base;
2504   int ret;
2505
2506   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2507     return 1;
2508
2509   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2510      This is used in epilogue deallocation functions.  */
2511   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
2512     return 1;
2513   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2514     return 1;
2515   if (MEM_ALIAS_SET (x) == ALIAS_SET_MEMORY_BARRIER
2516       || MEM_ALIAS_SET (mem) == ALIAS_SET_MEMORY_BARRIER)
2517     return 1;
2518
2519   /* A read from read-only memory can't conflict with read-write memory.  */
2520   if (!writep && MEM_READONLY_P (mem))
2521     return 0;
2522
2523   /* If we have MEMs refering to different address spaces (which can
2524      potentially overlap), we cannot easily tell from the addresses
2525      whether the references overlap.  */
2526   if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
2527     return 1;
2528
2529   x_addr = XEXP (x, 0);
2530   mem_addr = XEXP (mem, 0);
2531   if (!((GET_CODE (x_addr) == VALUE
2532          && GET_CODE (mem_addr) != VALUE
2533          && reg_mentioned_p (x_addr, mem_addr))
2534         || (GET_CODE (x_addr) != VALUE
2535             && GET_CODE (mem_addr) == VALUE
2536             && reg_mentioned_p (mem_addr, x_addr))))
2537     {
2538       x_addr = get_addr (x_addr);
2539       mem_addr = get_addr (mem_addr);
2540     }
2541
2542   if (! writep)
2543     {
2544       base = find_base_term (mem_addr);
2545       if (base && (GET_CODE (base) == LABEL_REF
2546                    || (GET_CODE (base) == SYMBOL_REF
2547                        && CONSTANT_POOL_ADDRESS_P (base))))
2548         return 0;
2549     }
2550
2551   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x),
2552                           GET_MODE (mem)))
2553     return 0;
2554
2555   x_addr = canon_rtx (x_addr);
2556   mem_addr = canon_rtx (mem_addr);
2557
2558   if ((ret = memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
2559                                  SIZE_FOR_MODE (x), x_addr, 0)) != -1)
2560     return ret;
2561
2562   if (nonoverlapping_memrefs_p (x, mem))
2563     return 0;
2564
2565   fixed_scalar
2566     = fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2567                                          rtx_addr_varies_p);
2568
2569   if ((fixed_scalar == mem && !aliases_everything_p (x))
2570       || (fixed_scalar == x && !aliases_everything_p (mem)))
2571     return 0;
2572
2573   return rtx_refs_may_alias_p (x, mem, false);
2574 }
2575
2576 /* Anti dependence: X is written after read in MEM takes place.  */
2577
2578 int
2579 anti_dependence (const_rtx mem, const_rtx x)
2580 {
2581   return write_dependence_p (mem, x, /*writep=*/0);
2582 }
2583
2584 /* Output dependence: X is written after store in MEM takes place.  */
2585
2586 int
2587 output_dependence (const_rtx mem, const_rtx x)
2588 {
2589   return write_dependence_p (mem, x, /*writep=*/1);
2590 }
2591 \f
2592
2593 void
2594 init_alias_target (void)
2595 {
2596   int i;
2597
2598   memset (static_reg_base_value, 0, sizeof static_reg_base_value);
2599
2600   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2601     /* Check whether this register can hold an incoming pointer
2602        argument.  FUNCTION_ARG_REGNO_P tests outgoing register
2603        numbers, so translate if necessary due to register windows.  */
2604     if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i))
2605         && HARD_REGNO_MODE_OK (i, Pmode))
2606       static_reg_base_value[i]
2607         = gen_rtx_ADDRESS (VOIDmode, gen_rtx_REG (Pmode, i));
2608
2609   static_reg_base_value[STACK_POINTER_REGNUM]
2610     = gen_rtx_ADDRESS (Pmode, stack_pointer_rtx);
2611   static_reg_base_value[ARG_POINTER_REGNUM]
2612     = gen_rtx_ADDRESS (Pmode, arg_pointer_rtx);
2613   static_reg_base_value[FRAME_POINTER_REGNUM]
2614     = gen_rtx_ADDRESS (Pmode, frame_pointer_rtx);
2615 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2616   static_reg_base_value[HARD_FRAME_POINTER_REGNUM]
2617     = gen_rtx_ADDRESS (Pmode, hard_frame_pointer_rtx);
2618 #endif
2619 }
2620
2621 /* Set MEMORY_MODIFIED when X modifies DATA (that is assumed
2622    to be memory reference.  */
2623 static bool memory_modified;
2624 static void
2625 memory_modified_1 (rtx x, const_rtx pat ATTRIBUTE_UNUSED, void *data)
2626 {
2627   if (MEM_P (x))
2628     {
2629       if (anti_dependence (x, (const_rtx)data) || output_dependence (x, (const_rtx)data))
2630         memory_modified = true;
2631     }
2632 }
2633
2634
2635 /* Return true when INSN possibly modify memory contents of MEM
2636    (i.e. address can be modified).  */
2637 bool
2638 memory_modified_in_insn_p (const_rtx mem, const_rtx insn)
2639 {
2640   if (!INSN_P (insn))
2641     return false;
2642   memory_modified = false;
2643   note_stores (PATTERN (insn), memory_modified_1, CONST_CAST_RTX(mem));
2644   return memory_modified;
2645 }
2646
2647 /* Initialize the aliasing machinery.  Initialize the REG_KNOWN_VALUE
2648    array.  */
2649
2650 void
2651 init_alias_analysis (void)
2652 {
2653   unsigned int maxreg = max_reg_num ();
2654   int changed, pass;
2655   int i;
2656   unsigned int ui;
2657   rtx insn;
2658
2659   timevar_push (TV_ALIAS_ANALYSIS);
2660
2661   reg_known_value_size = maxreg - FIRST_PSEUDO_REGISTER;
2662   reg_known_value = ggc_alloc_cleared_vec_rtx (reg_known_value_size);
2663   reg_known_equiv_p = XCNEWVEC (bool, reg_known_value_size);
2664
2665   /* If we have memory allocated from the previous run, use it.  */
2666   if (old_reg_base_value)
2667     reg_base_value = old_reg_base_value;
2668
2669   if (reg_base_value)
2670     VEC_truncate (rtx, reg_base_value, 0);
2671
2672   VEC_safe_grow_cleared (rtx, gc, reg_base_value, maxreg);
2673
2674   new_reg_base_value = XNEWVEC (rtx, maxreg);
2675   reg_seen = XNEWVEC (char, maxreg);
2676
2677   /* The basic idea is that each pass through this loop will use the
2678      "constant" information from the previous pass to propagate alias
2679      information through another level of assignments.
2680
2681      This could get expensive if the assignment chains are long.  Maybe
2682      we should throttle the number of iterations, possibly based on
2683      the optimization level or flag_expensive_optimizations.
2684
2685      We could propagate more information in the first pass by making use
2686      of DF_REG_DEF_COUNT to determine immediately that the alias information
2687      for a pseudo is "constant".
2688
2689      A program with an uninitialized variable can cause an infinite loop
2690      here.  Instead of doing a full dataflow analysis to detect such problems
2691      we just cap the number of iterations for the loop.
2692
2693      The state of the arrays for the set chain in question does not matter
2694      since the program has undefined behavior.  */
2695
2696   pass = 0;
2697   do
2698     {
2699       /* Assume nothing will change this iteration of the loop.  */
2700       changed = 0;
2701
2702       /* We want to assign the same IDs each iteration of this loop, so
2703          start counting from zero each iteration of the loop.  */
2704       unique_id = 0;
2705
2706       /* We're at the start of the function each iteration through the
2707          loop, so we're copying arguments.  */
2708       copying_arguments = true;
2709
2710       /* Wipe the potential alias information clean for this pass.  */
2711       memset (new_reg_base_value, 0, maxreg * sizeof (rtx));
2712
2713       /* Wipe the reg_seen array clean.  */
2714       memset (reg_seen, 0, maxreg);
2715
2716       /* Mark all hard registers which may contain an address.
2717          The stack, frame and argument pointers may contain an address.
2718          An argument register which can hold a Pmode value may contain
2719          an address even if it is not in BASE_REGS.
2720
2721          The address expression is VOIDmode for an argument and
2722          Pmode for other registers.  */
2723
2724       memcpy (new_reg_base_value, static_reg_base_value,
2725               FIRST_PSEUDO_REGISTER * sizeof (rtx));
2726
2727       /* Walk the insns adding values to the new_reg_base_value array.  */
2728       for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2729         {
2730           if (INSN_P (insn))
2731             {
2732               rtx note, set;
2733
2734 #if defined (HAVE_prologue) || defined (HAVE_epilogue)
2735               /* The prologue/epilogue insns are not threaded onto the
2736                  insn chain until after reload has completed.  Thus,
2737                  there is no sense wasting time checking if INSN is in
2738                  the prologue/epilogue until after reload has completed.  */
2739               if (reload_completed
2740                   && prologue_epilogue_contains (insn))
2741                 continue;
2742 #endif
2743
2744               /* If this insn has a noalias note, process it,  Otherwise,
2745                  scan for sets.  A simple set will have no side effects
2746                  which could change the base value of any other register.  */
2747
2748               if (GET_CODE (PATTERN (insn)) == SET
2749                   && REG_NOTES (insn) != 0
2750                   && find_reg_note (insn, REG_NOALIAS, NULL_RTX))
2751                 record_set (SET_DEST (PATTERN (insn)), NULL_RTX, NULL);
2752               else
2753                 note_stores (PATTERN (insn), record_set, NULL);
2754
2755               set = single_set (insn);
2756
2757               if (set != 0
2758                   && REG_P (SET_DEST (set))
2759                   && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER)
2760                 {
2761                   unsigned int regno = REGNO (SET_DEST (set));
2762                   rtx src = SET_SRC (set);
2763                   rtx t;
2764
2765                   note = find_reg_equal_equiv_note (insn);
2766                   if (note && REG_NOTE_KIND (note) == REG_EQUAL
2767                       && DF_REG_DEF_COUNT (regno) != 1)
2768                     note = NULL_RTX;
2769
2770                   if (note != NULL_RTX
2771                       && GET_CODE (XEXP (note, 0)) != EXPR_LIST
2772                       && ! rtx_varies_p (XEXP (note, 0), 1)
2773                       && ! reg_overlap_mentioned_p (SET_DEST (set),
2774                                                     XEXP (note, 0)))
2775                     {
2776                       set_reg_known_value (regno, XEXP (note, 0));
2777                       set_reg_known_equiv_p (regno,
2778                         REG_NOTE_KIND (note) == REG_EQUIV);
2779                     }
2780                   else if (DF_REG_DEF_COUNT (regno) == 1
2781                            && GET_CODE (src) == PLUS
2782                            && REG_P (XEXP (src, 0))
2783                            && (t = get_reg_known_value (REGNO (XEXP (src, 0))))
2784                            && CONST_INT_P (XEXP (src, 1)))
2785                     {
2786                       t = plus_constant (t, INTVAL (XEXP (src, 1)));
2787                       set_reg_known_value (regno, t);
2788                       set_reg_known_equiv_p (regno, 0);
2789                     }
2790                   else if (DF_REG_DEF_COUNT (regno) == 1
2791                            && ! rtx_varies_p (src, 1))
2792                     {
2793                       set_reg_known_value (regno, src);
2794                       set_reg_known_equiv_p (regno, 0);
2795                     }
2796                 }
2797             }
2798           else if (NOTE_P (insn)
2799                    && NOTE_KIND (insn) == NOTE_INSN_FUNCTION_BEG)
2800             copying_arguments = false;
2801         }
2802
2803       /* Now propagate values from new_reg_base_value to reg_base_value.  */
2804       gcc_assert (maxreg == (unsigned int) max_reg_num ());
2805
2806       for (ui = 0; ui < maxreg; ui++)
2807         {
2808           if (new_reg_base_value[ui]
2809               && new_reg_base_value[ui] != VEC_index (rtx, reg_base_value, ui)
2810               && ! rtx_equal_p (new_reg_base_value[ui],
2811                                 VEC_index (rtx, reg_base_value, ui)))
2812             {
2813               VEC_replace (rtx, reg_base_value, ui, new_reg_base_value[ui]);
2814               changed = 1;
2815             }
2816         }
2817     }
2818   while (changed && ++pass < MAX_ALIAS_LOOP_PASSES);
2819
2820   /* Fill in the remaining entries.  */
2821   for (i = 0; i < (int)reg_known_value_size; i++)
2822     if (reg_known_value[i] == 0)
2823       reg_known_value[i] = regno_reg_rtx[i + FIRST_PSEUDO_REGISTER];
2824
2825   /* Clean up.  */
2826   free (new_reg_base_value);
2827   new_reg_base_value = 0;
2828   free (reg_seen);
2829   reg_seen = 0;
2830   timevar_pop (TV_ALIAS_ANALYSIS);
2831 }
2832
2833 void
2834 end_alias_analysis (void)
2835 {
2836   old_reg_base_value = reg_base_value;
2837   ggc_free (reg_known_value);
2838   reg_known_value = 0;
2839   reg_known_value_size = 0;
2840   free (reg_known_equiv_p);
2841   reg_known_equiv_p = 0;
2842 }
2843
2844 #include "gt-alias.h"