OSDN Git Service

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