OSDN Git Service

* Makefile.in, alias.c, basic-block.h, bb-reorder.c, bitmap.c,
[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 /* Returns a canonical version of X, from the point of view alias
964    analysis.  (For example, if X is a MEM whose address is a register,
965    and the register has a known value (say a SYMBOL_REF), then a MEM
966    whose address is the SYMBOL_REF is returned.)  */
967
968 rtx
969 canon_rtx (x)
970      rtx x;
971 {
972   /* Recursively look for equivalences.  */
973   if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
974       && REGNO (x) < reg_known_value_size)
975     return reg_known_value[REGNO (x)] == x
976       ? x : canon_rtx (reg_known_value[REGNO (x)]);
977   else if (GET_CODE (x) == PLUS)
978     {
979       rtx x0 = canon_rtx (XEXP (x, 0));
980       rtx x1 = canon_rtx (XEXP (x, 1));
981
982       if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
983         {
984           if (GET_CODE (x0) == CONST_INT)
985             return plus_constant (x1, INTVAL (x0));
986           else if (GET_CODE (x1) == CONST_INT)
987             return plus_constant (x0, INTVAL (x1));
988           return gen_rtx_PLUS (GET_MODE (x), x0, x1);
989         }
990     }
991
992   /* This gives us much better alias analysis when called from
993      the loop optimizer.   Note we want to leave the original
994      MEM alone, but need to return the canonicalized MEM with
995      all the flags with their original values.  */
996   else if (GET_CODE (x) == MEM)
997     x = replace_equiv_address_nv (x, canon_rtx (XEXP (x, 0)));
998
999   return x;
1000 }
1001
1002 /* Return 1 if X and Y are identical-looking rtx's.
1003
1004    We use the data in reg_known_value above to see if two registers with
1005    different numbers are, in fact, equivalent.  */
1006
1007 static int
1008 rtx_equal_for_memref_p (x, y)
1009      rtx x, y;
1010 {
1011   register int i;
1012   register int j;
1013   register enum rtx_code code;
1014   register const char *fmt;
1015
1016   if (x == 0 && y == 0)
1017     return 1;
1018   if (x == 0 || y == 0)
1019     return 0;
1020
1021   x = canon_rtx (x);
1022   y = canon_rtx (y);
1023
1024   if (x == y)
1025     return 1;
1026
1027   code = GET_CODE (x);
1028   /* Rtx's of different codes cannot be equal.  */
1029   if (code != GET_CODE (y))
1030     return 0;
1031
1032   /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
1033      (REG:SI x) and (REG:HI x) are NOT equivalent.  */
1034
1035   if (GET_MODE (x) != GET_MODE (y))
1036     return 0;
1037
1038   /* Some RTL can be compared without a recursive examination.  */
1039   switch (code)
1040     {
1041     case VALUE:
1042       return CSELIB_VAL_PTR (x) == CSELIB_VAL_PTR (y);
1043
1044     case REG:
1045       return REGNO (x) == REGNO (y);
1046
1047     case LABEL_REF:
1048       return XEXP (x, 0) == XEXP (y, 0);
1049       
1050     case SYMBOL_REF:
1051       return XSTR (x, 0) == XSTR (y, 0);
1052
1053     case CONST_INT:
1054     case CONST_DOUBLE:
1055       /* There's no need to compare the contents of CONST_DOUBLEs or
1056          CONST_INTs because pointer equality is a good enough
1057          comparison for these nodes.  */
1058       return 0;
1059
1060     case ADDRESSOF:
1061       return (XINT (x, 1) == XINT (y, 1)
1062               && rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0)));
1063
1064     default:
1065       break;
1066     }
1067
1068   /* For commutative operations, the RTX match if the operand match in any
1069      order.  Also handle the simple binary and unary cases without a loop.  */
1070   if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
1071     return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
1072              && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
1073             || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
1074                 && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
1075   else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
1076     return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
1077             && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)));
1078   else if (GET_RTX_CLASS (code) == '1')
1079     return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0));
1080
1081   /* Compare the elements.  If any pair of corresponding elements
1082      fail to match, return 0 for the whole things.
1083
1084      Limit cases to types which actually appear in addresses.  */
1085
1086   fmt = GET_RTX_FORMAT (code);
1087   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1088     {
1089       switch (fmt[i])
1090         {
1091         case 'i':
1092           if (XINT (x, i) != XINT (y, i))
1093             return 0;
1094           break;
1095
1096         case 'E':
1097           /* Two vectors must have the same length.  */
1098           if (XVECLEN (x, i) != XVECLEN (y, i))
1099             return 0;
1100
1101           /* And the corresponding elements must match.  */
1102           for (j = 0; j < XVECLEN (x, i); j++)
1103             if (rtx_equal_for_memref_p (XVECEXP (x, i, j),
1104                                         XVECEXP (y, i, j)) == 0)
1105               return 0;
1106           break;
1107
1108         case 'e':
1109           if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0)
1110             return 0;
1111           break;
1112
1113           /* This can happen for asm operands.  */
1114         case 's':
1115           if (strcmp (XSTR (x, i), XSTR (y, i)))
1116             return 0;
1117           break;
1118
1119         /* This can happen for an asm which clobbers memory.  */
1120         case '0':
1121           break;
1122
1123           /* It is believed that rtx's at this level will never
1124              contain anything but integers and other rtx's,
1125              except for within LABEL_REFs and SYMBOL_REFs.  */
1126         default:
1127           abort ();
1128         }
1129     }
1130   return 1;
1131 }
1132
1133 /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
1134    X and return it, or return 0 if none found.  */
1135
1136 static rtx
1137 find_symbolic_term (x)
1138      rtx x;
1139 {
1140   register int i;
1141   register enum rtx_code code;
1142   register const char *fmt;
1143
1144   code = GET_CODE (x);
1145   if (code == SYMBOL_REF || code == LABEL_REF)
1146     return x;
1147   if (GET_RTX_CLASS (code) == 'o')
1148     return 0;
1149
1150   fmt = GET_RTX_FORMAT (code);
1151   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1152     {
1153       rtx t;
1154
1155       if (fmt[i] == 'e')
1156         {
1157           t = find_symbolic_term (XEXP (x, i));
1158           if (t != 0)
1159             return t;
1160         }
1161       else if (fmt[i] == 'E')
1162         break;
1163     }
1164   return 0;
1165 }
1166
1167 static rtx
1168 find_base_term (x)
1169      register rtx x;
1170 {
1171   cselib_val *val;
1172   struct elt_loc_list *l;
1173
1174 #if defined (FIND_BASE_TERM)
1175   /* Try machine-dependent ways to find the base term.  */
1176   x = FIND_BASE_TERM (x);
1177 #endif
1178
1179   switch (GET_CODE (x))
1180     {
1181     case REG:
1182       return REG_BASE_VALUE (x);
1183
1184     case ZERO_EXTEND:
1185     case SIGN_EXTEND:   /* Used for Alpha/NT pointers */
1186     case HIGH:
1187     case PRE_INC:
1188     case PRE_DEC:
1189     case POST_INC:
1190     case POST_DEC:
1191       return find_base_term (XEXP (x, 0));
1192
1193     case VALUE:
1194       val = CSELIB_VAL_PTR (x);
1195       for (l = val->locs; l; l = l->next)
1196         if ((x = find_base_term (l->loc)) != 0)
1197           return x;
1198       return 0;
1199
1200     case CONST:
1201       x = XEXP (x, 0);
1202       if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
1203         return 0;
1204       /* fall through */
1205     case LO_SUM:
1206     case PLUS:
1207     case MINUS:
1208       {
1209         rtx tmp1 = XEXP (x, 0);
1210         rtx tmp2 = XEXP (x, 1);
1211
1212         /* This is a litle bit tricky since we have to determine which of
1213            the two operands represents the real base address.  Otherwise this
1214            routine may return the index register instead of the base register.
1215
1216            That may cause us to believe no aliasing was possible, when in
1217            fact aliasing is possible.
1218
1219            We use a few simple tests to guess the base register.  Additional
1220            tests can certainly be added.  For example, if one of the operands
1221            is a shift or multiply, then it must be the index register and the
1222            other operand is the base register.  */
1223         
1224         if (tmp1 == pic_offset_table_rtx && CONSTANT_P (tmp2))
1225           return find_base_term (tmp2);
1226
1227         /* If either operand is known to be a pointer, then use it
1228            to determine the base term.  */
1229         if (REG_P (tmp1) && REG_POINTER (tmp1))
1230           return find_base_term (tmp1);
1231
1232         if (REG_P (tmp2) && REG_POINTER (tmp2))
1233           return find_base_term (tmp2);
1234
1235         /* Neither operand was known to be a pointer.  Go ahead and find the
1236            base term for both operands.  */
1237         tmp1 = find_base_term (tmp1);
1238         tmp2 = find_base_term (tmp2);
1239
1240         /* If either base term is named object or a special address
1241            (like an argument or stack reference), then use it for the
1242            base term.  */
1243         if (tmp1 != 0
1244             && (GET_CODE (tmp1) == SYMBOL_REF
1245                 || GET_CODE (tmp1) == LABEL_REF
1246                 || (GET_CODE (tmp1) == ADDRESS
1247                     && GET_MODE (tmp1) != VOIDmode)))
1248           return tmp1;
1249
1250         if (tmp2 != 0
1251             && (GET_CODE (tmp2) == SYMBOL_REF
1252                 || GET_CODE (tmp2) == LABEL_REF
1253                 || (GET_CODE (tmp2) == ADDRESS
1254                     && GET_MODE (tmp2) != VOIDmode)))
1255           return tmp2;
1256
1257         /* We could not determine which of the two operands was the
1258            base register and which was the index.  So we can determine
1259            nothing from the base alias check.  */
1260         return 0;
1261       }
1262
1263     case AND:
1264       if (GET_CODE (XEXP (x, 0)) == REG && GET_CODE (XEXP (x, 1)) == CONST_INT)
1265         return REG_BASE_VALUE (XEXP (x, 0));
1266       return 0;
1267
1268     case SYMBOL_REF:
1269     case LABEL_REF:
1270       return x;
1271
1272     case ADDRESSOF:
1273       return REG_BASE_VALUE (frame_pointer_rtx);
1274
1275     default:
1276       return 0;
1277     }
1278 }
1279
1280 /* Return 0 if the addresses X and Y are known to point to different
1281    objects, 1 if they might be pointers to the same object.  */
1282
1283 static int
1284 base_alias_check (x, y, x_mode, y_mode)
1285      rtx x, y;
1286      enum machine_mode x_mode, y_mode;
1287 {
1288   rtx x_base = find_base_term (x);
1289   rtx y_base = find_base_term (y);
1290
1291   /* If the address itself has no known base see if a known equivalent
1292      value has one.  If either address still has no known base, nothing
1293      is known about aliasing.  */
1294   if (x_base == 0)
1295     {
1296       rtx x_c;
1297
1298       if (! flag_expensive_optimizations || (x_c = canon_rtx (x)) == x)
1299         return 1;
1300
1301       x_base = find_base_term (x_c);
1302       if (x_base == 0)
1303         return 1;
1304     }
1305
1306   if (y_base == 0)
1307     {
1308       rtx y_c;
1309       if (! flag_expensive_optimizations || (y_c = canon_rtx (y)) == y)
1310         return 1;
1311
1312       y_base = find_base_term (y_c);
1313       if (y_base == 0)
1314         return 1;
1315     }
1316
1317   /* If the base addresses are equal nothing is known about aliasing.  */
1318   if (rtx_equal_p (x_base, y_base))
1319     return 1;
1320
1321   /* The base addresses of the read and write are different expressions. 
1322      If they are both symbols and they are not accessed via AND, there is
1323      no conflict.  We can bring knowledge of object alignment into play
1324      here.  For example, on alpha, "char a, b;" can alias one another,
1325      though "char a; long b;" cannot.  */
1326   if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
1327     {
1328       if (GET_CODE (x) == AND && GET_CODE (y) == AND)
1329         return 1;
1330       if (GET_CODE (x) == AND
1331           && (GET_CODE (XEXP (x, 1)) != CONST_INT
1332               || (int) GET_MODE_UNIT_SIZE (y_mode) < -INTVAL (XEXP (x, 1))))
1333         return 1;
1334       if (GET_CODE (y) == AND
1335           && (GET_CODE (XEXP (y, 1)) != CONST_INT
1336               || (int) GET_MODE_UNIT_SIZE (x_mode) < -INTVAL (XEXP (y, 1))))
1337         return 1;
1338       /* Differing symbols never alias.  */
1339       return 0;
1340     }
1341
1342   /* If one address is a stack reference there can be no alias:
1343      stack references using different base registers do not alias,
1344      a stack reference can not alias a parameter, and a stack reference
1345      can not alias a global.  */
1346   if ((GET_CODE (x_base) == ADDRESS && GET_MODE (x_base) == Pmode)
1347       || (GET_CODE (y_base) == ADDRESS && GET_MODE (y_base) == Pmode))
1348     return 0;
1349
1350   if (! flag_argument_noalias)
1351     return 1;
1352
1353   if (flag_argument_noalias > 1)
1354     return 0;
1355
1356   /* Weak noalias assertion (arguments are distinct, but may match globals).  */
1357   return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode);
1358 }
1359
1360 /* Convert the address X into something we can use.  This is done by returning
1361    it unchanged unless it is a value; in the latter case we call cselib to get
1362    a more useful rtx.  */
1363
1364 rtx
1365 get_addr (x)
1366      rtx x;
1367 {
1368   cselib_val *v;
1369   struct elt_loc_list *l;
1370
1371   if (GET_CODE (x) != VALUE)
1372     return x;
1373   v = CSELIB_VAL_PTR (x);
1374   for (l = v->locs; l; l = l->next)
1375     if (CONSTANT_P (l->loc))
1376       return l->loc;
1377   for (l = v->locs; l; l = l->next)
1378     if (GET_CODE (l->loc) != REG && GET_CODE (l->loc) != MEM)
1379       return l->loc;
1380   if (v->locs)
1381     return v->locs->loc;
1382   return x;
1383 }
1384
1385 /*  Return the address of the (N_REFS + 1)th memory reference to ADDR
1386     where SIZE is the size in bytes of the memory reference.  If ADDR
1387     is not modified by the memory reference then ADDR is returned.  */
1388
1389 rtx
1390 addr_side_effect_eval (addr, size, n_refs)
1391      rtx addr;
1392      int size;
1393      int n_refs;
1394 {
1395   int offset = 0;
1396   
1397   switch (GET_CODE (addr))
1398     {
1399     case PRE_INC:
1400       offset = (n_refs + 1) * size;
1401       break;
1402     case PRE_DEC:
1403       offset = -(n_refs + 1) * size;
1404       break;
1405     case POST_INC:
1406       offset = n_refs * size;
1407       break;
1408     case POST_DEC:
1409       offset = -n_refs * size;
1410       break;
1411
1412     default:
1413       return addr;
1414     }
1415   
1416   if (offset)
1417     addr = gen_rtx_PLUS (GET_MODE (addr), XEXP (addr, 0), GEN_INT (offset));
1418   else
1419     addr = XEXP (addr, 0);
1420
1421   return addr;
1422 }
1423
1424 /* Return nonzero if X and Y (memory addresses) could reference the
1425    same location in memory.  C is an offset accumulator.  When
1426    C is nonzero, we are testing aliases between X and Y + C.
1427    XSIZE is the size in bytes of the X reference,
1428    similarly YSIZE is the size in bytes for Y.
1429
1430    If XSIZE or YSIZE is zero, we do not know the amount of memory being
1431    referenced (the reference was BLKmode), so make the most pessimistic
1432    assumptions.
1433
1434    If XSIZE or YSIZE is negative, we may access memory outside the object
1435    being referenced as a side effect.  This can happen when using AND to
1436    align memory references, as is done on the Alpha.
1437
1438    Nice to notice that varying addresses cannot conflict with fp if no
1439    local variables had their addresses taken, but that's too hard now.  */
1440
1441 static int
1442 memrefs_conflict_p (xsize, x, ysize, y, c)
1443      register rtx x, y;
1444      int xsize, ysize;
1445      HOST_WIDE_INT c;
1446 {
1447   if (GET_CODE (x) == VALUE)
1448     x = get_addr (x);
1449   if (GET_CODE (y) == VALUE)
1450     y = get_addr (y);
1451   if (GET_CODE (x) == HIGH)
1452     x = XEXP (x, 0);
1453   else if (GET_CODE (x) == LO_SUM)
1454     x = XEXP (x, 1);
1455   else
1456     x = canon_rtx (addr_side_effect_eval (x, xsize, 0));
1457   if (GET_CODE (y) == HIGH)
1458     y = XEXP (y, 0);
1459   else if (GET_CODE (y) == LO_SUM)
1460     y = XEXP (y, 1);
1461   else
1462     y = canon_rtx (addr_side_effect_eval (y, ysize, 0));
1463
1464   if (rtx_equal_for_memref_p (x, y))
1465     {
1466       if (xsize <= 0 || ysize <= 0)
1467         return 1;
1468       if (c >= 0 && xsize > c)
1469         return 1;
1470       if (c < 0 && ysize+c > 0)
1471         return 1;
1472       return 0;
1473     }
1474
1475   /* This code used to check for conflicts involving stack references and
1476      globals but the base address alias code now handles these cases.  */
1477
1478   if (GET_CODE (x) == PLUS)
1479     {
1480       /* The fact that X is canonicalized means that this
1481          PLUS rtx is canonicalized.  */
1482       rtx x0 = XEXP (x, 0);
1483       rtx x1 = XEXP (x, 1);
1484
1485       if (GET_CODE (y) == PLUS)
1486         {
1487           /* The fact that Y is canonicalized means that this
1488              PLUS rtx is canonicalized.  */
1489           rtx y0 = XEXP (y, 0);
1490           rtx y1 = XEXP (y, 1);
1491
1492           if (rtx_equal_for_memref_p (x1, y1))
1493             return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1494           if (rtx_equal_for_memref_p (x0, y0))
1495             return memrefs_conflict_p (xsize, x1, ysize, y1, c);
1496           if (GET_CODE (x1) == CONST_INT)
1497             {
1498               if (GET_CODE (y1) == CONST_INT)
1499                 return memrefs_conflict_p (xsize, x0, ysize, y0,
1500                                            c - INTVAL (x1) + INTVAL (y1));
1501               else
1502                 return memrefs_conflict_p (xsize, x0, ysize, y,
1503                                            c - INTVAL (x1));
1504             }
1505           else if (GET_CODE (y1) == CONST_INT)
1506             return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1507
1508           return 1;
1509         }
1510       else if (GET_CODE (x1) == CONST_INT)
1511         return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
1512     }
1513   else if (GET_CODE (y) == PLUS)
1514     {
1515       /* The fact that Y is canonicalized means that this
1516          PLUS rtx is canonicalized.  */
1517       rtx y0 = XEXP (y, 0);
1518       rtx y1 = XEXP (y, 1);
1519
1520       if (GET_CODE (y1) == CONST_INT)
1521         return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1522       else
1523         return 1;
1524     }
1525
1526   if (GET_CODE (x) == GET_CODE (y))
1527     switch (GET_CODE (x))
1528       {
1529       case MULT:
1530         {
1531           /* Handle cases where we expect the second operands to be the
1532              same, and check only whether the first operand would conflict
1533              or not.  */
1534           rtx x0, y0;
1535           rtx x1 = canon_rtx (XEXP (x, 1));
1536           rtx y1 = canon_rtx (XEXP (y, 1));
1537           if (! rtx_equal_for_memref_p (x1, y1))
1538             return 1;
1539           x0 = canon_rtx (XEXP (x, 0));
1540           y0 = canon_rtx (XEXP (y, 0));
1541           if (rtx_equal_for_memref_p (x0, y0))
1542             return (xsize == 0 || ysize == 0
1543                     || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1544
1545           /* Can't properly adjust our sizes.  */
1546           if (GET_CODE (x1) != CONST_INT)
1547             return 1;
1548           xsize /= INTVAL (x1);
1549           ysize /= INTVAL (x1);
1550           c /= INTVAL (x1);
1551           return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1552         }
1553
1554       case REG:
1555         /* Are these registers known not to be equal?  */
1556         if (alias_invariant)
1557           {
1558             unsigned int r_x = REGNO (x), r_y = REGNO (y);
1559             rtx i_x, i_y;       /* invariant relationships of X and Y */
1560
1561             i_x = r_x >= reg_base_value_size ? 0 : alias_invariant[r_x];
1562             i_y = r_y >= reg_base_value_size ? 0 : alias_invariant[r_y];
1563
1564             if (i_x == 0 && i_y == 0)
1565               break;
1566
1567             if (! memrefs_conflict_p (xsize, i_x ? i_x : x,
1568                                       ysize, i_y ? i_y : y, c))
1569               return 0;
1570           }
1571         break;
1572
1573       default:
1574         break;
1575       }
1576
1577   /* Treat an access through an AND (e.g. a subword access on an Alpha)
1578      as an access with indeterminate size.  Assume that references 
1579      besides AND are aligned, so if the size of the other reference is
1580      at least as large as the alignment, assume no other overlap.  */
1581   if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT)
1582     {
1583       if (GET_CODE (y) == AND || ysize < -INTVAL (XEXP (x, 1)))
1584         xsize = -1;
1585       return memrefs_conflict_p (xsize, XEXP (x, 0), ysize, y, c);
1586     }
1587   if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT)
1588     {
1589       /* ??? If we are indexing far enough into the array/structure, we
1590          may yet be able to determine that we can not overlap.  But we 
1591          also need to that we are far enough from the end not to overlap
1592          a following reference, so we do nothing with that for now.  */
1593       if (GET_CODE (x) == AND || xsize < -INTVAL (XEXP (y, 1)))
1594         ysize = -1;
1595       return memrefs_conflict_p (xsize, x, ysize, XEXP (y, 0), c);
1596     }
1597
1598   if (GET_CODE (x) == ADDRESSOF)
1599     {
1600       if (y == frame_pointer_rtx
1601           || GET_CODE (y) == ADDRESSOF)
1602         return xsize <= 0 || ysize <= 0;
1603     }
1604   if (GET_CODE (y) == ADDRESSOF)
1605     {
1606       if (x == frame_pointer_rtx)
1607         return xsize <= 0 || ysize <= 0;
1608     }
1609
1610   if (CONSTANT_P (x))
1611     {
1612       if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
1613         {
1614           c += (INTVAL (y) - INTVAL (x));
1615           return (xsize <= 0 || ysize <= 0
1616                   || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1617         }
1618
1619       if (GET_CODE (x) == CONST)
1620         {
1621           if (GET_CODE (y) == CONST)
1622             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1623                                        ysize, canon_rtx (XEXP (y, 0)), c);
1624           else
1625             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1626                                        ysize, y, c);
1627         }
1628       if (GET_CODE (y) == CONST)
1629         return memrefs_conflict_p (xsize, x, ysize,
1630                                    canon_rtx (XEXP (y, 0)), c);
1631
1632       if (CONSTANT_P (y))
1633         return (xsize <= 0 || ysize <= 0
1634                 || (rtx_equal_for_memref_p (x, y)
1635                     && ((c >= 0 && xsize > c) || (c < 0 && ysize+c > 0))));
1636
1637       return 1;
1638     }
1639   return 1;
1640 }
1641
1642 /* Functions to compute memory dependencies.
1643
1644    Since we process the insns in execution order, we can build tables
1645    to keep track of what registers are fixed (and not aliased), what registers
1646    are varying in known ways, and what registers are varying in unknown
1647    ways.
1648
1649    If both memory references are volatile, then there must always be a
1650    dependence between the two references, since their order can not be
1651    changed.  A volatile and non-volatile reference can be interchanged
1652    though. 
1653
1654    A MEM_IN_STRUCT reference at a non-AND varying address can never
1655    conflict with a non-MEM_IN_STRUCT reference at a fixed address.  We
1656    also must allow AND addresses, because they may generate accesses
1657    outside the object being referenced.  This is used to generate
1658    aligned addresses from unaligned addresses, for instance, the alpha
1659    storeqi_unaligned pattern.  */
1660
1661 /* Read dependence: X is read after read in MEM takes place.  There can
1662    only be a dependence here if both reads are volatile.  */
1663
1664 int
1665 read_dependence (mem, x)
1666      rtx mem;
1667      rtx x;
1668 {
1669   return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
1670 }
1671
1672 /* Returns MEM1 if and only if MEM1 is a scalar at a fixed address and
1673    MEM2 is a reference to a structure at a varying address, or returns
1674    MEM2 if vice versa.  Otherwise, returns NULL_RTX.  If a non-NULL
1675    value is returned MEM1 and MEM2 can never alias.  VARIES_P is used
1676    to decide whether or not an address may vary; it should return
1677    nonzero whenever variation is possible.
1678    MEM1_ADDR and MEM2_ADDR are the addresses of MEM1 and MEM2.  */
1679   
1680 static rtx
1681 fixed_scalar_and_varying_struct_p (mem1, mem2, mem1_addr, mem2_addr, varies_p)
1682      rtx mem1, mem2;
1683      rtx mem1_addr, mem2_addr;
1684      int (*varies_p) PARAMS ((rtx, int));
1685 {  
1686   if (! flag_strict_aliasing)
1687     return NULL_RTX;
1688
1689   if (MEM_SCALAR_P (mem1) && MEM_IN_STRUCT_P (mem2) 
1690       && !varies_p (mem1_addr, 1) && varies_p (mem2_addr, 1))
1691     /* MEM1 is a scalar at a fixed address; MEM2 is a struct at a
1692        varying address.  */
1693     return mem1;
1694
1695   if (MEM_IN_STRUCT_P (mem1) && MEM_SCALAR_P (mem2) 
1696       && varies_p (mem1_addr, 1) && !varies_p (mem2_addr, 1))
1697     /* MEM2 is a scalar at a fixed address; MEM1 is a struct at a
1698        varying address.  */
1699     return mem2;
1700
1701   return NULL_RTX;
1702 }
1703
1704 /* Returns nonzero if something about the mode or address format MEM1
1705    indicates that it might well alias *anything*.  */
1706
1707 static int
1708 aliases_everything_p (mem)
1709      rtx mem;
1710 {
1711   if (GET_CODE (XEXP (mem, 0)) == AND)
1712     /* If the address is an AND, its very hard to know at what it is
1713        actually pointing.  */
1714     return 1;
1715     
1716   return 0;
1717 }
1718
1719 /* True dependence: X is read after store in MEM takes place.  */
1720
1721 int
1722 true_dependence (mem, mem_mode, x, varies)
1723      rtx mem;
1724      enum machine_mode mem_mode;
1725      rtx x;
1726      int (*varies) PARAMS ((rtx, int));
1727 {
1728   register rtx x_addr, mem_addr;
1729   rtx base;
1730
1731   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
1732     return 1;
1733
1734   if (DIFFERENT_ALIAS_SETS_P (x, mem))
1735     return 0;
1736
1737   /* Unchanging memory can't conflict with non-unchanging memory.
1738      A non-unchanging read can conflict with a non-unchanging write.
1739      An unchanging read can conflict with an unchanging write since
1740      there may be a single store to this address to initialize it.
1741      Note that an unchanging store can conflict with a non-unchanging read
1742      since we have to make conservative assumptions when we have a
1743      record with readonly fields and we are copying the whole thing.
1744      Just fall through to the code below to resolve potential conflicts.
1745      This won't handle all cases optimally, but the possible performance
1746      loss should be negligible.  */
1747   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
1748     return 0;
1749
1750   if (mem_mode == VOIDmode)
1751     mem_mode = GET_MODE (mem);
1752
1753   x_addr = get_addr (XEXP (x, 0));
1754   mem_addr = get_addr (XEXP (mem, 0));
1755
1756   base = find_base_term (x_addr);
1757   if (base && (GET_CODE (base) == LABEL_REF
1758                || (GET_CODE (base) == SYMBOL_REF
1759                    && CONSTANT_POOL_ADDRESS_P (base))))
1760     return 0;
1761
1762   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
1763     return 0;
1764
1765   x_addr = canon_rtx (x_addr);
1766   mem_addr = canon_rtx (mem_addr);
1767
1768   if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
1769                             SIZE_FOR_MODE (x), x_addr, 0))
1770     return 0;
1771
1772   if (aliases_everything_p (x))
1773     return 1;
1774
1775   /* We cannot use aliases_everyting_p to test MEM, since we must look
1776      at MEM_MODE, rather than GET_MODE (MEM).  */
1777   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
1778     return 1;
1779
1780   /* In true_dependence we also allow BLKmode to alias anything.  Why
1781      don't we do this in anti_dependence and output_dependence?  */
1782   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
1783     return 1;
1784
1785   return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
1786                                               varies);
1787 }
1788
1789 /* Canonical true dependence: X is read after store in MEM takes place.
1790    Variant of true_dependece which assumes MEM has already been 
1791    canonicalized (hence we no longer do that here).  
1792    The mem_addr argument has been added, since true_dependence computed 
1793    this value prior to canonicalizing.  */
1794
1795 int
1796 canon_true_dependence (mem, mem_mode, mem_addr, x, varies)
1797      rtx mem, mem_addr, x;
1798      enum machine_mode mem_mode;
1799      int (*varies) PARAMS ((rtx, int));
1800 {
1801   register rtx x_addr;
1802
1803   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
1804     return 1;
1805
1806   if (DIFFERENT_ALIAS_SETS_P (x, mem))
1807     return 0;
1808
1809   /* If X is an unchanging read, then it can't possibly conflict with any
1810      non-unchanging store.  It may conflict with an unchanging write though,
1811      because there may be a single store to this address to initialize it.
1812      Just fall through to the code below to resolve the case where we have
1813      both an unchanging read and an unchanging write.  This won't handle all
1814      cases optimally, but the possible performance loss should be
1815      negligible.  */
1816   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
1817     return 0;
1818
1819   x_addr = get_addr (XEXP (x, 0));
1820
1821   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
1822     return 0;
1823
1824   x_addr = canon_rtx (x_addr);
1825   if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
1826                             SIZE_FOR_MODE (x), x_addr, 0))
1827     return 0;
1828
1829   if (aliases_everything_p (x))
1830     return 1;
1831
1832   /* We cannot use aliases_everyting_p to test MEM, since we must look
1833      at MEM_MODE, rather than GET_MODE (MEM).  */
1834   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
1835     return 1;
1836
1837   /* In true_dependence we also allow BLKmode to alias anything.  Why
1838      don't we do this in anti_dependence and output_dependence?  */
1839   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
1840     return 1;
1841
1842   return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
1843                                               varies);
1844 }
1845
1846 /* Returns non-zero if a write to X might alias a previous read from
1847    (or, if WRITEP is non-zero, a write to) MEM.  */
1848
1849 static int
1850 write_dependence_p (mem, x, writep)
1851      rtx mem;
1852      rtx x;
1853      int writep;
1854 {
1855   rtx x_addr, mem_addr;
1856   rtx fixed_scalar;
1857   rtx base;
1858
1859   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
1860     return 1;
1861
1862   if (DIFFERENT_ALIAS_SETS_P (x, mem))
1863     return 0;
1864
1865   /* Unchanging memory can't conflict with non-unchanging memory.  */
1866   if (RTX_UNCHANGING_P (x) != RTX_UNCHANGING_P (mem))
1867     return 0;
1868
1869   /* If MEM is an unchanging read, then it can't possibly conflict with
1870      the store to X, because there is at most one store to MEM, and it must
1871      have occurred somewhere before MEM.  */
1872   if (! writep && RTX_UNCHANGING_P (mem))
1873     return 0;
1874
1875   x_addr = get_addr (XEXP (x, 0));
1876   mem_addr = get_addr (XEXP (mem, 0));
1877
1878   if (! writep)
1879     {
1880       base = find_base_term (mem_addr);
1881       if (base && (GET_CODE (base) == LABEL_REF
1882                    || (GET_CODE (base) == SYMBOL_REF
1883                        && CONSTANT_POOL_ADDRESS_P (base))))
1884         return 0;
1885     }
1886
1887   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x),
1888                           GET_MODE (mem)))
1889     return 0;
1890
1891   x_addr = canon_rtx (x_addr);
1892   mem_addr = canon_rtx (mem_addr);
1893
1894   if (!memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
1895                            SIZE_FOR_MODE (x), x_addr, 0))
1896     return 0;
1897
1898   fixed_scalar 
1899     = fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
1900                                          rtx_addr_varies_p);
1901
1902   return (!(fixed_scalar == mem && !aliases_everything_p (x))
1903           && !(fixed_scalar == x && !aliases_everything_p (mem)));
1904 }
1905
1906 /* Anti dependence: X is written after read in MEM takes place.  */
1907
1908 int
1909 anti_dependence (mem, x)
1910      rtx mem;
1911      rtx x;
1912 {
1913   return write_dependence_p (mem, x, /*writep=*/0);
1914 }
1915
1916 /* Output dependence: X is written after store in MEM takes place.  */
1917
1918 int
1919 output_dependence (mem, x)
1920      register rtx mem;
1921      register rtx x;
1922 {
1923   return write_dependence_p (mem, x, /*writep=*/1);
1924 }
1925
1926 /* Returns non-zero if X mentions something which is not
1927    local to the function and is not constant.  */
1928
1929 static int
1930 nonlocal_mentioned_p (x)
1931      rtx x;
1932 {
1933   rtx base;
1934   register RTX_CODE code;
1935   int regno;
1936
1937   code = GET_CODE (x);
1938
1939   if (GET_RTX_CLASS (code) == 'i')
1940     {
1941       /* Constant functions can be constant if they don't use
1942          scratch memory used to mark function w/o side effects.  */
1943       if (code == CALL_INSN && CONST_OR_PURE_CALL_P (x))
1944         {
1945           x = CALL_INSN_FUNCTION_USAGE (x);
1946           if (x == 0)
1947             return 0;
1948         }
1949       else
1950         x = PATTERN (x);
1951       code = GET_CODE (x);
1952     }
1953
1954   switch (code)
1955     {
1956     case SUBREG:
1957       if (GET_CODE (SUBREG_REG (x)) == REG)
1958         {
1959           /* Global registers are not local.  */
1960           if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER
1961               && global_regs[subreg_regno (x)])
1962             return 1;
1963           return 0;
1964         }
1965       break;
1966
1967     case REG:
1968       regno = REGNO (x);
1969       /* Global registers are not local.  */
1970       if (regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
1971         return 1;
1972       return 0;
1973
1974     case SCRATCH:
1975     case PC:
1976     case CC0:
1977     case CONST_INT:
1978     case CONST_DOUBLE:
1979     case CONST:
1980     case LABEL_REF:
1981       return 0;
1982
1983     case SYMBOL_REF:
1984       /* Constants in the function's constants pool are constant.  */
1985       if (CONSTANT_POOL_ADDRESS_P (x))
1986         return 0;
1987       return 1;
1988
1989     case CALL:
1990       /* Non-constant calls and recursion are not local.  */
1991       return 1;
1992
1993     case MEM:
1994       /* Be overly conservative and consider any volatile memory
1995          reference as not local.  */
1996       if (MEM_VOLATILE_P (x))
1997         return 1;
1998       base = find_base_term (XEXP (x, 0));
1999       if (base)
2000         {
2001           /* A Pmode ADDRESS could be a reference via the structure value
2002              address or static chain.  Such memory references are nonlocal.
2003
2004              Thus, we have to examine the contents of the ADDRESS to find
2005              out if this is a local reference or not.  */
2006           if (GET_CODE (base) == ADDRESS
2007               && GET_MODE (base) == Pmode
2008               && (XEXP (base, 0) == stack_pointer_rtx
2009                   || XEXP (base, 0) == arg_pointer_rtx
2010 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2011                   || XEXP (base, 0) == hard_frame_pointer_rtx
2012 #endif
2013                   || XEXP (base, 0) == frame_pointer_rtx))
2014             return 0;
2015           /* Constants in the function's constant pool are constant.  */
2016           if (GET_CODE (base) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (base))
2017             return 0;
2018         }
2019       return 1;
2020
2021     case UNSPEC_VOLATILE:
2022     case ASM_INPUT:
2023       return 1;
2024
2025     case ASM_OPERANDS:
2026       if (MEM_VOLATILE_P (x))
2027         return 1;
2028
2029     /* FALLTHROUGH */
2030
2031     default:
2032       break;
2033     }
2034
2035   /* Recursively scan the operands of this expression.  */
2036
2037   {
2038     register const char *fmt = GET_RTX_FORMAT (code);
2039     register int i;
2040     
2041     for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
2042       {
2043         if (fmt[i] == 'e' && XEXP (x, i))
2044           {
2045             if (nonlocal_mentioned_p (XEXP (x, i)))
2046               return 1;
2047           }
2048         else if (fmt[i] == 'E')
2049           {
2050             register int j;
2051             for (j = 0; j < XVECLEN (x, i); j++)
2052               if (nonlocal_mentioned_p (XVECEXP (x, i, j)))
2053                 return 1;
2054           }
2055       }
2056   }
2057
2058   return 0;
2059 }
2060
2061 /* Mark the function if it is constant.  */
2062
2063 void
2064 mark_constant_function ()
2065 {
2066   rtx insn;
2067   int nonlocal_mentioned;
2068
2069   if (TREE_PUBLIC (current_function_decl)
2070       || TREE_READONLY (current_function_decl)
2071       || DECL_IS_PURE (current_function_decl)
2072       || TREE_THIS_VOLATILE (current_function_decl)
2073       || TYPE_MODE (TREE_TYPE (current_function_decl)) == VOIDmode)
2074     return;
2075
2076   /* A loop might not return which counts as a side effect.  */
2077   if (mark_dfs_back_edges ())
2078     return;
2079
2080   nonlocal_mentioned = 0;
2081
2082   init_alias_analysis ();
2083
2084   /* Determine if this is a constant function.  */
2085
2086   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2087     if (INSN_P (insn) && nonlocal_mentioned_p (insn))
2088       {
2089         nonlocal_mentioned = 1;
2090         break;
2091       }
2092
2093   end_alias_analysis ();
2094
2095   /* Mark the function.  */
2096
2097   if (! nonlocal_mentioned)
2098     TREE_READONLY (current_function_decl) = 1;
2099 }
2100
2101
2102 static HARD_REG_SET argument_registers;
2103
2104 void
2105 init_alias_once ()
2106 {
2107   register int i;
2108
2109 #ifndef OUTGOING_REGNO
2110 #define OUTGOING_REGNO(N) N
2111 #endif
2112   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2113     /* Check whether this register can hold an incoming pointer
2114        argument.  FUNCTION_ARG_REGNO_P tests outgoing register
2115        numbers, so translate if necessary due to register windows.  */
2116     if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i))
2117         && HARD_REGNO_MODE_OK (i, Pmode))
2118       SET_HARD_REG_BIT (argument_registers, i);
2119
2120   alias_sets = splay_tree_new (splay_tree_compare_ints, 0, 0);
2121 }
2122
2123 /* Initialize the aliasing machinery.  Initialize the REG_KNOWN_VALUE
2124    array.  */
2125
2126 void
2127 init_alias_analysis ()
2128 {
2129   int maxreg = max_reg_num ();
2130   int changed, pass;
2131   register int i;
2132   register unsigned int ui;
2133   register rtx insn;
2134
2135   reg_known_value_size = maxreg;
2136
2137   reg_known_value 
2138     = (rtx *) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (rtx))
2139     - FIRST_PSEUDO_REGISTER;
2140   reg_known_equiv_p 
2141     = (char*) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (char))
2142     - FIRST_PSEUDO_REGISTER;
2143
2144   /* Overallocate reg_base_value to allow some growth during loop
2145      optimization.  Loop unrolling can create a large number of
2146      registers.  */
2147   reg_base_value_size = maxreg * 2;
2148   reg_base_value = (rtx *) xcalloc (reg_base_value_size, sizeof (rtx));
2149   ggc_add_rtx_root (reg_base_value, reg_base_value_size);
2150
2151   new_reg_base_value = (rtx *) xmalloc (reg_base_value_size * sizeof (rtx));
2152   reg_seen = (char *) xmalloc (reg_base_value_size);
2153   if (! reload_completed && flag_unroll_loops)
2154     {
2155       /* ??? Why are we realloc'ing if we're just going to zero it?  */
2156       alias_invariant = (rtx *)xrealloc (alias_invariant,
2157                                          reg_base_value_size * sizeof (rtx));
2158       memset ((char *)alias_invariant, 0, reg_base_value_size * sizeof (rtx));
2159     }
2160
2161   /* The basic idea is that each pass through this loop will use the
2162      "constant" information from the previous pass to propagate alias
2163      information through another level of assignments.
2164
2165      This could get expensive if the assignment chains are long.  Maybe
2166      we should throttle the number of iterations, possibly based on
2167      the optimization level or flag_expensive_optimizations.
2168
2169      We could propagate more information in the first pass by making use
2170      of REG_N_SETS to determine immediately that the alias information
2171      for a pseudo is "constant".
2172
2173      A program with an uninitialized variable can cause an infinite loop
2174      here.  Instead of doing a full dataflow analysis to detect such problems
2175      we just cap the number of iterations for the loop.
2176
2177      The state of the arrays for the set chain in question does not matter
2178      since the program has undefined behavior.  */
2179
2180   pass = 0;
2181   do
2182     {
2183       /* Assume nothing will change this iteration of the loop.  */
2184       changed = 0;
2185
2186       /* We want to assign the same IDs each iteration of this loop, so
2187          start counting from zero each iteration of the loop.  */
2188       unique_id = 0;
2189
2190       /* We're at the start of the funtion each iteration through the
2191          loop, so we're copying arguments.  */
2192       copying_arguments = 1;
2193
2194       /* Wipe the potential alias information clean for this pass.  */
2195       memset ((char *) new_reg_base_value, 0, reg_base_value_size * sizeof (rtx));
2196
2197       /* Wipe the reg_seen array clean.  */
2198       memset ((char *) reg_seen, 0, reg_base_value_size);
2199
2200       /* Mark all hard registers which may contain an address.
2201          The stack, frame and argument pointers may contain an address.
2202          An argument register which can hold a Pmode value may contain
2203          an address even if it is not in BASE_REGS.
2204
2205          The address expression is VOIDmode for an argument and
2206          Pmode for other registers.  */
2207
2208       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2209         if (TEST_HARD_REG_BIT (argument_registers, i))
2210           new_reg_base_value[i] = gen_rtx_ADDRESS (VOIDmode,
2211                                                    gen_rtx_REG (Pmode, i));
2212
2213       new_reg_base_value[STACK_POINTER_REGNUM]
2214         = gen_rtx_ADDRESS (Pmode, stack_pointer_rtx);
2215       new_reg_base_value[ARG_POINTER_REGNUM]
2216         = gen_rtx_ADDRESS (Pmode, arg_pointer_rtx);
2217       new_reg_base_value[FRAME_POINTER_REGNUM]
2218         = gen_rtx_ADDRESS (Pmode, frame_pointer_rtx);
2219 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2220       new_reg_base_value[HARD_FRAME_POINTER_REGNUM]
2221         = gen_rtx_ADDRESS (Pmode, hard_frame_pointer_rtx);
2222 #endif
2223
2224       /* Walk the insns adding values to the new_reg_base_value array.  */
2225       for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2226         {
2227           if (INSN_P (insn))
2228             {
2229               rtx note, set;
2230
2231 #if defined (HAVE_prologue) || defined (HAVE_epilogue)
2232               /* The prologue/epilouge insns are not threaded onto the
2233                  insn chain until after reload has completed.  Thus,
2234                  there is no sense wasting time checking if INSN is in
2235                  the prologue/epilogue until after reload has completed.  */
2236               if (reload_completed
2237                   && prologue_epilogue_contains (insn))
2238                 continue;
2239 #endif
2240
2241               /* If this insn has a noalias note, process it,  Otherwise,
2242                  scan for sets.  A simple set will have no side effects
2243                  which could change the base value of any other register.  */
2244
2245               if (GET_CODE (PATTERN (insn)) == SET
2246                   && REG_NOTES (insn) != 0
2247                   && find_reg_note (insn, REG_NOALIAS, NULL_RTX))
2248                 record_set (SET_DEST (PATTERN (insn)), NULL_RTX, NULL);
2249               else
2250                 note_stores (PATTERN (insn), record_set, NULL);
2251
2252               set = single_set (insn);
2253
2254               if (set != 0
2255                   && GET_CODE (SET_DEST (set)) == REG
2256                   && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER)
2257                 {
2258                   unsigned int regno = REGNO (SET_DEST (set));
2259                   rtx src = SET_SRC (set);
2260
2261                   if (REG_NOTES (insn) != 0
2262                       && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
2263                            && REG_N_SETS (regno) == 1)
2264                           || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
2265                       && GET_CODE (XEXP (note, 0)) != EXPR_LIST
2266                       && ! rtx_varies_p (XEXP (note, 0), 1)
2267                       && ! reg_overlap_mentioned_p (SET_DEST (set), XEXP (note, 0)))
2268                     {
2269                       reg_known_value[regno] = XEXP (note, 0);
2270                       reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV;
2271                     }
2272                   else if (REG_N_SETS (regno) == 1
2273                            && GET_CODE (src) == PLUS
2274                            && GET_CODE (XEXP (src, 0)) == REG
2275                            && REGNO (XEXP (src, 0)) >= FIRST_PSEUDO_REGISTER
2276                            && (reg_known_value[REGNO (XEXP (src, 0))])
2277                            && GET_CODE (XEXP (src, 1)) == CONST_INT)
2278                     {
2279                       rtx op0 = XEXP (src, 0);
2280                       op0 = reg_known_value[REGNO (op0)];
2281                       reg_known_value[regno]
2282                         = plus_constant (op0, INTVAL (XEXP (src, 1)));
2283                       reg_known_equiv_p[regno] = 0;
2284                     }
2285                   else if (REG_N_SETS (regno) == 1
2286                            && ! rtx_varies_p (src, 1))
2287                     {
2288                       reg_known_value[regno] = src;
2289                       reg_known_equiv_p[regno] = 0;
2290                     }
2291                 }
2292             }
2293           else if (GET_CODE (insn) == NOTE
2294                    && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
2295             copying_arguments = 0;
2296         }
2297
2298       /* Now propagate values from new_reg_base_value to reg_base_value.  */
2299       for (ui = 0; ui < reg_base_value_size; ui++)
2300         {
2301           if (new_reg_base_value[ui]
2302               && new_reg_base_value[ui] != reg_base_value[ui]
2303               && ! rtx_equal_p (new_reg_base_value[ui], reg_base_value[ui]))
2304             {
2305               reg_base_value[ui] = new_reg_base_value[ui];
2306               changed = 1;
2307             }
2308         }
2309     }
2310   while (changed && ++pass < MAX_ALIAS_LOOP_PASSES);
2311
2312   /* Fill in the remaining entries.  */
2313   for (i = FIRST_PSEUDO_REGISTER; i < maxreg; i++)
2314     if (reg_known_value[i] == 0)
2315       reg_known_value[i] = regno_reg_rtx[i];
2316
2317   /* Simplify the reg_base_value array so that no register refers to
2318      another register, except to special registers indirectly through
2319      ADDRESS expressions.
2320
2321      In theory this loop can take as long as O(registers^2), but unless
2322      there are very long dependency chains it will run in close to linear
2323      time.
2324
2325      This loop may not be needed any longer now that the main loop does
2326      a better job at propagating alias information.  */
2327   pass = 0;
2328   do
2329     {
2330       changed = 0;
2331       pass++;
2332       for (ui = 0; ui < reg_base_value_size; ui++)
2333         {
2334           rtx base = reg_base_value[ui];
2335           if (base && GET_CODE (base) == REG)
2336             {
2337               unsigned int base_regno = REGNO (base);
2338               if (base_regno == ui)             /* register set from itself */
2339                 reg_base_value[ui] = 0;
2340               else
2341                 reg_base_value[ui] = reg_base_value[base_regno];
2342               changed = 1;
2343             }
2344         }
2345     }
2346   while (changed && pass < MAX_ALIAS_LOOP_PASSES);
2347
2348   /* Clean up.  */
2349   free (new_reg_base_value);
2350   new_reg_base_value = 0;
2351   free (reg_seen);
2352   reg_seen = 0;
2353 }
2354
2355 void
2356 end_alias_analysis ()
2357 {
2358   free (reg_known_value + FIRST_PSEUDO_REGISTER);
2359   reg_known_value = 0;
2360   reg_known_value_size = 0;
2361   free (reg_known_equiv_p + FIRST_PSEUDO_REGISTER);
2362   reg_known_equiv_p = 0;
2363   if (reg_base_value)
2364     {
2365       ggc_del_root (reg_base_value);
2366       free (reg_base_value);
2367       reg_base_value = 0;
2368     }
2369   reg_base_value_size = 0;
2370   if (alias_invariant)
2371     {
2372       free (alias_invariant);
2373       alias_invariant = 0;
2374     }
2375 }