OSDN Git Service

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