fix typo
[official-gcc.git] / gcc / alias.c
blob1306c3f9e35c471914446cad14d2d3cad245845e
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).
5 This file is part of GNU CC.
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.
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.
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. */
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"
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 cannot alias each other, with one important
42 exception. Consider something like:
44 struct S {int i; double d; };
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
56 (The arrows are directed and point downwards.)
57 In this situation we say the alias set for `struct S' is the
58 `superset' and that those for `int' and `double' are `subsets'.
60 To see whether two alias sets can point to the same memory, we must
61 see if either alias set is a subset of the other. We need not trace
62 past immediate decendents, however, since we propagate all
63 grandchildren up one level.
65 Alias set zero is implicitly a superset of all other alias sets.
66 However, this is no actual entry for alias set zero. It is an
67 error to attempt to explicitly construct a subset of zero. */
69 typedef struct alias_set_entry
71 /* The alias set number, as stored in MEM_ALIAS_SET. */
72 HOST_WIDE_INT alias_set;
74 /* The children of the alias set. These are not just the immediate
75 children, but, in fact, all decendents. So, if we have:
77 struct T { struct S s; float f; }
79 continuing our example above, the children here will be all of
80 `int', `double', `float', and `struct S'. */
81 splay_tree children;
83 /* Nonzero if would have a child of zero: this effectively makes this
84 alias set the same as alias set zero. */
85 int has_zero_child;
86 } *alias_set_entry;
88 static int rtx_equal_for_memref_p PARAMS ((rtx, rtx));
89 static rtx find_symbolic_term PARAMS ((rtx));
90 static rtx get_addr PARAMS ((rtx));
91 static int memrefs_conflict_p PARAMS ((int, rtx, int, rtx,
92 HOST_WIDE_INT));
93 static void record_set PARAMS ((rtx, rtx, void *));
94 static rtx find_base_term PARAMS ((rtx));
95 static int base_alias_check PARAMS ((rtx, rtx, enum machine_mode,
96 enum machine_mode));
97 static rtx find_base_value PARAMS ((rtx));
98 static int mems_in_disjoint_alias_sets_p PARAMS ((rtx, rtx));
99 static int insert_subset_children PARAMS ((splay_tree_node, void*));
100 static tree find_base_decl PARAMS ((tree));
101 static alias_set_entry get_alias_set_entry PARAMS ((HOST_WIDE_INT));
102 static rtx fixed_scalar_and_varying_struct_p PARAMS ((rtx, rtx, rtx, rtx,
103 int (*) (rtx)));
104 static int aliases_everything_p PARAMS ((rtx));
105 static int write_dependence_p PARAMS ((rtx, rtx, int));
106 static int nonlocal_reference_p PARAMS ((rtx));
108 /* Set up all info needed to perform alias analysis on memory references. */
110 /* Returns the size in bytes of the mode of X. */
111 #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X)))
113 /* Returns nonzero if MEM1 and MEM2 do not alias because they are in
114 different alias sets. We ignore alias sets in functions making use
115 of variable arguments because the va_arg macros on some systems are
116 not legal ANSI C. */
117 #define DIFFERENT_ALIAS_SETS_P(MEM1, MEM2) \
118 mems_in_disjoint_alias_sets_p (MEM1, MEM2)
120 /* Cap the number of passes we make over the insns propagating alias
121 information through set chains. 10 is a completely arbitrary choice. */
122 #define MAX_ALIAS_LOOP_PASSES 10
124 /* reg_base_value[N] gives an address to which register N is related.
125 If all sets after the first add or subtract to the current value
126 or otherwise modify it so it does not point to a different top level
127 object, reg_base_value[N] is equal to the address part of the source
128 of the first set.
130 A base address can be an ADDRESS, SYMBOL_REF, or LABEL_REF. ADDRESS
131 expressions represent certain special values: function arguments and
132 the stack, frame, and argument pointers.
134 The contents of an ADDRESS is not normally used, the mode of the
135 ADDRESS determines whether the ADDRESS is a function argument or some
136 other special value. Pointer equality, not rtx_equal_p, determines whether
137 two ADDRESS expressions refer to the same base address.
139 The only use of the contents of an ADDRESS is for determining if the
140 current function performs nonlocal memory memory references for the
141 purposes of marking the function as a constant function. */
143 static rtx *reg_base_value;
144 static rtx *new_reg_base_value;
145 static unsigned int reg_base_value_size; /* size of reg_base_value array */
147 #define REG_BASE_VALUE(X) \
148 (REGNO (X) < reg_base_value_size ? reg_base_value[REGNO (X)] : 0)
150 /* Vector of known invariant relationships between registers. Set in
151 loop unrolling. Indexed by register number, if nonzero the value
152 is an expression describing this register in terms of another.
154 The length of this array is REG_BASE_VALUE_SIZE.
156 Because this array contains only pseudo registers it has no effect
157 after reload. */
158 static rtx *alias_invariant;
160 /* Vector indexed by N giving the initial (unchanging) value known for
161 pseudo-register N. This array is initialized in
162 init_alias_analysis, and does not change until end_alias_analysis
163 is called. */
164 rtx *reg_known_value;
166 /* Indicates number of valid entries in reg_known_value. */
167 static unsigned int reg_known_value_size;
169 /* Vector recording for each reg_known_value whether it is due to a
170 REG_EQUIV note. Future passes (viz., reload) may replace the
171 pseudo with the equivalent expression and so we account for the
172 dependences that would be introduced if that happens.
174 The REG_EQUIV notes created in assign_parms may mention the arg
175 pointer, and there are explicit insns in the RTL that modify the
176 arg pointer. Thus we must ensure that such insns don't get
177 scheduled across each other because that would invalidate the
178 REG_EQUIV notes. One could argue that the REG_EQUIV notes are
179 wrong, but solving the problem in the scheduler will likely give
180 better code, so we do it here. */
181 char *reg_known_equiv_p;
183 /* True when scanning insns from the start of the rtl to the
184 NOTE_INSN_FUNCTION_BEG note. */
185 static int copying_arguments;
187 /* The splay-tree used to store the various alias set entries. */
188 static splay_tree alias_sets;
190 /* Returns a pointer to the alias set entry for ALIAS_SET, if there is
191 such an entry, or NULL otherwise. */
193 static alias_set_entry
194 get_alias_set_entry (alias_set)
195 HOST_WIDE_INT alias_set;
197 splay_tree_node sn
198 = splay_tree_lookup (alias_sets, (splay_tree_key) alias_set);
200 return sn != 0 ? ((alias_set_entry) sn->value) : 0;
203 /* Returns nonzero if the alias sets for MEM1 and MEM2 are such that
204 the two MEMs cannot alias each other. */
206 static int
207 mems_in_disjoint_alias_sets_p (mem1, mem2)
208 rtx mem1;
209 rtx mem2;
211 alias_set_entry ase;
213 #ifdef ENABLE_CHECKING
214 /* Perform a basic sanity check. Namely, that there are no alias sets
215 if we're not using strict aliasing. This helps to catch bugs
216 whereby someone uses PUT_CODE, but doesn't clear MEM_ALIAS_SET, or
217 where a MEM is allocated in some way other than by the use of
218 gen_rtx_MEM, and the MEM_ALIAS_SET is not cleared. If we begin to
219 use alias sets to indicate that spilled registers cannot alias each
220 other, we might need to remove this check. */
221 if (! flag_strict_aliasing
222 && (MEM_ALIAS_SET (mem1) != 0 || MEM_ALIAS_SET (mem2) != 0))
223 abort ();
224 #endif
226 /* The code used in varargs macros are often not conforming ANSI C,
227 which can trick the compiler into making incorrect aliasing
228 assumptions in these functions. So, we don't use alias sets in
229 such a function. FIXME: This should be moved into the front-end;
230 it is a language-dependent notion, and there's no reason not to
231 still use these checks to handle globals. */
232 if (current_function_stdarg || current_function_varargs)
233 return 0;
235 /* If have no alias set information for one of the MEMs, we have to assume
236 it can alias anything. */
237 if (MEM_ALIAS_SET (mem1) == 0 || MEM_ALIAS_SET (mem2) == 0)
238 return 0;
240 /* If the two alias sets are the same, they may alias. */
241 if (MEM_ALIAS_SET (mem1) == MEM_ALIAS_SET (mem2))
242 return 0;
244 /* See if the first alias set is a subset of the second. */
245 ase = get_alias_set_entry (MEM_ALIAS_SET (mem1));
246 if (ase != 0
247 && (ase->has_zero_child
248 || splay_tree_lookup (ase->children,
249 (splay_tree_key) MEM_ALIAS_SET (mem2))))
250 return 0;
252 /* Now do the same, but with the alias sets reversed. */
253 ase = get_alias_set_entry (MEM_ALIAS_SET (mem2));
254 if (ase != 0
255 && (ase->has_zero_child
256 || splay_tree_lookup (ase->children,
257 (splay_tree_key) MEM_ALIAS_SET (mem1))))
258 return 0;
260 /* The two MEMs are in distinct alias sets, and neither one is the
261 child of the other. Therefore, they cannot alias. */
262 return 1;
265 /* Insert the NODE into the splay tree given by DATA. Used by
266 record_alias_subset via splay_tree_foreach. */
268 static int
269 insert_subset_children (node, data)
270 splay_tree_node node;
271 void *data;
273 splay_tree_insert ((splay_tree) data, node->key, node->value);
275 return 0;
278 /* T is an expression with pointer type. Find the DECL on which this
279 expression is based. (For example, in `a[i]' this would be `a'.)
280 If there is no such DECL, or a unique decl cannot be determined,
281 NULL_TREE is retured. */
283 static tree
284 find_base_decl (t)
285 tree t;
287 tree d0, d1, d2;
289 if (t == 0 || t == error_mark_node || ! POINTER_TYPE_P (TREE_TYPE (t)))
290 return 0;
292 /* If this is a declaration, return it. */
293 if (TREE_CODE_CLASS (TREE_CODE (t)) == 'd')
294 return t;
296 /* Handle general expressions. It would be nice to deal with
297 COMPONENT_REFs here. If we could tell that `a' and `b' were the
298 same, then `a->f' and `b->f' are also the same. */
299 switch (TREE_CODE_CLASS (TREE_CODE (t)))
301 case '1':
302 return find_base_decl (TREE_OPERAND (t, 0));
304 case '2':
305 /* Return 0 if found in neither or both are the same. */
306 d0 = find_base_decl (TREE_OPERAND (t, 0));
307 d1 = find_base_decl (TREE_OPERAND (t, 1));
308 if (d0 == d1)
309 return d0;
310 else if (d0 == 0)
311 return d1;
312 else if (d1 == 0)
313 return d0;
314 else
315 return 0;
317 case '3':
318 d0 = find_base_decl (TREE_OPERAND (t, 0));
319 d1 = find_base_decl (TREE_OPERAND (t, 1));
320 d0 = find_base_decl (TREE_OPERAND (t, 0));
321 d2 = find_base_decl (TREE_OPERAND (t, 2));
323 /* Set any nonzero values from the last, then from the first. */
324 if (d1 == 0) d1 = d2;
325 if (d0 == 0) d0 = d1;
326 if (d1 == 0) d1 = d0;
327 if (d2 == 0) d2 = d1;
329 /* At this point all are nonzero or all are zero. If all three are the
330 same, return it. Otherwise, return zero. */
331 return (d0 == d1 && d1 == d2) ? d0 : 0;
333 default:
334 return 0;
338 /* Return the alias set for T, which may be either a type or an
339 expression. Call language-specific routine for help, if needed. */
341 HOST_WIDE_INT
342 get_alias_set (t)
343 tree t;
345 tree orig_t;
346 HOST_WIDE_INT set;
347 HOST_WIDE_INT bitsize, bitpos;
348 tree offset;
349 enum machine_mode mode;
350 int volatilep, unsignedp;
351 unsigned int alignment;
353 /* If we're not doing any alias analysis, just assume everything
354 aliases everything else. Also return 0 if this or its type is
355 an error. */
356 if (! flag_strict_aliasing || t == error_mark_node
357 || (! TYPE_P (t)
358 && (TREE_TYPE (t) == 0 || TREE_TYPE (t) == error_mark_node)))
359 return 0;
361 /* We can be passed either an expression or a type. This and the
362 language-specific routine may make mutually-recursive calls to
363 each other to figure out what to do. At each juncture, we see if
364 this is a tree that the language may need to handle specially.
365 First handle things that aren't types and start by removing nops
366 since we care only about the actual object. */
367 if (! TYPE_P (t))
369 while (TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR
370 || TREE_CODE (t) == NON_LVALUE_EXPR)
371 t = TREE_OPERAND (t, 0);
373 /* Now give the language a chance to do something but record what we
374 gave it this time. */
375 orig_t = t;
376 if ((set = lang_get_alias_set (t)) != -1)
377 return set;
379 /* If this is a reference, go inside it and use the underlying
380 object. */
381 if (TREE_CODE_CLASS (TREE_CODE (t)) == 'r')
382 t = get_inner_reference (t, &bitsize, &bitpos, &offset, &mode,
383 &unsignedp, &volatilep, &alignment);
385 if (TREE_CODE (t) == INDIRECT_REF)
387 /* Check for accesses through restrict-qualified pointers. */
388 tree decl = find_base_decl (TREE_OPERAND (t, 0));
390 if (decl && DECL_POINTER_ALIAS_SET_KNOWN_P (decl))
391 /* We use the alias set indicated in the declaration. */
392 return DECL_POINTER_ALIAS_SET (decl);
394 /* If we have an INDIRECT_REF via a void pointer, we don't
395 know anything about what that might alias. */
396 if (TREE_CODE (TREE_TYPE (t)) == VOID_TYPE)
397 return 0;
400 /* Give the language another chance to do something special. */
401 if (orig_t != t
402 && (set = lang_get_alias_set (t)) != -1)
403 return set;
405 /* Now all we care about is the type. */
406 t = TREE_TYPE (t);
409 /* Variant qualifiers don't affect the alias set, so get the main
410 variant. If this is a type with a known alias set, return it. */
411 t = TYPE_MAIN_VARIANT (t);
412 if (TYPE_P (t) && TYPE_ALIAS_SET_KNOWN_P (t))
413 return TYPE_ALIAS_SET (t);
415 /* See if the language has special handling for this type. */
416 if ((set = lang_get_alias_set (t)) != -1)
418 /* If the alias set is now known, we are done. */
419 if (TYPE_ALIAS_SET_KNOWN_P (t))
420 return TYPE_ALIAS_SET (t);
423 /* There are no objects of FUNCTION_TYPE, so there's no point in
424 using up an alias set for them. (There are, of course, pointers
425 and references to functions, but that's different.) */
426 else if (TREE_CODE (t) == FUNCTION_TYPE)
427 set = 0;
428 else
429 /* Otherwise make a new alias set for this type. */
430 set = new_alias_set ();
432 TYPE_ALIAS_SET (t) = set;
434 /* If this is an aggregate type, we must record any component aliasing
435 information. */
436 if (AGGREGATE_TYPE_P (t))
437 record_component_aliases (t);
439 return set;
442 /* Return a brand-new alias set. */
444 HOST_WIDE_INT
445 new_alias_set ()
447 static HOST_WIDE_INT last_alias_set;
449 if (flag_strict_aliasing)
450 return ++last_alias_set;
451 else
452 return 0;
455 /* Indicate that things in SUBSET can alias things in SUPERSET, but
456 not vice versa. For example, in C, a store to an `int' can alias a
457 structure containing an `int', but not vice versa. Here, the
458 structure would be the SUPERSET and `int' the SUBSET. This
459 function should be called only once per SUPERSET/SUBSET pair.
461 It is illegal for SUPERSET to be zero; everything is implicitly a
462 subset of alias set zero. */
464 void
465 record_alias_subset (superset, subset)
466 HOST_WIDE_INT superset;
467 HOST_WIDE_INT subset;
469 alias_set_entry superset_entry;
470 alias_set_entry subset_entry;
472 if (superset == 0)
473 abort ();
475 superset_entry = get_alias_set_entry (superset);
476 if (superset_entry == 0)
478 /* Create an entry for the SUPERSET, so that we have a place to
479 attach the SUBSET. */
480 superset_entry
481 = (alias_set_entry) xmalloc (sizeof (struct alias_set_entry));
482 superset_entry->alias_set = superset;
483 superset_entry->children
484 = splay_tree_new (splay_tree_compare_ints, 0, 0);
485 superset_entry->has_zero_child = 0;
486 splay_tree_insert (alias_sets, (splay_tree_key) superset,
487 (splay_tree_value) superset_entry);
490 if (subset == 0)
491 superset_entry->has_zero_child = 1;
492 else
494 subset_entry = get_alias_set_entry (subset);
495 /* If there is an entry for the subset, enter all of its children
496 (if they are not already present) as children of the SUPERSET. */
497 if (subset_entry)
499 if (subset_entry->has_zero_child)
500 superset_entry->has_zero_child = 1;
502 splay_tree_foreach (subset_entry->children, insert_subset_children,
503 superset_entry->children);
506 /* Enter the SUBSET itself as a child of the SUPERSET. */
507 splay_tree_insert (superset_entry->children,
508 (splay_tree_key) subset, 0);
512 /* Record that component types of TYPE, if any, are part of that type for
513 aliasing purposes. For record types, we only record component types
514 for fields that are marked addressable. For array types, we always
515 record the component types, so the front end should not call this
516 function if the individual component aren't addressable. */
518 void
519 record_component_aliases (type)
520 tree type;
522 HOST_WIDE_INT superset = get_alias_set (type);
523 tree field;
525 if (superset == 0)
526 return;
528 switch (TREE_CODE (type))
530 case ARRAY_TYPE:
531 if (! TYPE_NONALIASED_COMPONENT (type))
532 record_alias_subset (superset, get_alias_set (TREE_TYPE (type)));
533 break;
535 case RECORD_TYPE:
536 case UNION_TYPE:
537 case QUAL_UNION_TYPE:
538 for (field = TYPE_FIELDS (type); field != 0; field = TREE_CHAIN (field))
539 if (! DECL_NONADDRESSABLE_P (field))
540 record_alias_subset (superset, get_alias_set (TREE_TYPE (field)));
541 break;
543 default:
544 break;
548 /* Allocate an alias set for use in storing and reading from the varargs
549 spill area. */
551 HOST_WIDE_INT
552 get_varargs_alias_set ()
554 static HOST_WIDE_INT set = -1;
556 if (set == -1)
557 set = new_alias_set ();
559 return set;
562 /* Likewise, but used for the fixed portions of the frame, e.g., register
563 save areas. */
565 HOST_WIDE_INT
566 get_frame_alias_set ()
568 static HOST_WIDE_INT set = -1;
570 if (set == -1)
571 set = new_alias_set ();
573 return set;
576 /* Inside SRC, the source of a SET, find a base address. */
578 static rtx
579 find_base_value (src)
580 register rtx src;
582 switch (GET_CODE (src))
584 case SYMBOL_REF:
585 case LABEL_REF:
586 return src;
588 case REG:
589 /* At the start of a function, argument registers have known base
590 values which may be lost later. Returning an ADDRESS
591 expression here allows optimization based on argument values
592 even when the argument registers are used for other purposes. */
593 if (REGNO (src) < FIRST_PSEUDO_REGISTER && copying_arguments)
594 return new_reg_base_value[REGNO (src)];
596 /* If a pseudo has a known base value, return it. Do not do this
597 for hard regs since it can result in a circular dependency
598 chain for registers which have values at function entry.
600 The test above is not sufficient because the scheduler may move
601 a copy out of an arg reg past the NOTE_INSN_FUNCTION_BEGIN. */
602 if (REGNO (src) >= FIRST_PSEUDO_REGISTER
603 && (unsigned) REGNO (src) < reg_base_value_size
604 && reg_base_value[REGNO (src)])
605 return reg_base_value[REGNO (src)];
607 return src;
609 case MEM:
610 /* Check for an argument passed in memory. Only record in the
611 copying-arguments block; it is too hard to track changes
612 otherwise. */
613 if (copying_arguments
614 && (XEXP (src, 0) == arg_pointer_rtx
615 || (GET_CODE (XEXP (src, 0)) == PLUS
616 && XEXP (XEXP (src, 0), 0) == arg_pointer_rtx)))
617 return gen_rtx_ADDRESS (VOIDmode, src);
618 return 0;
620 case CONST:
621 src = XEXP (src, 0);
622 if (GET_CODE (src) != PLUS && GET_CODE (src) != MINUS)
623 break;
625 /* ... fall through ... */
627 case PLUS:
628 case MINUS:
630 rtx temp, src_0 = XEXP (src, 0), src_1 = XEXP (src, 1);
632 /* If either operand is a REG, then see if we already have
633 a known value for it. */
634 if (GET_CODE (src_0) == REG)
636 temp = find_base_value (src_0);
637 if (temp != 0)
638 src_0 = temp;
641 if (GET_CODE (src_1) == REG)
643 temp = find_base_value (src_1);
644 if (temp!= 0)
645 src_1 = temp;
648 /* Guess which operand is the base address:
649 If either operand is a symbol, then it is the base. If
650 either operand is a CONST_INT, then the other is the base. */
651 if (GET_CODE (src_1) == CONST_INT || CONSTANT_P (src_0))
652 return find_base_value (src_0);
653 else if (GET_CODE (src_0) == CONST_INT || CONSTANT_P (src_1))
654 return find_base_value (src_1);
656 /* This might not be necessary anymore:
657 If either operand is a REG that is a known pointer, then it
658 is the base. */
659 else if (GET_CODE (src_0) == REG && REGNO_POINTER_FLAG (REGNO (src_0)))
660 return find_base_value (src_0);
661 else if (GET_CODE (src_1) == REG && REGNO_POINTER_FLAG (REGNO (src_1)))
662 return find_base_value (src_1);
664 return 0;
667 case LO_SUM:
668 /* The standard form is (lo_sum reg sym) so look only at the
669 second operand. */
670 return find_base_value (XEXP (src, 1));
672 case AND:
673 /* If the second operand is constant set the base
674 address to the first operand. */
675 if (GET_CODE (XEXP (src, 1)) == CONST_INT && INTVAL (XEXP (src, 1)) != 0)
676 return find_base_value (XEXP (src, 0));
677 return 0;
679 case ZERO_EXTEND:
680 case SIGN_EXTEND: /* used for NT/Alpha pointers */
681 case HIGH:
682 return find_base_value (XEXP (src, 0));
684 default:
685 break;
688 return 0;
691 /* Called from init_alias_analysis indirectly through note_stores. */
693 /* While scanning insns to find base values, reg_seen[N] is nonzero if
694 register N has been set in this function. */
695 static char *reg_seen;
697 /* Addresses which are known not to alias anything else are identified
698 by a unique integer. */
699 static int unique_id;
701 static void
702 record_set (dest, set, data)
703 rtx dest, set;
704 void *data ATTRIBUTE_UNUSED;
706 register unsigned regno;
707 rtx src;
709 if (GET_CODE (dest) != REG)
710 return;
712 regno = REGNO (dest);
714 if (regno >= reg_base_value_size)
715 abort ();
717 if (set)
719 /* A CLOBBER wipes out any old value but does not prevent a previously
720 unset register from acquiring a base address (i.e. reg_seen is not
721 set). */
722 if (GET_CODE (set) == CLOBBER)
724 new_reg_base_value[regno] = 0;
725 return;
727 src = SET_SRC (set);
729 else
731 if (reg_seen[regno])
733 new_reg_base_value[regno] = 0;
734 return;
736 reg_seen[regno] = 1;
737 new_reg_base_value[regno] = gen_rtx_ADDRESS (Pmode,
738 GEN_INT (unique_id++));
739 return;
742 /* This is not the first set. If the new value is not related to the
743 old value, forget the base value. Note that the following code is
744 not detected:
745 extern int x, y; int *p = &x; p += (&y-&x);
746 ANSI C does not allow computing the difference of addresses
747 of distinct top level objects. */
748 if (new_reg_base_value[regno])
749 switch (GET_CODE (src))
751 case LO_SUM:
752 case PLUS:
753 case MINUS:
754 if (XEXP (src, 0) != dest && XEXP (src, 1) != dest)
755 new_reg_base_value[regno] = 0;
756 break;
757 case AND:
758 if (XEXP (src, 0) != dest || GET_CODE (XEXP (src, 1)) != CONST_INT)
759 new_reg_base_value[regno] = 0;
760 break;
761 default:
762 new_reg_base_value[regno] = 0;
763 break;
765 /* If this is the first set of a register, record the value. */
766 else if ((regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
767 && ! reg_seen[regno] && new_reg_base_value[regno] == 0)
768 new_reg_base_value[regno] = find_base_value (src);
770 reg_seen[regno] = 1;
773 /* Called from loop optimization when a new pseudo-register is
774 created. It indicates that REGNO is being set to VAL. f INVARIANT
775 is true then this value also describes an invariant relationship
776 which can be used to deduce that two registers with unknown values
777 are different. */
779 void
780 record_base_value (regno, val, invariant)
781 unsigned int regno;
782 rtx val;
783 int invariant;
785 if (regno >= reg_base_value_size)
786 return;
788 if (invariant && alias_invariant)
789 alias_invariant[regno] = val;
791 if (GET_CODE (val) == REG)
793 if (REGNO (val) < reg_base_value_size)
794 reg_base_value[regno] = reg_base_value[REGNO (val)];
796 return;
799 reg_base_value[regno] = find_base_value (val);
802 /* Returns a canonical version of X, from the point of view alias
803 analysis. (For example, if X is a MEM whose address is a register,
804 and the register has a known value (say a SYMBOL_REF), then a MEM
805 whose address is the SYMBOL_REF is returned.) */
808 canon_rtx (x)
809 rtx x;
811 /* Recursively look for equivalences. */
812 if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
813 && REGNO (x) < reg_known_value_size)
814 return reg_known_value[REGNO (x)] == x
815 ? x : canon_rtx (reg_known_value[REGNO (x)]);
816 else if (GET_CODE (x) == PLUS)
818 rtx x0 = canon_rtx (XEXP (x, 0));
819 rtx x1 = canon_rtx (XEXP (x, 1));
821 if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
823 /* We can tolerate LO_SUMs being offset here; these
824 rtl are used for nothing other than comparisons. */
825 if (GET_CODE (x0) == CONST_INT)
826 return plus_constant_for_output (x1, INTVAL (x0));
827 else if (GET_CODE (x1) == CONST_INT)
828 return plus_constant_for_output (x0, INTVAL (x1));
829 return gen_rtx_PLUS (GET_MODE (x), x0, x1);
833 /* This gives us much better alias analysis when called from
834 the loop optimizer. Note we want to leave the original
835 MEM alone, but need to return the canonicalized MEM with
836 all the flags with their original values. */
837 else if (GET_CODE (x) == MEM)
839 rtx addr = canon_rtx (XEXP (x, 0));
841 if (addr != XEXP (x, 0))
843 rtx new = gen_rtx_MEM (GET_MODE (x), addr);
845 MEM_COPY_ATTRIBUTES (new, x);
846 x = new;
849 return x;
852 /* Return 1 if X and Y are identical-looking rtx's.
854 We use the data in reg_known_value above to see if two registers with
855 different numbers are, in fact, equivalent. */
857 static int
858 rtx_equal_for_memref_p (x, y)
859 rtx x, y;
861 register int i;
862 register int j;
863 register enum rtx_code code;
864 register const char *fmt;
866 if (x == 0 && y == 0)
867 return 1;
868 if (x == 0 || y == 0)
869 return 0;
871 x = canon_rtx (x);
872 y = canon_rtx (y);
874 if (x == y)
875 return 1;
877 code = GET_CODE (x);
878 /* Rtx's of different codes cannot be equal. */
879 if (code != GET_CODE (y))
880 return 0;
882 /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
883 (REG:SI x) and (REG:HI x) are NOT equivalent. */
885 if (GET_MODE (x) != GET_MODE (y))
886 return 0;
888 /* Some RTL can be compared without a recursive examination. */
889 switch (code)
891 case REG:
892 return REGNO (x) == REGNO (y);
894 case LABEL_REF:
895 return XEXP (x, 0) == XEXP (y, 0);
897 case SYMBOL_REF:
898 return XSTR (x, 0) == XSTR (y, 0);
900 case CONST_INT:
901 case CONST_DOUBLE:
902 /* There's no need to compare the contents of CONST_DOUBLEs or
903 CONST_INTs because pointer equality is a good enough
904 comparison for these nodes. */
905 return 0;
907 case ADDRESSOF:
908 return (REGNO (XEXP (x, 0)) == REGNO (XEXP (y, 0))
909 && XINT (x, 1) == XINT (y, 1));
911 default:
912 break;
915 /* For commutative operations, the RTX match if the operand match in any
916 order. Also handle the simple binary and unary cases without a loop. */
917 if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
918 return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
919 && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
920 || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
921 && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
922 else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
923 return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
924 && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)));
925 else if (GET_RTX_CLASS (code) == '1')
926 return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0));
928 /* Compare the elements. If any pair of corresponding elements
929 fail to match, return 0 for the whole things.
931 Limit cases to types which actually appear in addresses. */
933 fmt = GET_RTX_FORMAT (code);
934 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
936 switch (fmt[i])
938 case 'i':
939 if (XINT (x, i) != XINT (y, i))
940 return 0;
941 break;
943 case 'E':
944 /* Two vectors must have the same length. */
945 if (XVECLEN (x, i) != XVECLEN (y, i))
946 return 0;
948 /* And the corresponding elements must match. */
949 for (j = 0; j < XVECLEN (x, i); j++)
950 if (rtx_equal_for_memref_p (XVECEXP (x, i, j),
951 XVECEXP (y, i, j)) == 0)
952 return 0;
953 break;
955 case 'e':
956 if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0)
957 return 0;
958 break;
960 /* This can happen for an asm which clobbers memory. */
961 case '0':
962 break;
964 /* It is believed that rtx's at this level will never
965 contain anything but integers and other rtx's,
966 except for within LABEL_REFs and SYMBOL_REFs. */
967 default:
968 abort ();
971 return 1;
974 /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
975 X and return it, or return 0 if none found. */
977 static rtx
978 find_symbolic_term (x)
979 rtx x;
981 register int i;
982 register enum rtx_code code;
983 register const char *fmt;
985 code = GET_CODE (x);
986 if (code == SYMBOL_REF || code == LABEL_REF)
987 return x;
988 if (GET_RTX_CLASS (code) == 'o')
989 return 0;
991 fmt = GET_RTX_FORMAT (code);
992 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
994 rtx t;
996 if (fmt[i] == 'e')
998 t = find_symbolic_term (XEXP (x, i));
999 if (t != 0)
1000 return t;
1002 else if (fmt[i] == 'E')
1003 break;
1005 return 0;
1008 static rtx
1009 find_base_term (x)
1010 register rtx x;
1012 cselib_val *val;
1013 struct elt_loc_list *l;
1015 switch (GET_CODE (x))
1017 case REG:
1018 return REG_BASE_VALUE (x);
1020 case ZERO_EXTEND:
1021 case SIGN_EXTEND: /* Used for Alpha/NT pointers */
1022 case HIGH:
1023 case PRE_INC:
1024 case PRE_DEC:
1025 case POST_INC:
1026 case POST_DEC:
1027 return find_base_term (XEXP (x, 0));
1029 case VALUE:
1030 val = CSELIB_VAL_PTR (x);
1031 for (l = val->locs; l; l = l->next)
1032 if ((x = find_base_term (l->loc)) != 0)
1033 return x;
1034 return 0;
1036 case CONST:
1037 x = XEXP (x, 0);
1038 if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
1039 return 0;
1040 /* fall through */
1041 case LO_SUM:
1042 case PLUS:
1043 case MINUS:
1045 rtx tmp1 = XEXP (x, 0);
1046 rtx tmp2 = XEXP (x, 1);
1048 /* This is a litle bit tricky since we have to determine which of
1049 the two operands represents the real base address. Otherwise this
1050 routine may return the index register instead of the base register.
1052 That may cause us to believe no aliasing was possible, when in
1053 fact aliasing is possible.
1055 We use a few simple tests to guess the base register. Additional
1056 tests can certainly be added. For example, if one of the operands
1057 is a shift or multiply, then it must be the index register and the
1058 other operand is the base register. */
1060 /* If either operand is known to be a pointer, then use it
1061 to determine the base term. */
1062 if (REG_P (tmp1) && REGNO_POINTER_FLAG (REGNO (tmp1)))
1063 return find_base_term (tmp1);
1065 if (REG_P (tmp2) && REGNO_POINTER_FLAG (REGNO (tmp2)))
1066 return find_base_term (tmp2);
1068 /* Neither operand was known to be a pointer. Go ahead and find the
1069 base term for both operands. */
1070 tmp1 = find_base_term (tmp1);
1071 tmp2 = find_base_term (tmp2);
1073 /* If either base term is named object or a special address
1074 (like an argument or stack reference), then use it for the
1075 base term. */
1076 if (tmp1 != 0
1077 && (GET_CODE (tmp1) == SYMBOL_REF
1078 || GET_CODE (tmp1) == LABEL_REF
1079 || (GET_CODE (tmp1) == ADDRESS
1080 && GET_MODE (tmp1) != VOIDmode)))
1081 return tmp1;
1083 if (tmp2 != 0
1084 && (GET_CODE (tmp2) == SYMBOL_REF
1085 || GET_CODE (tmp2) == LABEL_REF
1086 || (GET_CODE (tmp2) == ADDRESS
1087 && GET_MODE (tmp2) != VOIDmode)))
1088 return tmp2;
1090 /* We could not determine which of the two operands was the
1091 base register and which was the index. So we can determine
1092 nothing from the base alias check. */
1093 return 0;
1096 case AND:
1097 if (GET_CODE (XEXP (x, 0)) == REG && GET_CODE (XEXP (x, 1)) == CONST_INT)
1098 return REG_BASE_VALUE (XEXP (x, 0));
1099 return 0;
1101 case SYMBOL_REF:
1102 case LABEL_REF:
1103 return x;
1105 default:
1106 return 0;
1110 /* Return 0 if the addresses X and Y are known to point to different
1111 objects, 1 if they might be pointers to the same object. */
1113 static int
1114 base_alias_check (x, y, x_mode, y_mode)
1115 rtx x, y;
1116 enum machine_mode x_mode, y_mode;
1118 rtx x_base = find_base_term (x);
1119 rtx y_base = find_base_term (y);
1121 /* If the address itself has no known base see if a known equivalent
1122 value has one. If either address still has no known base, nothing
1123 is known about aliasing. */
1124 if (x_base == 0)
1126 rtx x_c;
1128 if (! flag_expensive_optimizations || (x_c = canon_rtx (x)) == x)
1129 return 1;
1131 x_base = find_base_term (x_c);
1132 if (x_base == 0)
1133 return 1;
1136 if (y_base == 0)
1138 rtx y_c;
1139 if (! flag_expensive_optimizations || (y_c = canon_rtx (y)) == y)
1140 return 1;
1142 y_base = find_base_term (y_c);
1143 if (y_base == 0)
1144 return 1;
1147 /* If the base addresses are equal nothing is known about aliasing. */
1148 if (rtx_equal_p (x_base, y_base))
1149 return 1;
1151 /* The base addresses of the read and write are different expressions.
1152 If they are both symbols and they are not accessed via AND, there is
1153 no conflict. We can bring knowledge of object alignment into play
1154 here. For example, on alpha, "char a, b;" can alias one another,
1155 though "char a; long b;" cannot. */
1156 if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
1158 if (GET_CODE (x) == AND && GET_CODE (y) == AND)
1159 return 1;
1160 if (GET_CODE (x) == AND
1161 && (GET_CODE (XEXP (x, 1)) != CONST_INT
1162 || GET_MODE_UNIT_SIZE (y_mode) < -INTVAL (XEXP (x, 1))))
1163 return 1;
1164 if (GET_CODE (y) == AND
1165 && (GET_CODE (XEXP (y, 1)) != CONST_INT
1166 || GET_MODE_UNIT_SIZE (x_mode) < -INTVAL (XEXP (y, 1))))
1167 return 1;
1168 /* Differing symbols never alias. */
1169 return 0;
1172 /* If one address is a stack reference there can be no alias:
1173 stack references using different base registers do not alias,
1174 a stack reference can not alias a parameter, and a stack reference
1175 can not alias a global. */
1176 if ((GET_CODE (x_base) == ADDRESS && GET_MODE (x_base) == Pmode)
1177 || (GET_CODE (y_base) == ADDRESS && GET_MODE (y_base) == Pmode))
1178 return 0;
1180 if (! flag_argument_noalias)
1181 return 1;
1183 if (flag_argument_noalias > 1)
1184 return 0;
1186 /* Weak noalias assertion (arguments are distinct, but may match globals). */
1187 return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode);
1190 /* Convert the address X into something we can use. This is done by returning
1191 it unchanged unless it is a value; in the latter case we call cselib to get
1192 a more useful rtx. */
1194 static rtx
1195 get_addr (x)
1196 rtx x;
1198 cselib_val *v;
1199 struct elt_loc_list *l;
1201 if (GET_CODE (x) != VALUE)
1202 return x;
1203 v = CSELIB_VAL_PTR (x);
1204 for (l = v->locs; l; l = l->next)
1205 if (CONSTANT_P (l->loc))
1206 return l->loc;
1207 for (l = v->locs; l; l = l->next)
1208 if (GET_CODE (l->loc) != REG && GET_CODE (l->loc) != MEM)
1209 return l->loc;
1210 if (v->locs)
1211 return v->locs->loc;
1212 return x;
1215 /* Return the address of the (N_REFS + 1)th memory reference to ADDR
1216 where SIZE is the size in bytes of the memory reference. If ADDR
1217 is not modified by the memory reference then ADDR is returned. */
1220 addr_side_effect_eval (addr, size, n_refs)
1221 rtx addr;
1222 int size;
1223 int n_refs;
1225 int offset = 0;
1227 switch (GET_CODE (addr))
1229 case PRE_INC:
1230 offset = (n_refs + 1) * size;
1231 break;
1232 case PRE_DEC:
1233 offset = -(n_refs + 1) * size;
1234 break;
1235 case POST_INC:
1236 offset = n_refs * size;
1237 break;
1238 case POST_DEC:
1239 offset = -n_refs * size;
1240 break;
1242 default:
1243 return addr;
1246 if (offset)
1247 addr = gen_rtx_PLUS (GET_MODE (addr), XEXP (addr, 0), GEN_INT (offset));
1248 else
1249 addr = XEXP (addr, 0);
1251 return addr;
1254 /* Return nonzero if X and Y (memory addresses) could reference the
1255 same location in memory. C is an offset accumulator. When
1256 C is nonzero, we are testing aliases between X and Y + C.
1257 XSIZE is the size in bytes of the X reference,
1258 similarly YSIZE is the size in bytes for Y.
1260 If XSIZE or YSIZE is zero, we do not know the amount of memory being
1261 referenced (the reference was BLKmode), so make the most pessimistic
1262 assumptions.
1264 If XSIZE or YSIZE is negative, we may access memory outside the object
1265 being referenced as a side effect. This can happen when using AND to
1266 align memory references, as is done on the Alpha.
1268 Nice to notice that varying addresses cannot conflict with fp if no
1269 local variables had their addresses taken, but that's too hard now. */
1271 static int
1272 memrefs_conflict_p (xsize, x, ysize, y, c)
1273 register rtx x, y;
1274 int xsize, ysize;
1275 HOST_WIDE_INT c;
1277 if (GET_CODE (x) == VALUE)
1278 x = get_addr (x);
1279 if (GET_CODE (y) == VALUE)
1280 y = get_addr (y);
1281 if (GET_CODE (x) == HIGH)
1282 x = XEXP (x, 0);
1283 else if (GET_CODE (x) == LO_SUM)
1284 x = XEXP (x, 1);
1285 else
1286 x = canon_rtx (addr_side_effect_eval (x, xsize, 0));
1287 if (GET_CODE (y) == HIGH)
1288 y = XEXP (y, 0);
1289 else if (GET_CODE (y) == LO_SUM)
1290 y = XEXP (y, 1);
1291 else
1292 y = canon_rtx (addr_side_effect_eval (y, ysize, 0));
1294 if (rtx_equal_for_memref_p (x, y))
1296 if (xsize <= 0 || ysize <= 0)
1297 return 1;
1298 if (c >= 0 && xsize > c)
1299 return 1;
1300 if (c < 0 && ysize+c > 0)
1301 return 1;
1302 return 0;
1305 /* This code used to check for conflicts involving stack references and
1306 globals but the base address alias code now handles these cases. */
1308 if (GET_CODE (x) == PLUS)
1310 /* The fact that X is canonicalized means that this
1311 PLUS rtx is canonicalized. */
1312 rtx x0 = XEXP (x, 0);
1313 rtx x1 = XEXP (x, 1);
1315 if (GET_CODE (y) == PLUS)
1317 /* The fact that Y is canonicalized means that this
1318 PLUS rtx is canonicalized. */
1319 rtx y0 = XEXP (y, 0);
1320 rtx y1 = XEXP (y, 1);
1322 if (rtx_equal_for_memref_p (x1, y1))
1323 return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1324 if (rtx_equal_for_memref_p (x0, y0))
1325 return memrefs_conflict_p (xsize, x1, ysize, y1, c);
1326 if (GET_CODE (x1) == CONST_INT)
1328 if (GET_CODE (y1) == CONST_INT)
1329 return memrefs_conflict_p (xsize, x0, ysize, y0,
1330 c - INTVAL (x1) + INTVAL (y1));
1331 else
1332 return memrefs_conflict_p (xsize, x0, ysize, y,
1333 c - INTVAL (x1));
1335 else if (GET_CODE (y1) == CONST_INT)
1336 return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1338 return 1;
1340 else if (GET_CODE (x1) == CONST_INT)
1341 return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
1343 else if (GET_CODE (y) == PLUS)
1345 /* The fact that Y is canonicalized means that this
1346 PLUS rtx is canonicalized. */
1347 rtx y0 = XEXP (y, 0);
1348 rtx y1 = XEXP (y, 1);
1350 if (GET_CODE (y1) == CONST_INT)
1351 return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1352 else
1353 return 1;
1356 if (GET_CODE (x) == GET_CODE (y))
1357 switch (GET_CODE (x))
1359 case MULT:
1361 /* Handle cases where we expect the second operands to be the
1362 same, and check only whether the first operand would conflict
1363 or not. */
1364 rtx x0, y0;
1365 rtx x1 = canon_rtx (XEXP (x, 1));
1366 rtx y1 = canon_rtx (XEXP (y, 1));
1367 if (! rtx_equal_for_memref_p (x1, y1))
1368 return 1;
1369 x0 = canon_rtx (XEXP (x, 0));
1370 y0 = canon_rtx (XEXP (y, 0));
1371 if (rtx_equal_for_memref_p (x0, y0))
1372 return (xsize == 0 || ysize == 0
1373 || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1375 /* Can't properly adjust our sizes. */
1376 if (GET_CODE (x1) != CONST_INT)
1377 return 1;
1378 xsize /= INTVAL (x1);
1379 ysize /= INTVAL (x1);
1380 c /= INTVAL (x1);
1381 return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1384 case REG:
1385 /* Are these registers known not to be equal? */
1386 if (alias_invariant)
1388 unsigned int r_x = REGNO (x), r_y = REGNO (y);
1389 rtx i_x, i_y; /* invariant relationships of X and Y */
1391 i_x = r_x >= reg_base_value_size ? 0 : alias_invariant[r_x];
1392 i_y = r_y >= reg_base_value_size ? 0 : alias_invariant[r_y];
1394 if (i_x == 0 && i_y == 0)
1395 break;
1397 if (! memrefs_conflict_p (xsize, i_x ? i_x : x,
1398 ysize, i_y ? i_y : y, c))
1399 return 0;
1401 break;
1403 default:
1404 break;
1407 /* Treat an access through an AND (e.g. a subword access on an Alpha)
1408 as an access with indeterminate size. Assume that references
1409 besides AND are aligned, so if the size of the other reference is
1410 at least as large as the alignment, assume no other overlap. */
1411 if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT)
1413 if (GET_CODE (y) == AND || ysize < -INTVAL (XEXP (x, 1)))
1414 xsize = -1;
1415 return memrefs_conflict_p (xsize, XEXP (x, 0), ysize, y, c);
1417 if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT)
1419 /* ??? If we are indexing far enough into the array/structure, we
1420 may yet be able to determine that we can not overlap. But we
1421 also need to that we are far enough from the end not to overlap
1422 a following reference, so we do nothing with that for now. */
1423 if (GET_CODE (x) == AND || xsize < -INTVAL (XEXP (y, 1)))
1424 ysize = -1;
1425 return memrefs_conflict_p (xsize, x, ysize, XEXP (y, 0), c);
1428 if (CONSTANT_P (x))
1430 if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
1432 c += (INTVAL (y) - INTVAL (x));
1433 return (xsize <= 0 || ysize <= 0
1434 || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1437 if (GET_CODE (x) == CONST)
1439 if (GET_CODE (y) == CONST)
1440 return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1441 ysize, canon_rtx (XEXP (y, 0)), c);
1442 else
1443 return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1444 ysize, y, c);
1446 if (GET_CODE (y) == CONST)
1447 return memrefs_conflict_p (xsize, x, ysize,
1448 canon_rtx (XEXP (y, 0)), c);
1450 if (CONSTANT_P (y))
1451 return (xsize < 0 || ysize < 0
1452 || (rtx_equal_for_memref_p (x, y)
1453 && (xsize == 0 || ysize == 0
1454 || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0))));
1456 return 1;
1458 return 1;
1461 /* Functions to compute memory dependencies.
1463 Since we process the insns in execution order, we can build tables
1464 to keep track of what registers are fixed (and not aliased), what registers
1465 are varying in known ways, and what registers are varying in unknown
1466 ways.
1468 If both memory references are volatile, then there must always be a
1469 dependence between the two references, since their order can not be
1470 changed. A volatile and non-volatile reference can be interchanged
1471 though.
1473 A MEM_IN_STRUCT reference at a non-AND varying address can never
1474 conflict with a non-MEM_IN_STRUCT reference at a fixed address. We
1475 also must allow AND addresses, because they may generate accesses
1476 outside the object being referenced. This is used to generate
1477 aligned addresses from unaligned addresses, for instance, the alpha
1478 storeqi_unaligned pattern. */
1480 /* Read dependence: X is read after read in MEM takes place. There can
1481 only be a dependence here if both reads are volatile. */
1484 read_dependence (mem, x)
1485 rtx mem;
1486 rtx x;
1488 return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
1491 /* Returns MEM1 if and only if MEM1 is a scalar at a fixed address and
1492 MEM2 is a reference to a structure at a varying address, or returns
1493 MEM2 if vice versa. Otherwise, returns NULL_RTX. If a non-NULL
1494 value is returned MEM1 and MEM2 can never alias. VARIES_P is used
1495 to decide whether or not an address may vary; it should return
1496 nonzero whenever variation is possible.
1497 MEM1_ADDR and MEM2_ADDR are the addresses of MEM1 and MEM2. */
1499 static rtx
1500 fixed_scalar_and_varying_struct_p (mem1, mem2, mem1_addr, mem2_addr, varies_p)
1501 rtx mem1, mem2;
1502 rtx mem1_addr, mem2_addr;
1503 int (*varies_p) PARAMS ((rtx));
1505 if (MEM_SCALAR_P (mem1) && MEM_IN_STRUCT_P (mem2)
1506 && !varies_p (mem1_addr) && varies_p (mem2_addr))
1507 /* MEM1 is a scalar at a fixed address; MEM2 is a struct at a
1508 varying address. */
1509 return mem1;
1511 if (MEM_IN_STRUCT_P (mem1) && MEM_SCALAR_P (mem2)
1512 && varies_p (mem1_addr) && !varies_p (mem2_addr))
1513 /* MEM2 is a scalar at a fixed address; MEM1 is a struct at a
1514 varying address. */
1515 return mem2;
1517 return NULL_RTX;
1520 /* Returns nonzero if something about the mode or address format MEM1
1521 indicates that it might well alias *anything*. */
1523 static int
1524 aliases_everything_p (mem)
1525 rtx mem;
1527 if (GET_CODE (XEXP (mem, 0)) == AND)
1528 /* If the address is an AND, its very hard to know at what it is
1529 actually pointing. */
1530 return 1;
1532 return 0;
1535 /* True dependence: X is read after store in MEM takes place. */
1538 true_dependence (mem, mem_mode, x, varies)
1539 rtx mem;
1540 enum machine_mode mem_mode;
1541 rtx x;
1542 int (*varies) PARAMS ((rtx));
1544 register rtx x_addr, mem_addr;
1546 if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
1547 return 1;
1549 if (DIFFERENT_ALIAS_SETS_P (x, mem))
1550 return 0;
1552 /* If X is an unchanging read, then it can't possibly conflict with any
1553 non-unchanging store. It may conflict with an unchanging write though,
1554 because there may be a single store to this address to initialize it.
1555 Just fall through to the code below to resolve the case where we have
1556 both an unchanging read and an unchanging write. This won't handle all
1557 cases optimally, but the possible performance loss should be
1558 negligible. */
1559 if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
1560 return 0;
1562 if (mem_mode == VOIDmode)
1563 mem_mode = GET_MODE (mem);
1565 x_addr = get_addr (XEXP (x, 0));
1566 mem_addr = get_addr (XEXP (mem, 0));
1568 if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
1569 return 0;
1571 x_addr = canon_rtx (x_addr);
1572 mem_addr = canon_rtx (mem_addr);
1574 if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
1575 SIZE_FOR_MODE (x), x_addr, 0))
1576 return 0;
1578 if (aliases_everything_p (x))
1579 return 1;
1581 /* We cannot use aliases_everyting_p to test MEM, since we must look
1582 at MEM_MODE, rather than GET_MODE (MEM). */
1583 if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
1584 return 1;
1586 /* In true_dependence we also allow BLKmode to alias anything. Why
1587 don't we do this in anti_dependence and output_dependence? */
1588 if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
1589 return 1;
1591 return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
1592 varies);
1595 /* Returns non-zero if a write to X might alias a previous read from
1596 (or, if WRITEP is non-zero, a write to) MEM. */
1598 static int
1599 write_dependence_p (mem, x, writep)
1600 rtx mem;
1601 rtx x;
1602 int writep;
1604 rtx x_addr, mem_addr;
1605 rtx fixed_scalar;
1607 if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
1608 return 1;
1610 if (DIFFERENT_ALIAS_SETS_P (x, mem))
1611 return 0;
1613 /* If MEM is an unchanging read, then it can't possibly conflict with
1614 the store to X, because there is at most one store to MEM, and it must
1615 have occurred somewhere before MEM. */
1616 if (!writep && RTX_UNCHANGING_P (mem))
1617 return 0;
1619 x_addr = get_addr (XEXP (x, 0));
1620 mem_addr = get_addr (XEXP (mem, 0));
1622 if (! base_alias_check (x_addr, mem_addr, GET_MODE (x),
1623 GET_MODE (mem)))
1624 return 0;
1626 x_addr = canon_rtx (x_addr);
1627 mem_addr = canon_rtx (mem_addr);
1629 if (!memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
1630 SIZE_FOR_MODE (x), x_addr, 0))
1631 return 0;
1633 fixed_scalar
1634 = fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
1635 rtx_addr_varies_p);
1637 return (!(fixed_scalar == mem && !aliases_everything_p (x))
1638 && !(fixed_scalar == x && !aliases_everything_p (mem)));
1641 /* Anti dependence: X is written after read in MEM takes place. */
1644 anti_dependence (mem, x)
1645 rtx mem;
1646 rtx x;
1648 return write_dependence_p (mem, x, /*writep=*/0);
1651 /* Output dependence: X is written after store in MEM takes place. */
1654 output_dependence (mem, x)
1655 register rtx mem;
1656 register rtx x;
1658 return write_dependence_p (mem, x, /*writep=*/1);
1661 /* Returns non-zero if X might refer to something which is not
1662 local to the function and is not constant. */
1664 static int
1665 nonlocal_reference_p (x)
1666 rtx x;
1668 rtx base;
1669 register RTX_CODE code;
1670 int regno;
1672 code = GET_CODE (x);
1674 if (GET_RTX_CLASS (code) == 'i')
1676 /* Constant functions can be constant if they don't use
1677 scratch memory used to mark function w/o side effects. */
1678 if (code == CALL_INSN && CONST_CALL_P (x))
1680 x = CALL_INSN_FUNCTION_USAGE (x);
1681 if (x == 0)
1682 return 0;
1684 else
1685 x = PATTERN (x);
1686 code = GET_CODE (x);
1689 switch (code)
1691 case SUBREG:
1692 if (GET_CODE (SUBREG_REG (x)) == REG)
1694 /* Global registers are not local. */
1695 if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER
1696 && global_regs[REGNO (SUBREG_REG (x)) + SUBREG_WORD (x)])
1697 return 1;
1698 return 0;
1700 break;
1702 case REG:
1703 regno = REGNO (x);
1704 /* Global registers are not local. */
1705 if (regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
1706 return 1;
1707 return 0;
1709 case SCRATCH:
1710 case PC:
1711 case CC0:
1712 case CONST_INT:
1713 case CONST_DOUBLE:
1714 case CONST:
1715 case LABEL_REF:
1716 return 0;
1718 case SYMBOL_REF:
1719 /* Constants in the function's constants pool are constant. */
1720 if (CONSTANT_POOL_ADDRESS_P (x))
1721 return 0;
1722 return 1;
1724 case CALL:
1725 /* Recursion introduces no additional considerations. */
1726 if (GET_CODE (XEXP (x, 0)) == MEM
1727 && GET_CODE (XEXP (XEXP (x, 0), 0)) == SYMBOL_REF
1728 && strcmp(XSTR (XEXP (XEXP (x, 0), 0), 0),
1729 IDENTIFIER_POINTER (
1730 DECL_ASSEMBLER_NAME (current_function_decl))) == 0)
1731 return 0;
1732 return 1;
1734 case MEM:
1735 /* Be overly conservative and consider any volatile memory
1736 reference as not local. */
1737 if (MEM_VOLATILE_P (x))
1738 return 1;
1739 base = find_base_term (XEXP (x, 0));
1740 if (base)
1742 /* A Pmode ADDRESS could be a reference via the structure value
1743 address or static chain. Such memory references are nonlocal.
1745 Thus, we have to examine the contents of the ADDRESS to find
1746 out if this is a local reference or not. */
1747 if (GET_CODE (base) == ADDRESS
1748 && GET_MODE (base) == Pmode
1749 && (XEXP (base, 0) == stack_pointer_rtx
1750 || XEXP (base, 0) == arg_pointer_rtx
1751 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
1752 || XEXP (base, 0) == hard_frame_pointer_rtx
1753 #endif
1754 || XEXP (base, 0) == frame_pointer_rtx))
1755 return 0;
1756 /* Constants in the function's constant pool are constant. */
1757 if (GET_CODE (base) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (base))
1758 return 0;
1760 return 1;
1762 case ASM_INPUT:
1763 case ASM_OPERANDS:
1764 return 1;
1766 default:
1767 break;
1770 /* Recursively scan the operands of this expression. */
1773 register const char *fmt = GET_RTX_FORMAT (code);
1774 register int i;
1776 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1778 if (fmt[i] == 'e' && XEXP (x, i))
1780 if (nonlocal_reference_p (XEXP (x, i)))
1781 return 1;
1783 else if (fmt[i] == 'E')
1785 register int j;
1786 for (j = 0; j < XVECLEN (x, i); j++)
1787 if (nonlocal_reference_p (XVECEXP (x, i, j)))
1788 return 1;
1793 return 0;
1796 /* Mark the function if it is constant. */
1798 void
1799 mark_constant_function ()
1801 rtx insn;
1803 if (TREE_PUBLIC (current_function_decl)
1804 || TREE_READONLY (current_function_decl)
1805 || TREE_THIS_VOLATILE (current_function_decl)
1806 || TYPE_MODE (TREE_TYPE (current_function_decl)) == VOIDmode)
1807 return;
1809 /* Determine if this is a constant function. */
1811 for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
1812 if (GET_RTX_CLASS (GET_CODE (insn)) == 'i'
1813 && nonlocal_reference_p (insn))
1814 return;
1816 /* Mark the function. */
1818 TREE_READONLY (current_function_decl) = 1;
1822 static HARD_REG_SET argument_registers;
1824 void
1825 init_alias_once ()
1827 register int i;
1829 #ifndef OUTGOING_REGNO
1830 #define OUTGOING_REGNO(N) N
1831 #endif
1832 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1833 /* Check whether this register can hold an incoming pointer
1834 argument. FUNCTION_ARG_REGNO_P tests outgoing register
1835 numbers, so translate if necessary due to register windows. */
1836 if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i))
1837 && HARD_REGNO_MODE_OK (i, Pmode))
1838 SET_HARD_REG_BIT (argument_registers, i);
1840 alias_sets = splay_tree_new (splay_tree_compare_ints, 0, 0);
1843 /* Initialize the aliasing machinery. Initialize the REG_KNOWN_VALUE
1844 array. */
1846 void
1847 init_alias_analysis ()
1849 int maxreg = max_reg_num ();
1850 int changed, pass;
1851 register int i;
1852 register unsigned int ui;
1853 register rtx insn;
1855 reg_known_value_size = maxreg;
1857 reg_known_value
1858 = (rtx *) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (rtx))
1859 - FIRST_PSEUDO_REGISTER;
1860 reg_known_equiv_p
1861 = (char*) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (char))
1862 - FIRST_PSEUDO_REGISTER;
1864 /* Overallocate reg_base_value to allow some growth during loop
1865 optimization. Loop unrolling can create a large number of
1866 registers. */
1867 reg_base_value_size = maxreg * 2;
1868 reg_base_value = (rtx *) xcalloc (reg_base_value_size, sizeof (rtx));
1869 if (ggc_p)
1870 ggc_add_rtx_root (reg_base_value, reg_base_value_size);
1872 new_reg_base_value = (rtx *) xmalloc (reg_base_value_size * sizeof (rtx));
1873 reg_seen = (char *) xmalloc (reg_base_value_size);
1874 if (! reload_completed && flag_unroll_loops)
1876 /* ??? Why are we realloc'ing if we're just going to zero it? */
1877 alias_invariant = (rtx *)xrealloc (alias_invariant,
1878 reg_base_value_size * sizeof (rtx));
1879 bzero ((char *)alias_invariant, reg_base_value_size * sizeof (rtx));
1883 /* The basic idea is that each pass through this loop will use the
1884 "constant" information from the previous pass to propagate alias
1885 information through another level of assignments.
1887 This could get expensive if the assignment chains are long. Maybe
1888 we should throttle the number of iterations, possibly based on
1889 the optimization level or flag_expensive_optimizations.
1891 We could propagate more information in the first pass by making use
1892 of REG_N_SETS to determine immediately that the alias information
1893 for a pseudo is "constant".
1895 A program with an uninitialized variable can cause an infinite loop
1896 here. Instead of doing a full dataflow analysis to detect such problems
1897 we just cap the number of iterations for the loop.
1899 The state of the arrays for the set chain in question does not matter
1900 since the program has undefined behavior. */
1902 pass = 0;
1905 /* Assume nothing will change this iteration of the loop. */
1906 changed = 0;
1908 /* We want to assign the same IDs each iteration of this loop, so
1909 start counting from zero each iteration of the loop. */
1910 unique_id = 0;
1912 /* We're at the start of the funtion each iteration through the
1913 loop, so we're copying arguments. */
1914 copying_arguments = 1;
1916 /* Wipe the potential alias information clean for this pass. */
1917 bzero ((char *) new_reg_base_value, reg_base_value_size * sizeof (rtx));
1919 /* Wipe the reg_seen array clean. */
1920 bzero ((char *) reg_seen, reg_base_value_size);
1922 /* Mark all hard registers which may contain an address.
1923 The stack, frame and argument pointers may contain an address.
1924 An argument register which can hold a Pmode value may contain
1925 an address even if it is not in BASE_REGS.
1927 The address expression is VOIDmode for an argument and
1928 Pmode for other registers. */
1930 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1931 if (TEST_HARD_REG_BIT (argument_registers, i))
1932 new_reg_base_value[i] = gen_rtx_ADDRESS (VOIDmode,
1933 gen_rtx_REG (Pmode, i));
1935 new_reg_base_value[STACK_POINTER_REGNUM]
1936 = gen_rtx_ADDRESS (Pmode, stack_pointer_rtx);
1937 new_reg_base_value[ARG_POINTER_REGNUM]
1938 = gen_rtx_ADDRESS (Pmode, arg_pointer_rtx);
1939 new_reg_base_value[FRAME_POINTER_REGNUM]
1940 = gen_rtx_ADDRESS (Pmode, frame_pointer_rtx);
1941 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
1942 new_reg_base_value[HARD_FRAME_POINTER_REGNUM]
1943 = gen_rtx_ADDRESS (Pmode, hard_frame_pointer_rtx);
1944 #endif
1945 if (struct_value_incoming_rtx
1946 && GET_CODE (struct_value_incoming_rtx) == REG)
1947 new_reg_base_value[REGNO (struct_value_incoming_rtx)]
1948 = gen_rtx_ADDRESS (Pmode, struct_value_incoming_rtx);
1950 if (static_chain_rtx
1951 && GET_CODE (static_chain_rtx) == REG)
1952 new_reg_base_value[REGNO (static_chain_rtx)]
1953 = gen_rtx_ADDRESS (Pmode, static_chain_rtx);
1955 /* Walk the insns adding values to the new_reg_base_value array. */
1956 for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
1958 if (GET_RTX_CLASS (GET_CODE (insn)) == 'i')
1960 rtx note, set;
1962 #if defined (HAVE_prologue) || defined (HAVE_epilogue)
1963 if (prologue_epilogue_contains (insn))
1964 continue;
1965 #endif
1967 /* If this insn has a noalias note, process it, Otherwise,
1968 scan for sets. A simple set will have no side effects
1969 which could change the base value of any other register. */
1971 if (GET_CODE (PATTERN (insn)) == SET
1972 && REG_NOTES (insn) != 0
1973 && find_reg_note (insn, REG_NOALIAS, NULL_RTX))
1974 record_set (SET_DEST (PATTERN (insn)), NULL_RTX, NULL);
1975 else
1976 note_stores (PATTERN (insn), record_set, NULL);
1978 set = single_set (insn);
1980 if (set != 0
1981 && GET_CODE (SET_DEST (set)) == REG
1982 && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER
1983 && REG_NOTES (insn) != 0
1984 && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
1985 && REG_N_SETS (REGNO (SET_DEST (set))) == 1)
1986 || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
1987 && GET_CODE (XEXP (note, 0)) != EXPR_LIST
1988 && ! reg_overlap_mentioned_p (SET_DEST (set), XEXP (note, 0)))
1990 int regno = REGNO (SET_DEST (set));
1991 reg_known_value[regno] = XEXP (note, 0);
1992 reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV;
1995 else if (GET_CODE (insn) == NOTE
1996 && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
1997 copying_arguments = 0;
2000 /* Now propagate values from new_reg_base_value to reg_base_value. */
2001 for (ui = 0; ui < reg_base_value_size; ui++)
2003 if (new_reg_base_value[ui]
2004 && new_reg_base_value[ui] != reg_base_value[ui]
2005 && ! rtx_equal_p (new_reg_base_value[ui], reg_base_value[ui]))
2007 reg_base_value[ui] = new_reg_base_value[ui];
2008 changed = 1;
2012 while (changed && ++pass < MAX_ALIAS_LOOP_PASSES);
2014 /* Fill in the remaining entries. */
2015 for (i = FIRST_PSEUDO_REGISTER; i < maxreg; i++)
2016 if (reg_known_value[i] == 0)
2017 reg_known_value[i] = regno_reg_rtx[i];
2019 /* Simplify the reg_base_value array so that no register refers to
2020 another register, except to special registers indirectly through
2021 ADDRESS expressions.
2023 In theory this loop can take as long as O(registers^2), but unless
2024 there are very long dependency chains it will run in close to linear
2025 time.
2027 This loop may not be needed any longer now that the main loop does
2028 a better job at propagating alias information. */
2029 pass = 0;
2032 changed = 0;
2033 pass++;
2034 for (ui = 0; ui < reg_base_value_size; ui++)
2036 rtx base = reg_base_value[ui];
2037 if (base && GET_CODE (base) == REG)
2039 unsigned int base_regno = REGNO (base);
2040 if (base_regno == ui) /* register set from itself */
2041 reg_base_value[ui] = 0;
2042 else
2043 reg_base_value[ui] = reg_base_value[base_regno];
2044 changed = 1;
2048 while (changed && pass < MAX_ALIAS_LOOP_PASSES);
2050 /* Clean up. */
2051 free (new_reg_base_value);
2052 new_reg_base_value = 0;
2053 free (reg_seen);
2054 reg_seen = 0;
2057 void
2058 end_alias_analysis ()
2060 free (reg_known_value + FIRST_PSEUDO_REGISTER);
2061 reg_known_value = 0;
2062 reg_known_value_size = 0;
2063 free (reg_known_equiv_p + FIRST_PSEUDO_REGISTER);
2064 reg_known_equiv_p = 0;
2065 if (reg_base_value)
2067 if (ggc_p)
2068 ggc_del_root (reg_base_value);
2069 free (reg_base_value);
2070 reg_base_value = 0;
2072 reg_base_value_size = 0;
2073 if (alias_invariant)
2075 free (alias_invariant);
2076 alias_invariant = 0;