OSDN Git Service

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