OSDN Git Service

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