OSDN Git Service

* alias.c (nonlocal_reference_p): Add else for disjoint ifs.
[pf3gnuchains/gcc-fork.git] / gcc / alias.c
1 /* Alias analysis for GNU C
2    Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
3    Contributed by John Carr (jfc@mit.edu).
4
5 This file is part of GNU CC.
6
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING.  If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "rtl.h"
25 #include "tree.h"
26 #include "tm_p.h"
27 #include "function.h"
28 #include "insn-flags.h"
29 #include "expr.h"
30 #include "regs.h"
31 #include "hard-reg-set.h"
32 #include "flags.h"
33 #include "output.h"
34 #include "toplev.h"
35 #include "splay-tree.h"
36 #include "ggc.h"
37
38 /* The alias sets assigned to MEMs assist the back-end in determining
39    which MEMs can alias which other MEMs.  In general, two MEMs in
40    different alias sets to not alias each other.  There is one
41    exception, however.  Consider something like:
42
43      struct S {int i; double d; };
44
45    a store to an `S' can alias something of either type `int' or type
46    `double'.  (However, a store to an `int' cannot alias a `double'
47    and vice versa.)  We indicate this via a tree structure that looks
48    like:
49            struct S
50             /   \
51            /     \
52          |/_     _\|
53          int    double
54
55    (The arrows are directed and point downwards.)  If, when comparing
56    two alias sets, we can hold one set fixed,  trace the other set
57    downwards, and at some point find the first set, the two MEMs can
58    alias one another.  In this situation we say the alias set for
59    `struct S' is the `superset' and that those for `int' and `double'
60    are `subsets'.  
61
62    Alias set zero is implicitly a superset of all other alias sets.
63    However, this is no actual entry for alias set zero.  It is an
64    error to attempt to explicitly construct a subset of zero.  */
65
66 typedef struct alias_set_entry
67 {
68   /* The alias set number, as stored in MEM_ALIAS_SET.  */
69   int alias_set;
70
71   /* The children of the alias set.  These are not just the immediate
72      children, but, in fact, all children.  So, if we have:
73
74        struct T { struct S s; float f; } 
75
76      continuing our example above, the children here will be all of
77      `int', `double', `float', and `struct S'.  */
78   splay_tree children;
79 } *alias_set_entry;
80
81 static rtx canon_rtx                    PROTO((rtx));
82 static int rtx_equal_for_memref_p       PROTO((rtx, rtx));
83 static rtx find_symbolic_term           PROTO((rtx));
84 static int memrefs_conflict_p           PROTO((int, rtx, int, rtx,
85                                                HOST_WIDE_INT));
86 static void record_set                  PROTO((rtx, rtx, void *));
87 static rtx find_base_term               PROTO((rtx));
88 static int base_alias_check             PROTO((rtx, rtx, enum machine_mode,
89                                                enum machine_mode));
90 static rtx find_base_value              PROTO((rtx));
91 static int mems_in_disjoint_alias_sets_p PROTO((rtx, rtx));
92 static int insert_subset_children       PROTO((splay_tree_node,
93                                                void*));
94 static alias_set_entry get_alias_set_entry PROTO((int));
95 static rtx fixed_scalar_and_varying_struct_p PROTO((rtx, rtx, int (*)(rtx)));
96 static int aliases_everything_p         PROTO((rtx));
97 static int write_dependence_p           PROTO((rtx, rtx, int));
98 static int nonlocal_reference_p         PROTO((rtx));
99
100 /* Set up all info needed to perform alias analysis on memory references.  */
101
102 /* Returns the size in bytes of the mode of X.  */
103 #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X)))
104
105 /* Returns nonzero if MEM1 and MEM2 do not alias because they are in
106    different alias sets.  We ignore alias sets in functions making use
107    of variable arguments because the va_arg macros on some systems are
108    not legal ANSI C.  */
109 #define DIFFERENT_ALIAS_SETS_P(MEM1, MEM2)                      \
110   mems_in_disjoint_alias_sets_p (MEM1, MEM2)
111
112 /* Cap the number of passes we make over the insns propagating alias
113    information through set chains.
114
115    10 is a completely arbitrary choice.  */
116 #define MAX_ALIAS_LOOP_PASSES 10
117    
118 /* reg_base_value[N] gives an address to which register N is related.
119    If all sets after the first add or subtract to the current value
120    or otherwise modify it so it does not point to a different top level
121    object, reg_base_value[N] is equal to the address part of the source
122    of the first set.
123
124    A base address can be an ADDRESS, SYMBOL_REF, or LABEL_REF.  ADDRESS
125    expressions represent certain special values: function arguments and
126    the stack, frame, and argument pointers.  
127
128    The contents of an ADDRESS is not normally used, the mode of the
129    ADDRESS determines whether the ADDRESS is a function argument or some
130    other special value.  Pointer equality, not rtx_equal_p, determines whether
131    two ADDRESS expressions refer to the same base address.
132
133    The only use of the contents of an ADDRESS is for determining if the
134    current function performs nonlocal memory memory references for the
135    purposes of marking the function as a constant function.  */
136
137 static rtx *reg_base_value;
138 static rtx *new_reg_base_value;
139 static unsigned int reg_base_value_size; /* size of reg_base_value array */
140
141 #define REG_BASE_VALUE(X) \
142   ((unsigned) REGNO (X) < reg_base_value_size ? reg_base_value[REGNO (X)] : 0)
143
144 /* Vector of known invariant relationships between registers.  Set in
145    loop unrolling.  Indexed by register number, if nonzero the value
146    is an expression describing this register in terms of another.
147
148    The length of this array is REG_BASE_VALUE_SIZE.
149
150    Because this array contains only pseudo registers it has no effect
151    after reload.  */
152 static rtx *alias_invariant;
153
154 /* Vector indexed by N giving the initial (unchanging) value known
155    for pseudo-register N.  */
156 rtx *reg_known_value;
157
158 /* Indicates number of valid entries in reg_known_value.  */
159 static int reg_known_value_size;
160
161 /* Vector recording for each reg_known_value whether it is due to a
162    REG_EQUIV note.  Future passes (viz., reload) may replace the
163    pseudo with the equivalent expression and so we account for the
164    dependences that would be introduced if that happens. */
165 /* ??? This is a problem only on the Convex.  The REG_EQUIV notes created in
166    assign_parms mention the arg pointer, and there are explicit insns in the
167    RTL that modify the arg pointer.  Thus we must ensure that such insns don't
168    get scheduled across each other because that would invalidate the REG_EQUIV
169    notes.  One could argue that the REG_EQUIV notes are wrong, but solving
170    the problem in the scheduler will likely give better code, so we do it
171    here.  */
172 char *reg_known_equiv_p;
173
174 /* True when scanning insns from the start of the rtl to the
175    NOTE_INSN_FUNCTION_BEG note.  */
176
177 static int copying_arguments;
178
179 /* The splay-tree used to store the various alias set entries.  */
180
181 static splay_tree alias_sets;
182
183 /* Returns a pointer to the alias set entry for ALIAS_SET, if there is
184    such an entry, or NULL otherwise.  */
185
186 static alias_set_entry
187 get_alias_set_entry (alias_set)
188      int alias_set;
189 {
190   splay_tree_node sn
191     = splay_tree_lookup (alias_sets, (splay_tree_key) alias_set);
192
193   return sn != 0 ? ((alias_set_entry) sn->value) : 0;
194 }
195
196 /* Returns nonzero value if the alias sets for MEM1 and MEM2 are such
197    that the two MEMs cannot alias each other.  */
198
199 static int 
200 mems_in_disjoint_alias_sets_p (mem1, mem2)
201      rtx mem1;
202      rtx mem2;
203 {
204   alias_set_entry ase;
205
206 #ifdef ENABLE_CHECKING  
207 /* Perform a basic sanity check.  Namely, that there are no alias sets
208    if we're not using strict aliasing.  This helps to catch bugs
209    whereby someone uses PUT_CODE, but doesn't clear MEM_ALIAS_SET, or
210    where a MEM is allocated in some way other than by the use of
211    gen_rtx_MEM, and the MEM_ALIAS_SET is not cleared.  If we begin to
212    use alias sets to indicate that spilled registers cannot alias each
213    other, we might need to remove this check.  */
214   if (! flag_strict_aliasing
215       && (MEM_ALIAS_SET (mem1) != 0 || MEM_ALIAS_SET (mem2) != 0))
216     abort ();
217 #endif
218
219   /* The code used in varargs macros are often not conforming ANSI C,
220      which can trick the compiler into making incorrect aliasing
221      assumptions in these functions.  So, we don't use alias sets in
222      such a function.  FIXME: This should be moved into the front-end;
223      it is a language-dependent notion, and there's no reason not to
224      still use these checks to handle globals.  */
225   if (current_function_stdarg || current_function_varargs)
226     return 0;
227
228   /* If have no alias set information for one of the MEMs, we have to assume
229      it can alias anything.  */
230   if (MEM_ALIAS_SET (mem1) == 0 || MEM_ALIAS_SET (mem2) == 0)
231     return 0;
232
233   /* If the two alias sets are the same, they may alias.  */
234   if (MEM_ALIAS_SET (mem1) == MEM_ALIAS_SET (mem2))
235     return 0;
236
237   /* Iterate through each of the children of the first alias set,
238      comparing it with the second alias set.  */
239   ase = get_alias_set_entry (MEM_ALIAS_SET (mem1));
240   if (ase != 0 && splay_tree_lookup (ase->children,
241                                      (splay_tree_key) MEM_ALIAS_SET (mem2)))
242     return  0;
243
244   /* Now do the same, but with the alias sets reversed.  */
245   ase = get_alias_set_entry (MEM_ALIAS_SET (mem2));
246   if (ase != 0 && splay_tree_lookup (ase->children,
247                                      (splay_tree_key) MEM_ALIAS_SET (mem1)))
248     return  0;
249
250   /* The two MEMs are in distinct alias sets, and neither one is the
251      child of the other.  Therefore, they cannot alias.  */
252   return 1;
253 }
254
255 /* Insert the NODE into the splay tree given by DATA.  Used by
256    record_alias_subset via splay_tree_foreach.  */
257
258 static int
259 insert_subset_children (node, data)
260      splay_tree_node node;
261      void *data;
262 {
263   splay_tree_insert ((splay_tree) data, node->key, node->value);
264
265   return 0;
266 }
267
268 /* Indicate that things in SUBSET can alias things in SUPERSET, but
269    not vice versa.  For example, in C, a store to an `int' can alias a
270    structure containing an `int', but not vice versa.  Here, the
271    structure would be the SUPERSET and `int' the SUBSET.  This
272    function should be called only once per SUPERSET/SUBSET pair.  At
273    present any given alias set may only be a subset of one superset.  
274
275    It is illegal for SUPERSET to be zero; everything is implicitly a
276    subset of alias set zero.  */
277
278 void
279 record_alias_subset (superset, subset)
280      int superset;
281      int subset;
282 {
283   alias_set_entry superset_entry;
284   alias_set_entry subset_entry;
285
286   if (superset == 0)
287     abort ();
288
289   superset_entry = get_alias_set_entry (superset);
290   if (superset_entry == 0) 
291     {
292       /* Create an entry for the SUPERSET, so that we have a place to
293          attach the SUBSET.  */
294       superset_entry
295         = (alias_set_entry) xmalloc (sizeof (struct alias_set_entry));
296       superset_entry->alias_set = superset;
297       superset_entry->children 
298         = splay_tree_new (splay_tree_compare_ints, 0, 0);
299       splay_tree_insert (alias_sets, (splay_tree_key) superset,
300                          (splay_tree_value) superset_entry);
301
302     }
303
304   subset_entry = get_alias_set_entry (subset);
305
306   /* If there is an entry for the subset, enter all of its children
307      (if they are not already present) as children of the SUPERSET.  */
308   if (subset_entry) 
309     splay_tree_foreach (subset_entry->children,
310                         insert_subset_children,
311                         superset_entry->children);
312
313   /* Enter the SUBSET itself as a child of the SUPERSET.  */
314   splay_tree_insert (superset_entry->children, 
315                      (splay_tree_key) subset, 0);
316 }
317
318 /* Inside SRC, the source of a SET, find a base address.  */
319
320 static rtx
321 find_base_value (src)
322      register rtx src;
323 {
324   switch (GET_CODE (src))
325     {
326     case SYMBOL_REF:
327     case LABEL_REF:
328       return src;
329
330     case REG:
331       /* At the start of a function, argument registers have known base
332          values which may be lost later.  Returning an ADDRESS
333          expression here allows optimization based on argument values
334          even when the argument registers are used for other purposes.  */
335       if (REGNO (src) < FIRST_PSEUDO_REGISTER && copying_arguments)
336         return new_reg_base_value[REGNO (src)];
337
338       /* If a pseudo has a known base value, return it.  Do not do this
339          for hard regs since it can result in a circular dependency
340          chain for registers which have values at function entry.
341
342          The test above is not sufficient because the scheduler may move
343          a copy out of an arg reg past the NOTE_INSN_FUNCTION_BEGIN.  */
344       if (REGNO (src) >= FIRST_PSEUDO_REGISTER
345           && (unsigned) REGNO (src) < reg_base_value_size
346           && reg_base_value[REGNO (src)])
347         return reg_base_value[REGNO (src)];
348
349       return src;
350
351     case MEM:
352       /* Check for an argument passed in memory.  Only record in the
353          copying-arguments block; it is too hard to track changes
354          otherwise.  */
355       if (copying_arguments
356           && (XEXP (src, 0) == arg_pointer_rtx
357               || (GET_CODE (XEXP (src, 0)) == PLUS
358                   && XEXP (XEXP (src, 0), 0) == arg_pointer_rtx)))
359         return gen_rtx_ADDRESS (VOIDmode, src);
360       return 0;
361
362     case CONST:
363       src = XEXP (src, 0);
364       if (GET_CODE (src) != PLUS && GET_CODE (src) != MINUS)
365         break;
366
367       /* ... fall through ... */
368
369     case PLUS:
370     case MINUS:
371       {
372         rtx temp, src_0 = XEXP (src, 0), src_1 = XEXP (src, 1);
373
374         /* If either operand is a REG, then see if we already have
375            a known value for it.  */
376         if (GET_CODE (src_0) == REG)
377           {
378             temp = find_base_value (src_0);
379             if (temp != 0)
380               src_0 = temp;
381           }
382
383         if (GET_CODE (src_1) == REG)
384           {
385             temp = find_base_value (src_1);
386             if (temp!= 0)
387               src_1 = temp;
388           }
389
390         /* Guess which operand is the base address:
391            If either operand is a symbol, then it is the base.  If
392            either operand is a CONST_INT, then the other is the base.  */
393         if (GET_CODE (src_1) == CONST_INT || CONSTANT_P (src_0))
394           return find_base_value (src_0);
395         else if (GET_CODE (src_0) == CONST_INT || CONSTANT_P (src_1))
396           return find_base_value (src_1);
397
398         /* This might not be necessary anymore:
399            If either operand is a REG that is a known pointer, then it
400            is the base.  */
401         else if (GET_CODE (src_0) == REG && REGNO_POINTER_FLAG (REGNO (src_0)))
402           return find_base_value (src_0);
403         else if (GET_CODE (src_1) == REG && REGNO_POINTER_FLAG (REGNO (src_1)))
404           return find_base_value (src_1);
405
406         return 0;
407       }
408
409     case LO_SUM:
410       /* The standard form is (lo_sum reg sym) so look only at the
411          second operand.  */
412       return find_base_value (XEXP (src, 1));
413
414     case AND:
415       /* If the second operand is constant set the base
416          address to the first operand. */
417       if (GET_CODE (XEXP (src, 1)) == CONST_INT && INTVAL (XEXP (src, 1)) != 0)
418         return find_base_value (XEXP (src, 0));
419       return 0;
420
421     case ZERO_EXTEND:
422     case SIGN_EXTEND:   /* used for NT/Alpha pointers */
423     case HIGH:
424       return find_base_value (XEXP (src, 0));
425
426     default:
427       break;
428     }
429
430   return 0;
431 }
432
433 /* Called from init_alias_analysis indirectly through note_stores.  */
434
435 /* While scanning insns to find base values, reg_seen[N] is nonzero if
436    register N has been set in this function.  */
437 static char *reg_seen;
438
439 /* Addresses which are known not to alias anything else are identified
440    by a unique integer.  */
441 static int unique_id;
442
443 static void
444 record_set (dest, set, data)
445      rtx dest, set;
446      void *data ATTRIBUTE_UNUSED;
447 {
448   register unsigned regno;
449   rtx src;
450
451   if (GET_CODE (dest) != REG)
452     return;
453
454   regno = REGNO (dest);
455
456   if (regno >= reg_base_value_size)
457     abort ();
458
459   if (set)
460     {
461       /* A CLOBBER wipes out any old value but does not prevent a previously
462          unset register from acquiring a base address (i.e. reg_seen is not
463          set).  */
464       if (GET_CODE (set) == CLOBBER)
465         {
466           new_reg_base_value[regno] = 0;
467           return;
468         }
469       src = SET_SRC (set);
470     }
471   else
472     {
473       if (reg_seen[regno])
474         {
475           new_reg_base_value[regno] = 0;
476           return;
477         }
478       reg_seen[regno] = 1;
479       new_reg_base_value[regno] = gen_rtx_ADDRESS (Pmode,
480                                                    GEN_INT (unique_id++));
481       return;
482     }
483
484   /* This is not the first set.  If the new value is not related to the
485      old value, forget the base value. Note that the following code is
486      not detected:
487      extern int x, y;  int *p = &x; p += (&y-&x);
488      ANSI C does not allow computing the difference of addresses
489      of distinct top level objects.  */
490   if (new_reg_base_value[regno])
491     switch (GET_CODE (src))
492       {
493       case LO_SUM:
494       case PLUS:
495       case MINUS:
496         if (XEXP (src, 0) != dest && XEXP (src, 1) != dest)
497           new_reg_base_value[regno] = 0;
498         break;
499       case AND:
500         if (XEXP (src, 0) != dest || GET_CODE (XEXP (src, 1)) != CONST_INT)
501           new_reg_base_value[regno] = 0;
502         break;
503       default:
504         new_reg_base_value[regno] = 0;
505         break;
506       }
507   /* If this is the first set of a register, record the value.  */
508   else if ((regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
509            && ! reg_seen[regno] && new_reg_base_value[regno] == 0)
510     new_reg_base_value[regno] = find_base_value (src);
511
512   reg_seen[regno] = 1;
513 }
514
515 /* Called from loop optimization when a new pseudo-register is created.  */
516
517 void
518 record_base_value (regno, val, invariant)
519      int regno;
520      rtx val;
521      int invariant;
522 {
523   if ((unsigned) regno >= reg_base_value_size)
524     return;
525
526   /* If INVARIANT is true then this value also describes an invariant
527      relationship which can be used to deduce that two registers with
528      unknown values are different.  */
529   if (invariant && alias_invariant)
530     alias_invariant[regno] = val;
531
532   if (GET_CODE (val) == REG)
533     {
534       if ((unsigned) REGNO (val) < reg_base_value_size)
535         reg_base_value[regno] = reg_base_value[REGNO (val)];
536
537       return;
538     }
539
540   reg_base_value[regno] = find_base_value (val);
541 }
542
543 static rtx
544 canon_rtx (x)
545      rtx x;
546 {
547   /* Recursively look for equivalences.  */
548   if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
549       && REGNO (x) < reg_known_value_size)
550     return reg_known_value[REGNO (x)] == x
551       ? x : canon_rtx (reg_known_value[REGNO (x)]);
552   else if (GET_CODE (x) == PLUS)
553     {
554       rtx x0 = canon_rtx (XEXP (x, 0));
555       rtx x1 = canon_rtx (XEXP (x, 1));
556
557       if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
558         {
559           /* We can tolerate LO_SUMs being offset here; these
560              rtl are used for nothing other than comparisons.  */
561           if (GET_CODE (x0) == CONST_INT)
562             return plus_constant_for_output (x1, INTVAL (x0));
563           else if (GET_CODE (x1) == CONST_INT)
564             return plus_constant_for_output (x0, INTVAL (x1));
565           return gen_rtx_PLUS (GET_MODE (x), x0, x1);
566         }
567     }
568
569   /* This gives us much better alias analysis when called from
570      the loop optimizer.   Note we want to leave the original
571      MEM alone, but need to return the canonicalized MEM with
572      all the flags with their original values.  */
573   else if (GET_CODE (x) == MEM)
574     {
575       rtx addr = canon_rtx (XEXP (x, 0));
576
577       if (addr != XEXP (x, 0))
578         {
579           rtx new = gen_rtx_MEM (GET_MODE (x), addr);
580
581           RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (x);
582           MEM_COPY_ATTRIBUTES (new, x);
583           MEM_ALIAS_SET (new) = MEM_ALIAS_SET (x);
584           x = new;
585         }
586     }
587   return x;
588 }
589
590 /* Return 1 if X and Y are identical-looking rtx's.
591
592    We use the data in reg_known_value above to see if two registers with
593    different numbers are, in fact, equivalent.  */
594
595 static int
596 rtx_equal_for_memref_p (x, y)
597      rtx x, y;
598 {
599   register int i;
600   register int j;
601   register enum rtx_code code;
602   register const char *fmt;
603
604   if (x == 0 && y == 0)
605     return 1;
606   if (x == 0 || y == 0)
607     return 0;
608
609   x = canon_rtx (x);
610   y = canon_rtx (y);
611
612   if (x == y)
613     return 1;
614
615   code = GET_CODE (x);
616   /* Rtx's of different codes cannot be equal.  */
617   if (code != GET_CODE (y))
618     return 0;
619
620   /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
621      (REG:SI x) and (REG:HI x) are NOT equivalent.  */
622
623   if (GET_MODE (x) != GET_MODE (y))
624     return 0;
625
626   /* REG, LABEL_REF, and SYMBOL_REF can be compared nonrecursively.  */
627
628   if (code == REG)
629     return REGNO (x) == REGNO (y);
630   if (code == LABEL_REF)
631     return XEXP (x, 0) == XEXP (y, 0);
632   if (code == SYMBOL_REF)
633     return XSTR (x, 0) == XSTR (y, 0);
634   if (code == CONST_INT)
635     return INTVAL (x) == INTVAL (y);
636   /* There's no need to compare the contents of CONST_DOUBLEs because
637      they're unique. */
638   if (code == CONST_DOUBLE)
639     return 0;
640   if (code == ADDRESSOF)
641     return (REGNO (XEXP (x, 0)) == REGNO (XEXP (y, 0))
642             && XINT (x, 1) == XINT (y, 1));
643
644   /* For commutative operations, the RTX match if the operand match in any
645      order.  Also handle the simple binary and unary cases without a loop.  */
646   if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
647     return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
648              && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
649             || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
650                 && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
651   else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
652     return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
653             && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)));
654   else if (GET_RTX_CLASS (code) == '1')
655     return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0));
656
657   /* Compare the elements.  If any pair of corresponding elements
658      fail to match, return 0 for the whole things.
659
660      Limit cases to types which actually appear in addresses.  */
661
662   fmt = GET_RTX_FORMAT (code);
663   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
664     {
665       switch (fmt[i])
666         {
667         case 'i':
668           if (XINT (x, i) != XINT (y, i))
669             return 0;
670           break;
671
672         case 'E':
673           /* Two vectors must have the same length.  */
674           if (XVECLEN (x, i) != XVECLEN (y, i))
675             return 0;
676
677           /* And the corresponding elements must match.  */
678           for (j = 0; j < XVECLEN (x, i); j++)
679             if (rtx_equal_for_memref_p (XVECEXP (x, i, j),
680                                         XVECEXP (y, i, j)) == 0)
681               return 0;
682           break;
683
684         case 'e':
685           if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0)
686             return 0;
687           break;
688
689         /* This can happen for an asm which clobbers memory.  */
690         case '0':
691           break;
692
693           /* It is believed that rtx's at this level will never
694              contain anything but integers and other rtx's,
695              except for within LABEL_REFs and SYMBOL_REFs.  */
696         default:
697           abort ();
698         }
699     }
700   return 1;
701 }
702
703 /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
704    X and return it, or return 0 if none found.  */
705
706 static rtx
707 find_symbolic_term (x)
708      rtx x;
709 {
710   register int i;
711   register enum rtx_code code;
712   register const char *fmt;
713
714   code = GET_CODE (x);
715   if (code == SYMBOL_REF || code == LABEL_REF)
716     return x;
717   if (GET_RTX_CLASS (code) == 'o')
718     return 0;
719
720   fmt = GET_RTX_FORMAT (code);
721   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
722     {
723       rtx t;
724
725       if (fmt[i] == 'e')
726         {
727           t = find_symbolic_term (XEXP (x, i));
728           if (t != 0)
729             return t;
730         }
731       else if (fmt[i] == 'E')
732         break;
733     }
734   return 0;
735 }
736
737 static rtx
738 find_base_term (x)
739      register rtx x;
740 {
741   switch (GET_CODE (x))
742     {
743     case REG:
744       return REG_BASE_VALUE (x);
745
746     case ZERO_EXTEND:
747     case SIGN_EXTEND:   /* Used for Alpha/NT pointers */
748     case HIGH:
749     case PRE_INC:
750     case PRE_DEC:
751     case POST_INC:
752     case POST_DEC:
753       return find_base_term (XEXP (x, 0));
754
755     case CONST:
756       x = XEXP (x, 0);
757       if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
758         return 0;
759       /* fall through */
760     case LO_SUM:
761     case PLUS:
762     case MINUS:
763       {
764         rtx tmp1 = XEXP (x, 0);
765         rtx tmp2 = XEXP (x, 1);
766
767         /* This is a litle bit tricky since we have to determine which of
768            the two operands represents the real base address.  Otherwise this
769            routine may return the index register instead of the base register.
770
771            That may cause us to believe no aliasing was possible, when in
772            fact aliasing is possible.
773
774            We use a few simple tests to guess the base register.  Additional
775            tests can certainly be added.  For example, if one of the operands
776            is a shift or multiply, then it must be the index register and the
777            other operand is the base register.  */
778         
779         /* If either operand is known to be a pointer, then use it
780            to determine the base term.  */
781         if (REG_P (tmp1) && REGNO_POINTER_FLAG (REGNO (tmp1)))
782           return find_base_term (tmp1);
783
784         if (REG_P (tmp2) && REGNO_POINTER_FLAG (REGNO (tmp2)))
785           return find_base_term (tmp2);
786
787         /* Neither operand was known to be a pointer.  Go ahead and find the
788            base term for both operands.  */
789         tmp1 = find_base_term (tmp1);
790         tmp2 = find_base_term (tmp2);
791
792         /* If either base term is named object or a special address
793            (like an argument or stack reference), then use it for the
794            base term.  */
795         if (tmp1 != 0
796             && (GET_CODE (tmp1) == SYMBOL_REF
797                 || GET_CODE (tmp1) == LABEL_REF
798                 || (GET_CODE (tmp1) == ADDRESS
799                     && GET_MODE (tmp1) != VOIDmode)))
800           return tmp1;
801
802         if (tmp2 != 0
803             && (GET_CODE (tmp2) == SYMBOL_REF
804                 || GET_CODE (tmp2) == LABEL_REF
805                 || (GET_CODE (tmp2) == ADDRESS
806                     && GET_MODE (tmp2) != VOIDmode)))
807           return tmp2;
808
809         /* We could not determine which of the two operands was the
810            base register and which was the index.  So we can determine
811            nothing from the base alias check.  */
812         return 0;
813       }
814
815     case AND:
816       if (GET_CODE (XEXP (x, 0)) == REG && GET_CODE (XEXP (x, 1)) == CONST_INT)
817         return REG_BASE_VALUE (XEXP (x, 0));
818       return 0;
819
820     case SYMBOL_REF:
821     case LABEL_REF:
822       return x;
823
824     default:
825       return 0;
826     }
827 }
828
829 /* Return 0 if the addresses X and Y are known to point to different
830    objects, 1 if they might be pointers to the same object.  */
831
832 static int
833 base_alias_check (x, y, x_mode, y_mode)
834      rtx x, y;
835      enum machine_mode x_mode, y_mode;
836 {
837   rtx x_base = find_base_term (x);
838   rtx y_base = find_base_term (y);
839
840   /* If the address itself has no known base see if a known equivalent
841      value has one.  If either address still has no known base, nothing
842      is known about aliasing.  */
843   if (x_base == 0)
844     {
845       rtx x_c;
846
847       if (! flag_expensive_optimizations || (x_c = canon_rtx (x)) == x)
848         return 1;
849
850       x_base = find_base_term (x_c);
851       if (x_base == 0)
852         return 1;
853     }
854
855   if (y_base == 0)
856     {
857       rtx y_c;
858       if (! flag_expensive_optimizations || (y_c = canon_rtx (y)) == y)
859         return 1;
860
861       y_base = find_base_term (y_c);
862       if (y_base == 0)
863         return 1;
864     }
865
866   /* If the base addresses are equal nothing is known about aliasing.  */
867   if (rtx_equal_p (x_base, y_base))
868     return 1;
869
870   /* The base addresses of the read and write are different expressions. 
871      If they are both symbols and they are not accessed via AND, there is
872      no conflict.  We can bring knowledge of object alignment into play
873      here.  For example, on alpha, "char a, b;" can alias one another,
874      though "char a; long b;" cannot.  */
875   if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
876     {
877       if (GET_CODE (x) == AND && GET_CODE (y) == AND)
878         return 1;
879       if (GET_CODE (x) == AND
880           && (GET_CODE (XEXP (x, 1)) != CONST_INT
881               || GET_MODE_UNIT_SIZE (y_mode) < -INTVAL (XEXP (x, 1))))
882         return 1;
883       if (GET_CODE (y) == AND
884           && (GET_CODE (XEXP (y, 1)) != CONST_INT
885               || GET_MODE_UNIT_SIZE (x_mode) < -INTVAL (XEXP (y, 1))))
886         return 1;
887       /* Differing symbols never alias.  */
888       return 0;
889     }
890
891   /* If one address is a stack reference there can be no alias:
892      stack references using different base registers do not alias,
893      a stack reference can not alias a parameter, and a stack reference
894      can not alias a global.  */
895   if ((GET_CODE (x_base) == ADDRESS && GET_MODE (x_base) == Pmode)
896       || (GET_CODE (y_base) == ADDRESS && GET_MODE (y_base) == Pmode))
897     return 0;
898
899   if (! flag_argument_noalias)
900     return 1;
901
902   if (flag_argument_noalias > 1)
903     return 0;
904
905   /* Weak noalias assertion (arguments are distinct, but may match globals). */
906   return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode);
907 }
908
909 /*  Return the address of the (N_REFS + 1)th memory reference to ADDR
910     where SIZE is the size in bytes of the memory reference.  If ADDR
911     is not modified by the memory reference then ADDR is returned.  */
912
913 rtx
914 addr_side_effect_eval (addr, size, n_refs)
915      rtx addr;
916      int size;
917      int n_refs;
918 {
919   int offset = 0;
920   
921   switch (GET_CODE (addr))
922     {
923     case PRE_INC:
924       offset = (n_refs + 1) * size;
925       break;
926     case PRE_DEC:
927       offset = -(n_refs + 1) * size;
928       break;
929     case POST_INC:
930       offset = n_refs * size;
931       break;
932     case POST_DEC:
933       offset = -n_refs * size;
934       break;
935
936     default:
937       return addr;
938     }
939   
940   if (offset)
941     addr = gen_rtx_PLUS (GET_MODE (addr), XEXP (addr, 0), GEN_INT (offset));
942   else
943     addr = XEXP (addr, 0);
944
945   return addr;
946 }
947
948 /* Return nonzero if X and Y (memory addresses) could reference the
949    same location in memory.  C is an offset accumulator.  When
950    C is nonzero, we are testing aliases between X and Y + C.
951    XSIZE is the size in bytes of the X reference,
952    similarly YSIZE is the size in bytes for Y.
953
954    If XSIZE or YSIZE is zero, we do not know the amount of memory being
955    referenced (the reference was BLKmode), so make the most pessimistic
956    assumptions.
957
958    If XSIZE or YSIZE is negative, we may access memory outside the object
959    being referenced as a side effect.  This can happen when using AND to
960    align memory references, as is done on the Alpha.
961
962    Nice to notice that varying addresses cannot conflict with fp if no
963    local variables had their addresses taken, but that's too hard now.  */
964
965
966 static int
967 memrefs_conflict_p (xsize, x, ysize, y, c)
968      register rtx x, y;
969      int xsize, ysize;
970      HOST_WIDE_INT c;
971 {
972   if (GET_CODE (x) == HIGH)
973     x = XEXP (x, 0);
974   else if (GET_CODE (x) == LO_SUM)
975     x = XEXP (x, 1);
976   else
977     x = canon_rtx (addr_side_effect_eval (x, xsize, 0));
978   if (GET_CODE (y) == HIGH)
979     y = XEXP (y, 0);
980   else if (GET_CODE (y) == LO_SUM)
981     y = XEXP (y, 1);
982   else
983     y = canon_rtx (addr_side_effect_eval (y, ysize, 0));
984
985   if (rtx_equal_for_memref_p (x, y))
986     {
987       if (xsize <= 0 || ysize <= 0)
988         return 1;
989       if (c >= 0 && xsize > c)
990         return 1;
991       if (c < 0 && ysize+c > 0)
992         return 1;
993       return 0;
994     }
995
996   /* This code used to check for conflicts involving stack references and
997      globals but the base address alias code now handles these cases.  */
998
999   if (GET_CODE (x) == PLUS)
1000     {
1001       /* The fact that X is canonicalized means that this
1002          PLUS rtx is canonicalized.  */
1003       rtx x0 = XEXP (x, 0);
1004       rtx x1 = XEXP (x, 1);
1005
1006       if (GET_CODE (y) == PLUS)
1007         {
1008           /* The fact that Y is canonicalized means that this
1009              PLUS rtx is canonicalized.  */
1010           rtx y0 = XEXP (y, 0);
1011           rtx y1 = XEXP (y, 1);
1012
1013           if (rtx_equal_for_memref_p (x1, y1))
1014             return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1015           if (rtx_equal_for_memref_p (x0, y0))
1016             return memrefs_conflict_p (xsize, x1, ysize, y1, c);
1017           if (GET_CODE (x1) == CONST_INT)
1018             {
1019               if (GET_CODE (y1) == CONST_INT)
1020                 return memrefs_conflict_p (xsize, x0, ysize, y0,
1021                                            c - INTVAL (x1) + INTVAL (y1));
1022               else
1023                 return memrefs_conflict_p (xsize, x0, ysize, y,
1024                                            c - INTVAL (x1));
1025             }
1026           else if (GET_CODE (y1) == CONST_INT)
1027             return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1028
1029           return 1;
1030         }
1031       else if (GET_CODE (x1) == CONST_INT)
1032         return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
1033     }
1034   else if (GET_CODE (y) == PLUS)
1035     {
1036       /* The fact that Y is canonicalized means that this
1037          PLUS rtx is canonicalized.  */
1038       rtx y0 = XEXP (y, 0);
1039       rtx y1 = XEXP (y, 1);
1040
1041       if (GET_CODE (y1) == CONST_INT)
1042         return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1043       else
1044         return 1;
1045     }
1046
1047   if (GET_CODE (x) == GET_CODE (y))
1048     switch (GET_CODE (x))
1049       {
1050       case MULT:
1051         {
1052           /* Handle cases where we expect the second operands to be the
1053              same, and check only whether the first operand would conflict
1054              or not.  */
1055           rtx x0, y0;
1056           rtx x1 = canon_rtx (XEXP (x, 1));
1057           rtx y1 = canon_rtx (XEXP (y, 1));
1058           if (! rtx_equal_for_memref_p (x1, y1))
1059             return 1;
1060           x0 = canon_rtx (XEXP (x, 0));
1061           y0 = canon_rtx (XEXP (y, 0));
1062           if (rtx_equal_for_memref_p (x0, y0))
1063             return (xsize == 0 || ysize == 0
1064                     || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1065
1066           /* Can't properly adjust our sizes.  */
1067           if (GET_CODE (x1) != CONST_INT)
1068             return 1;
1069           xsize /= INTVAL (x1);
1070           ysize /= INTVAL (x1);
1071           c /= INTVAL (x1);
1072           return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1073         }
1074
1075       case REG:
1076         /* Are these registers known not to be equal?  */
1077         if (alias_invariant)
1078           {
1079             unsigned int r_x = REGNO (x), r_y = REGNO (y);
1080             rtx i_x, i_y;       /* invariant relationships of X and Y */
1081
1082             i_x = r_x >= reg_base_value_size ? 0 : alias_invariant[r_x];
1083             i_y = r_y >= reg_base_value_size ? 0 : alias_invariant[r_y];
1084
1085             if (i_x == 0 && i_y == 0)
1086               break;
1087
1088             if (! memrefs_conflict_p (xsize, i_x ? i_x : x,
1089                                       ysize, i_y ? i_y : y, c))
1090               return 0;
1091           }
1092         break;
1093
1094       default:
1095         break;
1096       }
1097
1098   /* Treat an access through an AND (e.g. a subword access on an Alpha)
1099      as an access with indeterminate size.  Assume that references 
1100      besides AND are aligned, so if the size of the other reference is
1101      at least as large as the alignment, assume no other overlap.  */
1102   if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT)
1103     {
1104       if (GET_CODE (y) == AND || ysize < -INTVAL (XEXP (x, 1)))
1105         xsize = -1;
1106       return memrefs_conflict_p (xsize, XEXP (x, 0), ysize, y, c);
1107     }
1108   if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT)
1109     {
1110       /* ??? If we are indexing far enough into the array/structure, we
1111          may yet be able to determine that we can not overlap.  But we 
1112          also need to that we are far enough from the end not to overlap
1113          a following reference, so we do nothing with that for now.  */
1114       if (GET_CODE (x) == AND || xsize < -INTVAL (XEXP (y, 1)))
1115         ysize = -1;
1116       return memrefs_conflict_p (xsize, x, ysize, XEXP (y, 0), c);
1117     }
1118
1119   if (CONSTANT_P (x))
1120     {
1121       if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
1122         {
1123           c += (INTVAL (y) - INTVAL (x));
1124           return (xsize <= 0 || ysize <= 0
1125                   || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1126         }
1127
1128       if (GET_CODE (x) == CONST)
1129         {
1130           if (GET_CODE (y) == CONST)
1131             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1132                                        ysize, canon_rtx (XEXP (y, 0)), c);
1133           else
1134             return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1135                                        ysize, y, c);
1136         }
1137       if (GET_CODE (y) == CONST)
1138         return memrefs_conflict_p (xsize, x, ysize,
1139                                    canon_rtx (XEXP (y, 0)), c);
1140
1141       if (CONSTANT_P (y))
1142         return (xsize < 0 || ysize < 0
1143                 || (rtx_equal_for_memref_p (x, y)
1144                     && (xsize == 0 || ysize == 0
1145                         || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0))));
1146
1147       return 1;
1148     }
1149   return 1;
1150 }
1151
1152 /* Functions to compute memory dependencies.
1153
1154    Since we process the insns in execution order, we can build tables
1155    to keep track of what registers are fixed (and not aliased), what registers
1156    are varying in known ways, and what registers are varying in unknown
1157    ways.
1158
1159    If both memory references are volatile, then there must always be a
1160    dependence between the two references, since their order can not be
1161    changed.  A volatile and non-volatile reference can be interchanged
1162    though. 
1163
1164    A MEM_IN_STRUCT reference at a non-QImode non-AND varying address can never
1165    conflict with a non-MEM_IN_STRUCT reference at a fixed address.   We must
1166    allow QImode aliasing because the ANSI C standard allows character
1167    pointers to alias anything.  We are assuming that characters are
1168    always QImode here.  We also must allow AND addresses, because they may
1169    generate accesses outside the object being referenced.  This is used to
1170    generate aligned addresses from unaligned addresses, for instance, the
1171    alpha storeqi_unaligned pattern.  */
1172
1173 /* Read dependence: X is read after read in MEM takes place.  There can
1174    only be a dependence here if both reads are volatile.  */
1175
1176 int
1177 read_dependence (mem, x)
1178      rtx mem;
1179      rtx x;
1180 {
1181   return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
1182 }
1183
1184 /* Returns MEM1 if and only if MEM1 is a scalar at a fixed address and
1185    MEM2 is a reference to a structure at a varying address, or returns
1186    MEM2 if vice versa.  Otherwise, returns NULL_RTX.  If a non-NULL
1187    value is returned MEM1 and MEM2 can never alias.  VARIES_P is used
1188    to decide whether or not an address may vary; it should return
1189    nozero whenever variation is possible.  */
1190
1191 static rtx
1192 fixed_scalar_and_varying_struct_p (mem1, mem2, varies_p)
1193      rtx mem1;
1194      rtx mem2;
1195      int (*varies_p) PROTO((rtx));
1196 {
1197   rtx mem1_addr = XEXP (mem1, 0);
1198   rtx mem2_addr = XEXP (mem2, 0);
1199   
1200   if (MEM_SCALAR_P (mem1) && MEM_IN_STRUCT_P (mem2) 
1201       && !varies_p (mem1_addr) && varies_p (mem2_addr))
1202     /* MEM1 is a scalar at a fixed address; MEM2 is a struct at a
1203        varying address.  */
1204     return mem1;
1205
1206   if (MEM_IN_STRUCT_P (mem1) && MEM_SCALAR_P (mem2) 
1207       && varies_p (mem1_addr) && !varies_p (mem2_addr))
1208     /* MEM2 is a scalar at a fixed address; MEM1 is a struct at a
1209        varying address.  */
1210     return mem2;
1211
1212   return NULL_RTX;
1213 }
1214
1215 /* Returns nonzero if something about the mode or address format MEM1
1216    indicates that it might well alias *anything*.  */
1217
1218 static int
1219 aliases_everything_p (mem)
1220      rtx mem;
1221 {
1222   if (GET_MODE (mem) == QImode)
1223     /* ANSI C says that a `char*' can point to anything.  */
1224     return 1;
1225
1226   if (GET_CODE (XEXP (mem, 0)) == AND)
1227     /* If the address is an AND, its very hard to know at what it is
1228        actually pointing.  */
1229     return 1;
1230     
1231   return 0;
1232 }
1233
1234 /* True dependence: X is read after store in MEM takes place.  */
1235
1236 int
1237 true_dependence (mem, mem_mode, x, varies)
1238      rtx mem;
1239      enum machine_mode mem_mode;
1240      rtx x;
1241      int (*varies) PROTO((rtx));
1242 {
1243   register rtx x_addr, mem_addr;
1244
1245   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
1246     return 1;
1247
1248   if (DIFFERENT_ALIAS_SETS_P (x, mem))
1249     return 0;
1250
1251   /* If X is an unchanging read, then it can't possibly conflict with any
1252      non-unchanging store.  It may conflict with an unchanging write though,
1253      because there may be a single store to this address to initialize it.
1254      Just fall through to the code below to resolve the case where we have
1255      both an unchanging read and an unchanging write.  This won't handle all
1256      cases optimally, but the possible performance loss should be
1257      negligible.  */
1258   if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
1259     return 0;
1260
1261   if (mem_mode == VOIDmode)
1262     mem_mode = GET_MODE (mem);
1263
1264   if (! base_alias_check (XEXP (x, 0), XEXP (mem, 0), GET_MODE (x), mem_mode))
1265     return 0;
1266
1267   x_addr = canon_rtx (XEXP (x, 0));
1268   mem_addr = canon_rtx (XEXP (mem, 0));
1269
1270   if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
1271                             SIZE_FOR_MODE (x), x_addr, 0))
1272     return 0;
1273
1274   if (aliases_everything_p (x))
1275     return 1;
1276
1277   /* We cannot use aliases_everyting_p to test MEM, since we must look
1278      at MEM_MODE, rather than GET_MODE (MEM).  */
1279   if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
1280     return 1;
1281
1282   /* In true_dependence we also allow BLKmode to alias anything.  Why
1283      don't we do this in anti_dependence and output_dependence?  */
1284   if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
1285     return 1;
1286
1287   return !fixed_scalar_and_varying_struct_p (mem, x, varies);
1288 }
1289
1290 /* Returns non-zero if a write to X might alias a previous read from
1291    (or, if WRITEP is non-zero, a write to) MEM.  */
1292
1293 static int
1294 write_dependence_p (mem, x, writep)
1295      rtx mem;
1296      rtx x;
1297      int writep;
1298 {
1299   rtx x_addr, mem_addr;
1300   rtx fixed_scalar;
1301
1302   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
1303     return 1;
1304
1305   /* If MEM is an unchanging read, then it can't possibly conflict with
1306      the store to X, because there is at most one store to MEM, and it must
1307      have occurred somewhere before MEM.  */
1308   if (!writep && RTX_UNCHANGING_P (mem))
1309     return 0;
1310
1311   if (! base_alias_check (XEXP (x, 0), XEXP (mem, 0), GET_MODE (x),
1312                           GET_MODE (mem)))
1313     return 0;
1314
1315   x = canon_rtx (x);
1316   mem = canon_rtx (mem);
1317
1318   if (DIFFERENT_ALIAS_SETS_P (x, mem))
1319     return 0;
1320
1321   x_addr = XEXP (x, 0);
1322   mem_addr = XEXP (mem, 0);
1323
1324   if (!memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
1325                            SIZE_FOR_MODE (x), x_addr, 0))
1326     return 0;
1327
1328   fixed_scalar 
1329     = fixed_scalar_and_varying_struct_p (mem, x, rtx_addr_varies_p);
1330   
1331   return (!(fixed_scalar == mem && !aliases_everything_p (x))
1332           && !(fixed_scalar == x && !aliases_everything_p (mem)));
1333 }
1334
1335 /* Anti dependence: X is written after read in MEM takes place.  */
1336
1337 int
1338 anti_dependence (mem, x)
1339      rtx mem;
1340      rtx x;
1341 {
1342   return write_dependence_p (mem, x, /*writep=*/0);
1343 }
1344
1345 /* Output dependence: X is written after store in MEM takes place.  */
1346
1347 int
1348 output_dependence (mem, x)
1349      register rtx mem;
1350      register rtx x;
1351 {
1352   return write_dependence_p (mem, x, /*writep=*/1);
1353 }
1354
1355 /* Returns non-zero if X might refer to something which is not
1356    local to the function and is not constant.  */
1357
1358 static int
1359 nonlocal_reference_p (x)
1360      rtx x;
1361 {
1362   rtx base;
1363   register RTX_CODE code;
1364   int regno;
1365
1366   code = GET_CODE (x);
1367
1368   if (GET_RTX_CLASS (code) == 'i')
1369     {
1370       /* Constant functions are constant.  */
1371       if (code == CALL_INSN && CONST_CALL_P (x))
1372         return 0;
1373       x = PATTERN (x);
1374       code = GET_CODE (x);
1375     }
1376
1377   switch (code)
1378     {
1379     case SUBREG:
1380       if (GET_CODE (SUBREG_REG (x)) == REG)
1381         {
1382           /* Global registers are not local.  */
1383           if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER
1384               && global_regs[REGNO (SUBREG_REG (x)) + SUBREG_WORD (x)])
1385             return 1;
1386           return 0;
1387         }
1388       break;
1389
1390     case REG:
1391       regno = REGNO (x);
1392       /* Global registers are not local.  */
1393       if (regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
1394         return 1;
1395       return 0;
1396
1397     case SCRATCH:
1398     case PC:
1399     case CC0:
1400     case CONST_INT:
1401     case CONST_DOUBLE:
1402     case CONST:
1403     case LABEL_REF:
1404       return 0;
1405
1406     case SYMBOL_REF:
1407       /* Constants in the function's constants pool are constant.  */
1408       if (CONSTANT_POOL_ADDRESS_P (x))
1409         return 0;
1410       return 1;
1411
1412     case CALL:
1413       /* Recursion introduces no additional considerations.  */
1414       if (GET_CODE (XEXP (x, 0)) == MEM
1415           && GET_CODE (XEXP (XEXP (x, 0), 0)) == SYMBOL_REF
1416           && strcmp(XSTR (XEXP (XEXP (x, 0), 0), 0),
1417                     IDENTIFIER_POINTER (
1418                           DECL_ASSEMBLER_NAME (current_function_decl))) == 0)
1419         return 0;
1420       return 1;
1421
1422     case MEM:
1423       /* Be overly conservative and consider any volatile memory
1424          reference as not local.  */
1425       if (MEM_VOLATILE_P (x))
1426         return 1;
1427       base = find_base_term (XEXP (x, 0));
1428       if (base)
1429         {
1430           /* A Pmode ADDRESS could be a reference via the structure value
1431              address or static chain.  Such memory references are nonlocal.
1432
1433              Thus, we have to examine the contents of the ADDRESS to find
1434              out if this is a local reference or not.  */
1435           if (GET_CODE (base) == ADDRESS
1436               && GET_MODE (base) == Pmode
1437               && (XEXP (base, 0) == stack_pointer_rtx
1438                   || XEXP (base, 0) == arg_pointer_rtx
1439 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
1440                   || XEXP (base, 0) == hard_frame_pointer_rtx
1441 #endif
1442                   || XEXP (base, 0) == frame_pointer_rtx))
1443             return 0;
1444           /* Constants in the function's constant pool are constant.  */
1445           if (GET_CODE (base) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (base))
1446             return 0;
1447         }
1448       return 1;
1449
1450     case ASM_INPUT:
1451     case ASM_OPERANDS:
1452       return 1;
1453
1454     default:
1455       break;
1456     }
1457
1458   /* Recursively scan the operands of this expression.  */
1459
1460   {
1461     register const char *fmt = GET_RTX_FORMAT (code);
1462     register int i;
1463     
1464     for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1465       {
1466         if (fmt[i] == 'e')
1467           {
1468             if (nonlocal_reference_p (XEXP (x, i)))
1469               return 1;
1470           }
1471         else if (fmt[i] == 'E')
1472           {
1473             register int j;
1474             for (j = 0; j < XVECLEN (x, i); j++)
1475               if (nonlocal_reference_p (XVECEXP (x, i, j)))
1476                 return 1;
1477           }
1478       }
1479   }
1480
1481   return 0;
1482 }
1483
1484 /* Mark the function if it is constant.  */
1485
1486 void
1487 mark_constant_function ()
1488 {
1489   rtx insn;
1490
1491   if (TREE_PUBLIC (current_function_decl)
1492       || TREE_READONLY (current_function_decl)
1493       || TREE_THIS_VOLATILE (current_function_decl)
1494       || TYPE_MODE (TREE_TYPE (current_function_decl)) == VOIDmode)
1495     return;
1496
1497   /* Determine if this is a constant function.  */
1498
1499   for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
1500     if (GET_RTX_CLASS (GET_CODE (insn)) == 'i'
1501         && nonlocal_reference_p (insn))
1502       return;
1503
1504   /* Mark the function.  */
1505
1506   TREE_READONLY (current_function_decl) = 1;
1507 }
1508
1509
1510 static HARD_REG_SET argument_registers;
1511
1512 void
1513 init_alias_once ()
1514 {
1515   register int i;
1516
1517 #ifndef OUTGOING_REGNO
1518 #define OUTGOING_REGNO(N) N
1519 #endif
1520   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1521     /* Check whether this register can hold an incoming pointer
1522        argument.  FUNCTION_ARG_REGNO_P tests outgoing register
1523        numbers, so translate if necessary due to register windows. */
1524     if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i))
1525         && HARD_REGNO_MODE_OK (i, Pmode))
1526       SET_HARD_REG_BIT (argument_registers, i);
1527
1528   alias_sets = splay_tree_new (splay_tree_compare_ints, 0, 0);
1529 }
1530
1531 void
1532 init_alias_analysis ()
1533 {
1534   int maxreg = max_reg_num ();
1535   int changed, pass;
1536   register int i;
1537   register unsigned int ui;
1538   register rtx insn;
1539
1540   reg_known_value_size = maxreg;
1541
1542   reg_known_value 
1543     = (rtx *) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (rtx))
1544     - FIRST_PSEUDO_REGISTER;
1545   reg_known_equiv_p 
1546     = (char*) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (char))
1547     - FIRST_PSEUDO_REGISTER;
1548
1549   /* Overallocate reg_base_value to allow some growth during loop
1550      optimization.  Loop unrolling can create a large number of
1551      registers.  */
1552   reg_base_value_size = maxreg * 2;
1553   reg_base_value = (rtx *) xcalloc (reg_base_value_size, sizeof (rtx));
1554   if (ggc_p)
1555     ggc_add_rtx_root (reg_base_value, reg_base_value_size);
1556
1557   new_reg_base_value = (rtx *) xmalloc (reg_base_value_size * sizeof (rtx));
1558   reg_seen = (char *) xmalloc (reg_base_value_size);
1559   if (! reload_completed && flag_unroll_loops)
1560     {
1561       /* ??? Why are we realloc'ing if we're just going to zero it?  */
1562       alias_invariant = (rtx *)xrealloc (alias_invariant,
1563                                          reg_base_value_size * sizeof (rtx));
1564       bzero ((char *)alias_invariant, reg_base_value_size * sizeof (rtx));
1565     }
1566     
1567
1568   /* The basic idea is that each pass through this loop will use the
1569      "constant" information from the previous pass to propagate alias
1570      information through another level of assignments.
1571
1572      This could get expensive if the assignment chains are long.  Maybe
1573      we should throttle the number of iterations, possibly based on
1574      the optimization level or flag_expensive_optimizations.
1575
1576      We could propagate more information in the first pass by making use
1577      of REG_N_SETS to determine immediately that the alias information
1578      for a pseudo is "constant".
1579
1580      A program with an uninitialized variable can cause an infinite loop
1581      here.  Instead of doing a full dataflow analysis to detect such problems
1582      we just cap the number of iterations for the loop.
1583
1584      The state of the arrays for the set chain in question does not matter
1585      since the program has undefined behavior.  */
1586
1587   pass = 0;
1588   do
1589     {
1590       /* Assume nothing will change this iteration of the loop.  */
1591       changed = 0;
1592
1593       /* We want to assign the same IDs each iteration of this loop, so
1594          start counting from zero each iteration of the loop.  */
1595       unique_id = 0;
1596
1597       /* We're at the start of the funtion each iteration through the
1598          loop, so we're copying arguments.  */
1599       copying_arguments = 1;
1600
1601       /* Wipe the potential alias information clean for this pass.  */
1602       bzero ((char *) new_reg_base_value, reg_base_value_size * sizeof (rtx));
1603
1604       /* Wipe the reg_seen array clean.  */
1605       bzero ((char *) reg_seen, reg_base_value_size);
1606
1607       /* Mark all hard registers which may contain an address.
1608          The stack, frame and argument pointers may contain an address.
1609          An argument register which can hold a Pmode value may contain
1610          an address even if it is not in BASE_REGS.
1611
1612          The address expression is VOIDmode for an argument and
1613          Pmode for other registers.  */
1614
1615       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1616         if (TEST_HARD_REG_BIT (argument_registers, i))
1617           new_reg_base_value[i] = gen_rtx_ADDRESS (VOIDmode,
1618                                                    gen_rtx_REG (Pmode, i));
1619
1620       new_reg_base_value[STACK_POINTER_REGNUM]
1621         = gen_rtx_ADDRESS (Pmode, stack_pointer_rtx);
1622       new_reg_base_value[ARG_POINTER_REGNUM]
1623         = gen_rtx_ADDRESS (Pmode, arg_pointer_rtx);
1624       new_reg_base_value[FRAME_POINTER_REGNUM]
1625         = gen_rtx_ADDRESS (Pmode, frame_pointer_rtx);
1626 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
1627       new_reg_base_value[HARD_FRAME_POINTER_REGNUM]
1628         = gen_rtx_ADDRESS (Pmode, hard_frame_pointer_rtx);
1629 #endif
1630       if (struct_value_incoming_rtx
1631           && GET_CODE (struct_value_incoming_rtx) == REG)
1632         new_reg_base_value[REGNO (struct_value_incoming_rtx)]
1633           = gen_rtx_ADDRESS (Pmode, struct_value_incoming_rtx);
1634
1635       if (static_chain_rtx
1636           && GET_CODE (static_chain_rtx) == REG)
1637         new_reg_base_value[REGNO (static_chain_rtx)]
1638           = gen_rtx_ADDRESS (Pmode, static_chain_rtx);
1639
1640       /* Walk the insns adding values to the new_reg_base_value array.  */
1641       for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
1642         {
1643 #if defined (HAVE_prologue) || defined (HAVE_epilogue)
1644           if (prologue_epilogue_contains (insn))
1645             continue;
1646 #endif
1647           if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
1648             {
1649               rtx note, set;
1650               /* If this insn has a noalias note, process it,  Otherwise,
1651                  scan for sets.  A simple set will have no side effects
1652                  which could change the base value of any other register. */
1653
1654               if (GET_CODE (PATTERN (insn)) == SET
1655                   && (find_reg_note (insn, REG_NOALIAS, NULL_RTX)))
1656                 record_set (SET_DEST (PATTERN (insn)), NULL_RTX, NULL);
1657               else
1658                 note_stores (PATTERN (insn), record_set, NULL);
1659
1660               set = single_set (insn);
1661
1662               if (set != 0
1663                   && GET_CODE (SET_DEST (set)) == REG
1664                   && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER
1665                   && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
1666                        && REG_N_SETS (REGNO (SET_DEST (set))) == 1)
1667                       || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
1668                   && GET_CODE (XEXP (note, 0)) != EXPR_LIST
1669                   && ! reg_overlap_mentioned_p (SET_DEST (set), XEXP (note, 0)))
1670                 {
1671                   int regno = REGNO (SET_DEST (set));
1672                   reg_known_value[regno] = XEXP (note, 0);
1673                   reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV;
1674                 }
1675             }
1676           else if (GET_CODE (insn) == NOTE
1677                    && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
1678             copying_arguments = 0;
1679         }
1680
1681       /* Now propagate values from new_reg_base_value to reg_base_value.  */
1682       for (ui = 0; ui < reg_base_value_size; ui++)
1683         {
1684           if (new_reg_base_value[ui]
1685               && new_reg_base_value[ui] != reg_base_value[ui]
1686               && ! rtx_equal_p (new_reg_base_value[ui], reg_base_value[ui]))
1687             {
1688               reg_base_value[ui] = new_reg_base_value[ui];
1689               changed = 1;
1690             }
1691         }
1692     }
1693   while (changed && ++pass < MAX_ALIAS_LOOP_PASSES);
1694
1695   /* Fill in the remaining entries.  */
1696   for (i = FIRST_PSEUDO_REGISTER; i < maxreg; i++)
1697     if (reg_known_value[i] == 0)
1698       reg_known_value[i] = regno_reg_rtx[i];
1699
1700   /* Simplify the reg_base_value array so that no register refers to
1701      another register, except to special registers indirectly through
1702      ADDRESS expressions.
1703
1704      In theory this loop can take as long as O(registers^2), but unless
1705      there are very long dependency chains it will run in close to linear
1706      time.
1707
1708      This loop may not be needed any longer now that the main loop does
1709      a better job at propagating alias information.  */
1710   pass = 0;
1711   do
1712     {
1713       changed = 0;
1714       pass++;
1715       for (ui = 0; ui < reg_base_value_size; ui++)
1716         {
1717           rtx base = reg_base_value[ui];
1718           if (base && GET_CODE (base) == REG)
1719             {
1720               unsigned int base_regno = REGNO (base);
1721               if (base_regno == ui)             /* register set from itself */
1722                 reg_base_value[ui] = 0;
1723               else
1724                 reg_base_value[ui] = reg_base_value[base_regno];
1725               changed = 1;
1726             }
1727         }
1728     }
1729   while (changed && pass < MAX_ALIAS_LOOP_PASSES);
1730
1731   /* Clean up.  */
1732   free (new_reg_base_value);
1733   new_reg_base_value = 0;
1734   free (reg_seen);
1735   reg_seen = 0;
1736 }
1737
1738 void
1739 end_alias_analysis ()
1740 {
1741   free (reg_known_value + FIRST_PSEUDO_REGISTER);
1742   reg_known_value = 0;
1743   reg_known_value_size = 0;
1744   free (reg_known_equiv_p + FIRST_PSEUDO_REGISTER);
1745   reg_known_equiv_p = 0;
1746   if (reg_base_value)
1747     {
1748       if (ggc_p)
1749         ggc_del_root (reg_base_value);
1750       free (reg_base_value);
1751       reg_base_value = 0;
1752     }
1753   reg_base_value_size = 0;
1754   if (alias_invariant)
1755     {
1756       free (alias_invariant);
1757       alias_invariant = 0;
1758     }
1759 }