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