OSDN Git Service

* timevar.c (getrusage): Don't ever declare if not HAVE_GETRUSAGE.
[pf3gnuchains/gcc-fork.git] / gcc / alias.c
1 /* Alias analysis for GNU C
2    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
3    Free Software Foundation, Inc.
4    Contributed by John Carr (jfc@mit.edu).
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING.  If not, write to the Free
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
21 02111-1307, USA.  */
22
23 #include "config.h"
24 #include "system.h"
25 #include "coretypes.h"
26 #include "tm.h"
27 #include "rtl.h"
28 #include "tree.h"
29 #include "tm_p.h"
30 #include "function.h"
31 #include "expr.h"
32 #include "regs.h"
33 #include "hard-reg-set.h"
34 #include "basic-block.h"
35 #include "flags.h"
36 #include "output.h"
37 #include "toplev.h"
38 #include "cselib.h"
39 #include "splay-tree.h"
40 #include "ggc.h"
41 #include "langhooks.h"
42 #include "target.h"
43
44 /* The alias sets assigned to MEMs assist the back-end in determining
45    which MEMs can alias which other MEMs.  In general, two MEMs in
46    different alias sets cannot alias each other, with one important
47    exception.  Consider something like:
48
49      struct S {int i; double d; };
50
51    a store to an `S' can alias something of either type `int' or type
52    `double'.  (However, a store to an `int' cannot alias a `double'
53    and vice versa.)  We indicate this via a tree structure that looks
54    like:
55            struct S
56             /   \
57            /     \
58          |/_     _\|
59          int    double
60
61    (The arrows are directed and point downwards.)
62     In this situation we say the alias set for `struct S' is the
63    `superset' and that those for `int' and `double' are `subsets'.
64
65    To see whether two alias sets can point to the same memory, we must
66    see if either alias set is a subset of the other. We need not trace
67    past immediate descendants, however, since we propagate all
68    grandchildren up one level.
69
70    Alias set zero is implicitly a superset of all other alias sets.
71    However, this is no actual entry for alias set zero.  It is an
72    error to attempt to explicitly construct a subset of zero.  */
73
74 typedef struct alias_set_entry
75 {
76   /* The alias set number, as stored in MEM_ALIAS_SET.  */
77   HOST_WIDE_INT alias_set;
78
79   /* The children of the alias set.  These are not just the immediate
80      children, but, in fact, all descendants.  So, if we have:
81
82        struct T { struct S s; float f; }
83
84      continuing our example above, the children here will be all of
85      `int', `double', `float', and `struct S'.  */
86   splay_tree children;
87
88   /* Nonzero if would have a child of zero: this effectively makes this
89      alias set the same as alias set zero.  */
90   int has_zero_child;
91 } *alias_set_entry;
92
93 static int rtx_equal_for_memref_p       PARAMS ((rtx, rtx));
94 static rtx find_symbolic_term           PARAMS ((rtx));
95 rtx get_addr                            PARAMS ((rtx));
96 static int memrefs_conflict_p           PARAMS ((int, rtx, int, rtx,
97                                                  HOST_WIDE_INT));
98 static void record_set                  PARAMS ((rtx, rtx, void *));
99 static rtx find_base_term               PARAMS ((rtx));
100 static int base_alias_check             PARAMS ((rtx, rtx, enum machine_mode,
101                                                  enum machine_mode));
102 static rtx find_base_value              PARAMS ((rtx));
103 static int mems_in_disjoint_alias_sets_p PARAMS ((rtx, rtx));
104 static int insert_subset_children       PARAMS ((splay_tree_node, void*));
105 static tree find_base_decl              PARAMS ((tree));
106 static alias_set_entry get_alias_set_entry PARAMS ((HOST_WIDE_INT));
107 static rtx fixed_scalar_and_varying_struct_p PARAMS ((rtx, rtx, rtx, rtx,
108                                                       int (*) (rtx, int)));
109 static int aliases_everything_p         PARAMS ((rtx));
110 static bool nonoverlapping_component_refs_p PARAMS ((tree, tree));
111 static tree decl_for_component_ref      PARAMS ((tree));
112 static rtx adjust_offset_for_component_ref PARAMS ((tree, rtx));
113 static int nonoverlapping_memrefs_p     PARAMS ((rtx, rtx));
114 static int write_dependence_p           PARAMS ((rtx, rtx, int));
115
116 static int nonlocal_mentioned_p_1       PARAMS ((rtx *, void *));
117 static int nonlocal_mentioned_p         PARAMS ((rtx));
118 static int nonlocal_referenced_p_1      PARAMS ((rtx *, void *));
119 static int nonlocal_referenced_p        PARAMS ((rtx));
120 static int nonlocal_set_p_1             PARAMS ((rtx *, void *));
121 static int nonlocal_set_p               PARAMS ((rtx));
122 static void memory_modified_1           PARAMS ((rtx, rtx, void *));
123
124 /* Set up all info needed to perform alias analysis on memory references.  */
125
126 /* Returns the size in bytes of the mode of X.  */
127 #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X)))
128
129 /* Returns nonzero if MEM1 and MEM2 do not alias because they are in
130    different alias sets.  We ignore alias sets in functions making use
131    of variable arguments because the va_arg macros on some systems are
132    not legal ANSI C.  */
133 #define DIFFERENT_ALIAS_SETS_P(MEM1, MEM2)                      \
134   mems_in_disjoint_alias_sets_p (MEM1, MEM2)
135
136 /* Cap the number of passes we make over the insns propagating alias
137    information through set chains.   10 is a completely arbitrary choice.  */
138 #define MAX_ALIAS_LOOP_PASSES 10
139
140 /* reg_base_value[N] gives an address to which register N is related.
141    If all sets after the first add or subtract to the current value
142    or otherwise modify it so it does not point to a different top level
143    object, reg_base_value[N] is equal to the address part of the source
144    of the first set.
145
146    A base address can be an ADDRESS, SYMBOL_REF, or LABEL_REF.  ADDRESS
147    expressions represent certain special values: function arguments and
148    the stack, frame, and argument pointers.
149
150    The contents of an ADDRESS is not normally used, the mode of the
151    ADDRESS determines whether the ADDRESS is a function argument or some
152    other special value.  Pointer equality, not rtx_equal_p, determines whether
153    two ADDRESS expressions refer to the same base address.
154
155    The only use of the contents of an ADDRESS is for determining if the
156    current function performs nonlocal memory memory references for the
157    purposes of marking the function as a constant function.  */
158
159 static GTY((length ("reg_base_value_size"))) rtx *reg_base_value;
160 static rtx *new_reg_base_value;
161 static unsigned int reg_base_value_size; /* size of reg_base_value array */
162
163 /* Static hunks of RTL used by the aliasing code; these are initialized
164    once per function to avoid unnecessary RTL allocations.  */
165 static GTY (()) rtx static_reg_base_value[FIRST_PSEUDO_REGISTER];
166
167 #define REG_BASE_VALUE(X) \
168   (REGNO (X) < reg_base_value_size \
169    ? reg_base_value[REGNO (X)] : 0)
170
171 /* Vector of known invariant relationships between registers.  Set in
172    loop unrolling.  Indexed by register number, if nonzero the value
173    is an expression describing this register in terms of another.
174
175    The length of this array is REG_BASE_VALUE_SIZE.
176
177    Because this array contains only pseudo registers it has no effect
178    after reload.  */
179 static rtx *alias_invariant;
180
181 /* Vector indexed by N giving the initial (unchanging) value known for
182    pseudo-register N.  This array is initialized in
183    init_alias_analysis, and does not change until end_alias_analysis
184    is called.  */
185 rtx *reg_known_value;
186
187 /* Indicates number of valid entries in reg_known_value.  */
188 static unsigned int reg_known_value_size;
189
190 /* Vector recording for each reg_known_value whether it is due to a
191    REG_EQUIV note.  Future passes (viz., reload) may replace the
192    pseudo with the equivalent expression and so we account for the
193    dependences that would be introduced if that happens.
194
195    The REG_EQUIV notes created in assign_parms may mention the arg
196    pointer, and there are explicit insns in the RTL that modify the
197    arg pointer.  Thus we must ensure that such insns don't get
198    scheduled across each other because that would invalidate the
199    REG_EQUIV notes.  One could argue that the REG_EQUIV notes are
200    wrong, but solving the problem in the scheduler will likely give
201    better code, so we do it here.  */
202 char *reg_known_equiv_p;
203
204 /* True when scanning insns from the start of the rtl to the
205    NOTE_INSN_FUNCTION_BEG note.  */
206 static bool copying_arguments;
207
208 /* The splay-tree used to store the various alias set entries.  */
209 static splay_tree alias_sets;
210 \f
211 /* Returns a pointer to the alias set entry for ALIAS_SET, if there is
212    such an entry, or NULL otherwise.  */
213
214 static alias_set_entry
215 get_alias_set_entry (alias_set)
216      HOST_WIDE_INT alias_set;
217 {
218   splay_tree_node sn
219     = splay_tree_lookup (alias_sets, (splay_tree_key) alias_set);
220
221   return sn != 0 ? ((alias_set_entry) sn->value) : 0;
222 }
223
224 /* Returns nonzero if the alias sets for MEM1 and MEM2 are such that
225    the two MEMs cannot alias each other.  */
226
227 static int
228 mems_in_disjoint_alias_sets_p (mem1, mem2)
229      rtx mem1;
230      rtx mem2;
231 {
232 #ifdef ENABLE_CHECKING
233 /* Perform a basic sanity check.  Namely, that there are no alias sets
234    if we're not using strict aliasing.  This helps to catch bugs
235    whereby someone uses PUT_CODE, but doesn't clear MEM_ALIAS_SET, or
236    where a MEM is allocated in some way other than by the use of
237    gen_rtx_MEM, and the MEM_ALIAS_SET is not cleared.  If we begin to
238    use alias sets to indicate that spilled registers cannot alias each
239    other, we might need to remove this check.  */
240   if (! flag_strict_aliasing
241       && (MEM_ALIAS_SET (mem1) != 0 || MEM_ALIAS_SET (mem2) != 0))
242     abort ();
243 #endif
244
245   return ! alias_sets_conflict_p (MEM_ALIAS_SET (mem1), MEM_ALIAS_SET (mem2));
246 }
247
248 /* Insert the NODE into the splay tree given by DATA.  Used by
249    record_alias_subset via splay_tree_foreach.  */
250
251 static int
252 insert_subset_children (node, data)
253      splay_tree_node node;
254      void *data;
255 {
256   splay_tree_insert ((splay_tree) data, node->key, node->value);
257
258   return 0;
259 }
260
261 /* Return 1 if the two specified alias sets may conflict.  */
262
263 int
264 alias_sets_conflict_p (set1, set2)
265      HOST_WIDE_INT set1, set2;
266 {
267   alias_set_entry ase;
268
269   /* If have no alias set information for one of the operands, we have
270      to assume it can alias anything.  */
271   if (set1 == 0 || set2 == 0
272       /* If the two alias sets are the same, they may alias.  */
273       || set1 == set2)
274     return 1;
275
276   /* See if the first alias set is a subset of the second.  */
277   ase = get_alias_set_entry (set1);
278   if (ase != 0
279       && (ase->has_zero_child
280           || splay_tree_lookup (ase->children,
281                                 (splay_tree_key) set2)))
282     return 1;
283
284   /* Now do the same, but with the alias sets reversed.  */
285   ase = get_alias_set_entry (set2);
286   if (ase != 0
287       && (ase->has_zero_child
288           || splay_tree_lookup (ase->children,
289                                 (splay_tree_key) set1)))
290     return 1;
291
292   /* The two alias sets are distinct and neither one is the
293      child of the other.  Therefore, they cannot alias.  */
294   return 0;
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 && lang_hooks.honor_readonly && TYPE_READONLY (t1))
340       || (t2 != 0 && lang_hooks.honor_readonly && 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 returned.  */
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 all the nested component references handled by
420    get_inner_reference in T are such that we can address the object in T.  */
421
422 int
423 can_address_p (t)
424      tree t;
425 {
426   /* If we're at the end, it is vacuously addressable.  */
427   if (! handled_component_p (t))
428     return 1;
429
430   /* Bitfields are never addressable.  */
431   else if (TREE_CODE (t) == BIT_FIELD_REF)
432     return 0;
433
434   /* Fields are addressable unless they are marked as nonaddressable or
435      the containing type has alias set 0.  */
436   else if (TREE_CODE (t) == COMPONENT_REF
437            && ! DECL_NONADDRESSABLE_P (TREE_OPERAND (t, 1))
438            && get_alias_set (TREE_TYPE (TREE_OPERAND (t, 0))) != 0
439            && can_address_p (TREE_OPERAND (t, 0)))
440     return 1;
441
442   /* Likewise for arrays.  */
443   else if ((TREE_CODE (t) == ARRAY_REF || TREE_CODE (t) == ARRAY_RANGE_REF)
444            && ! TYPE_NONALIASED_COMPONENT (TREE_TYPE (TREE_OPERAND (t, 0)))
445            && get_alias_set (TREE_TYPE (TREE_OPERAND (t, 0))) != 0
446            && can_address_p (TREE_OPERAND (t, 0)))
447     return 1;
448
449   return 0;
450 }
451
452 /* Return the alias set for T, which may be either a type or an
453    expression.  Call language-specific routine for help, if needed.  */
454
455 HOST_WIDE_INT
456 get_alias_set (t)
457      tree t;
458 {
459   HOST_WIDE_INT set;
460
461   /* If we're not doing any alias analysis, just assume everything
462      aliases everything else.  Also return 0 if this or its type is
463      an error.  */
464   if (! flag_strict_aliasing || t == error_mark_node
465       || (! TYPE_P (t)
466           && (TREE_TYPE (t) == 0 || TREE_TYPE (t) == error_mark_node)))
467     return 0;
468
469   /* We can be passed either an expression or a type.  This and the
470      language-specific routine may make mutually-recursive calls to each other
471      to figure out what to do.  At each juncture, we see if this is a tree
472      that the language may need to handle specially.  First handle things that
473      aren't types.  */
474   if (! TYPE_P (t))
475     {
476       tree inner = t;
477       tree placeholder_ptr = 0;
478
479       /* Remove any nops, then give the language a chance to do
480          something with this tree before we look at it.  */
481       STRIP_NOPS (t);
482       set = (*lang_hooks.get_alias_set) (t);
483       if (set != -1)
484         return set;
485
486       /* First see if the actual object referenced is an INDIRECT_REF from a
487          restrict-qualified pointer or a "void *".  Replace
488          PLACEHOLDER_EXPRs.  */
489       while (TREE_CODE (inner) == PLACEHOLDER_EXPR
490              || handled_component_p (inner))
491         {
492           if (TREE_CODE (inner) == PLACEHOLDER_EXPR)
493             inner = find_placeholder (inner, &placeholder_ptr);
494           else
495             inner = TREE_OPERAND (inner, 0);
496
497           STRIP_NOPS (inner);
498         }
499
500       /* Check for accesses through restrict-qualified pointers.  */
501       if (TREE_CODE (inner) == INDIRECT_REF)
502         {
503           tree decl = find_base_decl (TREE_OPERAND (inner, 0));
504
505           if (decl && DECL_POINTER_ALIAS_SET_KNOWN_P (decl))
506             {
507               /* If we haven't computed the actual alias set, do it now.  */
508               if (DECL_POINTER_ALIAS_SET (decl) == -2)
509                 {
510                   /* No two restricted pointers can point at the same thing.
511                      However, a restricted pointer can point at the same thing
512                      as an unrestricted pointer, if that unrestricted pointer
513                      is based on the restricted pointer.  So, we make the
514                      alias set for the restricted pointer a subset of the
515                      alias set for the type pointed to by the type of the
516                      decl.  */
517                   HOST_WIDE_INT pointed_to_alias_set
518                     = get_alias_set (TREE_TYPE (TREE_TYPE (decl)));
519
520                   if (pointed_to_alias_set == 0)
521                     /* It's not legal to make a subset of alias set zero.  */
522                     ;
523                   else
524                     {
525                       DECL_POINTER_ALIAS_SET (decl) = new_alias_set ();
526                       record_alias_subset (pointed_to_alias_set,
527                                            DECL_POINTER_ALIAS_SET (decl));
528                     }
529                 }
530
531               /* We use the alias set indicated in the declaration.  */
532               return DECL_POINTER_ALIAS_SET (decl);
533             }
534
535           /* If we have an INDIRECT_REF via a void pointer, we don't
536              know anything about what that might alias.  */
537           else if (TREE_CODE (TREE_TYPE (inner)) == VOID_TYPE)
538             return 0;
539         }
540
541       /* Otherwise, pick up the outermost object that we could have a pointer
542          to, processing conversion and PLACEHOLDER_EXPR as above.  */
543       placeholder_ptr = 0;
544       while (TREE_CODE (t) == PLACEHOLDER_EXPR
545              || (handled_component_p (t) && ! can_address_p (t)))
546         {
547           if (TREE_CODE (t) == PLACEHOLDER_EXPR)
548             t = find_placeholder (t, &placeholder_ptr);
549           else
550             t = TREE_OPERAND (t, 0);
551
552           STRIP_NOPS (t);
553         }
554
555       /* If we've already determined the alias set for a decl, just return
556          it.  This is necessary for C++ anonymous unions, whose component
557          variables don't look like union members (boo!).  */
558       if (TREE_CODE (t) == VAR_DECL
559           && DECL_RTL_SET_P (t) && GET_CODE (DECL_RTL (t)) == MEM)
560         return MEM_ALIAS_SET (DECL_RTL (t));
561
562       /* Now all we care about is the type.  */
563       t = TREE_TYPE (t);
564     }
565
566   /* Variant qualifiers don't affect the alias set, so get the main
567      variant. If this is a type with a known alias set, return it.  */
568   t = TYPE_MAIN_VARIANT (t);
569   if (TYPE_ALIAS_SET_KNOWN_P (t))
570     return TYPE_ALIAS_SET (t);
571
572   /* See if the language has special handling for this type.  */
573   set = (*lang_hooks.get_alias_set) (t);
574   if (set != -1)
575     return set;
576
577   /* There are no objects of FUNCTION_TYPE, so there's no point in
578      using up an alias set for them.  (There are, of course, pointers
579      and references to functions, but that's different.)  */
580   else if (TREE_CODE (t) == FUNCTION_TYPE)
581     set = 0;
582
583   /* Unless the language specifies otherwise, let vector types alias
584      their components.  This avoids some nasty type punning issues in
585      normal usage.  And indeed lets vectors be treated more like an
586      array slice.  */
587   else if (TREE_CODE (t) == VECTOR_TYPE)
588     set = get_alias_set (TREE_TYPE (t));
589
590   else
591     /* Otherwise make a new alias set for this type.  */
592     set = new_alias_set ();
593
594   TYPE_ALIAS_SET (t) = set;
595
596   /* If this is an aggregate type, we must record any component aliasing
597      information.  */
598   if (AGGREGATE_TYPE_P (t) || TREE_CODE (t) == COMPLEX_TYPE)
599     record_component_aliases (t);
600
601   return set;
602 }
603
604 /* Return a brand-new alias set.  */
605
606 HOST_WIDE_INT
607 new_alias_set ()
608 {
609   static HOST_WIDE_INT last_alias_set;
610
611   if (flag_strict_aliasing)
612     return ++last_alias_set;
613   else
614     return 0;
615 }
616
617 /* Indicate that things in SUBSET can alias things in SUPERSET, but
618    not vice versa.  For example, in C, a store to an `int' can alias a
619    structure containing an `int', but not vice versa.  Here, the
620    structure would be the SUPERSET and `int' the SUBSET.  This
621    function should be called only once per SUPERSET/SUBSET pair.
622
623    It is illegal for SUPERSET to be zero; everything is implicitly a
624    subset of alias set zero.  */
625
626 void
627 record_alias_subset (superset, subset)
628      HOST_WIDE_INT superset;
629      HOST_WIDE_INT subset;
630 {
631   alias_set_entry superset_entry;
632   alias_set_entry subset_entry;
633
634   /* It is possible in complex type situations for both sets to be the same,
635      in which case we can ignore this operation.  */
636   if (superset == subset)
637     return;
638
639   if (superset == 0)
640     abort ();
641
642   superset_entry = get_alias_set_entry (superset);
643   if (superset_entry == 0)
644     {
645       /* Create an entry for the SUPERSET, so that we have a place to
646          attach the SUBSET.  */
647       superset_entry
648         = (alias_set_entry) xmalloc (sizeof (struct alias_set_entry));
649       superset_entry->alias_set = superset;
650       superset_entry->children
651         = splay_tree_new (splay_tree_compare_ints, 0, 0);
652       superset_entry->has_zero_child = 0;
653       splay_tree_insert (alias_sets, (splay_tree_key) superset,
654                          (splay_tree_value) superset_entry);
655     }
656
657   if (subset == 0)
658     superset_entry->has_zero_child = 1;
659   else
660     {
661       subset_entry = get_alias_set_entry (subset);
662       /* If there is an entry for the subset, enter all of its children
663          (if they are not already present) as children of the SUPERSET.  */
664       if (subset_entry)
665         {
666           if (subset_entry->has_zero_child)
667             superset_entry->has_zero_child = 1;
668
669           splay_tree_foreach (subset_entry->children, insert_subset_children,
670                               superset_entry->children);
671         }
672
673       /* Enter the SUBSET itself as a child of the SUPERSET.  */
674       splay_tree_insert (superset_entry->children,
675                          (splay_tree_key) subset, 0);
676     }
677 }
678
679 /* Record that component types of TYPE, if any, are part of that type for
680    aliasing purposes.  For record types, we only record component types
681    for fields that are marked addressable.  For array types, we always
682    record the component types, so the front end should not call this
683    function if the individual component aren't addressable.  */
684
685 void
686 record_component_aliases (type)
687      tree type;
688 {
689   HOST_WIDE_INT superset = get_alias_set (type);
690   tree field;
691
692   if (superset == 0)
693     return;
694
695   switch (TREE_CODE (type))
696     {
697     case ARRAY_TYPE:
698       if (! TYPE_NONALIASED_COMPONENT (type))
699         record_alias_subset (superset, get_alias_set (TREE_TYPE (type)));
700       break;
701
702     case RECORD_TYPE:
703     case UNION_TYPE:
704     case QUAL_UNION_TYPE:
705       /* Recursively record aliases for the base classes, if there are any */
706       if (TYPE_BINFO (type) != NULL && TYPE_BINFO_BASETYPES (type) != NULL)
707         {
708           int i;
709           for (i = 0; i < TREE_VEC_LENGTH (TYPE_BINFO_BASETYPES (type)); i++)
710             {
711               tree binfo = TREE_VEC_ELT (TYPE_BINFO_BASETYPES (type), i);
712               record_alias_subset (superset,
713                                    get_alias_set (BINFO_TYPE (binfo)));
714             }
715         }
716       for (field = TYPE_FIELDS (type); field != 0; field = TREE_CHAIN (field))
717         if (TREE_CODE (field) == FIELD_DECL && ! DECL_NONADDRESSABLE_P (field))
718           record_alias_subset (superset, get_alias_set (TREE_TYPE (field)));
719       break;
720
721     case COMPLEX_TYPE:
722       record_alias_subset (superset, get_alias_set (TREE_TYPE (type)));
723       break;
724
725     default:
726       break;
727     }
728 }
729
730 /* Allocate an alias set for use in storing and reading from the varargs
731    spill area.  */
732
733 HOST_WIDE_INT
734 get_varargs_alias_set ()
735 {
736   static HOST_WIDE_INT set = -1;
737
738   if (set == -1)
739     set = new_alias_set ();
740
741   return set;
742 }
743
744 /* Likewise, but used for the fixed portions of the frame, e.g., register
745    save areas.  */
746
747 HOST_WIDE_INT
748 get_frame_alias_set ()
749 {
750   static HOST_WIDE_INT set = -1;
751
752   if (set == -1)
753     set = new_alias_set ();
754
755   return set;
756 }
757
758 /* Inside SRC, the source of a SET, find a base address.  */
759
760 static rtx
761 find_base_value (src)
762      rtx src;
763 {
764   unsigned int regno;
765
766   switch (GET_CODE (src))
767     {
768     case SYMBOL_REF:
769     case LABEL_REF:
770       return src;
771
772     case REG:
773       regno = REGNO (src);
774       /* At the start of a function, argument registers have known base
775          values which may be lost later.  Returning an ADDRESS
776          expression here allows optimization based on argument values
777          even when the argument registers are used for other purposes.  */
778       if (regno < FIRST_PSEUDO_REGISTER && copying_arguments)
779         return new_reg_base_value[regno];
780
781       /* If a pseudo has a known base value, return it.  Do not do this
782          for non-fixed hard regs since it can result in a circular
783          dependency chain for registers which have values at function entry.
784
785          The test above is not sufficient because the scheduler may move
786          a copy out of an arg reg past the NOTE_INSN_FUNCTION_BEGIN.  */
787       if ((regno >= FIRST_PSEUDO_REGISTER || fixed_regs[regno])
788           && regno < reg_base_value_size)
789         {
790           /* If we're inside init_alias_analysis, use new_reg_base_value
791              to reduce the number of relaxation iterations.  */
792           if (new_reg_base_value && new_reg_base_value[regno]
793               && REG_N_SETS (regno) == 1)
794             return new_reg_base_value[regno];
795
796           if (reg_base_value[regno])
797             return reg_base_value[regno];
798         }
799
800       return src;
801
802     case MEM:
803       /* Check for an argument passed in memory.  Only record in the
804          copying-arguments block; it is too hard to track changes
805          otherwise.  */
806       if (copying_arguments
807           && (XEXP (src, 0) == arg_pointer_rtx
808               || (GET_CODE (XEXP (src, 0)) == PLUS
809                   && XEXP (XEXP (src, 0), 0) == arg_pointer_rtx)))
810         return gen_rtx_ADDRESS (VOIDmode, src);
811       return 0;
812
813     case CONST:
814       src = XEXP (src, 0);
815       if (GET_CODE (src) != PLUS && GET_CODE (src) != MINUS)
816         break;
817
818       /* ... fall through ...  */
819
820     case PLUS:
821     case MINUS:
822       {
823         rtx temp, src_0 = XEXP (src, 0), src_1 = XEXP (src, 1);
824
825         /* If either operand is a REG that is a known pointer, then it
826            is the base.  */
827         if (REG_P (src_0) && REG_POINTER (src_0))
828           return find_base_value (src_0);
829         if (REG_P (src_1) && REG_POINTER (src_1))
830           return find_base_value (src_1);
831
832         /* If either operand is a REG, then see if we already have
833            a known value for it.  */
834         if (REG_P (src_0))
835           {
836             temp = find_base_value (src_0);
837             if (temp != 0)
838               src_0 = temp;
839           }
840
841         if (REG_P (src_1))
842           {
843             temp = find_base_value (src_1);
844             if (temp!= 0)
845               src_1 = temp;
846           }
847
848         /* If either base is named object or a special address
849            (like an argument or stack reference), then use it for the
850            base term.  */
851         if (src_0 != 0
852             && (GET_CODE (src_0) == SYMBOL_REF
853                 || GET_CODE (src_0) == LABEL_REF
854                 || (GET_CODE (src_0) == ADDRESS
855                     && GET_MODE (src_0) != VOIDmode)))
856           return src_0;
857
858         if (src_1 != 0
859             && (GET_CODE (src_1) == SYMBOL_REF
860                 || GET_CODE (src_1) == LABEL_REF
861                 || (GET_CODE (src_1) == ADDRESS
862                     && GET_MODE (src_1) != VOIDmode)))
863           return src_1;
864
865         /* Guess which operand is the base address:
866            If either operand is a symbol, then it is the base.  If
867            either operand is a CONST_INT, then the other is the base.  */
868         if (GET_CODE (src_1) == CONST_INT || CONSTANT_P (src_0))
869           return find_base_value (src_0);
870         else if (GET_CODE (src_0) == CONST_INT || CONSTANT_P (src_1))
871           return find_base_value (src_1);
872
873         return 0;
874       }
875
876     case LO_SUM:
877       /* The standard form is (lo_sum reg sym) so look only at the
878          second operand.  */
879       return find_base_value (XEXP (src, 1));
880
881     case AND:
882       /* If the second operand is constant set the base
883          address to the first operand.  */
884       if (GET_CODE (XEXP (src, 1)) == CONST_INT && INTVAL (XEXP (src, 1)) != 0)
885         return find_base_value (XEXP (src, 0));
886       return 0;
887
888     case TRUNCATE:
889       if (GET_MODE_SIZE (GET_MODE (src)) < GET_MODE_SIZE (Pmode))
890         break;
891       /* Fall through.  */
892     case HIGH:
893     case PRE_INC:
894     case PRE_DEC:
895     case POST_INC:
896     case POST_DEC:
897     case PRE_MODIFY:
898     case POST_MODIFY:
899       return find_base_value (XEXP (src, 0));
900
901     case ZERO_EXTEND:
902     case SIGN_EXTEND:   /* used for NT/Alpha pointers */
903       {
904         rtx temp = find_base_value (XEXP (src, 0));
905
906 #ifdef POINTERS_EXTEND_UNSIGNED
907         if (temp != 0 && CONSTANT_P (temp) && GET_MODE (temp) != Pmode)
908           temp = convert_memory_address (Pmode, temp);
909 #endif
910
911         return temp;
912       }
913
914     default:
915       break;
916     }
917
918   return 0;
919 }
920
921 /* Called from init_alias_analysis indirectly through note_stores.  */
922
923 /* While scanning insns to find base values, reg_seen[N] is nonzero if
924    register N has been set in this function.  */
925 static char *reg_seen;
926
927 /* Addresses which are known not to alias anything else are identified
928    by a unique integer.  */
929 static int unique_id;
930
931 static void
932 record_set (dest, set, data)
933      rtx dest, set;
934      void *data ATTRIBUTE_UNUSED;
935 {
936   unsigned regno;
937   rtx src;
938   int n;
939
940   if (GET_CODE (dest) != REG)
941     return;
942
943   regno = REGNO (dest);
944
945   if (regno >= reg_base_value_size)
946     abort ();
947
948   /* If this spans multiple hard registers, then we must indicate that every
949      register has an unusable value.  */
950   if (regno < FIRST_PSEUDO_REGISTER)
951     n = HARD_REGNO_NREGS (regno, GET_MODE (dest));
952   else
953     n = 1;
954   if (n != 1)
955     {
956       while (--n >= 0)
957         {
958           reg_seen[regno + n] = 1;
959           new_reg_base_value[regno + n] = 0;
960         }
961       return;
962     }
963
964   if (set)
965     {
966       /* A CLOBBER wipes out any old value but does not prevent a previously
967          unset register from acquiring a base address (i.e. reg_seen is not
968          set).  */
969       if (GET_CODE (set) == CLOBBER)
970         {
971           new_reg_base_value[regno] = 0;
972           return;
973         }
974       src = SET_SRC (set);
975     }
976   else
977     {
978       if (reg_seen[regno])
979         {
980           new_reg_base_value[regno] = 0;
981           return;
982         }
983       reg_seen[regno] = 1;
984       new_reg_base_value[regno] = gen_rtx_ADDRESS (Pmode,
985                                                    GEN_INT (unique_id++));
986       return;
987     }
988
989   /* This is not the first set.  If the new value is not related to the
990      old value, forget the base value. Note that the following code is
991      not detected:
992      extern int x, y;  int *p = &x; p += (&y-&x);
993      ANSI C does not allow computing the difference of addresses
994      of distinct top level objects.  */
995   if (new_reg_base_value[regno])
996     switch (GET_CODE (src))
997       {
998       case LO_SUM:
999       case MINUS:
1000         if (XEXP (src, 0) != dest && XEXP (src, 1) != dest)
1001           new_reg_base_value[regno] = 0;
1002         break;
1003       case PLUS:
1004         /* If the value we add in the PLUS is also a valid base value,
1005            this might be the actual base value, and the original value
1006            an index.  */
1007         {
1008           rtx other = NULL_RTX;
1009
1010           if (XEXP (src, 0) == dest)
1011             other = XEXP (src, 1);
1012           else if (XEXP (src, 1) == dest)
1013             other = XEXP (src, 0);
1014
1015           if (! other || find_base_value (other))
1016             new_reg_base_value[regno] = 0;
1017           break;
1018         }
1019       case AND:
1020         if (XEXP (src, 0) != dest || GET_CODE (XEXP (src, 1)) != CONST_INT)
1021           new_reg_base_value[regno] = 0;
1022         break;
1023       default:
1024         new_reg_base_value[regno] = 0;
1025         break;
1026       }
1027   /* If this is the first set of a register, record the value.  */
1028   else if ((regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
1029            && ! reg_seen[regno] && new_reg_base_value[regno] == 0)
1030     new_reg_base_value[regno] = find_base_value (src);
1031
1032   reg_seen[regno] = 1;
1033 }
1034
1035 /* Called from loop optimization when a new pseudo-register is
1036    created.  It indicates that REGNO is being set to VAL.  f INVARIANT
1037    is true then this value also describes an invariant relationship
1038    which can be used to deduce that two registers with unknown values
1039    are different.  */
1040
1041 void
1042 record_base_value (regno, val, invariant)
1043      unsigned int regno;
1044      rtx val;
1045      int invariant;
1046 {
1047   if (regno >= reg_base_value_size)
1048     return;
1049
1050   if (invariant && alias_invariant)
1051     alias_invariant[regno] = val;
1052
1053   if (GET_CODE (val) == REG)
1054     {
1055       if (REGNO (val) < reg_base_value_size)
1056         reg_base_value[regno] = reg_base_value[REGNO (val)];
1057
1058       return;
1059     }
1060
1061   reg_base_value[regno] = find_base_value (val);
1062 }
1063
1064 /* Clear alias info for a register.  This is used if an RTL transformation
1065    changes the value of a register.  This is used in flow by AUTO_INC_DEC
1066    optimizations.  We don't need to clear reg_base_value, since flow only
1067    changes the offset.  */
1068
1069 void
1070 clear_reg_alias_info (reg)
1071      rtx reg;
1072 {
1073   unsigned int regno = REGNO (reg);
1074
1075   if (regno < reg_known_value_size && regno >= FIRST_PSEUDO_REGISTER)
1076     reg_known_value[regno] = reg;
1077 }
1078
1079 /* Returns a canonical version of X, from the point of view alias
1080    analysis.  (For example, if X is a MEM whose address is a register,
1081    and the register has a known value (say a SYMBOL_REF), then a MEM
1082    whose address is the SYMBOL_REF is returned.)  */
1083
1084 rtx
1085 canon_rtx (x)
1086      rtx x;
1087 {
1088   /* Recursively look for equivalences.  */
1089   if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
1090       && REGNO (x) < reg_known_value_size)
1091     return reg_known_value[REGNO (x)] == x
1092       ? x : canon_rtx (reg_known_value[REGNO (x)]);
1093   else if (GET_CODE (x) == PLUS)
1094     {
1095       rtx x0 = canon_rtx (XEXP (x, 0));
1096       rtx x1 = canon_rtx (XEXP (x, 1));
1097
1098       if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
1099         {
1100           if (GET_CODE (x0) == CONST_INT)
1101             return plus_constant (x1, INTVAL (x0));
1102           else if (GET_CODE (x1) == CONST_INT)
1103             return plus_constant (x0, INTVAL (x1));
1104           return gen_rtx_PLUS (GET_MODE (x), x0, x1);
1105         }
1106     }
1107
1108   /* This gives us much better alias analysis when called from
1109      the loop optimizer.   Note we want to leave the original
1110      MEM alone, but need to return the canonicalized MEM with
1111      all the flags with their original values.  */
1112   else if (GET_CODE (x) == MEM)
1113     x = replace_equiv_address_nv (x, canon_rtx (XEXP (x, 0)));
1114
1115   return x;
1116 }
1117
1118 /* Return 1 if X and Y are identical-looking rtx's.
1119
1120    We use the data in reg_known_value above to see if two registers with
1121    different numbers are, in fact, equivalent.  */
1122
1123 static int
1124 rtx_equal_for_memref_p (x, y)
1125      rtx x, y;
1126 {
1127   int i;
1128   int j;
1129   enum rtx_code code;
1130   const char *fmt;
1131
1132   if (x == 0 && y == 0)
1133     return 1;
1134   if (x == 0 || y == 0)
1135     return 0;
1136
1137   x = canon_rtx (x);
1138   y = canon_rtx (y);
1139
1140   if (x == y)
1141     return 1;
1142
1143   code = GET_CODE (x);
1144   /* Rtx's of different codes cannot be equal.  */
1145   if (code != GET_CODE (y))
1146     return 0;
1147
1148   /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
1149      (REG:SI x) and (REG:HI x) are NOT equivalent.  */
1150
1151   if (GET_MODE (x) != GET_MODE (y))
1152     return 0;
1153
1154   /* Some RTL can be compared without a recursive examination.  */
1155   switch (code)
1156     {
1157     case VALUE:
1158       return CSELIB_VAL_PTR (x) == CSELIB_VAL_PTR (y);
1159
1160     case REG:
1161       return REGNO (x) == REGNO (y);
1162
1163     case LABEL_REF:
1164       return XEXP (x, 0) == XEXP (y, 0);
1165
1166     case SYMBOL_REF:
1167       return XSTR (x, 0) == XSTR (y, 0);
1168
1169     case CONST_INT:
1170     case CONST_DOUBLE:
1171       /* There's no need to compare the contents of CONST_DOUBLEs or
1172          CONST_INTs because pointer equality is a good enough
1173          comparison for these nodes.  */
1174       return 0;
1175
1176     case ADDRESSOF:
1177       return (XINT (x, 1) == XINT (y, 1)
1178               && rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0)));
1179
1180     default:
1181       break;
1182     }
1183
1184   /* For commutative operations, the RTX match if the operand match in any
1185      order.  Also handle the simple binary and unary cases without a loop.  */
1186   if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
1187     return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
1188              && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
1189             || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
1190                 && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
1191   else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
1192     return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
1193             && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)));
1194   else if (GET_RTX_CLASS (code) == '1')
1195     return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0));
1196
1197   /* Compare the elements.  If any pair of corresponding elements
1198      fail to match, return 0 for the whole things.
1199
1200      Limit cases to types which actually appear in addresses.  */
1201
1202   fmt = GET_RTX_FORMAT (code);
1203   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1204     {
1205       switch (fmt[i])
1206         {
1207         case 'i':
1208           if (XINT (x, i) != XINT (y, i))
1209             return 0;
1210           break;
1211
1212         case 'E':
1213           /* Two vectors must have the same length.  */
1214           if (XVECLEN (x, i) != XVECLEN (y, i))
1215             return 0;
1216
1217           /* And the corresponding elements must match.  */
1218           for (j = 0; j < XVECLEN (x, i); j++)
1219             if (rtx_equal_for_memref_p (XVECEXP (x, i, j),
1220                                         XVECEXP (y, i, j)) == 0)
1221               return 0;
1222           break;
1223
1224         case 'e':
1225           if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0)
1226             return 0;
1227           break;
1228
1229           /* This can happen for asm operands.  */
1230         case 's':
1231           if (strcmp (XSTR (x, i), XSTR (y, i)))
1232             return 0;
1233           break;
1234
1235         /* This can happen for an asm which clobbers memory.  */
1236         case '0':
1237           break;
1238
1239           /* It is believed that rtx's at this level will never
1240              contain anything but integers and other rtx's,
1241              except for within LABEL_REFs and SYMBOL_REFs.  */
1242         default:
1243           abort ();
1244         }
1245     }
1246   return 1;
1247 }
1248
1249 /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
1250    X and return it, or return 0 if none found.  */
1251
1252 static rtx
1253 find_symbolic_term (x)
1254      rtx x;
1255 {
1256   int i;
1257   enum rtx_code code;
1258   const char *fmt;
1259
1260   code = GET_CODE (x);
1261   if (code == SYMBOL_REF || code == LABEL_REF)
1262     return x;
1263   if (GET_RTX_CLASS (code) == 'o')
1264     return 0;
1265
1266   fmt = GET_RTX_FORMAT (code);
1267   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1268     {
1269       rtx t;
1270
1271       if (fmt[i] == 'e')
1272         {
1273           t = find_symbolic_term (XEXP (x, i));
1274           if (t != 0)
1275             return t;
1276         }
1277       else if (fmt[i] == 'E')
1278         break;
1279     }
1280   return 0;
1281 }
1282
1283 static rtx
1284 find_base_term (x)
1285      rtx x;
1286 {
1287   cselib_val *val;
1288   struct elt_loc_list *l;
1289
1290 #if defined (FIND_BASE_TERM)
1291   /* Try machine-dependent ways to find the base term.  */
1292   x = FIND_BASE_TERM (x);
1293 #endif
1294
1295   switch (GET_CODE (x))
1296     {
1297     case REG:
1298       return REG_BASE_VALUE (x);
1299
1300     case TRUNCATE:
1301       if (GET_MODE_SIZE (GET_MODE (x)) < GET_MODE_SIZE (Pmode))
1302         return 0;
1303       /* Fall through.  */
1304     case HIGH:
1305     case PRE_INC:
1306     case PRE_DEC:
1307     case POST_INC:
1308     case POST_DEC:
1309     case PRE_MODIFY:
1310     case POST_MODIFY:
1311       return find_base_term (XEXP (x, 0));
1312
1313     case ZERO_EXTEND:
1314     case SIGN_EXTEND:   /* Used for Alpha/NT pointers */
1315       {
1316         rtx temp = find_base_term (XEXP (x, 0));
1317
1318 #ifdef POINTERS_EXTEND_UNSIGNED
1319         if (temp != 0 && CONSTANT_P (temp) && GET_MODE (temp) != Pmode)
1320           temp = convert_memory_address (Pmode, temp);
1321 #endif
1322
1323         return temp;
1324       }
1325
1326     case VALUE:
1327       val = CSELIB_VAL_PTR (x);
1328       for (l = val->locs; l; l = l->next)
1329         if ((x = find_base_term (l->loc)) != 0)
1330           return x;
1331       return 0;
1332
1333     case CONST:
1334       x = XEXP (x, 0);
1335       if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
1336         return 0;
1337       /* fall through */
1338     case LO_SUM:
1339     case PLUS:
1340     case MINUS:
1341       {
1342         rtx tmp1 = XEXP (x, 0);
1343         rtx tmp2 = XEXP (x, 1);
1344
1345         /* This is a little bit tricky since we have to determine which of
1346            the two operands represents the real base address.  Otherwise this
1347            routine may return the index register instead of the base register.
1348
1349            That may cause us to believe no aliasing was possible, when in
1350            fact aliasing is possible.
1351
1352            We use a few simple tests to guess the base register.  Additional
1353            tests can certainly be added.  For example, if one of the operands
1354            is a shift or multiply, then it must be the index register and the
1355            other operand is the base register.  */
1356
1357         if (tmp1 == pic_offset_table_rtx && CONSTANT_P (tmp2))
1358           return find_base_term (tmp2);
1359
1360         /* If either operand is known to be a pointer, then use it
1361            to determine the base term.  */
1362         if (REG_P (tmp1) && REG_POINTER (tmp1))
1363           return find_base_term (tmp1);
1364
1365         if (REG_P (tmp2) && REG_POINTER (tmp2))
1366           return find_base_term (tmp2);
1367
1368         /* Neither operand was known to be a pointer.  Go ahead and find the
1369            base term for both operands.  */
1370         tmp1 = find_base_term (tmp1);
1371         tmp2 = find_base_term (tmp2);
1372
1373         /* If either base term is named object or a special address
1374            (like an argument or stack reference), then use it for the
1375            base term.  */
1376         if (tmp1 != 0
1377             && (GET_CODE (tmp1) == SYMBOL_REF
1378                 || GET_CODE (tmp1) == LABEL_REF
1379                 || (GET_CODE (tmp1) == ADDRESS
1380                     && GET_MODE (tmp1) != VOIDmode)))
1381           return tmp1;
1382
1383         if (tmp2 != 0
1384             && (GET_CODE (tmp2) == SYMBOL_REF
1385                 || GET_CODE (tmp2) == LABEL_REF
1386                 || (GET_CODE (tmp2) == ADDRESS
1387                     && GET_MODE (tmp2) != VOIDmode)))
1388           return tmp2;
1389
1390         /* We could not determine which of the two operands was the
1391            base register and which was the index.  So we can determine
1392            nothing from the base alias check.  */
1393         return 0;
1394       }
1395
1396     case AND:
1397       if (GET_CODE (XEXP (x, 1)) == CONST_INT && INTVAL (XEXP (x, 1)) != 0)
1398         return find_base_term (XEXP (x, 0));
1399       return 0;
1400
1401     case SYMBOL_REF:
1402     case LABEL_REF:
1403       return x;
1404
1405     case ADDRESSOF:
1406       return REG_BASE_VALUE (frame_pointer_rtx);
1407
1408     default:
1409       return 0;
1410     }
1411 }
1412
1413 /* Return 0 if the addresses X and Y are known to point to different
1414    objects, 1 if they might be pointers to the same object.  */
1415
1416 static int
1417 base_alias_check (x, y, x_mode, y_mode)
1418      rtx x, y;
1419      enum machine_mode x_mode, y_mode;
1420 {
1421   rtx x_base = find_base_term (x);
1422   rtx y_base = find_base_term (y);
1423
1424   /* If the address itself has no known base see if a known equivalent
1425      value has one.  If either address still has no known base, nothing
1426      is known about aliasing.  */
1427   if (x_base == 0)
1428     {
1429       rtx x_c;
1430
1431       if (! flag_expensive_optimizations || (x_c = canon_rtx (x)) == x)
1432         return 1;
1433
1434       x_base = find_base_term (x_c);
1435       if (x_base == 0)
1436         return 1;
1437     }
1438
1439   if (y_base == 0)
1440     {
1441       rtx y_c;
1442       if (! flag_expensive_optimizations || (y_c = canon_rtx (y)) == y)
1443         return 1;
1444
1445       y_base = find_base_term (y_c);
1446       if (y_base == 0)
1447         return 1;
1448     }
1449
1450   /* If the base addresses are equal nothing is known about aliasing.  */
1451   if (rtx_equal_p (x_base, y_base))
1452     return 1;
1453
1454   /* The base addresses of the read and write are different expressions.
1455      If they are both symbols and they are not accessed via AND, there is
1456      no conflict.  We can bring knowledge of object alignment into play
1457      here.  For example, on alpha, "char a, b;" can alias one another,
1458      though "char a; long b;" cannot.  */
1459   if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
1460     {
1461       if (GET_CODE (x) == AND && GET_CODE (y) == AND)
1462         return 1;
1463       if (GET_CODE (x) == AND
1464           && (GET_CODE (XEXP (x, 1)) != CONST_INT
1465               || (int) GET_MODE_UNIT_SIZE (y_mode) < -INTVAL (XEXP (x, 1))))
1466         return 1;
1467       if (GET_CODE (y) == AND
1468           && (GET_CODE (XEXP (y, 1)) != CONST_INT
1469               || (int) GET_MODE_UNIT_SIZE (x_mode) < -INTVAL (XEXP (y, 1))))
1470         return 1;
1471       /* Differing symbols never alias.  */
1472       return 0;
1473     }
1474
1475   /* If one address is a stack reference there can be no alias:
1476      stack references using different base registers do not alias,
1477      a stack reference can not alias a parameter, and a stack reference
1478      can not alias a global.  */
1479   if ((GET_CODE (x_base) == ADDRESS && GET_MODE (x_base) == Pmode)
1480       || (GET_CODE (y_base) == ADDRESS && GET_MODE (y_base) == Pmode))
1481     return 0;
1482
1483   if (! flag_argument_noalias)
1484     return 1;
1485
1486   if (flag_argument_noalias > 1)
1487     return 0;
1488
1489   /* Weak noalias assertion (arguments are distinct, but may match globals).  */
1490   return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode);
1491 }
1492
1493 /* Convert the address X into something we can use.  This is done by returning
1494    it unchanged unless it is a value; in the latter case we call cselib to get
1495    a more useful rtx.  */
1496
1497 rtx
1498 get_addr (x)
1499      rtx x;
1500 {
1501   cselib_val *v;
1502   struct elt_loc_list *l;
1503
1504   if (GET_CODE (x) != VALUE)
1505     return x;
1506   v = CSELIB_VAL_PTR (x);
1507   for (l = v->locs; l; l = l->next)
1508     if (CONSTANT_P (l->loc))
1509       return l->loc;
1510   for (l = v->locs; l; l = l->next)
1511     if (GET_CODE (l->loc) != REG && GET_CODE (l->loc) != MEM)
1512       return l->loc;
1513   if (v->locs)
1514     return v->locs->loc;
1515   return x;
1516 }
1517
1518 /*  Return the address of the (N_REFS + 1)th memory reference to ADDR
1519     where SIZE is the size in bytes of the memory reference.  If ADDR
1520     is not modified by the memory reference then ADDR is returned.  */
1521
1522 rtx
1523 addr_side_effect_eval (addr, size, n_refs)
1524      rtx addr;
1525      int size;
1526      int n_refs;
1527 {
1528   int offset = 0;
1529
1530   switch (GET_CODE (addr))
1531     {
1532     case PRE_INC:
1533       offset = (n_refs + 1) * size;
1534       break;
1535     case PRE_DEC:
1536       offset = -(n_refs + 1) * size;
1537       break;
1538     case POST_INC:
1539       offset = n_refs * size;
1540       break;
1541     case POST_DEC:
1542       offset = -n_refs * size;
1543       break;
1544
1545     default:
1546       return addr;
1547     }
1548
1549   if (offset)
1550     addr = gen_rtx_PLUS (GET_MODE (addr), XEXP (addr, 0), GEN_INT (offset));
1551   else
1552     addr = XEXP (addr, 0);
1553
1554   return addr;
1555 }
1556
1557 /* Return nonzero if X and Y (memory addresses) could reference the
1558    same location in memory.  C is an offset accumulator.  When
1559    C is nonzero, we are testing aliases between X and Y + C.
1560    XSIZE is the size in bytes of the X reference,
1561    similarly YSIZE is the size in bytes for Y.
1562
1563    If XSIZE or YSIZE is zero, we do not know the amount of memory being
1564    referenced (the reference was BLKmode), so make the most pessimistic
1565    assumptions.
1566
1567    If XSIZE or YSIZE is negative, we may access memory outside the object
1568    being referenced as a side effect.  This can happen when using AND to
1569    align memory references, as is done on the Alpha.
1570
1571    Nice to notice that varying addresses cannot conflict with fp if no
1572    local variables had their addresses taken, but that's too hard now.  */
1573
1574 static int
1575 memrefs_conflict_p (xsize, x, ysize, y, c)
1576      rtx x, y;
1577      int xsize, ysize;
1578      HOST_WIDE_INT c;
1579 {
1580   if (GET_CODE (x) == VALUE)
1581     x = get_addr (x);
1582   if (GET_CODE (y) == VALUE)
1583     y = get_addr (y);
1584   if (GET_CODE (x) == HIGH)
1585     x = XEXP (x, 0);
1586   else if (GET_CODE (x) == LO_SUM)
1587     x = XEXP (x, 1);
1588   else
1589     x = canon_rtx (addr_side_effect_eval (x, xsize, 0));
1590   if (GET_CODE (y) == HIGH)
1591     y = XEXP (y, 0);
1592   else if (GET_CODE (y) == LO_SUM)
1593     y = XEXP (y, 1);
1594   else
1595     y = canon_rtx (addr_side_effect_eval (y, ysize, 0));
1596
1597   if (rtx_equal_for_memref_p (x, y))
1598     {
1599       if (xsize <= 0 || ysize <= 0)
1600         return 1;
1601       if (c >= 0 && xsize > c)
1602         return 1;
1603       if (c < 0 && ysize+c > 0)
1604         return 1;
1605       return 0;
1606     }
1607
1608   /* This code used to check for conflicts involving stack references and
1609      globals but the base address alias code now handles these cases.  */
1610
1611   if (GET_CODE (x) == PLUS)
1612     {
1613       /* The fact that X is canonicalized means that this
1614          PLUS rtx is canonicalized.  */
1615       rtx x0 = XEXP (x, 0);
1616       rtx x1 = XEXP (x, 1);
1617
1618       if (GET_CODE (y) == PLUS)
1619         {
1620           /* The fact that Y is canonicalized means that this
1621              PLUS rtx is canonicalized.  */
1622           rtx y0 = XEXP (y, 0);
1623           rtx y1 = XEXP (y, 1);
1624
1625           if (rtx_equal_for_memref_p (x1, y1))
1626             return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1627           if (rtx_equal_for_memref_p (x0, y0))
1628             return memrefs_conflict_p (xsize, x1, ysize, y1, c);
1629           if (GET_CODE (x1) == CONST_INT)
1630             {
1631               if (GET_CODE (y1) == CONST_INT)
1632                 return memrefs_conflict_p (xsize, x0, ysize, y0,
1633                                            c - INTVAL (x1) + INTVAL (y1));
1634               else
1635                 return memrefs_conflict_p (xsize, x0, ysize, y,
1636                                            c - INTVAL (x1));
1637             }
1638           else if (GET_CODE (y1) == CONST_INT)
1639             return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1640
1641           return 1;
1642         }
1643       else if (GET_CODE (x1) == CONST_INT)
1644         return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
1645     }
1646   else if (GET_CODE (y) == PLUS)
1647     {
1648       /* The fact that Y is canonicalized means that this
1649          PLUS rtx is canonicalized.  */
1650       rtx y0 = XEXP (y, 0);
1651       rtx y1 = XEXP (y, 1);
1652
1653       if (GET_CODE (y1) == CONST_INT)
1654         return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1655       else
1656         return 1;
1657     }
1658
1659   if (GET_CODE (x) == GET_CODE (y))
1660     switch (GET_CODE (x))
1661       {
1662       case MULT:
1663         {
1664           /* Handle cases where we expect the second operands to be the
1665              same, and check only whether the first operand would conflict
1666              or not.  */
1667           rtx x0, y0;
1668           rtx x1 = canon_rtx (XEXP (x, 1));
1669           rtx y1 = canon_rtx (XEXP (y, 1));
1670           if (! rtx_equal_for_memref_p (x1, y1))
1671             return 1;
1672           x0 = canon_rtx (XEXP (x, 0));
1673           y0 = canon_rtx (XEXP (y, 0));
1674           if (rtx_equal_for_memref_p (x0, y0))
1675             return (xsize == 0 || ysize == 0
1676                     || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1677
1678           /* Can't properly adjust our sizes.  */
1679           if (GET_CODE (x1) != CONST_INT)
1680             return 1;
1681           xsize /= INTVAL (x1);
1682           ysize /= INTVAL (x1);
1683           c /= INTVAL (x1);
1684           return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1685         }
1686
1687       case REG:
1688         /* Are these registers known not to be equal?  */
1689         if (alias_invariant)
1690           {
1691             unsigned int r_x = REGNO (x), r_y = REGNO (y);
1692             rtx i_x, i_y;       /* invariant relationships of X and Y */
1693
1694             i_x = r_x >= reg_base_value_size ? 0 : alias_invariant[r_x];
1695             i_y = r_y >= reg_base_value_size ? 0 : alias_invariant[r_y];
1696
1697             if (i_x == 0 && i_y == 0)
1698               break;
1699
1700             if (! memrefs_conflict_p (xsize, i_x ? i_x : x,
1701                                       ysize, i_y ? i_y : y, c))
1702               return 0;
1703           }
1704         break;
1705
1706       default:
1707         break;
1708       }
1709
1710   /* Treat an access through an AND (e.g. a subword access on an Alpha)
1711      as an access with indeterminate size.  Assume that references
1712      besides AND are aligned, so if the size of the other reference is
1713      at least as large as the alignment, assume no other overlap.  */
1714   if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT)
1715     {
1716       if (GET_CODE (y) == AND || ysize < -INTVAL (XEXP (x, 1)))
1717         xsize = -1;
1718       return memrefs_conflict_p (xsize, XEXP (x, 0), ysize, y, c);
1719     }
1720   if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT)
1721     {
1722       /* ??? If we are indexing far enough into the array/structure, we
1723          may yet be able to determine that we can not overlap.  But we
1724          also need to that we are far enough from the end not to overlap
1725          a following reference, so we do nothing with that for now.  */
1726       if (GET_CODE (x) == AND || xsize < -INTVAL (XEXP (y, 1)))
1727         ysize = -1;
1728       return memrefs_conflict_p (xsize, x, ysize, XEXP (y, 0), c);
1729     }
1730
1731   if (GET_CODE (x) == ADDRESSOF)
1732     {
1733       if (y == frame_pointer_rtx
1734           || GET_CODE (y) == ADDRESSOF)
1735         return xsize <= 0 || ysize <= 0;
1736     }
1737   if (GET_CODE (y) == ADDRESSOF)
1738     {
1739       if (x == frame_pointer_rtx)
1740         return xsize <= 0 || ysize <= 0;
1741     }
1742
1743   if (CONSTANT_P (x))
1744     {
1745       if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
1746         {
1747           c += (INTVAL (y) - INTVAL (x));
1748           return (xsize <= 0 || ysize <= 0
1749                   || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1750         }
1751
1752       if (GET_CODE (x) == CONST)
1753         {
1754           if (GET_CODE (y) == CONST)
1755             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1756                                        ysize, canon_rtx (XEXP (y, 0)), c);
1757           else
1758             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1759                                        ysize, y, c);
1760         }
1761       if (GET_CODE (y) == CONST)
1762         return memrefs_conflict_p (xsize, x, ysize,
1763                                    canon_rtx (XEXP (y, 0)), c);
1764
1765       if (CONSTANT_P (y))
1766         return (xsize <= 0 || ysize <= 0
1767                 || (rtx_equal_for_memref_p (x, y)
1768                     && ((c >= 0 && xsize > c) || (c < 0 && ysize+c > 0))));
1769
1770       return 1;
1771     }
1772   return 1;
1773 }
1774
1775 /* Functions to compute memory dependencies.
1776
1777    Since we process the insns in execution order, we can build tables
1778    to keep track of what registers are fixed (and not aliased), what registers
1779    are varying in known ways, and what registers are varying in unknown
1780    ways.
1781
1782    If both memory references are volatile, then there must always be a
1783    dependence between the two references, since their order can not be
1784    changed.  A volatile and non-volatile reference can be interchanged
1785    though.
1786
1787    A MEM_IN_STRUCT reference at a non-AND varying address can never
1788    conflict with a non-MEM_IN_STRUCT reference at a fixed address.  We
1789    also must allow AND addresses, because they may generate accesses
1790    outside the object being referenced.  This is used to generate
1791    aligned addresses from unaligned addresses, for instance, the alpha
1792    storeqi_unaligned pattern.  */
1793
1794 /* Read dependence: X is read after read in MEM takes place.  There can
1795    only be a dependence here if both reads are volatile.  */
1796
1797 int
1798 read_dependence (mem, x)
1799      rtx mem;
1800      rtx x;
1801 {
1802   return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
1803 }
1804
1805 /* Returns MEM1 if and only if MEM1 is a scalar at a fixed address and
1806    MEM2 is a reference to a structure at a varying address, or returns
1807    MEM2 if vice versa.  Otherwise, returns NULL_RTX.  If a non-NULL
1808    value is returned MEM1 and MEM2 can never alias.  VARIES_P is used
1809    to decide whether or not an address may vary; it should return
1810    nonzero whenever variation is possible.
1811    MEM1_ADDR and MEM2_ADDR are the addresses of MEM1 and MEM2.  */
1812
1813 static rtx
1814 fixed_scalar_and_varying_struct_p (mem1, mem2, mem1_addr, mem2_addr, varies_p)
1815      rtx mem1, mem2;
1816      rtx mem1_addr, mem2_addr;
1817      int (*varies_p) PARAMS ((rtx, int));
1818 {
1819   if (! flag_strict_aliasing)
1820     return NULL_RTX;
1821
1822   if (MEM_SCALAR_P (mem1) && MEM_IN_STRUCT_P (mem2)
1823       && !varies_p (mem1_addr, 1) && varies_p (mem2_addr, 1))
1824     /* MEM1 is a scalar at a fixed address; MEM2 is a struct at a
1825        varying address.  */
1826     return mem1;
1827
1828   if (MEM_IN_STRUCT_P (mem1) && MEM_SCALAR_P (mem2)
1829       && varies_p (mem1_addr, 1) && !varies_p (mem2_addr, 1))
1830     /* MEM2 is a scalar at a fixed address; MEM1 is a struct at a
1831        varying address.  */
1832     return mem2;
1833
1834   return NULL_RTX;
1835 }
1836
1837 /* Returns nonzero if something about the mode or address format MEM1
1838    indicates that it might well alias *anything*.  */
1839
1840 static int
1841 aliases_everything_p (mem)
1842      rtx mem;
1843 {
1844   if (GET_CODE (XEXP (mem, 0)) == AND)
1845     /* If the address is an AND, its very hard to know at what it is
1846        actually pointing.  */
1847     return 1;
1848
1849   return 0;
1850 }
1851
1852 /* Return true if we can determine that the fields referenced cannot
1853    overlap for any pair of objects.  */
1854
1855 static bool
1856 nonoverlapping_component_refs_p (x, y)
1857      tree x, y;
1858 {
1859   tree fieldx, fieldy, typex, typey, orig_y;
1860
1861   do
1862     {
1863       /* The comparison has to be done at a common type, since we don't
1864          know how the inheritance hierarchy works.  */
1865       orig_y = y;
1866       do
1867         {
1868           fieldx = TREE_OPERAND (x, 1);
1869           typex = DECL_FIELD_CONTEXT (fieldx);
1870
1871           y = orig_y;
1872           do
1873             {
1874               fieldy = TREE_OPERAND (y, 1);
1875               typey = DECL_FIELD_CONTEXT (fieldy);
1876
1877               if (typex == typey)
1878                 goto found;
1879
1880               y = TREE_OPERAND (y, 0);
1881             }
1882           while (y && TREE_CODE (y) == COMPONENT_REF);
1883
1884           x = TREE_OPERAND (x, 0);
1885         }
1886       while (x && TREE_CODE (x) == COMPONENT_REF);
1887
1888       /* Never found a common type.  */
1889       return false;
1890
1891     found:
1892       /* If we're left with accessing different fields of a structure,
1893          then no overlap.  */
1894       if (TREE_CODE (typex) == RECORD_TYPE
1895           && fieldx != fieldy)
1896         return true;
1897
1898       /* The comparison on the current field failed.  If we're accessing
1899          a very nested structure, look at the next outer level.  */
1900       x = TREE_OPERAND (x, 0);
1901       y = TREE_OPERAND (y, 0);
1902     }
1903   while (x && y
1904          && TREE_CODE (x) == COMPONENT_REF
1905          && TREE_CODE (y) == COMPONENT_REF);
1906
1907   return false;
1908 }
1909
1910 /* Look at the bottom of the COMPONENT_REF list for a DECL, and return it.  */
1911
1912 static tree
1913 decl_for_component_ref (x)
1914      tree x;
1915 {
1916   do
1917     {
1918       x = TREE_OPERAND (x, 0);
1919     }
1920   while (x && TREE_CODE (x) == COMPONENT_REF);
1921
1922   return x && DECL_P (x) ? x : NULL_TREE;
1923 }
1924
1925 /* Walk up the COMPONENT_REF list and adjust OFFSET to compensate for the
1926    offset of the field reference.  */
1927
1928 static rtx
1929 adjust_offset_for_component_ref (x, offset)
1930      tree x;
1931      rtx offset;
1932 {
1933   HOST_WIDE_INT ioffset;
1934
1935   if (! offset)
1936     return NULL_RTX;
1937
1938   ioffset = INTVAL (offset);
1939   do
1940     {
1941       tree field = TREE_OPERAND (x, 1);
1942
1943       if (! host_integerp (DECL_FIELD_OFFSET (field), 1))
1944         return NULL_RTX;
1945       ioffset += (tree_low_cst (DECL_FIELD_OFFSET (field), 1)
1946                   + (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
1947                      / BITS_PER_UNIT));
1948
1949       x = TREE_OPERAND (x, 0);
1950     }
1951   while (x && TREE_CODE (x) == COMPONENT_REF);
1952
1953   return GEN_INT (ioffset);
1954 }
1955
1956 /* Return nonzero if we can determine the exprs corresponding to memrefs
1957    X and Y and they do not overlap.  */
1958
1959 static int
1960 nonoverlapping_memrefs_p (x, y)
1961      rtx x, y;
1962 {
1963   tree exprx = MEM_EXPR (x), expry = MEM_EXPR (y);
1964   rtx rtlx, rtly;
1965   rtx basex, basey;
1966   rtx moffsetx, moffsety;
1967   HOST_WIDE_INT offsetx = 0, offsety = 0, sizex, sizey, tem;
1968
1969   /* Unless both have exprs, we can't tell anything.  */
1970   if (exprx == 0 || expry == 0)
1971     return 0;
1972
1973   /* If both are field references, we may be able to determine something.  */
1974   if (TREE_CODE (exprx) == COMPONENT_REF
1975       && TREE_CODE (expry) == COMPONENT_REF
1976       && nonoverlapping_component_refs_p (exprx, expry))
1977     return 1;
1978
1979   /* If the field reference test failed, look at the DECLs involved.  */
1980   moffsetx = MEM_OFFSET (x);
1981   if (TREE_CODE (exprx) == COMPONENT_REF)
1982     {
1983       tree t = decl_for_component_ref (exprx);
1984       if (! t)
1985         return 0;
1986       moffsetx = adjust_offset_for_component_ref (exprx, moffsetx);
1987       exprx = t;
1988     }
1989   else if (TREE_CODE (exprx) == INDIRECT_REF)
1990     {
1991       exprx = TREE_OPERAND (exprx, 0);
1992       if (flag_argument_noalias < 2
1993           || TREE_CODE (exprx) != PARM_DECL)
1994         return 0;
1995     }
1996
1997   moffsety = MEM_OFFSET (y);
1998   if (TREE_CODE (expry) == COMPONENT_REF)
1999     {
2000       tree t = decl_for_component_ref (expry);
2001       if (! t)
2002         return 0;
2003       moffsety = adjust_offset_for_component_ref (expry, moffsety);
2004       expry = t;
2005     }
2006   else if (TREE_CODE (expry) == INDIRECT_REF)
2007     {
2008       expry = TREE_OPERAND (expry, 0);
2009       if (flag_argument_noalias < 2
2010           || TREE_CODE (expry) != PARM_DECL)
2011         return 0;
2012     }
2013
2014   if (! DECL_P (exprx) || ! DECL_P (expry))
2015     return 0;
2016
2017   rtlx = DECL_RTL (exprx);
2018   rtly = DECL_RTL (expry);
2019
2020   /* If either RTL is not a MEM, it must be a REG or CONCAT, meaning they
2021      can't overlap unless they are the same because we never reuse that part
2022      of the stack frame used for locals for spilled pseudos.  */
2023   if ((GET_CODE (rtlx) != MEM || GET_CODE (rtly) != MEM)
2024       && ! rtx_equal_p (rtlx, rtly))
2025     return 1;
2026
2027   /* Get the base and offsets of both decls.  If either is a register, we
2028      know both are and are the same, so use that as the base.  The only
2029      we can avoid overlap is if we can deduce that they are nonoverlapping
2030      pieces of that decl, which is very rare.  */
2031   basex = GET_CODE (rtlx) == MEM ? XEXP (rtlx, 0) : rtlx;
2032   if (GET_CODE (basex) == PLUS && GET_CODE (XEXP (basex, 1)) == CONST_INT)
2033     offsetx = INTVAL (XEXP (basex, 1)), basex = XEXP (basex, 0);
2034
2035   basey = GET_CODE (rtly) == MEM ? XEXP (rtly, 0) : rtly;
2036   if (GET_CODE (basey) == PLUS && GET_CODE (XEXP (basey, 1)) == CONST_INT)
2037     offsety = INTVAL (XEXP (basey, 1)), basey = XEXP (basey, 0);
2038
2039   /* If the bases are different, we know they do not overlap if both
2040      are constants or if one is a constant and the other a pointer into the
2041      stack frame.  Otherwise a different base means we can't tell if they
2042      overlap or not.  */
2043   if (! rtx_equal_p (basex, basey))
2044     return ((CONSTANT_P (basex) && CONSTANT_P (basey))
2045             || (CONSTANT_P (basex) && REG_P (basey)
2046                 && REGNO_PTR_FRAME_P (REGNO (basey)))
2047             || (CONSTANT_P (basey) && REG_P (basex)
2048                 && REGNO_PTR_FRAME_P (REGNO (basex))));
2049
2050   sizex = (GET_CODE (rtlx) != MEM ? (int) GET_MODE_SIZE (GET_MODE (rtlx))
2051            : MEM_SIZE (rtlx) ? INTVAL (MEM_SIZE (rtlx))
2052            : -1);
2053   sizey = (GET_CODE (rtly) != MEM ? (int) GET_MODE_SIZE (GET_MODE (rtly))
2054            : MEM_SIZE (rtly) ? INTVAL (MEM_SIZE (rtly)) :
2055            -1);
2056
2057   /* If we have an offset for either memref, it can update the values computed
2058      above.  */
2059   if (moffsetx)
2060     offsetx += INTVAL (moffsetx), sizex -= INTVAL (moffsetx);
2061   if (moffsety)
2062     offsety += INTVAL (moffsety), sizey -= INTVAL (moffsety);
2063
2064   /* If a memref has both a size and an offset, we can use the smaller size.
2065      We can't do this if the offset isn't known because we must view this
2066      memref as being anywhere inside the DECL's MEM.  */
2067   if (MEM_SIZE (x) && moffsetx)
2068     sizex = INTVAL (MEM_SIZE (x));
2069   if (MEM_SIZE (y) && moffsety)
2070     sizey = INTVAL (MEM_SIZE (y));
2071
2072   /* Put the values of the memref with the lower offset in X's values.  */
2073   if (offsetx > offsety)
2074     {
2075       tem = offsetx, offsetx = offsety, offsety = tem;
2076       tem = sizex, sizex = sizey, sizey = tem;
2077     }
2078
2079   /* If we don't know the size of the lower-offset value, we can't tell
2080      if they conflict.  Otherwise, we do the test.  */
2081   return sizex >= 0 && offsety >= offsetx + sizex;
2082 }
2083
2084 /* True dependence: X is read after store in MEM takes place.  */
2085
2086 int
2087 true_dependence (mem, mem_mode, x, varies)
2088      rtx mem;
2089      enum machine_mode mem_mode;
2090      rtx x;
2091      int (*varies) PARAMS ((rtx, int));
2092 {
2093   rtx x_addr, mem_addr;
2094   rtx base;
2095
2096   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2097     return 1;
2098
2099   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2100      This is used in epilogue deallocation functions.  */
2101   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
2102     return 1;
2103   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2104     return 1;
2105
2106   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2107     return 0;
2108
2109   /* Unchanging memory can't conflict with non-unchanging memory.
2110      A non-unchanging read can conflict with a non-unchanging write.
2111      An unchanging read can conflict with an unchanging write since
2112      there may be a single store to this address to initialize it.
2113      Note that an unchanging store can conflict with a non-unchanging read
2114      since we have to make conservative assumptions when we have a
2115      record with readonly fields and we are copying the whole thing.
2116      Just fall through to the code below to resolve potential conflicts.
2117      This won't handle all cases optimally, but the possible performance
2118      loss should be negligible.  */
2119   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
2120     return 0;
2121
2122   if (nonoverlapping_memrefs_p (mem, x))
2123     return 0;
2124
2125   if (mem_mode == VOIDmode)
2126     mem_mode = GET_MODE (mem);
2127
2128   x_addr = get_addr (XEXP (x, 0));
2129   mem_addr = get_addr (XEXP (mem, 0));
2130
2131   base = find_base_term (x_addr);
2132   if (base && (GET_CODE (base) == LABEL_REF
2133                || (GET_CODE (base) == SYMBOL_REF
2134                    && CONSTANT_POOL_ADDRESS_P (base))))
2135     return 0;
2136
2137   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
2138     return 0;
2139
2140   x_addr = canon_rtx (x_addr);
2141   mem_addr = canon_rtx (mem_addr);
2142
2143   if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
2144                             SIZE_FOR_MODE (x), x_addr, 0))
2145     return 0;
2146
2147   if (aliases_everything_p (x))
2148     return 1;
2149
2150   /* We cannot use aliases_everything_p to test MEM, since we must look
2151      at MEM_MODE, rather than GET_MODE (MEM).  */
2152   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
2153     return 1;
2154
2155   /* In true_dependence we also allow BLKmode to alias anything.  Why
2156      don't we do this in anti_dependence and output_dependence?  */
2157   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
2158     return 1;
2159
2160   return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2161                                               varies);
2162 }
2163
2164 /* Canonical true dependence: X is read after store in MEM takes place.
2165    Variant of true_dependence which assumes MEM has already been
2166    canonicalized (hence we no longer do that here).
2167    The mem_addr argument has been added, since true_dependence computed
2168    this value prior to canonicalizing.  */
2169
2170 int
2171 canon_true_dependence (mem, mem_mode, mem_addr, x, varies)
2172      rtx mem, mem_addr, x;
2173      enum machine_mode mem_mode;
2174      int (*varies) PARAMS ((rtx, int));
2175 {
2176   rtx x_addr;
2177
2178   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2179     return 1;
2180
2181   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2182      This is used in epilogue deallocation functions.  */
2183   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
2184     return 1;
2185   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2186     return 1;
2187
2188   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2189     return 0;
2190
2191   /* If X is an unchanging read, then it can't possibly conflict with any
2192      non-unchanging store.  It may conflict with an unchanging write though,
2193      because there may be a single store to this address to initialize it.
2194      Just fall through to the code below to resolve the case where we have
2195      both an unchanging read and an unchanging write.  This won't handle all
2196      cases optimally, but the possible performance loss should be
2197      negligible.  */
2198   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
2199     return 0;
2200
2201   if (nonoverlapping_memrefs_p (x, mem))
2202     return 0;
2203
2204   x_addr = get_addr (XEXP (x, 0));
2205
2206   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
2207     return 0;
2208
2209   x_addr = canon_rtx (x_addr);
2210   if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
2211                             SIZE_FOR_MODE (x), x_addr, 0))
2212     return 0;
2213
2214   if (aliases_everything_p (x))
2215     return 1;
2216
2217   /* We cannot use aliases_everything_p to test MEM, since we must look
2218      at MEM_MODE, rather than GET_MODE (MEM).  */
2219   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
2220     return 1;
2221
2222   /* In true_dependence we also allow BLKmode to alias anything.  Why
2223      don't we do this in anti_dependence and output_dependence?  */
2224   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
2225     return 1;
2226
2227   return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2228                                               varies);
2229 }
2230
2231 /* Returns nonzero if a write to X might alias a previous read from
2232    (or, if WRITEP is nonzero, a write to) MEM.  */
2233
2234 static int
2235 write_dependence_p (mem, x, writep)
2236      rtx mem;
2237      rtx x;
2238      int writep;
2239 {
2240   rtx x_addr, mem_addr;
2241   rtx fixed_scalar;
2242   rtx base;
2243
2244   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2245     return 1;
2246
2247   /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2248      This is used in epilogue deallocation functions.  */
2249   if (GET_MODE (x) == BLKmode && GET_CODE (XEXP (x, 0)) == SCRATCH)
2250     return 1;
2251   if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2252     return 1;
2253
2254   if (DIFFERENT_ALIAS_SETS_P (x, mem))
2255     return 0;
2256
2257   /* Unchanging memory can't conflict with non-unchanging memory.  */
2258   if (RTX_UNCHANGING_P (x) != RTX_UNCHANGING_P (mem))
2259     return 0;
2260
2261   /* If MEM is an unchanging read, then it can't possibly conflict with
2262      the store to X, because there is at most one store to MEM, and it must
2263      have occurred somewhere before MEM.  */
2264   if (! writep && RTX_UNCHANGING_P (mem))
2265     return 0;
2266
2267   if (nonoverlapping_memrefs_p (x, mem))
2268     return 0;
2269
2270   x_addr = get_addr (XEXP (x, 0));
2271   mem_addr = get_addr (XEXP (mem, 0));
2272
2273   if (! writep)
2274     {
2275       base = find_base_term (mem_addr);
2276       if (base && (GET_CODE (base) == LABEL_REF
2277                    || (GET_CODE (base) == SYMBOL_REF
2278                        && CONSTANT_POOL_ADDRESS_P (base))))
2279         return 0;
2280     }
2281
2282   if (! base_alias_check (x_addr, mem_addr, GET_MODE (x),
2283                           GET_MODE (mem)))
2284     return 0;
2285
2286   x_addr = canon_rtx (x_addr);
2287   mem_addr = canon_rtx (mem_addr);
2288
2289   if (!memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
2290                            SIZE_FOR_MODE (x), x_addr, 0))
2291     return 0;
2292
2293   fixed_scalar
2294     = fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2295                                          rtx_addr_varies_p);
2296
2297   return (!(fixed_scalar == mem && !aliases_everything_p (x))
2298           && !(fixed_scalar == x && !aliases_everything_p (mem)));
2299 }
2300
2301 /* Anti dependence: X is written after read in MEM takes place.  */
2302
2303 int
2304 anti_dependence (mem, x)
2305      rtx mem;
2306      rtx x;
2307 {
2308   return write_dependence_p (mem, x, /*writep=*/0);
2309 }
2310
2311 /* Output dependence: X is written after store in MEM takes place.  */
2312
2313 int
2314 output_dependence (mem, x)
2315      rtx mem;
2316      rtx x;
2317 {
2318   return write_dependence_p (mem, x, /*writep=*/1);
2319 }
2320 \f
2321 /* A subroutine of nonlocal_mentioned_p, returns 1 if *LOC mentions
2322    something which is not local to the function and is not constant.  */
2323
2324 static int
2325 nonlocal_mentioned_p_1 (loc, data)
2326      rtx *loc;
2327      void *data ATTRIBUTE_UNUSED;
2328 {
2329   rtx x = *loc;
2330   rtx base;
2331   int regno;
2332
2333   if (! x)
2334     return 0;
2335
2336   switch (GET_CODE (x))
2337     {
2338     case SUBREG:
2339       if (GET_CODE (SUBREG_REG (x)) == REG)
2340         {
2341           /* Global registers are not local.  */
2342           if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER
2343               && global_regs[subreg_regno (x)])
2344             return 1;
2345           return 0;
2346         }
2347       break;
2348
2349     case REG:
2350       regno = REGNO (x);
2351       /* Global registers are not local.  */
2352       if (regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
2353         return 1;
2354       return 0;
2355
2356     case SCRATCH:
2357     case PC:
2358     case CC0:
2359     case CONST_INT:
2360     case CONST_DOUBLE:
2361     case CONST_VECTOR:
2362     case CONST:
2363     case LABEL_REF:
2364       return 0;
2365
2366     case SYMBOL_REF:
2367       /* Constants in the function's constants pool are constant.  */
2368       if (CONSTANT_POOL_ADDRESS_P (x))
2369         return 0;
2370       return 1;
2371
2372     case CALL:
2373       /* Non-constant calls and recursion are not local.  */
2374       return 1;
2375
2376     case MEM:
2377       /* Be overly conservative and consider any volatile memory
2378          reference as not local.  */
2379       if (MEM_VOLATILE_P (x))
2380         return 1;
2381       base = find_base_term (XEXP (x, 0));
2382       if (base)
2383         {
2384           /* A Pmode ADDRESS could be a reference via the structure value
2385              address or static chain.  Such memory references are nonlocal.
2386
2387              Thus, we have to examine the contents of the ADDRESS to find
2388              out if this is a local reference or not.  */
2389           if (GET_CODE (base) == ADDRESS
2390               && GET_MODE (base) == Pmode
2391               && (XEXP (base, 0) == stack_pointer_rtx
2392                   || XEXP (base, 0) == arg_pointer_rtx
2393 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2394                   || XEXP (base, 0) == hard_frame_pointer_rtx
2395 #endif
2396                   || XEXP (base, 0) == frame_pointer_rtx))
2397             return 0;
2398           /* Constants in the function's constant pool are constant.  */
2399           if (GET_CODE (base) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (base))
2400             return 0;
2401         }
2402       return 1;
2403
2404     case UNSPEC_VOLATILE:
2405     case ASM_INPUT:
2406       return 1;
2407
2408     case ASM_OPERANDS:
2409       if (MEM_VOLATILE_P (x))
2410         return 1;
2411
2412     /* FALLTHROUGH */
2413
2414     default:
2415       break;
2416     }
2417
2418   return 0;
2419 }
2420
2421 /* Returns nonzero if X might mention something which is not
2422    local to the function and is not constant.  */
2423
2424 static int
2425 nonlocal_mentioned_p (x)
2426      rtx x;
2427 {
2428
2429   if (INSN_P (x))
2430     {
2431       if (GET_CODE (x) == CALL_INSN)
2432         {
2433           if (! CONST_OR_PURE_CALL_P (x))
2434             return 1;
2435           x = CALL_INSN_FUNCTION_USAGE (x);
2436           if (x == 0)
2437             return 0;
2438         }
2439       else
2440         x = PATTERN (x);
2441     }
2442
2443   return for_each_rtx (&x, nonlocal_mentioned_p_1, NULL);
2444 }
2445
2446 /* A subroutine of nonlocal_referenced_p, returns 1 if *LOC references
2447    something which is not local to the function and is not constant.  */
2448
2449 static int
2450 nonlocal_referenced_p_1 (loc, data)
2451      rtx *loc;
2452      void *data ATTRIBUTE_UNUSED;
2453 {
2454   rtx x = *loc;
2455
2456   if (! x)
2457     return 0;
2458
2459   switch (GET_CODE (x))
2460     {
2461     case MEM:
2462     case REG:
2463     case SYMBOL_REF:
2464     case SUBREG:
2465       return nonlocal_mentioned_p (x);
2466
2467     case CALL:
2468       /* Non-constant calls and recursion are not local.  */
2469       return 1;
2470
2471     case SET:
2472       if (nonlocal_mentioned_p (SET_SRC (x)))
2473         return 1;
2474
2475       if (GET_CODE (SET_DEST (x)) == MEM)
2476         return nonlocal_mentioned_p (XEXP (SET_DEST (x), 0));
2477
2478       /* If the destination is anything other than a CC0, PC,
2479          MEM, REG, or a SUBREG of a REG that occupies all of
2480          the REG, then X references nonlocal memory if it is
2481          mentioned in the destination.  */
2482       if (GET_CODE (SET_DEST (x)) != CC0
2483           && GET_CODE (SET_DEST (x)) != PC
2484           && GET_CODE (SET_DEST (x)) != REG
2485           && ! (GET_CODE (SET_DEST (x)) == SUBREG
2486                 && GET_CODE (SUBREG_REG (SET_DEST (x))) == REG
2487                 && (((GET_MODE_SIZE (GET_MODE (SUBREG_REG (SET_DEST (x))))
2488                       + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
2489                     == ((GET_MODE_SIZE (GET_MODE (SET_DEST (x)))
2490                          + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD))))
2491         return nonlocal_mentioned_p (SET_DEST (x));
2492       return 0;
2493
2494     case CLOBBER:
2495       if (GET_CODE (XEXP (x, 0)) == MEM)
2496         return nonlocal_mentioned_p (XEXP (XEXP (x, 0), 0));
2497       return 0;
2498
2499     case USE:
2500       return nonlocal_mentioned_p (XEXP (x, 0));
2501
2502     case ASM_INPUT:
2503     case UNSPEC_VOLATILE:
2504       return 1;
2505
2506     case ASM_OPERANDS:
2507       if (MEM_VOLATILE_P (x))
2508         return 1;
2509
2510     /* FALLTHROUGH */
2511
2512     default:
2513       break;
2514     }
2515
2516   return 0;
2517 }
2518
2519 /* Returns nonzero if X might reference something which is not
2520    local to the function and is not constant.  */
2521
2522 static int
2523 nonlocal_referenced_p (x)
2524      rtx x;
2525 {
2526
2527   if (INSN_P (x))
2528     {
2529       if (GET_CODE (x) == CALL_INSN)
2530         {
2531           if (! CONST_OR_PURE_CALL_P (x))
2532             return 1;
2533           x = CALL_INSN_FUNCTION_USAGE (x);
2534           if (x == 0)
2535             return 0;
2536         }
2537       else
2538         x = PATTERN (x);
2539     }
2540
2541   return for_each_rtx (&x, nonlocal_referenced_p_1, NULL);
2542 }
2543
2544 /* A subroutine of nonlocal_set_p, returns 1 if *LOC sets
2545    something which is not local to the function and is not constant.  */
2546
2547 static int
2548 nonlocal_set_p_1 (loc, data)
2549      rtx *loc;
2550      void *data ATTRIBUTE_UNUSED;
2551 {
2552   rtx x = *loc;
2553
2554   if (! x)
2555     return 0;
2556
2557   switch (GET_CODE (x))
2558     {
2559     case CALL:
2560       /* Non-constant calls and recursion are not local.  */
2561       return 1;
2562
2563     case PRE_INC:
2564     case PRE_DEC:
2565     case POST_INC:
2566     case POST_DEC:
2567     case PRE_MODIFY:
2568     case POST_MODIFY:
2569       return nonlocal_mentioned_p (XEXP (x, 0));
2570
2571     case SET:
2572       if (nonlocal_mentioned_p (SET_DEST (x)))
2573         return 1;
2574       return nonlocal_set_p (SET_SRC (x));
2575
2576     case CLOBBER:
2577       return nonlocal_mentioned_p (XEXP (x, 0));
2578
2579     case USE:
2580       return 0;
2581
2582     case ASM_INPUT:
2583     case UNSPEC_VOLATILE:
2584       return 1;
2585
2586     case ASM_OPERANDS:
2587       if (MEM_VOLATILE_P (x))
2588         return 1;
2589
2590     /* FALLTHROUGH */
2591
2592     default:
2593       break;
2594     }
2595
2596   return 0;
2597 }
2598
2599 /* Returns nonzero if X might set something which is not
2600    local to the function and is not constant.  */
2601
2602 static int
2603 nonlocal_set_p (x)
2604      rtx x;
2605 {
2606
2607   if (INSN_P (x))
2608     {
2609       if (GET_CODE (x) == CALL_INSN)
2610         {
2611           if (! CONST_OR_PURE_CALL_P (x))
2612             return 1;
2613           x = CALL_INSN_FUNCTION_USAGE (x);
2614           if (x == 0)
2615             return 0;
2616         }
2617       else
2618         x = PATTERN (x);
2619     }
2620
2621   return for_each_rtx (&x, nonlocal_set_p_1, NULL);
2622 }
2623
2624 /* Mark the function if it is constant.  */
2625
2626 void
2627 mark_constant_function ()
2628 {
2629   rtx insn;
2630   int nonlocal_memory_referenced;
2631
2632   if (TREE_READONLY (current_function_decl)
2633       || DECL_IS_PURE (current_function_decl)
2634       || TREE_THIS_VOLATILE (current_function_decl)
2635       || TYPE_MODE (TREE_TYPE (current_function_decl)) == VOIDmode
2636       || current_function_has_nonlocal_goto
2637       || !(*targetm.binds_local_p) (current_function_decl))
2638     return;
2639
2640   /* A loop might not return which counts as a side effect.  */
2641   if (mark_dfs_back_edges ())
2642     return;
2643
2644   nonlocal_memory_referenced = 0;
2645
2646   init_alias_analysis ();
2647
2648   /* Determine if this is a constant or pure function.  */
2649
2650   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2651     {
2652       if (! INSN_P (insn))
2653         continue;
2654
2655       if (nonlocal_set_p (insn) || global_reg_mentioned_p (insn)
2656           || volatile_refs_p (PATTERN (insn)))
2657         break;
2658
2659       if (! nonlocal_memory_referenced)
2660         nonlocal_memory_referenced = nonlocal_referenced_p (insn);
2661     }
2662
2663   end_alias_analysis ();
2664
2665   /* Mark the function.  */
2666
2667   if (insn)
2668     ;
2669   else if (nonlocal_memory_referenced)
2670     DECL_IS_PURE (current_function_decl) = 1;
2671   else
2672     TREE_READONLY (current_function_decl) = 1;
2673 }
2674 \f
2675
2676 void
2677 init_alias_once ()
2678 {
2679   int i;
2680
2681 #ifndef OUTGOING_REGNO
2682 #define OUTGOING_REGNO(N) N
2683 #endif
2684   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2685     /* Check whether this register can hold an incoming pointer
2686        argument.  FUNCTION_ARG_REGNO_P tests outgoing register
2687        numbers, so translate if necessary due to register windows.  */
2688     if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i))
2689         && HARD_REGNO_MODE_OK (i, Pmode))
2690       static_reg_base_value[i]
2691         = gen_rtx_ADDRESS (VOIDmode, gen_rtx_REG (Pmode, i));
2692
2693   static_reg_base_value[STACK_POINTER_REGNUM]
2694     = gen_rtx_ADDRESS (Pmode, stack_pointer_rtx);
2695   static_reg_base_value[ARG_POINTER_REGNUM]
2696     = gen_rtx_ADDRESS (Pmode, arg_pointer_rtx);
2697   static_reg_base_value[FRAME_POINTER_REGNUM]
2698     = gen_rtx_ADDRESS (Pmode, frame_pointer_rtx);
2699 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2700   static_reg_base_value[HARD_FRAME_POINTER_REGNUM]
2701     = gen_rtx_ADDRESS (Pmode, hard_frame_pointer_rtx);
2702 #endif
2703
2704   alias_sets = splay_tree_new (splay_tree_compare_ints, 0, 0);
2705 }
2706
2707 /* Set MEMORY_MODIFIED when X modifies DATA (that is assumed
2708    to be memory reference.  */
2709 static bool memory_modified;
2710 static void
2711 memory_modified_1 (x, pat, data)
2712         rtx x, pat ATTRIBUTE_UNUSED;
2713         void *data;
2714 {
2715   if (GET_CODE (x) == MEM)
2716     {
2717       if (anti_dependence (x, (rtx)data) || output_dependence (x, (rtx)data))
2718         memory_modified = true;
2719     }
2720 }
2721
2722
2723 /* Return true when INSN possibly modify memory contents of MEM
2724    (ie address can be modified).  */
2725 bool
2726 memory_modified_in_insn_p (mem, insn)
2727      rtx mem, insn;
2728 {
2729   if (!INSN_P (insn))
2730     return false;
2731   memory_modified = false;
2732   note_stores (PATTERN (insn), memory_modified_1, mem);
2733   return memory_modified;
2734 }
2735
2736 /* Initialize the aliasing machinery.  Initialize the REG_KNOWN_VALUE
2737    array.  */
2738
2739 void
2740 init_alias_analysis ()
2741 {
2742   int maxreg = max_reg_num ();
2743   int changed, pass;
2744   int i;
2745   unsigned int ui;
2746   rtx insn;
2747
2748   reg_known_value_size = maxreg;
2749
2750   reg_known_value
2751     = (rtx *) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (rtx))
2752     - FIRST_PSEUDO_REGISTER;
2753   reg_known_equiv_p
2754     = (char*) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (char))
2755     - FIRST_PSEUDO_REGISTER;
2756
2757   /* Overallocate reg_base_value to allow some growth during loop
2758      optimization.  Loop unrolling can create a large number of
2759      registers.  */
2760   reg_base_value_size = maxreg * 2;
2761   reg_base_value = (rtx *) ggc_alloc_cleared (reg_base_value_size
2762                                               * sizeof (rtx));
2763
2764   new_reg_base_value = (rtx *) xmalloc (reg_base_value_size * sizeof (rtx));
2765   reg_seen = (char *) xmalloc (reg_base_value_size);
2766   if (! reload_completed && flag_unroll_loops)
2767     {
2768       /* ??? Why are we realloc'ing if we're just going to zero it?  */
2769       alias_invariant = (rtx *)xrealloc (alias_invariant,
2770                                          reg_base_value_size * sizeof (rtx));
2771       memset ((char *)alias_invariant, 0, reg_base_value_size * sizeof (rtx));
2772     }
2773
2774   /* The basic idea is that each pass through this loop will use the
2775      "constant" information from the previous pass to propagate alias
2776      information through another level of assignments.
2777
2778      This could get expensive if the assignment chains are long.  Maybe
2779      we should throttle the number of iterations, possibly based on
2780      the optimization level or flag_expensive_optimizations.
2781
2782      We could propagate more information in the first pass by making use
2783      of REG_N_SETS to determine immediately that the alias information
2784      for a pseudo is "constant".
2785
2786      A program with an uninitialized variable can cause an infinite loop
2787      here.  Instead of doing a full dataflow analysis to detect such problems
2788      we just cap the number of iterations for the loop.
2789
2790      The state of the arrays for the set chain in question does not matter
2791      since the program has undefined behavior.  */
2792
2793   pass = 0;
2794   do
2795     {
2796       /* Assume nothing will change this iteration of the loop.  */
2797       changed = 0;
2798
2799       /* We want to assign the same IDs each iteration of this loop, so
2800          start counting from zero each iteration of the loop.  */
2801       unique_id = 0;
2802
2803       /* We're at the start of the function each iteration through the
2804          loop, so we're copying arguments.  */
2805       copying_arguments = true;
2806
2807       /* Wipe the potential alias information clean for this pass.  */
2808       memset ((char *) new_reg_base_value, 0, reg_base_value_size * sizeof (rtx));
2809
2810       /* Wipe the reg_seen array clean.  */
2811       memset ((char *) reg_seen, 0, reg_base_value_size);
2812
2813       /* Mark all hard registers which may contain an address.
2814          The stack, frame and argument pointers may contain an address.
2815          An argument register which can hold a Pmode value may contain
2816          an address even if it is not in BASE_REGS.
2817
2818          The address expression is VOIDmode for an argument and
2819          Pmode for other registers.  */
2820
2821       memcpy (new_reg_base_value, static_reg_base_value,
2822               FIRST_PSEUDO_REGISTER * sizeof (rtx));
2823
2824       /* Walk the insns adding values to the new_reg_base_value array.  */
2825       for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2826         {
2827           if (INSN_P (insn))
2828             {
2829               rtx note, set;
2830
2831 #if defined (HAVE_prologue) || defined (HAVE_epilogue)
2832               /* The prologue/epilogue insns are not threaded onto the
2833                  insn chain until after reload has completed.  Thus,
2834                  there is no sense wasting time checking if INSN is in
2835                  the prologue/epilogue until after reload has completed.  */
2836               if (reload_completed
2837                   && prologue_epilogue_contains (insn))
2838                 continue;
2839 #endif
2840
2841               /* If this insn has a noalias note, process it,  Otherwise,
2842                  scan for sets.  A simple set will have no side effects
2843                  which could change the base value of any other register.  */
2844
2845               if (GET_CODE (PATTERN (insn)) == SET
2846                   && REG_NOTES (insn) != 0
2847                   && find_reg_note (insn, REG_NOALIAS, NULL_RTX))
2848                 record_set (SET_DEST (PATTERN (insn)), NULL_RTX, NULL);
2849               else
2850                 note_stores (PATTERN (insn), record_set, NULL);
2851
2852               set = single_set (insn);
2853
2854               if (set != 0
2855                   && GET_CODE (SET_DEST (set)) == REG
2856                   && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER)
2857                 {
2858                   unsigned int regno = REGNO (SET_DEST (set));
2859                   rtx src = SET_SRC (set);
2860
2861                   if (REG_NOTES (insn) != 0
2862                       && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
2863                            && REG_N_SETS (regno) == 1)
2864                           || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
2865                       && GET_CODE (XEXP (note, 0)) != EXPR_LIST
2866                       && ! rtx_varies_p (XEXP (note, 0), 1)
2867                       && ! reg_overlap_mentioned_p (SET_DEST (set), XEXP (note, 0)))
2868                     {
2869                       reg_known_value[regno] = XEXP (note, 0);
2870                       reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV;
2871                     }
2872                   else if (REG_N_SETS (regno) == 1
2873                            && GET_CODE (src) == PLUS
2874                            && GET_CODE (XEXP (src, 0)) == REG
2875                            && REGNO (XEXP (src, 0)) >= FIRST_PSEUDO_REGISTER
2876                            && (reg_known_value[REGNO (XEXP (src, 0))])
2877                            && GET_CODE (XEXP (src, 1)) == CONST_INT)
2878                     {
2879                       rtx op0 = XEXP (src, 0);
2880                       op0 = reg_known_value[REGNO (op0)];
2881                       reg_known_value[regno]
2882                         = plus_constant (op0, INTVAL (XEXP (src, 1)));
2883                       reg_known_equiv_p[regno] = 0;
2884                     }
2885                   else if (REG_N_SETS (regno) == 1
2886                            && ! rtx_varies_p (src, 1))
2887                     {
2888                       reg_known_value[regno] = src;
2889                       reg_known_equiv_p[regno] = 0;
2890                     }
2891                 }
2892             }
2893           else if (GET_CODE (insn) == NOTE
2894                    && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
2895             copying_arguments = false;
2896         }
2897
2898       /* Now propagate values from new_reg_base_value to reg_base_value.  */
2899       for (ui = 0; ui < reg_base_value_size; ui++)
2900         {
2901           if (new_reg_base_value[ui]
2902               && new_reg_base_value[ui] != reg_base_value[ui]
2903               && ! rtx_equal_p (new_reg_base_value[ui], reg_base_value[ui]))
2904             {
2905               reg_base_value[ui] = new_reg_base_value[ui];
2906               changed = 1;
2907             }
2908         }
2909     }
2910   while (changed && ++pass < MAX_ALIAS_LOOP_PASSES);
2911
2912   /* Fill in the remaining entries.  */
2913   for (i = FIRST_PSEUDO_REGISTER; i < maxreg; i++)
2914     if (reg_known_value[i] == 0)
2915       reg_known_value[i] = regno_reg_rtx[i];
2916
2917   /* Simplify the reg_base_value array so that no register refers to
2918      another register, except to special registers indirectly through
2919      ADDRESS expressions.
2920
2921      In theory this loop can take as long as O(registers^2), but unless
2922      there are very long dependency chains it will run in close to linear
2923      time.
2924
2925      This loop may not be needed any longer now that the main loop does
2926      a better job at propagating alias information.  */
2927   pass = 0;
2928   do
2929     {
2930       changed = 0;
2931       pass++;
2932       for (ui = 0; ui < reg_base_value_size; ui++)
2933         {
2934           rtx base = reg_base_value[ui];
2935           if (base && GET_CODE (base) == REG)
2936             {
2937               unsigned int base_regno = REGNO (base);
2938               if (base_regno == ui)             /* register set from itself */
2939                 reg_base_value[ui] = 0;
2940               else
2941                 reg_base_value[ui] = reg_base_value[base_regno];
2942               changed = 1;
2943             }
2944         }
2945     }
2946   while (changed && pass < MAX_ALIAS_LOOP_PASSES);
2947
2948   /* Clean up.  */
2949   free (new_reg_base_value);
2950   new_reg_base_value = 0;
2951   free (reg_seen);
2952   reg_seen = 0;
2953 }
2954
2955 void
2956 end_alias_analysis ()
2957 {
2958   free (reg_known_value + FIRST_PSEUDO_REGISTER);
2959   reg_known_value = 0;
2960   reg_known_value_size = 0;
2961   free (reg_known_equiv_p + FIRST_PSEUDO_REGISTER);
2962   reg_known_equiv_p = 0;
2963   reg_base_value = 0;
2964   reg_base_value_size = 0;
2965   if (alias_invariant)
2966     {
2967       free (alias_invariant);
2968       alias_invariant = 0;
2969     }
2970 }
2971
2972 #include "gt-alias.h"