OSDN Git Service

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