OSDN Git Service

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