OSDN Git Service

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