OSDN Git Service

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