OSDN Git Service

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