OSDN Git Service

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