OSDN Git Service

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