OSDN Git Service

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