OSDN Git Service

* mkconfig.sh: Include insn-flags.h.
[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 static 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 static 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 /* Returns non-zero if a write to X might alias a previous read from
1769    (or, if WRITEP is non-zero, a write to) MEM.  */
1770
1771 static int
1772 write_dependence_p (mem, x, writep)
1773      rtx mem;
1774      rtx x;
1775      int writep;
1776 {
1777   rtx x_addr, mem_addr;
1778   rtx fixed_scalar;
1779   rtx base;
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   /* Unchanging memory can't conflict with non-unchanging memory.  */
1788   if (RTX_UNCHANGING_P (x) != RTX_UNCHANGING_P (mem))
1789     return 0;
1790
1791   /* If MEM is an unchanging read, then it can't possibly conflict with
1792      the store to X, because there is at most one store to MEM, and it must
1793      have occurred somewhere before MEM.  */
1794   if (! writep && RTX_UNCHANGING_P (mem))
1795     return 0;
1796
1797   x_addr = get_addr (XEXP (x, 0));
1798   mem_addr = get_addr (XEXP (mem, 0));
1799
1800   if (! writep)
1801     {
1802       base = find_base_term (mem_addr);
1803       if (base && (GET_CODE (base) == LABEL_REF
1804                    || (GET_CODE (base) == SYMBOL_REF
1805                        && CONSTANT_POOL_ADDRESS_P (base))))
1806         return 0;
1807     }
1808
1809   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x),
1810                           GET_MODE (mem)))
1811     return 0;
1812
1813   x_addr = canon_rtx (x_addr);
1814   mem_addr = canon_rtx (mem_addr);
1815
1816   if (!memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
1817                            SIZE_FOR_MODE (x), x_addr, 0))
1818     return 0;
1819
1820   fixed_scalar 
1821     = fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
1822                                          rtx_addr_varies_p);
1823
1824   return (!(fixed_scalar == mem && !aliases_everything_p (x))
1825           && !(fixed_scalar == x && !aliases_everything_p (mem)));
1826 }
1827
1828 /* Anti dependence: X is written after read in MEM takes place.  */
1829
1830 int
1831 anti_dependence (mem, x)
1832      rtx mem;
1833      rtx x;
1834 {
1835   return write_dependence_p (mem, x, /*writep=*/0);
1836 }
1837
1838 /* Output dependence: X is written after store in MEM takes place.  */
1839
1840 int
1841 output_dependence (mem, x)
1842      register rtx mem;
1843      register rtx x;
1844 {
1845   return write_dependence_p (mem, x, /*writep=*/1);
1846 }
1847
1848 /* Returns non-zero if X mentions something which is not
1849    local to the function and is not constant.  */
1850
1851 static int
1852 nonlocal_mentioned_p (x)
1853      rtx x;
1854 {
1855   rtx base;
1856   register RTX_CODE code;
1857   int regno;
1858
1859   code = GET_CODE (x);
1860
1861   if (GET_RTX_CLASS (code) == 'i')
1862     {
1863       /* Constant functions can be constant if they don't use
1864          scratch memory used to mark function w/o side effects.  */
1865       if (code == CALL_INSN && CONST_CALL_P (x))
1866         {
1867           x = CALL_INSN_FUNCTION_USAGE (x);
1868           if (x == 0)
1869             return 0;
1870         }
1871       else
1872         x = PATTERN (x);
1873       code = GET_CODE (x);
1874     }
1875
1876   switch (code)
1877     {
1878     case SUBREG:
1879       if (GET_CODE (SUBREG_REG (x)) == REG)
1880         {
1881           /* Global registers are not local.  */
1882           if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER
1883               && global_regs[REGNO (SUBREG_REG (x)) + SUBREG_WORD (x)])
1884             return 1;
1885           return 0;
1886         }
1887       break;
1888
1889     case REG:
1890       regno = REGNO (x);
1891       /* Global registers are not local.  */
1892       if (regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
1893         return 1;
1894       return 0;
1895
1896     case SCRATCH:
1897     case PC:
1898     case CC0:
1899     case CONST_INT:
1900     case CONST_DOUBLE:
1901     case CONST:
1902     case LABEL_REF:
1903       return 0;
1904
1905     case SYMBOL_REF:
1906       /* Constants in the function's constants pool are constant.  */
1907       if (CONSTANT_POOL_ADDRESS_P (x))
1908         return 0;
1909       return 1;
1910
1911     case CALL:
1912       /* Non-constant calls and recursion are not local.  */
1913       return 1;
1914
1915     case MEM:
1916       /* Be overly conservative and consider any volatile memory
1917          reference as not local.  */
1918       if (MEM_VOLATILE_P (x))
1919         return 1;
1920       base = find_base_term (XEXP (x, 0));
1921       if (base)
1922         {
1923           /* A Pmode ADDRESS could be a reference via the structure value
1924              address or static chain.  Such memory references are nonlocal.
1925
1926              Thus, we have to examine the contents of the ADDRESS to find
1927              out if this is a local reference or not.  */
1928           if (GET_CODE (base) == ADDRESS
1929               && GET_MODE (base) == Pmode
1930               && (XEXP (base, 0) == stack_pointer_rtx
1931                   || XEXP (base, 0) == arg_pointer_rtx
1932 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
1933                   || XEXP (base, 0) == hard_frame_pointer_rtx
1934 #endif
1935                   || XEXP (base, 0) == frame_pointer_rtx))
1936             return 0;
1937           /* Constants in the function's constant pool are constant.  */
1938           if (GET_CODE (base) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (base))
1939             return 0;
1940         }
1941       return 1;
1942
1943     case UNSPEC_VOLATILE:
1944     case ASM_INPUT:
1945       return 1;
1946
1947     case ASM_OPERANDS:
1948       if (MEM_VOLATILE_P (x))
1949         return 1;
1950
1951     /* FALLTHROUGH */
1952
1953     default:
1954       break;
1955     }
1956
1957   /* Recursively scan the operands of this expression.  */
1958
1959   {
1960     register const char *fmt = GET_RTX_FORMAT (code);
1961     register int i;
1962     
1963     for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1964       {
1965         if (fmt[i] == 'e' && XEXP (x, i))
1966           {
1967             if (nonlocal_mentioned_p (XEXP (x, i)))
1968               return 1;
1969           }
1970         else if (fmt[i] == 'E')
1971           {
1972             register int j;
1973             for (j = 0; j < XVECLEN (x, i); j++)
1974               if (nonlocal_mentioned_p (XVECEXP (x, i, j)))
1975                 return 1;
1976           }
1977       }
1978   }
1979
1980   return 0;
1981 }
1982
1983 /* Return non-zero if a loop (natural or otherwise) is present.
1984    Inspired by Depth_First_Search_PP described in:
1985
1986      Advanced Compiler Design and Implementation
1987      Steven Muchnick
1988      Morgan Kaufmann, 1997
1989
1990    and heavily borrowed from flow_depth_first_order_compute.  */
1991
1992 static int
1993 loop_p ()
1994 {
1995   edge *stack;
1996   int *pre;
1997   int *post;
1998   int sp;
1999   int prenum = 1;
2000   int postnum = 1;
2001   sbitmap visited;
2002
2003   /* Allocate the preorder and postorder number arrays.  */
2004   pre = (int *) xcalloc (n_basic_blocks, sizeof (int));
2005   post = (int *) xcalloc (n_basic_blocks, sizeof (int));
2006
2007   /* Allocate stack for back-tracking up CFG.  */
2008   stack = (edge *) xmalloc ((n_basic_blocks + 1) * sizeof (edge));
2009   sp = 0;
2010
2011   /* Allocate bitmap to track nodes that have been visited.  */
2012   visited = sbitmap_alloc (n_basic_blocks);
2013
2014   /* None of the nodes in the CFG have been visited yet.  */
2015   sbitmap_zero (visited);
2016
2017   /* Push the first edge on to the stack.  */
2018   stack[sp++] = ENTRY_BLOCK_PTR->succ;
2019
2020   while (sp)
2021     {
2022       edge e;
2023       basic_block src;
2024       basic_block dest;
2025
2026       /* Look at the edge on the top of the stack.  */
2027       e = stack[sp - 1];
2028       src = e->src;
2029       dest = e->dest;
2030
2031       /* Check if the edge destination has been visited yet.  */
2032       if (dest != EXIT_BLOCK_PTR && ! TEST_BIT (visited, dest->index))
2033         {
2034           /* Mark that we have visited the destination.  */
2035           SET_BIT (visited, dest->index);
2036
2037           pre[dest->index] = prenum++;
2038
2039           if (dest->succ)
2040             {
2041               /* Since the DEST node has been visited for the first
2042                  time, check its successors.  */
2043               stack[sp++] = dest->succ;
2044             }
2045           else
2046             post[dest->index] = postnum++;
2047         }
2048       else
2049         {
2050           if (dest != EXIT_BLOCK_PTR
2051               && pre[src->index] >= pre[dest->index]
2052               && post[dest->index] == 0)
2053             break;
2054
2055           if (! e->succ_next && src != ENTRY_BLOCK_PTR)
2056             post[src->index] = postnum++;
2057
2058           if (e->succ_next)
2059             stack[sp - 1] = e->succ_next;
2060           else
2061             sp--;
2062         }
2063     }
2064
2065   free (pre);
2066   free (post);
2067   free (stack);
2068   sbitmap_free (visited);
2069
2070   return sp;
2071 }
2072
2073 /* Mark the function if it is constant.  */
2074
2075 void
2076 mark_constant_function ()
2077 {
2078   rtx insn;
2079   int nonlocal_mentioned;
2080
2081   if (TREE_PUBLIC (current_function_decl)
2082       || TREE_READONLY (current_function_decl)
2083       || DECL_IS_PURE (current_function_decl)
2084       || TREE_THIS_VOLATILE (current_function_decl)
2085       || TYPE_MODE (TREE_TYPE (current_function_decl)) == VOIDmode)
2086     return;
2087
2088   /* A loop might not return which counts as a side effect.  */
2089   if (loop_p ())
2090     return;
2091
2092   nonlocal_mentioned = 0;
2093
2094   init_alias_analysis ();
2095
2096   /* Determine if this is a constant function.  */
2097
2098   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2099     if (INSN_P (insn) && nonlocal_mentioned_p (insn))
2100       {
2101         nonlocal_mentioned = 1;
2102         break;
2103       }
2104
2105   end_alias_analysis ();
2106
2107   /* Mark the function.  */
2108
2109   if (! nonlocal_mentioned)
2110     TREE_READONLY (current_function_decl) = 1;
2111 }
2112
2113
2114 static HARD_REG_SET argument_registers;
2115
2116 void
2117 init_alias_once ()
2118 {
2119   register int i;
2120
2121 #ifndef OUTGOING_REGNO
2122 #define OUTGOING_REGNO(N) N
2123 #endif
2124   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2125     /* Check whether this register can hold an incoming pointer
2126        argument.  FUNCTION_ARG_REGNO_P tests outgoing register
2127        numbers, so translate if necessary due to register windows. */
2128     if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i))
2129         && HARD_REGNO_MODE_OK (i, Pmode))
2130       SET_HARD_REG_BIT (argument_registers, i);
2131
2132   alias_sets = splay_tree_new (splay_tree_compare_ints, 0, 0);
2133 }
2134
2135 /* Initialize the aliasing machinery.  Initialize the REG_KNOWN_VALUE
2136    array.  */
2137
2138 void
2139 init_alias_analysis ()
2140 {
2141   int maxreg = max_reg_num ();
2142   int changed, pass;
2143   register int i;
2144   register unsigned int ui;
2145   register rtx insn;
2146
2147   reg_known_value_size = maxreg;
2148
2149   reg_known_value 
2150     = (rtx *) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (rtx))
2151     - FIRST_PSEUDO_REGISTER;
2152   reg_known_equiv_p 
2153     = (char*) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (char))
2154     - FIRST_PSEUDO_REGISTER;
2155
2156   /* Overallocate reg_base_value to allow some growth during loop
2157      optimization.  Loop unrolling can create a large number of
2158      registers.  */
2159   reg_base_value_size = maxreg * 2;
2160   reg_base_value = (rtx *) xcalloc (reg_base_value_size, sizeof (rtx));
2161   ggc_add_rtx_root (reg_base_value, reg_base_value_size);
2162
2163   new_reg_base_value = (rtx *) xmalloc (reg_base_value_size * sizeof (rtx));
2164   reg_seen = (char *) xmalloc (reg_base_value_size);
2165   if (! reload_completed && flag_unroll_loops)
2166     {
2167       /* ??? Why are we realloc'ing if we're just going to zero it?  */
2168       alias_invariant = (rtx *)xrealloc (alias_invariant,
2169                                          reg_base_value_size * sizeof (rtx));
2170       memset ((char *)alias_invariant, 0, reg_base_value_size * sizeof (rtx));
2171     }
2172
2173   /* The basic idea is that each pass through this loop will use the
2174      "constant" information from the previous pass to propagate alias
2175      information through another level of assignments.
2176
2177      This could get expensive if the assignment chains are long.  Maybe
2178      we should throttle the number of iterations, possibly based on
2179      the optimization level or flag_expensive_optimizations.
2180
2181      We could propagate more information in the first pass by making use
2182      of REG_N_SETS to determine immediately that the alias information
2183      for a pseudo is "constant".
2184
2185      A program with an uninitialized variable can cause an infinite loop
2186      here.  Instead of doing a full dataflow analysis to detect such problems
2187      we just cap the number of iterations for the loop.
2188
2189      The state of the arrays for the set chain in question does not matter
2190      since the program has undefined behavior.  */
2191
2192   pass = 0;
2193   do
2194     {
2195       /* Assume nothing will change this iteration of the loop.  */
2196       changed = 0;
2197
2198       /* We want to assign the same IDs each iteration of this loop, so
2199          start counting from zero each iteration of the loop.  */
2200       unique_id = 0;
2201
2202       /* We're at the start of the funtion each iteration through the
2203          loop, so we're copying arguments.  */
2204       copying_arguments = 1;
2205
2206       /* Wipe the potential alias information clean for this pass.  */
2207       memset ((char *) new_reg_base_value, 0, reg_base_value_size * sizeof (rtx));
2208
2209       /* Wipe the reg_seen array clean.  */
2210       memset ((char *) reg_seen, 0, reg_base_value_size);
2211
2212       /* Mark all hard registers which may contain an address.
2213          The stack, frame and argument pointers may contain an address.
2214          An argument register which can hold a Pmode value may contain
2215          an address even if it is not in BASE_REGS.
2216
2217          The address expression is VOIDmode for an argument and
2218          Pmode for other registers.  */
2219
2220       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2221         if (TEST_HARD_REG_BIT (argument_registers, i))
2222           new_reg_base_value[i] = gen_rtx_ADDRESS (VOIDmode,
2223                                                    gen_rtx_REG (Pmode, i));
2224
2225       new_reg_base_value[STACK_POINTER_REGNUM]
2226         = gen_rtx_ADDRESS (Pmode, stack_pointer_rtx);
2227       new_reg_base_value[ARG_POINTER_REGNUM]
2228         = gen_rtx_ADDRESS (Pmode, arg_pointer_rtx);
2229       new_reg_base_value[FRAME_POINTER_REGNUM]
2230         = gen_rtx_ADDRESS (Pmode, frame_pointer_rtx);
2231 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2232       new_reg_base_value[HARD_FRAME_POINTER_REGNUM]
2233         = gen_rtx_ADDRESS (Pmode, hard_frame_pointer_rtx);
2234 #endif
2235
2236       /* Walk the insns adding values to the new_reg_base_value array.  */
2237       for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2238         {
2239           if (INSN_P (insn))
2240             {
2241               rtx note, set;
2242
2243 #if defined (HAVE_prologue) || defined (HAVE_epilogue)
2244               /* The prologue/epilouge insns are not threaded onto the
2245                  insn chain until after reload has completed.  Thus,
2246                  there is no sense wasting time checking if INSN is in
2247                  the prologue/epilogue until after reload has completed.  */
2248               if (reload_completed
2249                   && prologue_epilogue_contains (insn))
2250                 continue;
2251 #endif
2252
2253               /* If this insn has a noalias note, process it,  Otherwise,
2254                  scan for sets.  A simple set will have no side effects
2255                  which could change the base value of any other register. */
2256
2257               if (GET_CODE (PATTERN (insn)) == SET
2258                   && REG_NOTES (insn) != 0
2259                   && find_reg_note (insn, REG_NOALIAS, NULL_RTX))
2260                 record_set (SET_DEST (PATTERN (insn)), NULL_RTX, NULL);
2261               else
2262                 note_stores (PATTERN (insn), record_set, NULL);
2263
2264               set = single_set (insn);
2265
2266               if (set != 0
2267                   && GET_CODE (SET_DEST (set)) == REG
2268                   && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER)
2269                 {
2270                   unsigned int regno = REGNO (SET_DEST (set));
2271                   rtx src = SET_SRC (set);
2272
2273                   if (REG_NOTES (insn) != 0
2274                       && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
2275                            && REG_N_SETS (regno) == 1)
2276                           || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
2277                       && GET_CODE (XEXP (note, 0)) != EXPR_LIST
2278                       && ! rtx_varies_p (XEXP (note, 0), 1)
2279                       && ! reg_overlap_mentioned_p (SET_DEST (set), XEXP (note, 0)))
2280                     {
2281                       reg_known_value[regno] = XEXP (note, 0);
2282                       reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV;
2283                     }
2284                   else if (REG_N_SETS (regno) == 1
2285                            && GET_CODE (src) == PLUS
2286                            && GET_CODE (XEXP (src, 0)) == REG
2287                            && REGNO (XEXP (src, 0)) >= FIRST_PSEUDO_REGISTER
2288                            && (reg_known_value[REGNO (XEXP (src, 0))])
2289                            && GET_CODE (XEXP (src, 1)) == CONST_INT)
2290                     {
2291                       rtx op0 = XEXP (src, 0);
2292                       op0 = reg_known_value[REGNO (op0)];
2293                       reg_known_value[regno]
2294                         = plus_constant_for_output (op0,
2295                                                     INTVAL (XEXP (src, 1)));
2296                       reg_known_equiv_p[regno] = 0;
2297                     }
2298                   else if (REG_N_SETS (regno) == 1
2299                            && ! rtx_varies_p (src, 1))
2300                     {
2301                       reg_known_value[regno] = src;
2302                       reg_known_equiv_p[regno] = 0;
2303                     }
2304                 }
2305             }
2306           else if (GET_CODE (insn) == NOTE
2307                    && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
2308             copying_arguments = 0;
2309         }
2310
2311       /* Now propagate values from new_reg_base_value to reg_base_value.  */
2312       for (ui = 0; ui < reg_base_value_size; ui++)
2313         {
2314           if (new_reg_base_value[ui]
2315               && new_reg_base_value[ui] != reg_base_value[ui]
2316               && ! rtx_equal_p (new_reg_base_value[ui], reg_base_value[ui]))
2317             {
2318               reg_base_value[ui] = new_reg_base_value[ui];
2319               changed = 1;
2320             }
2321         }
2322     }
2323   while (changed && ++pass < MAX_ALIAS_LOOP_PASSES);
2324
2325   /* Fill in the remaining entries.  */
2326   for (i = FIRST_PSEUDO_REGISTER; i < maxreg; i++)
2327     if (reg_known_value[i] == 0)
2328       reg_known_value[i] = regno_reg_rtx[i];
2329
2330   /* Simplify the reg_base_value array so that no register refers to
2331      another register, except to special registers indirectly through
2332      ADDRESS expressions.
2333
2334      In theory this loop can take as long as O(registers^2), but unless
2335      there are very long dependency chains it will run in close to linear
2336      time.
2337
2338      This loop may not be needed any longer now that the main loop does
2339      a better job at propagating alias information.  */
2340   pass = 0;
2341   do
2342     {
2343       changed = 0;
2344       pass++;
2345       for (ui = 0; ui < reg_base_value_size; ui++)
2346         {
2347           rtx base = reg_base_value[ui];
2348           if (base && GET_CODE (base) == REG)
2349             {
2350               unsigned int base_regno = REGNO (base);
2351               if (base_regno == ui)             /* register set from itself */
2352                 reg_base_value[ui] = 0;
2353               else
2354                 reg_base_value[ui] = reg_base_value[base_regno];
2355               changed = 1;
2356             }
2357         }
2358     }
2359   while (changed && pass < MAX_ALIAS_LOOP_PASSES);
2360
2361   /* Clean up.  */
2362   free (new_reg_base_value);
2363   new_reg_base_value = 0;
2364   free (reg_seen);
2365   reg_seen = 0;
2366 }
2367
2368 void
2369 end_alias_analysis ()
2370 {
2371   free (reg_known_value + FIRST_PSEUDO_REGISTER);
2372   reg_known_value = 0;
2373   reg_known_value_size = 0;
2374   free (reg_known_equiv_p + FIRST_PSEUDO_REGISTER);
2375   reg_known_equiv_p = 0;
2376   if (reg_base_value)
2377     {
2378       ggc_del_root (reg_base_value);
2379       free (reg_base_value);
2380       reg_base_value = 0;
2381     }
2382   reg_base_value_size = 0;
2383   if (alias_invariant)
2384     {
2385       free (alias_invariant);
2386       alias_invariant = 0;
2387     }
2388 }