* gcc.dg/c99-float-1.c: XFAIL portions on Solaris.
[official-gcc.git] / gcc / alias.c
blob0b6747bcb941a199c3520533b2e66f44a4049745
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 "expr.h"
29 #include "regs.h"
30 #include "hard-reg-set.h"
31 #include "basic-block.h"
32 #include "flags.h"
33 #include "output.h"
34 #include "toplev.h"
35 #include "cselib.h"
36 #include "splay-tree.h"
37 #include "ggc.h"
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 int handled_component_p PARAMS ((tree));
98 static int can_address_p PARAMS ((tree));
99 static rtx find_base_value PARAMS ((rtx));
100 static int mems_in_disjoint_alias_sets_p PARAMS ((rtx, rtx));
101 static int insert_subset_children PARAMS ((splay_tree_node, void*));
102 static tree find_base_decl PARAMS ((tree));
103 static alias_set_entry get_alias_set_entry PARAMS ((HOST_WIDE_INT));
104 static rtx fixed_scalar_and_varying_struct_p PARAMS ((rtx, rtx, rtx, rtx,
105 int (*) (rtx, int)));
106 static int aliases_everything_p PARAMS ((rtx));
107 static int write_dependence_p PARAMS ((rtx, rtx, int));
108 static int nonlocal_mentioned_p PARAMS ((rtx));
110 static int loop_p PARAMS ((void));
112 /* Set up all info needed to perform alias analysis on memory references. */
114 /* Returns the size in bytes of the mode of X. */
115 #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X)))
117 /* Returns nonzero if MEM1 and MEM2 do not alias because they are in
118 different alias sets. We ignore alias sets in functions making use
119 of variable arguments because the va_arg macros on some systems are
120 not legal ANSI C. */
121 #define DIFFERENT_ALIAS_SETS_P(MEM1, MEM2) \
122 mems_in_disjoint_alias_sets_p (MEM1, MEM2)
124 /* Cap the number of passes we make over the insns propagating alias
125 information through set chains. 10 is a completely arbitrary choice. */
126 #define MAX_ALIAS_LOOP_PASSES 10
128 /* reg_base_value[N] gives an address to which register N is related.
129 If all sets after the first add or subtract to the current value
130 or otherwise modify it so it does not point to a different top level
131 object, reg_base_value[N] is equal to the address part of the source
132 of the first set.
134 A base address can be an ADDRESS, SYMBOL_REF, or LABEL_REF. ADDRESS
135 expressions represent certain special values: function arguments and
136 the stack, frame, and argument pointers.
138 The contents of an ADDRESS is not normally used, the mode of the
139 ADDRESS determines whether the ADDRESS is a function argument or some
140 other special value. Pointer equality, not rtx_equal_p, determines whether
141 two ADDRESS expressions refer to the same base address.
143 The only use of the contents of an ADDRESS is for determining if the
144 current function performs nonlocal memory memory references for the
145 purposes of marking the function as a constant function. */
147 static rtx *reg_base_value;
148 static rtx *new_reg_base_value;
149 static unsigned int reg_base_value_size; /* size of reg_base_value array */
151 #define REG_BASE_VALUE(X) \
152 (REGNO (X) < reg_base_value_size \
153 ? reg_base_value[REGNO (X)] : 0)
155 /* Vector of known invariant relationships between registers. Set in
156 loop unrolling. Indexed by register number, if nonzero the value
157 is an expression describing this register in terms of another.
159 The length of this array is REG_BASE_VALUE_SIZE.
161 Because this array contains only pseudo registers it has no effect
162 after reload. */
163 static rtx *alias_invariant;
165 /* Vector indexed by N giving the initial (unchanging) value known for
166 pseudo-register N. This array is initialized in
167 init_alias_analysis, and does not change until end_alias_analysis
168 is called. */
169 rtx *reg_known_value;
171 /* Indicates number of valid entries in reg_known_value. */
172 static unsigned int reg_known_value_size;
174 /* Vector recording for each reg_known_value whether it is due to a
175 REG_EQUIV note. Future passes (viz., reload) may replace the
176 pseudo with the equivalent expression and so we account for the
177 dependences that would be introduced if that happens.
179 The REG_EQUIV notes created in assign_parms may mention the arg
180 pointer, and there are explicit insns in the RTL that modify the
181 arg pointer. Thus we must ensure that such insns don't get
182 scheduled across each other because that would invalidate the
183 REG_EQUIV notes. One could argue that the REG_EQUIV notes are
184 wrong, but solving the problem in the scheduler will likely give
185 better code, so we do it here. */
186 char *reg_known_equiv_p;
188 /* True when scanning insns from the start of the rtl to the
189 NOTE_INSN_FUNCTION_BEG note. */
190 static int copying_arguments;
192 /* The splay-tree used to store the various alias set entries. */
193 static splay_tree alias_sets;
195 /* Returns a pointer to the alias set entry for ALIAS_SET, if there is
196 such an entry, or NULL otherwise. */
198 static alias_set_entry
199 get_alias_set_entry (alias_set)
200 HOST_WIDE_INT alias_set;
202 splay_tree_node sn
203 = splay_tree_lookup (alias_sets, (splay_tree_key) alias_set);
205 return sn != 0 ? ((alias_set_entry) sn->value) : 0;
208 /* Returns nonzero if the alias sets for MEM1 and MEM2 are such that
209 the two MEMs cannot alias each other. */
211 static int
212 mems_in_disjoint_alias_sets_p (mem1, mem2)
213 rtx mem1;
214 rtx mem2;
216 #ifdef ENABLE_CHECKING
217 /* Perform a basic sanity check. Namely, that there are no alias sets
218 if we're not using strict aliasing. This helps to catch bugs
219 whereby someone uses PUT_CODE, but doesn't clear MEM_ALIAS_SET, or
220 where a MEM is allocated in some way other than by the use of
221 gen_rtx_MEM, and the MEM_ALIAS_SET is not cleared. If we begin to
222 use alias sets to indicate that spilled registers cannot alias each
223 other, we might need to remove this check. */
224 if (! flag_strict_aliasing
225 && (MEM_ALIAS_SET (mem1) != 0 || MEM_ALIAS_SET (mem2) != 0))
226 abort ();
227 #endif
229 return ! alias_sets_conflict_p (MEM_ALIAS_SET (mem1), MEM_ALIAS_SET (mem2));
232 /* Insert the NODE into the splay tree given by DATA. Used by
233 record_alias_subset via splay_tree_foreach. */
235 static int
236 insert_subset_children (node, data)
237 splay_tree_node node;
238 void *data;
240 splay_tree_insert ((splay_tree) data, node->key, node->value);
242 return 0;
245 /* Return 1 if the two specified alias sets may conflict. */
248 alias_sets_conflict_p (set1, set2)
249 HOST_WIDE_INT set1, set2;
251 alias_set_entry ase;
253 /* If have no alias set information for one of the operands, we have
254 to assume it can alias anything. */
255 if (set1 == 0 || set2 == 0
256 /* If the two alias sets are the same, they may alias. */
257 || set1 == set2)
258 return 1;
260 /* See if the first alias set is a subset of the second. */
261 ase = get_alias_set_entry (set1);
262 if (ase != 0
263 && (ase->has_zero_child
264 || splay_tree_lookup (ase->children,
265 (splay_tree_key) set2)))
266 return 1;
268 /* Now do the same, but with the alias sets reversed. */
269 ase = get_alias_set_entry (set2);
270 if (ase != 0
271 && (ase->has_zero_child
272 || splay_tree_lookup (ase->children,
273 (splay_tree_key) set1)))
274 return 1;
276 /* The two alias sets are distinct and neither one is the
277 child of the other. Therefore, they cannot alias. */
278 return 0;
281 /* Return 1 if TYPE is a RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE and has
282 has any readonly fields. If any of the fields have types that
283 contain readonly fields, return true as well. */
286 readonly_fields_p (type)
287 tree type;
289 tree field;
291 if (TREE_CODE (type) != RECORD_TYPE && TREE_CODE (type) != UNION_TYPE
292 && TREE_CODE (type) != QUAL_UNION_TYPE)
293 return 0;
295 for (field = TYPE_FIELDS (type); field != 0; field = TREE_CHAIN (field))
296 if (TREE_CODE (field) == FIELD_DECL
297 && (TREE_READONLY (field)
298 || readonly_fields_p (TREE_TYPE (field))))
299 return 1;
301 return 0;
304 /* Return 1 if any MEM object of type T1 will always conflict (using the
305 dependency routines in this file) with any MEM object of type T2.
306 This is used when allocating temporary storage. If T1 and/or T2 are
307 NULL_TREE, it means we know nothing about the storage. */
310 objects_must_conflict_p (t1, t2)
311 tree t1, t2;
313 /* If neither has a type specified, we don't know if they'll conflict
314 because we may be using them to store objects of various types, for
315 example the argument and local variables areas of inlined functions. */
316 if (t1 == 0 && t2 == 0)
317 return 0;
319 /* If one or the other has readonly fields or is readonly,
320 then they may not conflict. */
321 if ((t1 != 0 && readonly_fields_p (t1))
322 || (t2 != 0 && readonly_fields_p (t2))
323 || (t1 != 0 && TYPE_READONLY (t1))
324 || (t2 != 0 && TYPE_READONLY (t2)))
325 return 0;
327 /* If they are the same type, they must conflict. */
328 if (t1 == t2
329 /* Likewise if both are volatile. */
330 || (t1 != 0 && TYPE_VOLATILE (t1) && t2 != 0 && TYPE_VOLATILE (t2)))
331 return 1;
333 /* If one is aggregate and the other is scalar then they may not
334 conflict. */
335 if ((t1 != 0 && AGGREGATE_TYPE_P (t1))
336 != (t2 != 0 && AGGREGATE_TYPE_P (t2)))
337 return 0;
339 /* Otherwise they conflict only if the alias sets conflict. */
340 return alias_sets_conflict_p (t1 ? get_alias_set (t1) : 0,
341 t2 ? get_alias_set (t2) : 0);
344 /* T is an expression with pointer type. Find the DECL on which this
345 expression is based. (For example, in `a[i]' this would be `a'.)
346 If there is no such DECL, or a unique decl cannot be determined,
347 NULL_TREE is retured. */
349 static tree
350 find_base_decl (t)
351 tree t;
353 tree d0, d1, d2;
355 if (t == 0 || t == error_mark_node || ! POINTER_TYPE_P (TREE_TYPE (t)))
356 return 0;
358 /* If this is a declaration, return it. */
359 if (TREE_CODE_CLASS (TREE_CODE (t)) == 'd')
360 return t;
362 /* Handle general expressions. It would be nice to deal with
363 COMPONENT_REFs here. If we could tell that `a' and `b' were the
364 same, then `a->f' and `b->f' are also the same. */
365 switch (TREE_CODE_CLASS (TREE_CODE (t)))
367 case '1':
368 return find_base_decl (TREE_OPERAND (t, 0));
370 case '2':
371 /* Return 0 if found in neither or both are the same. */
372 d0 = find_base_decl (TREE_OPERAND (t, 0));
373 d1 = find_base_decl (TREE_OPERAND (t, 1));
374 if (d0 == d1)
375 return d0;
376 else if (d0 == 0)
377 return d1;
378 else if (d1 == 0)
379 return d0;
380 else
381 return 0;
383 case '3':
384 d0 = find_base_decl (TREE_OPERAND (t, 0));
385 d1 = find_base_decl (TREE_OPERAND (t, 1));
386 d0 = find_base_decl (TREE_OPERAND (t, 0));
387 d2 = find_base_decl (TREE_OPERAND (t, 2));
389 /* Set any nonzero values from the last, then from the first. */
390 if (d1 == 0) d1 = d2;
391 if (d0 == 0) d0 = d1;
392 if (d1 == 0) d1 = d0;
393 if (d2 == 0) d2 = d1;
395 /* At this point all are nonzero or all are zero. If all three are the
396 same, return it. Otherwise, return zero. */
397 return (d0 == d1 && d1 == d2) ? d0 : 0;
399 default:
400 return 0;
404 /* Return 1 if T is an expression that get_inner_reference handles. */
406 static int
407 handled_component_p (t)
408 tree t;
410 switch (TREE_CODE (t))
412 case BIT_FIELD_REF:
413 case COMPONENT_REF:
414 case ARRAY_REF:
415 case NON_LVALUE_EXPR:
416 return 1;
418 case NOP_EXPR:
419 case CONVERT_EXPR:
420 return (TYPE_MODE (TREE_TYPE (t))
421 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (t, 0))));
423 default:
424 return 0;
428 /* Return 1 if all the nested component references handled by
429 get_inner_reference in T are such that we can address the object in T. */
431 static int
432 can_address_p (t)
433 tree t;
435 /* If we're at the end, it is vacuously addressable. */
436 if (! handled_component_p (t))
437 return 1;
439 /* Bitfields are never addressable. */
440 else if (TREE_CODE (t) == BIT_FIELD_REF)
441 return 0;
443 else if (TREE_CODE (t) == COMPONENT_REF
444 && ! DECL_NONADDRESSABLE_P (TREE_OPERAND (t, 1))
445 && can_address_p (TREE_OPERAND (t, 0)))
446 return 1;
448 else if (TREE_CODE (t) == ARRAY_REF
449 && ! TYPE_NONALIASED_COMPONENT (TREE_TYPE (TREE_OPERAND (t, 0)))
450 && can_address_p (TREE_OPERAND (t, 0)))
451 return 1;
453 return 0;
456 /* Return the alias set for T, which may be either a type or an
457 expression. Call language-specific routine for help, if needed. */
459 HOST_WIDE_INT
460 get_alias_set (t)
461 tree t;
463 tree orig_t;
464 HOST_WIDE_INT set;
466 /* If we're not doing any alias analysis, just assume everything
467 aliases everything else. Also return 0 if this or its type is
468 an error. */
469 if (! flag_strict_aliasing || t == error_mark_node
470 || (! TYPE_P (t)
471 && (TREE_TYPE (t) == 0 || TREE_TYPE (t) == error_mark_node)))
472 return 0;
474 /* We can be passed either an expression or a type. This and the
475 language-specific routine may make mutually-recursive calls to
476 each other to figure out what to do. At each juncture, we see if
477 this is a tree that the language may need to handle specially.
478 First handle things that aren't types and start by removing nops
479 since we care only about the actual object. */
480 if (! TYPE_P (t))
482 while (TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR
483 || TREE_CODE (t) == NON_LVALUE_EXPR)
484 t = TREE_OPERAND (t, 0);
486 /* Now give the language a chance to do something but record what we
487 gave it this time. */
488 orig_t = t;
489 if ((set = lang_get_alias_set (t)) != -1)
490 return set;
492 /* Now loop the same way as get_inner_reference and get the alias
493 set to use. Pick up the outermost object that we could have
494 a pointer to. */
495 while (handled_component_p (t) && ! can_address_p (t))
496 t = TREE_OPERAND (t, 0);
498 if (TREE_CODE (t) == INDIRECT_REF)
500 /* Check for accesses through restrict-qualified pointers. */
501 tree decl = find_base_decl (TREE_OPERAND (t, 0));
503 if (decl && DECL_POINTER_ALIAS_SET_KNOWN_P (decl))
504 /* We use the alias set indicated in the declaration. */
505 return DECL_POINTER_ALIAS_SET (decl);
507 /* If we have an INDIRECT_REF via a void pointer, we don't
508 know anything about what that might alias. */
509 if (TREE_CODE (TREE_TYPE (t)) == VOID_TYPE)
510 return 0;
513 /* Give the language another chance to do something special. */
514 if (orig_t != t
515 && (set = lang_get_alias_set (t)) != -1)
516 return set;
518 /* Now all we care about is the type. */
519 t = TREE_TYPE (t);
522 /* Variant qualifiers don't affect the alias set, so get the main
523 variant. If this is a type with a known alias set, return it. */
524 t = TYPE_MAIN_VARIANT (t);
525 if (TYPE_P (t) && TYPE_ALIAS_SET_KNOWN_P (t))
526 return TYPE_ALIAS_SET (t);
528 /* See if the language has special handling for this type. */
529 if ((set = lang_get_alias_set (t)) != -1)
531 /* If the alias set is now known, we are done. */
532 if (TYPE_ALIAS_SET_KNOWN_P (t))
533 return TYPE_ALIAS_SET (t);
536 /* There are no objects of FUNCTION_TYPE, so there's no point in
537 using up an alias set for them. (There are, of course, pointers
538 and references to functions, but that's different.) */
539 else if (TREE_CODE (t) == FUNCTION_TYPE)
540 set = 0;
541 else
542 /* Otherwise make a new alias set for this type. */
543 set = new_alias_set ();
545 TYPE_ALIAS_SET (t) = set;
547 /* If this is an aggregate type, we must record any component aliasing
548 information. */
549 if (AGGREGATE_TYPE_P (t) || TREE_CODE (t) == COMPLEX_TYPE)
550 record_component_aliases (t);
552 return set;
555 /* Return a brand-new alias set. */
557 HOST_WIDE_INT
558 new_alias_set ()
560 static HOST_WIDE_INT last_alias_set;
562 if (flag_strict_aliasing)
563 return ++last_alias_set;
564 else
565 return 0;
568 /* Indicate that things in SUBSET can alias things in SUPERSET, but
569 not vice versa. For example, in C, a store to an `int' can alias a
570 structure containing an `int', but not vice versa. Here, the
571 structure would be the SUPERSET and `int' the SUBSET. This
572 function should be called only once per SUPERSET/SUBSET pair.
574 It is illegal for SUPERSET to be zero; everything is implicitly a
575 subset of alias set zero. */
577 void
578 record_alias_subset (superset, subset)
579 HOST_WIDE_INT superset;
580 HOST_WIDE_INT subset;
582 alias_set_entry superset_entry;
583 alias_set_entry subset_entry;
585 if (superset == 0)
586 abort ();
588 superset_entry = get_alias_set_entry (superset);
589 if (superset_entry == 0)
591 /* Create an entry for the SUPERSET, so that we have a place to
592 attach the SUBSET. */
593 superset_entry
594 = (alias_set_entry) xmalloc (sizeof (struct alias_set_entry));
595 superset_entry->alias_set = superset;
596 superset_entry->children
597 = splay_tree_new (splay_tree_compare_ints, 0, 0);
598 superset_entry->has_zero_child = 0;
599 splay_tree_insert (alias_sets, (splay_tree_key) superset,
600 (splay_tree_value) superset_entry);
603 if (subset == 0)
604 superset_entry->has_zero_child = 1;
605 else
607 subset_entry = get_alias_set_entry (subset);
608 /* If there is an entry for the subset, enter all of its children
609 (if they are not already present) as children of the SUPERSET. */
610 if (subset_entry)
612 if (subset_entry->has_zero_child)
613 superset_entry->has_zero_child = 1;
615 splay_tree_foreach (subset_entry->children, insert_subset_children,
616 superset_entry->children);
619 /* Enter the SUBSET itself as a child of the SUPERSET. */
620 splay_tree_insert (superset_entry->children,
621 (splay_tree_key) subset, 0);
625 /* Record that component types of TYPE, if any, are part of that type for
626 aliasing purposes. For record types, we only record component types
627 for fields that are marked addressable. For array types, we always
628 record the component types, so the front end should not call this
629 function if the individual component aren't addressable. */
631 void
632 record_component_aliases (type)
633 tree type;
635 HOST_WIDE_INT superset = get_alias_set (type);
636 tree field;
638 if (superset == 0)
639 return;
641 switch (TREE_CODE (type))
643 case ARRAY_TYPE:
644 if (! TYPE_NONALIASED_COMPONENT (type))
645 record_alias_subset (superset, get_alias_set (TREE_TYPE (type)));
646 break;
648 case RECORD_TYPE:
649 case UNION_TYPE:
650 case QUAL_UNION_TYPE:
651 for (field = TYPE_FIELDS (type); field != 0; field = TREE_CHAIN (field))
652 if (TREE_CODE (field) == FIELD_DECL && ! DECL_NONADDRESSABLE_P (field))
653 record_alias_subset (superset, get_alias_set (TREE_TYPE (field)));
654 break;
656 case COMPLEX_TYPE:
657 record_alias_subset (superset, get_alias_set (TREE_TYPE (type)));
658 break;
660 default:
661 break;
665 /* Allocate an alias set for use in storing and reading from the varargs
666 spill area. */
668 HOST_WIDE_INT
669 get_varargs_alias_set ()
671 static HOST_WIDE_INT set = -1;
673 if (set == -1)
674 set = new_alias_set ();
676 return set;
679 /* Likewise, but used for the fixed portions of the frame, e.g., register
680 save areas. */
682 HOST_WIDE_INT
683 get_frame_alias_set ()
685 static HOST_WIDE_INT set = -1;
687 if (set == -1)
688 set = new_alias_set ();
690 return set;
693 /* Inside SRC, the source of a SET, find a base address. */
695 static rtx
696 find_base_value (src)
697 register rtx src;
699 unsigned int regno;
700 switch (GET_CODE (src))
702 case SYMBOL_REF:
703 case LABEL_REF:
704 return src;
706 case REG:
707 regno = REGNO (src);
708 /* At the start of a function, argument registers have known base
709 values which may be lost later. Returning an ADDRESS
710 expression here allows optimization based on argument values
711 even when the argument registers are used for other purposes. */
712 if (regno < FIRST_PSEUDO_REGISTER && copying_arguments)
713 return new_reg_base_value[regno];
715 /* If a pseudo has a known base value, return it. Do not do this
716 for hard regs since it can result in a circular dependency
717 chain for registers which have values at function entry.
719 The test above is not sufficient because the scheduler may move
720 a copy out of an arg reg past the NOTE_INSN_FUNCTION_BEGIN. */
721 if (regno >= FIRST_PSEUDO_REGISTER
722 && regno < reg_base_value_size
723 && reg_base_value[regno])
724 return reg_base_value[regno];
726 return src;
728 case MEM:
729 /* Check for an argument passed in memory. Only record in the
730 copying-arguments block; it is too hard to track changes
731 otherwise. */
732 if (copying_arguments
733 && (XEXP (src, 0) == arg_pointer_rtx
734 || (GET_CODE (XEXP (src, 0)) == PLUS
735 && XEXP (XEXP (src, 0), 0) == arg_pointer_rtx)))
736 return gen_rtx_ADDRESS (VOIDmode, src);
737 return 0;
739 case CONST:
740 src = XEXP (src, 0);
741 if (GET_CODE (src) != PLUS && GET_CODE (src) != MINUS)
742 break;
744 /* ... fall through ... */
746 case PLUS:
747 case MINUS:
749 rtx temp, src_0 = XEXP (src, 0), src_1 = XEXP (src, 1);
751 /* If either operand is a REG, then see if we already have
752 a known value for it. */
753 if (GET_CODE (src_0) == REG)
755 temp = find_base_value (src_0);
756 if (temp != 0)
757 src_0 = temp;
760 if (GET_CODE (src_1) == REG)
762 temp = find_base_value (src_1);
763 if (temp!= 0)
764 src_1 = temp;
767 /* Guess which operand is the base address:
768 If either operand is a symbol, then it is the base. If
769 either operand is a CONST_INT, then the other is the base. */
770 if (GET_CODE (src_1) == CONST_INT || CONSTANT_P (src_0))
771 return find_base_value (src_0);
772 else if (GET_CODE (src_0) == CONST_INT || CONSTANT_P (src_1))
773 return find_base_value (src_1);
775 /* This might not be necessary anymore:
776 If either operand is a REG that is a known pointer, then it
777 is the base. */
778 else if (GET_CODE (src_0) == REG && REG_POINTER (src_0))
779 return find_base_value (src_0);
780 else if (GET_CODE (src_1) == REG && REG_POINTER (src_1))
781 return find_base_value (src_1);
783 return 0;
786 case LO_SUM:
787 /* The standard form is (lo_sum reg sym) so look only at the
788 second operand. */
789 return find_base_value (XEXP (src, 1));
791 case AND:
792 /* If the second operand is constant set the base
793 address to the first operand. */
794 if (GET_CODE (XEXP (src, 1)) == CONST_INT && INTVAL (XEXP (src, 1)) != 0)
795 return find_base_value (XEXP (src, 0));
796 return 0;
798 case TRUNCATE:
799 if (GET_MODE_SIZE (GET_MODE (src)) < GET_MODE_SIZE (Pmode))
800 break;
801 /* Fall through. */
802 case ZERO_EXTEND:
803 case SIGN_EXTEND: /* used for NT/Alpha pointers */
804 case HIGH:
805 return find_base_value (XEXP (src, 0));
807 default:
808 break;
811 return 0;
814 /* Called from init_alias_analysis indirectly through note_stores. */
816 /* While scanning insns to find base values, reg_seen[N] is nonzero if
817 register N has been set in this function. */
818 static char *reg_seen;
820 /* Addresses which are known not to alias anything else are identified
821 by a unique integer. */
822 static int unique_id;
824 static void
825 record_set (dest, set, data)
826 rtx dest, set;
827 void *data ATTRIBUTE_UNUSED;
829 register unsigned regno;
830 rtx src;
832 if (GET_CODE (dest) != REG)
833 return;
835 regno = REGNO (dest);
837 if (regno >= reg_base_value_size)
838 abort ();
840 if (set)
842 /* A CLOBBER wipes out any old value but does not prevent a previously
843 unset register from acquiring a base address (i.e. reg_seen is not
844 set). */
845 if (GET_CODE (set) == CLOBBER)
847 new_reg_base_value[regno] = 0;
848 return;
850 src = SET_SRC (set);
852 else
854 if (reg_seen[regno])
856 new_reg_base_value[regno] = 0;
857 return;
859 reg_seen[regno] = 1;
860 new_reg_base_value[regno] = gen_rtx_ADDRESS (Pmode,
861 GEN_INT (unique_id++));
862 return;
865 /* This is not the first set. If the new value is not related to the
866 old value, forget the base value. Note that the following code is
867 not detected:
868 extern int x, y; int *p = &x; p += (&y-&x);
869 ANSI C does not allow computing the difference of addresses
870 of distinct top level objects. */
871 if (new_reg_base_value[regno])
872 switch (GET_CODE (src))
874 case LO_SUM:
875 case MINUS:
876 if (XEXP (src, 0) != dest && XEXP (src, 1) != dest)
877 new_reg_base_value[regno] = 0;
878 break;
879 case PLUS:
880 /* If the value we add in the PLUS is also a valid base value,
881 this might be the actual base value, and the original value
882 an index. */
884 rtx other = NULL_RTX;
886 if (XEXP (src, 0) == dest)
887 other = XEXP (src, 1);
888 else if (XEXP (src, 1) == dest)
889 other = XEXP (src, 0);
891 if (! other || find_base_value (other))
892 new_reg_base_value[regno] = 0;
893 break;
895 case AND:
896 if (XEXP (src, 0) != dest || GET_CODE (XEXP (src, 1)) != CONST_INT)
897 new_reg_base_value[regno] = 0;
898 break;
899 default:
900 new_reg_base_value[regno] = 0;
901 break;
903 /* If this is the first set of a register, record the value. */
904 else if ((regno >= FIRST_PSEUDO_REGISTER || ! fixed_regs[regno])
905 && ! reg_seen[regno] && new_reg_base_value[regno] == 0)
906 new_reg_base_value[regno] = find_base_value (src);
908 reg_seen[regno] = 1;
911 /* Called from loop optimization when a new pseudo-register is
912 created. It indicates that REGNO is being set to VAL. f INVARIANT
913 is true then this value also describes an invariant relationship
914 which can be used to deduce that two registers with unknown values
915 are different. */
917 void
918 record_base_value (regno, val, invariant)
919 unsigned int regno;
920 rtx val;
921 int invariant;
923 if (regno >= reg_base_value_size)
924 return;
926 if (invariant && alias_invariant)
927 alias_invariant[regno] = val;
929 if (GET_CODE (val) == REG)
931 if (REGNO (val) < reg_base_value_size)
932 reg_base_value[regno] = reg_base_value[REGNO (val)];
934 return;
937 reg_base_value[regno] = find_base_value (val);
940 /* Returns a canonical version of X, from the point of view alias
941 analysis. (For example, if X is a MEM whose address is a register,
942 and the register has a known value (say a SYMBOL_REF), then a MEM
943 whose address is the SYMBOL_REF is returned.) */
946 canon_rtx (x)
947 rtx x;
949 /* Recursively look for equivalences. */
950 if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER
951 && REGNO (x) < reg_known_value_size)
952 return reg_known_value[REGNO (x)] == x
953 ? x : canon_rtx (reg_known_value[REGNO (x)]);
954 else if (GET_CODE (x) == PLUS)
956 rtx x0 = canon_rtx (XEXP (x, 0));
957 rtx x1 = canon_rtx (XEXP (x, 1));
959 if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
961 /* We can tolerate LO_SUMs being offset here; these
962 rtl are used for nothing other than comparisons. */
963 if (GET_CODE (x0) == CONST_INT)
964 return plus_constant_for_output (x1, INTVAL (x0));
965 else if (GET_CODE (x1) == CONST_INT)
966 return plus_constant_for_output (x0, INTVAL (x1));
967 return gen_rtx_PLUS (GET_MODE (x), x0, x1);
971 /* This gives us much better alias analysis when called from
972 the loop optimizer. Note we want to leave the original
973 MEM alone, but need to return the canonicalized MEM with
974 all the flags with their original values. */
975 else if (GET_CODE (x) == MEM)
977 rtx addr = canon_rtx (XEXP (x, 0));
979 if (addr != XEXP (x, 0))
981 rtx new = gen_rtx_MEM (GET_MODE (x), addr);
983 MEM_COPY_ATTRIBUTES (new, x);
984 x = new;
987 return x;
990 /* Return 1 if X and Y are identical-looking rtx's.
992 We use the data in reg_known_value above to see if two registers with
993 different numbers are, in fact, equivalent. */
995 static int
996 rtx_equal_for_memref_p (x, y)
997 rtx x, y;
999 register int i;
1000 register int j;
1001 register enum rtx_code code;
1002 register const char *fmt;
1004 if (x == 0 && y == 0)
1005 return 1;
1006 if (x == 0 || y == 0)
1007 return 0;
1009 x = canon_rtx (x);
1010 y = canon_rtx (y);
1012 if (x == y)
1013 return 1;
1015 code = GET_CODE (x);
1016 /* Rtx's of different codes cannot be equal. */
1017 if (code != GET_CODE (y))
1018 return 0;
1020 /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
1021 (REG:SI x) and (REG:HI x) are NOT equivalent. */
1023 if (GET_MODE (x) != GET_MODE (y))
1024 return 0;
1026 /* Some RTL can be compared without a recursive examination. */
1027 switch (code)
1029 case REG:
1030 return REGNO (x) == REGNO (y);
1032 case LABEL_REF:
1033 return XEXP (x, 0) == XEXP (y, 0);
1035 case SYMBOL_REF:
1036 return XSTR (x, 0) == XSTR (y, 0);
1038 case CONST_INT:
1039 case CONST_DOUBLE:
1040 /* There's no need to compare the contents of CONST_DOUBLEs or
1041 CONST_INTs because pointer equality is a good enough
1042 comparison for these nodes. */
1043 return 0;
1045 case ADDRESSOF:
1046 return (XINT (x, 1) == XINT (y, 1)
1047 && rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0)));
1049 default:
1050 break;
1053 /* For commutative operations, the RTX match if the operand match in any
1054 order. Also handle the simple binary and unary cases without a loop. */
1055 if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
1056 return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
1057 && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
1058 || (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
1059 && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
1060 else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
1061 return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
1062 && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)));
1063 else if (GET_RTX_CLASS (code) == '1')
1064 return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0));
1066 /* Compare the elements. If any pair of corresponding elements
1067 fail to match, return 0 for the whole things.
1069 Limit cases to types which actually appear in addresses. */
1071 fmt = GET_RTX_FORMAT (code);
1072 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1074 switch (fmt[i])
1076 case 'i':
1077 if (XINT (x, i) != XINT (y, i))
1078 return 0;
1079 break;
1081 case 'E':
1082 /* Two vectors must have the same length. */
1083 if (XVECLEN (x, i) != XVECLEN (y, i))
1084 return 0;
1086 /* And the corresponding elements must match. */
1087 for (j = 0; j < XVECLEN (x, i); j++)
1088 if (rtx_equal_for_memref_p (XVECEXP (x, i, j),
1089 XVECEXP (y, i, j)) == 0)
1090 return 0;
1091 break;
1093 case 'e':
1094 if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0)
1095 return 0;
1096 break;
1098 /* This can happen for an asm which clobbers memory. */
1099 case '0':
1100 break;
1102 /* It is believed that rtx's at this level will never
1103 contain anything but integers and other rtx's,
1104 except for within LABEL_REFs and SYMBOL_REFs. */
1105 default:
1106 abort ();
1109 return 1;
1112 /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
1113 X and return it, or return 0 if none found. */
1115 static rtx
1116 find_symbolic_term (x)
1117 rtx x;
1119 register int i;
1120 register enum rtx_code code;
1121 register const char *fmt;
1123 code = GET_CODE (x);
1124 if (code == SYMBOL_REF || code == LABEL_REF)
1125 return x;
1126 if (GET_RTX_CLASS (code) == 'o')
1127 return 0;
1129 fmt = GET_RTX_FORMAT (code);
1130 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1132 rtx t;
1134 if (fmt[i] == 'e')
1136 t = find_symbolic_term (XEXP (x, i));
1137 if (t != 0)
1138 return t;
1140 else if (fmt[i] == 'E')
1141 break;
1143 return 0;
1146 static rtx
1147 find_base_term (x)
1148 register rtx x;
1150 cselib_val *val;
1151 struct elt_loc_list *l;
1153 #if defined (FIND_BASE_TERM)
1154 /* Try machine-dependent ways to find the base term. */
1155 x = FIND_BASE_TERM (x);
1156 #endif
1158 switch (GET_CODE (x))
1160 case REG:
1161 return REG_BASE_VALUE (x);
1163 case ZERO_EXTEND:
1164 case SIGN_EXTEND: /* Used for Alpha/NT pointers */
1165 case HIGH:
1166 case PRE_INC:
1167 case PRE_DEC:
1168 case POST_INC:
1169 case POST_DEC:
1170 return find_base_term (XEXP (x, 0));
1172 case VALUE:
1173 val = CSELIB_VAL_PTR (x);
1174 for (l = val->locs; l; l = l->next)
1175 if ((x = find_base_term (l->loc)) != 0)
1176 return x;
1177 return 0;
1179 case CONST:
1180 x = XEXP (x, 0);
1181 if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
1182 return 0;
1183 /* fall through */
1184 case LO_SUM:
1185 case PLUS:
1186 case MINUS:
1188 rtx tmp1 = XEXP (x, 0);
1189 rtx tmp2 = XEXP (x, 1);
1191 /* This is a litle bit tricky since we have to determine which of
1192 the two operands represents the real base address. Otherwise this
1193 routine may return the index register instead of the base register.
1195 That may cause us to believe no aliasing was possible, when in
1196 fact aliasing is possible.
1198 We use a few simple tests to guess the base register. Additional
1199 tests can certainly be added. For example, if one of the operands
1200 is a shift or multiply, then it must be the index register and the
1201 other operand is the base register. */
1203 if (tmp1 == pic_offset_table_rtx && CONSTANT_P (tmp2))
1204 return find_base_term (tmp2);
1206 /* If either operand is known to be a pointer, then use it
1207 to determine the base term. */
1208 if (REG_P (tmp1) && REG_POINTER (tmp1))
1209 return find_base_term (tmp1);
1211 if (REG_P (tmp2) && REG_POINTER (tmp2))
1212 return find_base_term (tmp2);
1214 /* Neither operand was known to be a pointer. Go ahead and find the
1215 base term for both operands. */
1216 tmp1 = find_base_term (tmp1);
1217 tmp2 = find_base_term (tmp2);
1219 /* If either base term is named object or a special address
1220 (like an argument or stack reference), then use it for the
1221 base term. */
1222 if (tmp1 != 0
1223 && (GET_CODE (tmp1) == SYMBOL_REF
1224 || GET_CODE (tmp1) == LABEL_REF
1225 || (GET_CODE (tmp1) == ADDRESS
1226 && GET_MODE (tmp1) != VOIDmode)))
1227 return tmp1;
1229 if (tmp2 != 0
1230 && (GET_CODE (tmp2) == SYMBOL_REF
1231 || GET_CODE (tmp2) == LABEL_REF
1232 || (GET_CODE (tmp2) == ADDRESS
1233 && GET_MODE (tmp2) != VOIDmode)))
1234 return tmp2;
1236 /* We could not determine which of the two operands was the
1237 base register and which was the index. So we can determine
1238 nothing from the base alias check. */
1239 return 0;
1242 case AND:
1243 if (GET_CODE (XEXP (x, 0)) == REG && GET_CODE (XEXP (x, 1)) == CONST_INT)
1244 return REG_BASE_VALUE (XEXP (x, 0));
1245 return 0;
1247 case SYMBOL_REF:
1248 case LABEL_REF:
1249 return x;
1251 case ADDRESSOF:
1252 return REG_BASE_VALUE (frame_pointer_rtx);
1254 default:
1255 return 0;
1259 /* Return 0 if the addresses X and Y are known to point to different
1260 objects, 1 if they might be pointers to the same object. */
1262 static int
1263 base_alias_check (x, y, x_mode, y_mode)
1264 rtx x, y;
1265 enum machine_mode x_mode, y_mode;
1267 rtx x_base = find_base_term (x);
1268 rtx y_base = find_base_term (y);
1270 /* If the address itself has no known base see if a known equivalent
1271 value has one. If either address still has no known base, nothing
1272 is known about aliasing. */
1273 if (x_base == 0)
1275 rtx x_c;
1277 if (! flag_expensive_optimizations || (x_c = canon_rtx (x)) == x)
1278 return 1;
1280 x_base = find_base_term (x_c);
1281 if (x_base == 0)
1282 return 1;
1285 if (y_base == 0)
1287 rtx y_c;
1288 if (! flag_expensive_optimizations || (y_c = canon_rtx (y)) == y)
1289 return 1;
1291 y_base = find_base_term (y_c);
1292 if (y_base == 0)
1293 return 1;
1296 /* If the base addresses are equal nothing is known about aliasing. */
1297 if (rtx_equal_p (x_base, y_base))
1298 return 1;
1300 /* The base addresses of the read and write are different expressions.
1301 If they are both symbols and they are not accessed via AND, there is
1302 no conflict. We can bring knowledge of object alignment into play
1303 here. For example, on alpha, "char a, b;" can alias one another,
1304 though "char a; long b;" cannot. */
1305 if (GET_CODE (x_base) != ADDRESS && GET_CODE (y_base) != ADDRESS)
1307 if (GET_CODE (x) == AND && GET_CODE (y) == AND)
1308 return 1;
1309 if (GET_CODE (x) == AND
1310 && (GET_CODE (XEXP (x, 1)) != CONST_INT
1311 || GET_MODE_UNIT_SIZE (y_mode) < -INTVAL (XEXP (x, 1))))
1312 return 1;
1313 if (GET_CODE (y) == AND
1314 && (GET_CODE (XEXP (y, 1)) != CONST_INT
1315 || GET_MODE_UNIT_SIZE (x_mode) < -INTVAL (XEXP (y, 1))))
1316 return 1;
1317 /* Differing symbols never alias. */
1318 return 0;
1321 /* If one address is a stack reference there can be no alias:
1322 stack references using different base registers do not alias,
1323 a stack reference can not alias a parameter, and a stack reference
1324 can not alias a global. */
1325 if ((GET_CODE (x_base) == ADDRESS && GET_MODE (x_base) == Pmode)
1326 || (GET_CODE (y_base) == ADDRESS && GET_MODE (y_base) == Pmode))
1327 return 0;
1329 if (! flag_argument_noalias)
1330 return 1;
1332 if (flag_argument_noalias > 1)
1333 return 0;
1335 /* Weak noalias assertion (arguments are distinct, but may match globals). */
1336 return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode);
1339 /* Convert the address X into something we can use. This is done by returning
1340 it unchanged unless it is a value; in the latter case we call cselib to get
1341 a more useful rtx. */
1343 static rtx
1344 get_addr (x)
1345 rtx x;
1347 cselib_val *v;
1348 struct elt_loc_list *l;
1350 if (GET_CODE (x) != VALUE)
1351 return x;
1352 v = CSELIB_VAL_PTR (x);
1353 for (l = v->locs; l; l = l->next)
1354 if (CONSTANT_P (l->loc))
1355 return l->loc;
1356 for (l = v->locs; l; l = l->next)
1357 if (GET_CODE (l->loc) != REG && GET_CODE (l->loc) != MEM)
1358 return l->loc;
1359 if (v->locs)
1360 return v->locs->loc;
1361 return x;
1364 /* Return the address of the (N_REFS + 1)th memory reference to ADDR
1365 where SIZE is the size in bytes of the memory reference. If ADDR
1366 is not modified by the memory reference then ADDR is returned. */
1369 addr_side_effect_eval (addr, size, n_refs)
1370 rtx addr;
1371 int size;
1372 int n_refs;
1374 int offset = 0;
1376 switch (GET_CODE (addr))
1378 case PRE_INC:
1379 offset = (n_refs + 1) * size;
1380 break;
1381 case PRE_DEC:
1382 offset = -(n_refs + 1) * size;
1383 break;
1384 case POST_INC:
1385 offset = n_refs * size;
1386 break;
1387 case POST_DEC:
1388 offset = -n_refs * size;
1389 break;
1391 default:
1392 return addr;
1395 if (offset)
1396 addr = gen_rtx_PLUS (GET_MODE (addr), XEXP (addr, 0), GEN_INT (offset));
1397 else
1398 addr = XEXP (addr, 0);
1400 return addr;
1403 /* Return nonzero if X and Y (memory addresses) could reference the
1404 same location in memory. C is an offset accumulator. When
1405 C is nonzero, we are testing aliases between X and Y + C.
1406 XSIZE is the size in bytes of the X reference,
1407 similarly YSIZE is the size in bytes for Y.
1409 If XSIZE or YSIZE is zero, we do not know the amount of memory being
1410 referenced (the reference was BLKmode), so make the most pessimistic
1411 assumptions.
1413 If XSIZE or YSIZE is negative, we may access memory outside the object
1414 being referenced as a side effect. This can happen when using AND to
1415 align memory references, as is done on the Alpha.
1417 Nice to notice that varying addresses cannot conflict with fp if no
1418 local variables had their addresses taken, but that's too hard now. */
1420 static int
1421 memrefs_conflict_p (xsize, x, ysize, y, c)
1422 register rtx x, y;
1423 int xsize, ysize;
1424 HOST_WIDE_INT c;
1426 if (GET_CODE (x) == VALUE)
1427 x = get_addr (x);
1428 if (GET_CODE (y) == VALUE)
1429 y = get_addr (y);
1430 if (GET_CODE (x) == HIGH)
1431 x = XEXP (x, 0);
1432 else if (GET_CODE (x) == LO_SUM)
1433 x = XEXP (x, 1);
1434 else
1435 x = canon_rtx (addr_side_effect_eval (x, xsize, 0));
1436 if (GET_CODE (y) == HIGH)
1437 y = XEXP (y, 0);
1438 else if (GET_CODE (y) == LO_SUM)
1439 y = XEXP (y, 1);
1440 else
1441 y = canon_rtx (addr_side_effect_eval (y, ysize, 0));
1443 if (rtx_equal_for_memref_p (x, y))
1445 if (xsize <= 0 || ysize <= 0)
1446 return 1;
1447 if (c >= 0 && xsize > c)
1448 return 1;
1449 if (c < 0 && ysize+c > 0)
1450 return 1;
1451 return 0;
1454 /* This code used to check for conflicts involving stack references and
1455 globals but the base address alias code now handles these cases. */
1457 if (GET_CODE (x) == PLUS)
1459 /* The fact that X is canonicalized means that this
1460 PLUS rtx is canonicalized. */
1461 rtx x0 = XEXP (x, 0);
1462 rtx x1 = XEXP (x, 1);
1464 if (GET_CODE (y) == PLUS)
1466 /* The fact that Y is canonicalized means that this
1467 PLUS rtx is canonicalized. */
1468 rtx y0 = XEXP (y, 0);
1469 rtx y1 = XEXP (y, 1);
1471 if (rtx_equal_for_memref_p (x1, y1))
1472 return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1473 if (rtx_equal_for_memref_p (x0, y0))
1474 return memrefs_conflict_p (xsize, x1, ysize, y1, c);
1475 if (GET_CODE (x1) == CONST_INT)
1477 if (GET_CODE (y1) == CONST_INT)
1478 return memrefs_conflict_p (xsize, x0, ysize, y0,
1479 c - INTVAL (x1) + INTVAL (y1));
1480 else
1481 return memrefs_conflict_p (xsize, x0, ysize, y,
1482 c - INTVAL (x1));
1484 else if (GET_CODE (y1) == CONST_INT)
1485 return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1487 return 1;
1489 else if (GET_CODE (x1) == CONST_INT)
1490 return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
1492 else if (GET_CODE (y) == PLUS)
1494 /* The fact that Y is canonicalized means that this
1495 PLUS rtx is canonicalized. */
1496 rtx y0 = XEXP (y, 0);
1497 rtx y1 = XEXP (y, 1);
1499 if (GET_CODE (y1) == CONST_INT)
1500 return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1501 else
1502 return 1;
1505 if (GET_CODE (x) == GET_CODE (y))
1506 switch (GET_CODE (x))
1508 case MULT:
1510 /* Handle cases where we expect the second operands to be the
1511 same, and check only whether the first operand would conflict
1512 or not. */
1513 rtx x0, y0;
1514 rtx x1 = canon_rtx (XEXP (x, 1));
1515 rtx y1 = canon_rtx (XEXP (y, 1));
1516 if (! rtx_equal_for_memref_p (x1, y1))
1517 return 1;
1518 x0 = canon_rtx (XEXP (x, 0));
1519 y0 = canon_rtx (XEXP (y, 0));
1520 if (rtx_equal_for_memref_p (x0, y0))
1521 return (xsize == 0 || ysize == 0
1522 || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1524 /* Can't properly adjust our sizes. */
1525 if (GET_CODE (x1) != CONST_INT)
1526 return 1;
1527 xsize /= INTVAL (x1);
1528 ysize /= INTVAL (x1);
1529 c /= INTVAL (x1);
1530 return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1533 case REG:
1534 /* Are these registers known not to be equal? */
1535 if (alias_invariant)
1537 unsigned int r_x = REGNO (x), r_y = REGNO (y);
1538 rtx i_x, i_y; /* invariant relationships of X and Y */
1540 i_x = r_x >= reg_base_value_size ? 0 : alias_invariant[r_x];
1541 i_y = r_y >= reg_base_value_size ? 0 : alias_invariant[r_y];
1543 if (i_x == 0 && i_y == 0)
1544 break;
1546 if (! memrefs_conflict_p (xsize, i_x ? i_x : x,
1547 ysize, i_y ? i_y : y, c))
1548 return 0;
1550 break;
1552 default:
1553 break;
1556 /* Treat an access through an AND (e.g. a subword access on an Alpha)
1557 as an access with indeterminate size. Assume that references
1558 besides AND are aligned, so if the size of the other reference is
1559 at least as large as the alignment, assume no other overlap. */
1560 if (GET_CODE (x) == AND && GET_CODE (XEXP (x, 1)) == CONST_INT)
1562 if (GET_CODE (y) == AND || ysize < -INTVAL (XEXP (x, 1)))
1563 xsize = -1;
1564 return memrefs_conflict_p (xsize, XEXP (x, 0), ysize, y, c);
1566 if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT)
1568 /* ??? If we are indexing far enough into the array/structure, we
1569 may yet be able to determine that we can not overlap. But we
1570 also need to that we are far enough from the end not to overlap
1571 a following reference, so we do nothing with that for now. */
1572 if (GET_CODE (x) == AND || xsize < -INTVAL (XEXP (y, 1)))
1573 ysize = -1;
1574 return memrefs_conflict_p (xsize, x, ysize, XEXP (y, 0), c);
1577 if (GET_CODE (x) == ADDRESSOF)
1579 if (y == frame_pointer_rtx
1580 || GET_CODE (y) == ADDRESSOF)
1581 return xsize <= 0 || ysize <= 0;
1583 if (GET_CODE (y) == ADDRESSOF)
1585 if (x == frame_pointer_rtx)
1586 return xsize <= 0 || ysize <= 0;
1589 if (CONSTANT_P (x))
1591 if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
1593 c += (INTVAL (y) - INTVAL (x));
1594 return (xsize <= 0 || ysize <= 0
1595 || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1598 if (GET_CODE (x) == CONST)
1600 if (GET_CODE (y) == CONST)
1601 return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1602 ysize, canon_rtx (XEXP (y, 0)), c);
1603 else
1604 return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1605 ysize, y, c);
1607 if (GET_CODE (y) == CONST)
1608 return memrefs_conflict_p (xsize, x, ysize,
1609 canon_rtx (XEXP (y, 0)), c);
1611 if (CONSTANT_P (y))
1612 return (xsize <= 0 || ysize <= 0
1613 || (rtx_equal_for_memref_p (x, y)
1614 && ((c >= 0 && xsize > c) || (c < 0 && ysize+c > 0))));
1616 return 1;
1618 return 1;
1621 /* Functions to compute memory dependencies.
1623 Since we process the insns in execution order, we can build tables
1624 to keep track of what registers are fixed (and not aliased), what registers
1625 are varying in known ways, and what registers are varying in unknown
1626 ways.
1628 If both memory references are volatile, then there must always be a
1629 dependence between the two references, since their order can not be
1630 changed. A volatile and non-volatile reference can be interchanged
1631 though.
1633 A MEM_IN_STRUCT reference at a non-AND varying address can never
1634 conflict with a non-MEM_IN_STRUCT reference at a fixed address. We
1635 also must allow AND addresses, because they may generate accesses
1636 outside the object being referenced. This is used to generate
1637 aligned addresses from unaligned addresses, for instance, the alpha
1638 storeqi_unaligned pattern. */
1640 /* Read dependence: X is read after read in MEM takes place. There can
1641 only be a dependence here if both reads are volatile. */
1644 read_dependence (mem, x)
1645 rtx mem;
1646 rtx x;
1648 return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
1651 /* Returns MEM1 if and only if MEM1 is a scalar at a fixed address and
1652 MEM2 is a reference to a structure at a varying address, or returns
1653 MEM2 if vice versa. Otherwise, returns NULL_RTX. If a non-NULL
1654 value is returned MEM1 and MEM2 can never alias. VARIES_P is used
1655 to decide whether or not an address may vary; it should return
1656 nonzero whenever variation is possible.
1657 MEM1_ADDR and MEM2_ADDR are the addresses of MEM1 and MEM2. */
1659 static rtx
1660 fixed_scalar_and_varying_struct_p (mem1, mem2, mem1_addr, mem2_addr, varies_p)
1661 rtx mem1, mem2;
1662 rtx mem1_addr, mem2_addr;
1663 int (*varies_p) PARAMS ((rtx, int));
1665 if (! flag_strict_aliasing)
1666 return NULL_RTX;
1668 if (MEM_SCALAR_P (mem1) && MEM_IN_STRUCT_P (mem2)
1669 && !varies_p (mem1_addr, 1) && varies_p (mem2_addr, 1))
1670 /* MEM1 is a scalar at a fixed address; MEM2 is a struct at a
1671 varying address. */
1672 return mem1;
1674 if (MEM_IN_STRUCT_P (mem1) && MEM_SCALAR_P (mem2)
1675 && varies_p (mem1_addr, 1) && !varies_p (mem2_addr, 1))
1676 /* MEM2 is a scalar at a fixed address; MEM1 is a struct at a
1677 varying address. */
1678 return mem2;
1680 return NULL_RTX;
1683 /* Returns nonzero if something about the mode or address format MEM1
1684 indicates that it might well alias *anything*. */
1686 static int
1687 aliases_everything_p (mem)
1688 rtx mem;
1690 if (GET_CODE (XEXP (mem, 0)) == AND)
1691 /* If the address is an AND, its very hard to know at what it is
1692 actually pointing. */
1693 return 1;
1695 return 0;
1698 /* True dependence: X is read after store in MEM takes place. */
1701 true_dependence (mem, mem_mode, x, varies)
1702 rtx mem;
1703 enum machine_mode mem_mode;
1704 rtx x;
1705 int (*varies) PARAMS ((rtx, int));
1707 register rtx x_addr, mem_addr;
1708 rtx base;
1710 if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
1711 return 1;
1713 if (DIFFERENT_ALIAS_SETS_P (x, mem))
1714 return 0;
1716 /* Unchanging memory can't conflict with non-unchanging memory.
1717 A non-unchanging read can conflict with a non-unchanging write.
1718 An unchanging read can conflict with an unchanging write since
1719 there may be a single store to this address to initialize it.
1720 Note that an unchanging store can conflict with a non-unchanging read
1721 since we have to make conservative assumptions when we have a
1722 record with readonly fields and we are copying the whole thing.
1723 Just fall through to the code below to resolve potential conflicts.
1724 This won't handle all cases optimally, but the possible performance
1725 loss should be negligible. */
1726 if (RTX_UNCHANGING_P (x) && ! RTX_UNCHANGING_P (mem))
1727 return 0;
1729 if (mem_mode == VOIDmode)
1730 mem_mode = GET_MODE (mem);
1732 x_addr = get_addr (XEXP (x, 0));
1733 mem_addr = get_addr (XEXP (mem, 0));
1735 base = find_base_term (x_addr);
1736 if (base && (GET_CODE (base) == LABEL_REF
1737 || (GET_CODE (base) == SYMBOL_REF
1738 && CONSTANT_POOL_ADDRESS_P (base))))
1739 return 0;
1741 if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
1742 return 0;
1744 x_addr = canon_rtx (x_addr);
1745 mem_addr = canon_rtx (mem_addr);
1747 if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
1748 SIZE_FOR_MODE (x), x_addr, 0))
1749 return 0;
1751 if (aliases_everything_p (x))
1752 return 1;
1754 /* We cannot use aliases_everyting_p to test MEM, since we must look
1755 at MEM_MODE, rather than GET_MODE (MEM). */
1756 if (mem_mode == QImode || GET_CODE (mem_addr) == AND)
1757 return 1;
1759 /* In true_dependence we also allow BLKmode to alias anything. Why
1760 don't we do this in anti_dependence and output_dependence? */
1761 if (mem_mode == BLKmode || GET_MODE (x) == BLKmode)
1762 return 1;
1764 return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
1765 varies);
1768 /* Returns non-zero if a write to X might alias a previous read from
1769 (or, if WRITEP is non-zero, a write to) MEM. */
1771 static int
1772 write_dependence_p (mem, x, writep)
1773 rtx mem;
1774 rtx x;
1775 int writep;
1777 rtx x_addr, mem_addr;
1778 rtx fixed_scalar;
1779 rtx base;
1781 if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
1782 return 1;
1784 if (DIFFERENT_ALIAS_SETS_P (x, mem))
1785 return 0;
1787 /* Unchanging memory can't conflict with non-unchanging memory. */
1788 if (RTX_UNCHANGING_P (x) != RTX_UNCHANGING_P (mem))
1789 return 0;
1791 /* If MEM is an unchanging read, then it can't possibly conflict with
1792 the store to X, because there is at most one store to MEM, and it must
1793 have occurred somewhere before MEM. */
1794 if (! writep && RTX_UNCHANGING_P (mem))
1795 return 0;
1797 x_addr = get_addr (XEXP (x, 0));
1798 mem_addr = get_addr (XEXP (mem, 0));
1800 if (! writep)
1802 base = find_base_term (mem_addr);
1803 if (base && (GET_CODE (base) == LABEL_REF
1804 || (GET_CODE (base) == SYMBOL_REF
1805 && CONSTANT_POOL_ADDRESS_P (base))))
1806 return 0;
1809 if (! base_alias_check (x_addr, mem_addr, GET_MODE (x),
1810 GET_MODE (mem)))
1811 return 0;
1813 x_addr = canon_rtx (x_addr);
1814 mem_addr = canon_rtx (mem_addr);
1816 if (!memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
1817 SIZE_FOR_MODE (x), x_addr, 0))
1818 return 0;
1820 fixed_scalar
1821 = fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
1822 rtx_addr_varies_p);
1824 return (!(fixed_scalar == mem && !aliases_everything_p (x))
1825 && !(fixed_scalar == x && !aliases_everything_p (mem)));
1828 /* Anti dependence: X is written after read in MEM takes place. */
1831 anti_dependence (mem, x)
1832 rtx mem;
1833 rtx x;
1835 return write_dependence_p (mem, x, /*writep=*/0);
1838 /* Output dependence: X is written after store in MEM takes place. */
1841 output_dependence (mem, x)
1842 register rtx mem;
1843 register rtx x;
1845 return write_dependence_p (mem, x, /*writep=*/1);
1848 /* Returns non-zero if X mentions something which is not
1849 local to the function and is not constant. */
1851 static int
1852 nonlocal_mentioned_p (x)
1853 rtx x;
1855 rtx base;
1856 register RTX_CODE code;
1857 int regno;
1859 code = GET_CODE (x);
1861 if (GET_RTX_CLASS (code) == 'i')
1863 /* Constant functions can be constant if they don't use
1864 scratch memory used to mark function w/o side effects. */
1865 if (code == CALL_INSN && CONST_CALL_P (x))
1867 x = CALL_INSN_FUNCTION_USAGE (x);
1868 if (x == 0)
1869 return 0;
1871 else
1872 x = PATTERN (x);
1873 code = GET_CODE (x);
1876 switch (code)
1878 case SUBREG:
1879 if (GET_CODE (SUBREG_REG (x)) == REG)
1881 /* Global registers are not local. */
1882 if (REGNO (SUBREG_REG (x)) < FIRST_PSEUDO_REGISTER
1883 && global_regs[REGNO (SUBREG_REG (x)) + SUBREG_WORD (x)])
1884 return 1;
1885 return 0;
1887 break;
1889 case REG:
1890 regno = REGNO (x);
1891 /* Global registers are not local. */
1892 if (regno < FIRST_PSEUDO_REGISTER && global_regs[regno])
1893 return 1;
1894 return 0;
1896 case SCRATCH:
1897 case PC:
1898 case CC0:
1899 case CONST_INT:
1900 case CONST_DOUBLE:
1901 case CONST:
1902 case LABEL_REF:
1903 return 0;
1905 case SYMBOL_REF:
1906 /* Constants in the function's constants pool are constant. */
1907 if (CONSTANT_POOL_ADDRESS_P (x))
1908 return 0;
1909 return 1;
1911 case CALL:
1912 /* Non-constant calls and recursion are not local. */
1913 return 1;
1915 case MEM:
1916 /* Be overly conservative and consider any volatile memory
1917 reference as not local. */
1918 if (MEM_VOLATILE_P (x))
1919 return 1;
1920 base = find_base_term (XEXP (x, 0));
1921 if (base)
1923 /* A Pmode ADDRESS could be a reference via the structure value
1924 address or static chain. Such memory references are nonlocal.
1926 Thus, we have to examine the contents of the ADDRESS to find
1927 out if this is a local reference or not. */
1928 if (GET_CODE (base) == ADDRESS
1929 && GET_MODE (base) == Pmode
1930 && (XEXP (base, 0) == stack_pointer_rtx
1931 || XEXP (base, 0) == arg_pointer_rtx
1932 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
1933 || XEXP (base, 0) == hard_frame_pointer_rtx
1934 #endif
1935 || XEXP (base, 0) == frame_pointer_rtx))
1936 return 0;
1937 /* Constants in the function's constant pool are constant. */
1938 if (GET_CODE (base) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (base))
1939 return 0;
1941 return 1;
1943 case UNSPEC_VOLATILE:
1944 case ASM_INPUT:
1945 return 1;
1947 case ASM_OPERANDS:
1948 if (MEM_VOLATILE_P (x))
1949 return 1;
1951 /* FALLTHROUGH */
1953 default:
1954 break;
1957 /* Recursively scan the operands of this expression. */
1960 register const char *fmt = GET_RTX_FORMAT (code);
1961 register int i;
1963 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1965 if (fmt[i] == 'e' && XEXP (x, i))
1967 if (nonlocal_mentioned_p (XEXP (x, i)))
1968 return 1;
1970 else if (fmt[i] == 'E')
1972 register int j;
1973 for (j = 0; j < XVECLEN (x, i); j++)
1974 if (nonlocal_mentioned_p (XVECEXP (x, i, j)))
1975 return 1;
1980 return 0;
1983 /* Return non-zero if a loop (natural or otherwise) is present.
1984 Inspired by Depth_First_Search_PP described in:
1986 Advanced Compiler Design and Implementation
1987 Steven Muchnick
1988 Morgan Kaufmann, 1997
1990 and heavily borrowed from flow_depth_first_order_compute. */
1992 static int
1993 loop_p ()
1995 edge *stack;
1996 int *pre;
1997 int *post;
1998 int sp;
1999 int prenum = 1;
2000 int postnum = 1;
2001 sbitmap visited;
2003 /* Allocate the preorder and postorder number arrays. */
2004 pre = (int *) xcalloc (n_basic_blocks, sizeof (int));
2005 post = (int *) xcalloc (n_basic_blocks, sizeof (int));
2007 /* Allocate stack for back-tracking up CFG. */
2008 stack = (edge *) xmalloc ((n_basic_blocks + 1) * sizeof (edge));
2009 sp = 0;
2011 /* Allocate bitmap to track nodes that have been visited. */
2012 visited = sbitmap_alloc (n_basic_blocks);
2014 /* None of the nodes in the CFG have been visited yet. */
2015 sbitmap_zero (visited);
2017 /* Push the first edge on to the stack. */
2018 stack[sp++] = ENTRY_BLOCK_PTR->succ;
2020 while (sp)
2022 edge e;
2023 basic_block src;
2024 basic_block dest;
2026 /* Look at the edge on the top of the stack. */
2027 e = stack[sp - 1];
2028 src = e->src;
2029 dest = e->dest;
2031 /* Check if the edge destination has been visited yet. */
2032 if (dest != EXIT_BLOCK_PTR && ! TEST_BIT (visited, dest->index))
2034 /* Mark that we have visited the destination. */
2035 SET_BIT (visited, dest->index);
2037 pre[dest->index] = prenum++;
2039 if (dest->succ)
2041 /* Since the DEST node has been visited for the first
2042 time, check its successors. */
2043 stack[sp++] = dest->succ;
2045 else
2046 post[dest->index] = postnum++;
2048 else
2050 if (dest != EXIT_BLOCK_PTR
2051 && pre[src->index] >= pre[dest->index]
2052 && post[dest->index] == 0)
2053 break;
2055 if (! e->succ_next && src != ENTRY_BLOCK_PTR)
2056 post[src->index] = postnum++;
2058 if (e->succ_next)
2059 stack[sp - 1] = e->succ_next;
2060 else
2061 sp--;
2065 free (pre);
2066 free (post);
2067 free (stack);
2068 sbitmap_free (visited);
2070 return sp;
2073 /* Mark the function if it is constant. */
2075 void
2076 mark_constant_function ()
2078 rtx insn;
2079 int nonlocal_mentioned;
2081 if (TREE_PUBLIC (current_function_decl)
2082 || TREE_READONLY (current_function_decl)
2083 || DECL_IS_PURE (current_function_decl)
2084 || TREE_THIS_VOLATILE (current_function_decl)
2085 || TYPE_MODE (TREE_TYPE (current_function_decl)) == VOIDmode)
2086 return;
2088 /* A loop might not return which counts as a side effect. */
2089 if (loop_p ())
2090 return;
2092 nonlocal_mentioned = 0;
2094 init_alias_analysis ();
2096 /* Determine if this is a constant function. */
2098 for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2099 if (INSN_P (insn) && nonlocal_mentioned_p (insn))
2101 nonlocal_mentioned = 1;
2102 break;
2105 end_alias_analysis ();
2107 /* Mark the function. */
2109 if (! nonlocal_mentioned)
2110 TREE_READONLY (current_function_decl) = 1;
2114 static HARD_REG_SET argument_registers;
2116 void
2117 init_alias_once ()
2119 register int i;
2121 #ifndef OUTGOING_REGNO
2122 #define OUTGOING_REGNO(N) N
2123 #endif
2124 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2125 /* Check whether this register can hold an incoming pointer
2126 argument. FUNCTION_ARG_REGNO_P tests outgoing register
2127 numbers, so translate if necessary due to register windows. */
2128 if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i))
2129 && HARD_REGNO_MODE_OK (i, Pmode))
2130 SET_HARD_REG_BIT (argument_registers, i);
2132 alias_sets = splay_tree_new (splay_tree_compare_ints, 0, 0);
2135 /* Initialize the aliasing machinery. Initialize the REG_KNOWN_VALUE
2136 array. */
2138 void
2139 init_alias_analysis ()
2141 int maxreg = max_reg_num ();
2142 int changed, pass;
2143 register int i;
2144 register unsigned int ui;
2145 register rtx insn;
2147 reg_known_value_size = maxreg;
2149 reg_known_value
2150 = (rtx *) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (rtx))
2151 - FIRST_PSEUDO_REGISTER;
2152 reg_known_equiv_p
2153 = (char*) xcalloc ((maxreg - FIRST_PSEUDO_REGISTER), sizeof (char))
2154 - FIRST_PSEUDO_REGISTER;
2156 /* Overallocate reg_base_value to allow some growth during loop
2157 optimization. Loop unrolling can create a large number of
2158 registers. */
2159 reg_base_value_size = maxreg * 2;
2160 reg_base_value = (rtx *) xcalloc (reg_base_value_size, sizeof (rtx));
2161 ggc_add_rtx_root (reg_base_value, reg_base_value_size);
2163 new_reg_base_value = (rtx *) xmalloc (reg_base_value_size * sizeof (rtx));
2164 reg_seen = (char *) xmalloc (reg_base_value_size);
2165 if (! reload_completed && flag_unroll_loops)
2167 /* ??? Why are we realloc'ing if we're just going to zero it? */
2168 alias_invariant = (rtx *)xrealloc (alias_invariant,
2169 reg_base_value_size * sizeof (rtx));
2170 memset ((char *)alias_invariant, 0, reg_base_value_size * sizeof (rtx));
2173 /* The basic idea is that each pass through this loop will use the
2174 "constant" information from the previous pass to propagate alias
2175 information through another level of assignments.
2177 This could get expensive if the assignment chains are long. Maybe
2178 we should throttle the number of iterations, possibly based on
2179 the optimization level or flag_expensive_optimizations.
2181 We could propagate more information in the first pass by making use
2182 of REG_N_SETS to determine immediately that the alias information
2183 for a pseudo is "constant".
2185 A program with an uninitialized variable can cause an infinite loop
2186 here. Instead of doing a full dataflow analysis to detect such problems
2187 we just cap the number of iterations for the loop.
2189 The state of the arrays for the set chain in question does not matter
2190 since the program has undefined behavior. */
2192 pass = 0;
2195 /* Assume nothing will change this iteration of the loop. */
2196 changed = 0;
2198 /* We want to assign the same IDs each iteration of this loop, so
2199 start counting from zero each iteration of the loop. */
2200 unique_id = 0;
2202 /* We're at the start of the funtion each iteration through the
2203 loop, so we're copying arguments. */
2204 copying_arguments = 1;
2206 /* Wipe the potential alias information clean for this pass. */
2207 memset ((char *) new_reg_base_value, 0, reg_base_value_size * sizeof (rtx));
2209 /* Wipe the reg_seen array clean. */
2210 memset ((char *) reg_seen, 0, reg_base_value_size);
2212 /* Mark all hard registers which may contain an address.
2213 The stack, frame and argument pointers may contain an address.
2214 An argument register which can hold a Pmode value may contain
2215 an address even if it is not in BASE_REGS.
2217 The address expression is VOIDmode for an argument and
2218 Pmode for other registers. */
2220 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2221 if (TEST_HARD_REG_BIT (argument_registers, i))
2222 new_reg_base_value[i] = gen_rtx_ADDRESS (VOIDmode,
2223 gen_rtx_REG (Pmode, i));
2225 new_reg_base_value[STACK_POINTER_REGNUM]
2226 = gen_rtx_ADDRESS (Pmode, stack_pointer_rtx);
2227 new_reg_base_value[ARG_POINTER_REGNUM]
2228 = gen_rtx_ADDRESS (Pmode, arg_pointer_rtx);
2229 new_reg_base_value[FRAME_POINTER_REGNUM]
2230 = gen_rtx_ADDRESS (Pmode, frame_pointer_rtx);
2231 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2232 new_reg_base_value[HARD_FRAME_POINTER_REGNUM]
2233 = gen_rtx_ADDRESS (Pmode, hard_frame_pointer_rtx);
2234 #endif
2236 /* Walk the insns adding values to the new_reg_base_value array. */
2237 for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2239 if (INSN_P (insn))
2241 rtx note, set;
2243 #if defined (HAVE_prologue) || defined (HAVE_epilogue)
2244 /* The prologue/epilouge insns are not threaded onto the
2245 insn chain until after reload has completed. Thus,
2246 there is no sense wasting time checking if INSN is in
2247 the prologue/epilogue until after reload has completed. */
2248 if (reload_completed
2249 && prologue_epilogue_contains (insn))
2250 continue;
2251 #endif
2253 /* If this insn has a noalias note, process it, Otherwise,
2254 scan for sets. A simple set will have no side effects
2255 which could change the base value of any other register. */
2257 if (GET_CODE (PATTERN (insn)) == SET
2258 && REG_NOTES (insn) != 0
2259 && find_reg_note (insn, REG_NOALIAS, NULL_RTX))
2260 record_set (SET_DEST (PATTERN (insn)), NULL_RTX, NULL);
2261 else
2262 note_stores (PATTERN (insn), record_set, NULL);
2264 set = single_set (insn);
2266 if (set != 0
2267 && GET_CODE (SET_DEST (set)) == REG
2268 && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER)
2270 unsigned int regno = REGNO (SET_DEST (set));
2271 rtx src = SET_SRC (set);
2273 if (REG_NOTES (insn) != 0
2274 && (((note = find_reg_note (insn, REG_EQUAL, 0)) != 0
2275 && REG_N_SETS (regno) == 1)
2276 || (note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
2277 && GET_CODE (XEXP (note, 0)) != EXPR_LIST
2278 && ! rtx_varies_p (XEXP (note, 0), 1)
2279 && ! reg_overlap_mentioned_p (SET_DEST (set), XEXP (note, 0)))
2281 reg_known_value[regno] = XEXP (note, 0);
2282 reg_known_equiv_p[regno] = REG_NOTE_KIND (note) == REG_EQUIV;
2284 else if (REG_N_SETS (regno) == 1
2285 && GET_CODE (src) == PLUS
2286 && GET_CODE (XEXP (src, 0)) == REG
2287 && REGNO (XEXP (src, 0)) >= FIRST_PSEUDO_REGISTER
2288 && (reg_known_value[REGNO (XEXP (src, 0))])
2289 && GET_CODE (XEXP (src, 1)) == CONST_INT)
2291 rtx op0 = XEXP (src, 0);
2292 op0 = reg_known_value[REGNO (op0)];
2293 reg_known_value[regno]
2294 = plus_constant_for_output (op0,
2295 INTVAL (XEXP (src, 1)));
2296 reg_known_equiv_p[regno] = 0;
2298 else if (REG_N_SETS (regno) == 1
2299 && ! rtx_varies_p (src, 1))
2301 reg_known_value[regno] = src;
2302 reg_known_equiv_p[regno] = 0;
2306 else if (GET_CODE (insn) == NOTE
2307 && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
2308 copying_arguments = 0;
2311 /* Now propagate values from new_reg_base_value to reg_base_value. */
2312 for (ui = 0; ui < reg_base_value_size; ui++)
2314 if (new_reg_base_value[ui]
2315 && new_reg_base_value[ui] != reg_base_value[ui]
2316 && ! rtx_equal_p (new_reg_base_value[ui], reg_base_value[ui]))
2318 reg_base_value[ui] = new_reg_base_value[ui];
2319 changed = 1;
2323 while (changed && ++pass < MAX_ALIAS_LOOP_PASSES);
2325 /* Fill in the remaining entries. */
2326 for (i = FIRST_PSEUDO_REGISTER; i < maxreg; i++)
2327 if (reg_known_value[i] == 0)
2328 reg_known_value[i] = regno_reg_rtx[i];
2330 /* Simplify the reg_base_value array so that no register refers to
2331 another register, except to special registers indirectly through
2332 ADDRESS expressions.
2334 In theory this loop can take as long as O(registers^2), but unless
2335 there are very long dependency chains it will run in close to linear
2336 time.
2338 This loop may not be needed any longer now that the main loop does
2339 a better job at propagating alias information. */
2340 pass = 0;
2343 changed = 0;
2344 pass++;
2345 for (ui = 0; ui < reg_base_value_size; ui++)
2347 rtx base = reg_base_value[ui];
2348 if (base && GET_CODE (base) == REG)
2350 unsigned int base_regno = REGNO (base);
2351 if (base_regno == ui) /* register set from itself */
2352 reg_base_value[ui] = 0;
2353 else
2354 reg_base_value[ui] = reg_base_value[base_regno];
2355 changed = 1;
2359 while (changed && pass < MAX_ALIAS_LOOP_PASSES);
2361 /* Clean up. */
2362 free (new_reg_base_value);
2363 new_reg_base_value = 0;
2364 free (reg_seen);
2365 reg_seen = 0;
2368 void
2369 end_alias_analysis ()
2371 free (reg_known_value + FIRST_PSEUDO_REGISTER);
2372 reg_known_value = 0;
2373 reg_known_value_size = 0;
2374 free (reg_known_equiv_p + FIRST_PSEUDO_REGISTER);
2375 reg_known_equiv_p = 0;
2376 if (reg_base_value)
2378 ggc_del_root (reg_base_value);
2379 free (reg_base_value);
2380 reg_base_value = 0;
2382 reg_base_value_size = 0;
2383 if (alias_invariant)
2385 free (alias_invariant);
2386 alias_invariant = 0;