OSDN Git Service

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