OSDN Git Service

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