1 /* Alias analysis for GNU C
2 Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
3 Free Software Foundation, Inc.
4 Contributed by John Carr (jfc@mit.edu).
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to the Free
20 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
25 #include "coretypes.h"
34 #include "hard-reg-set.h"
35 #include "basic-block.h"
40 #include "splay-tree.h"
42 #include "langhooks.h"
47 #include "tree-pass.h"
48 #include "ipa-type-escape.h"
50 /* The aliasing API provided here solves related but different problems:
52 Say there exists (in c)
66 Consider the four questions:
68 Can a store to x1 interfere with px2->y1?
69 Can a store to x1 interfere with px2->z2?
71 Can a store to x1 change the value pointed to by with py?
72 Can a store to x1 change the value pointed to by with pz?
74 The answer to these questions can be yes, yes, yes, and maybe.
76 The first two questions can be answered with a simple examination
77 of the type system. If structure X contains a field of type Y then
78 a store thru a pointer to an X can overwrite any field that is
79 contained (recursively) in an X (unless we know that px1 != px2).
81 The last two of the questions can be solved in the same way as the
82 first two questions but this is too conservative. The observation
83 is that in some cases analysis we can know if which (if any) fields
84 are addressed and if those addresses are used in bad ways. This
85 analysis may be language specific. In C, arbitrary operations may
86 be applied to pointers. However, there is some indication that
87 this may be too conservative for some C++ types.
89 The pass ipa-type-escape does this analysis for the types whose
90 instances do not escape across the compilation boundary.
92 Historically in GCC, these two problems were combined and a single
93 data structure was used to represent the solution to these
94 problems. We now have two similar but different data structures,
95 The data structure to solve the last two question is similar to the
96 first, but does not contain have the fields in it whose address are
97 never taken. For types that do escape the compilation unit, the
98 data structures will have identical information.
101 /* The alias sets assigned to MEMs assist the back-end in determining
102 which MEMs can alias which other MEMs. In general, two MEMs in
103 different alias sets cannot alias each other, with one important
104 exception. Consider something like:
106 struct S { int i; double d; };
108 a store to an `S' can alias something of either type `int' or type
109 `double'. (However, a store to an `int' cannot alias a `double'
110 and vice versa.) We indicate this via a tree structure that looks
118 (The arrows are directed and point downwards.)
119 In this situation we say the alias set for `struct S' is the
120 `superset' and that those for `int' and `double' are `subsets'.
122 To see whether two alias sets can point to the same memory, we must
123 see if either alias set is a subset of the other. We need not trace
124 past immediate descendants, however, since we propagate all
125 grandchildren up one level.
127 Alias set zero is implicitly a superset of all other alias sets.
128 However, this is no actual entry for alias set zero. It is an
129 error to attempt to explicitly construct a subset of zero. */
131 struct alias_set_entry
GTY(())
133 /* The alias set number, as stored in MEM_ALIAS_SET. */
134 HOST_WIDE_INT alias_set
;
136 /* The children of the alias set. These are not just the immediate
137 children, but, in fact, all descendants. So, if we have:
139 struct T { struct S s; float f; }
141 continuing our example above, the children here will be all of
142 `int', `double', `float', and `struct S'. */
143 splay_tree
GTY((param1_is (int), param2_is (int))) children
;
145 /* Nonzero if would have a child of zero: this effectively makes this
146 alias set the same as alias set zero. */
149 typedef struct alias_set_entry
*alias_set_entry
;
151 static int rtx_equal_for_memref_p (rtx
, rtx
);
152 static rtx
find_symbolic_term (rtx
);
153 static int memrefs_conflict_p (int, rtx
, int, rtx
, HOST_WIDE_INT
);
154 static void record_set (rtx
, rtx
, void *);
155 static int base_alias_check (rtx
, rtx
, enum machine_mode
,
157 static rtx
find_base_value (rtx
);
158 static int mems_in_disjoint_alias_sets_p (rtx
, rtx
);
159 static int insert_subset_children (splay_tree_node
, void*);
160 static tree
find_base_decl (tree
);
161 static alias_set_entry
get_alias_set_entry (HOST_WIDE_INT
);
162 static rtx
fixed_scalar_and_varying_struct_p (rtx
, rtx
, rtx
, rtx
,
164 static int aliases_everything_p (rtx
);
165 static bool nonoverlapping_component_refs_p (tree
, tree
);
166 static tree
decl_for_component_ref (tree
);
167 static rtx
adjust_offset_for_component_ref (tree
, rtx
);
168 static int nonoverlapping_memrefs_p (rtx
, rtx
);
169 static int write_dependence_p (rtx
, rtx
, int);
171 static void memory_modified_1 (rtx
, rtx
, void *);
172 static void record_alias_subset (HOST_WIDE_INT
, HOST_WIDE_INT
);
174 /* Set up all info needed to perform alias analysis on memory references. */
176 /* Returns the size in bytes of the mode of X. */
177 #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X)))
179 /* Returns nonzero if MEM1 and MEM2 do not alias because they are in
180 different alias sets. We ignore alias sets in functions making use
181 of variable arguments because the va_arg macros on some systems are
183 #define DIFFERENT_ALIAS_SETS_P(MEM1, MEM2) \
184 mems_in_disjoint_alias_sets_p (MEM1, MEM2)
186 /* Cap the number of passes we make over the insns propagating alias
187 information through set chains. 10 is a completely arbitrary choice. */
188 #define MAX_ALIAS_LOOP_PASSES 10
190 /* reg_base_value[N] gives an address to which register N is related.
191 If all sets after the first add or subtract to the current value
192 or otherwise modify it so it does not point to a different top level
193 object, reg_base_value[N] is equal to the address part of the source
196 A base address can be an ADDRESS, SYMBOL_REF, or LABEL_REF. ADDRESS
197 expressions represent certain special values: function arguments and
198 the stack, frame, and argument pointers.
200 The contents of an ADDRESS is not normally used, the mode of the
201 ADDRESS determines whether the ADDRESS is a function argument or some
202 other special value. Pointer equality, not rtx_equal_p, determines whether
203 two ADDRESS expressions refer to the same base address.
205 The only use of the contents of an ADDRESS is for determining if the
206 current function performs nonlocal memory memory references for the
207 purposes of marking the function as a constant function. */
209 static GTY(()) varray_type reg_base_value
;
210 static rtx
*new_reg_base_value
;
212 /* We preserve the copy of old array around to avoid amount of garbage
213 produced. About 8% of garbage produced were attributed to this
215 static GTY((deletable
)) varray_type old_reg_base_value
;
217 /* Static hunks of RTL used by the aliasing code; these are initialized
218 once per function to avoid unnecessary RTL allocations. */
219 static GTY (()) rtx static_reg_base_value
[FIRST_PSEUDO_REGISTER
];
221 #define REG_BASE_VALUE(X) \
222 (reg_base_value && REGNO (X) < VARRAY_SIZE (reg_base_value) \
223 ? VARRAY_RTX (reg_base_value, REGNO (X)) : 0)
225 /* Vector of known invariant relationships between registers. Set in
226 loop unrolling. Indexed by register number, if nonzero the value
227 is an expression describing this register in terms of another.
229 The length of this array is REG_BASE_VALUE_SIZE.
231 Because this array contains only pseudo registers it has no effect
233 static GTY((length("alias_invariant_size"))) rtx
*alias_invariant
;
234 static GTY(()) unsigned int alias_invariant_size
;
236 /* Vector indexed by N giving the initial (unchanging) value known for
237 pseudo-register N. This array is initialized in init_alias_analysis,
238 and does not change until end_alias_analysis is called. */
239 static GTY((length("reg_known_value_size"))) rtx
*reg_known_value
;
241 /* Indicates number of valid entries in reg_known_value. */
242 static GTY(()) unsigned int reg_known_value_size
;
244 /* Vector recording for each reg_known_value whether it is due to a
245 REG_EQUIV note. Future passes (viz., reload) may replace the
246 pseudo with the equivalent expression and so we account for the
247 dependences that would be introduced if that happens.
249 The REG_EQUIV notes created in assign_parms may mention the arg
250 pointer, and there are explicit insns in the RTL that modify the
251 arg pointer. Thus we must ensure that such insns don't get
252 scheduled across each other because that would invalidate the
253 REG_EQUIV notes. One could argue that the REG_EQUIV notes are
254 wrong, but solving the problem in the scheduler will likely give
255 better code, so we do it here. */
256 static bool *reg_known_equiv_p
;
258 /* True when scanning insns from the start of the rtl to the
259 NOTE_INSN_FUNCTION_BEG note. */
260 static bool copying_arguments
;
262 /* The splay-tree used to store the various alias set entries. */
263 static GTY ((param_is (struct alias_set_entry
))) varray_type alias_sets
;
265 /* Returns a pointer to the alias set entry for ALIAS_SET, if there is
266 such an entry, or NULL otherwise. */
268 static inline alias_set_entry
269 get_alias_set_entry (HOST_WIDE_INT alias_set
)
271 return (alias_set_entry
)VARRAY_GENERIC_PTR (alias_sets
, alias_set
);
274 /* Returns nonzero if the alias sets for MEM1 and MEM2 are such that
275 the two MEMs cannot alias each other. */
278 mems_in_disjoint_alias_sets_p (rtx mem1
, rtx mem2
)
280 /* Perform a basic sanity check. Namely, that there are no alias sets
281 if we're not using strict aliasing. This helps to catch bugs
282 whereby someone uses PUT_CODE, but doesn't clear MEM_ALIAS_SET, or
283 where a MEM is allocated in some way other than by the use of
284 gen_rtx_MEM, and the MEM_ALIAS_SET is not cleared. If we begin to
285 use alias sets to indicate that spilled registers cannot alias each
286 other, we might need to remove this check. */
287 gcc_assert (flag_strict_aliasing
288 || (!MEM_ALIAS_SET (mem1
) && !MEM_ALIAS_SET (mem2
)));
290 return ! alias_sets_conflict_p (MEM_ALIAS_SET (mem1
), MEM_ALIAS_SET (mem2
));
293 /* Insert the NODE into the splay tree given by DATA. Used by
294 record_alias_subset via splay_tree_foreach. */
297 insert_subset_children (splay_tree_node node
, void *data
)
299 splay_tree_insert ((splay_tree
) data
, node
->key
, node
->value
);
304 /* Return 1 if the two specified alias sets may conflict. */
307 alias_sets_conflict_p (HOST_WIDE_INT set1
, HOST_WIDE_INT set2
)
311 /* If have no alias set information for one of the operands, we have
312 to assume it can alias anything. */
313 if (set1
== 0 || set2
== 0
314 /* If the two alias sets are the same, they may alias. */
318 /* See if the first alias set is a subset of the second. */
319 ase
= get_alias_set_entry (set1
);
321 && (ase
->has_zero_child
322 || splay_tree_lookup (ase
->children
,
323 (splay_tree_key
) set2
)))
326 /* Now do the same, but with the alias sets reversed. */
327 ase
= get_alias_set_entry (set2
);
329 && (ase
->has_zero_child
330 || splay_tree_lookup (ase
->children
,
331 (splay_tree_key
) set1
)))
334 /* The two alias sets are distinct and neither one is the
335 child of the other. Therefore, they cannot alias. */
339 /* Return 1 if the two specified alias sets might conflict, or if any subtype
340 of these alias sets might conflict. */
343 alias_sets_might_conflict_p (HOST_WIDE_INT set1
, HOST_WIDE_INT set2
)
345 if (set1
== 0 || set2
== 0 || set1
== set2
)
352 /* Return 1 if any MEM object of type T1 will always conflict (using the
353 dependency routines in this file) with any MEM object of type T2.
354 This is used when allocating temporary storage. If T1 and/or T2 are
355 NULL_TREE, it means we know nothing about the storage. */
358 objects_must_conflict_p (tree t1
, tree t2
)
360 HOST_WIDE_INT set1
, set2
;
362 /* If neither has a type specified, we don't know if they'll conflict
363 because we may be using them to store objects of various types, for
364 example the argument and local variables areas of inlined functions. */
365 if (t1
== 0 && t2
== 0)
368 /* If they are the same type, they must conflict. */
370 /* Likewise if both are volatile. */
371 || (t1
!= 0 && TYPE_VOLATILE (t1
) && t2
!= 0 && TYPE_VOLATILE (t2
)))
374 set1
= t1
? get_alias_set (t1
) : 0;
375 set2
= t2
? get_alias_set (t2
) : 0;
377 /* Otherwise they conflict if they have no alias set or the same. We
378 can't simply use alias_sets_conflict_p here, because we must make
379 sure that every subtype of t1 will conflict with every subtype of
380 t2 for which a pair of subobjects of these respective subtypes
381 overlaps on the stack. */
382 return set1
== 0 || set2
== 0 || set1
== set2
;
385 /* T is an expression with pointer type. Find the DECL on which this
386 expression is based. (For example, in `a[i]' this would be `a'.)
387 If there is no such DECL, or a unique decl cannot be determined,
388 NULL_TREE is returned. */
391 find_base_decl (tree t
)
395 if (t
== 0 || t
== error_mark_node
|| ! POINTER_TYPE_P (TREE_TYPE (t
)))
398 /* If this is a declaration, return it. If T is based on a restrict
399 qualified decl, return that decl. */
402 if (TREE_CODE (t
) == VAR_DECL
&& DECL_BASED_ON_RESTRICT_P (t
))
403 t
= DECL_GET_RESTRICT_BASE (t
);
407 /* Handle general expressions. It would be nice to deal with
408 COMPONENT_REFs here. If we could tell that `a' and `b' were the
409 same, then `a->f' and `b->f' are also the same. */
410 switch (TREE_CODE_CLASS (TREE_CODE (t
)))
413 return find_base_decl (TREE_OPERAND (t
, 0));
416 /* Return 0 if found in neither or both are the same. */
417 d0
= find_base_decl (TREE_OPERAND (t
, 0));
418 d1
= find_base_decl (TREE_OPERAND (t
, 1));
433 /* Return true if all nested component references handled by
434 get_inner_reference in T are such that we should use the alias set
435 provided by the object at the heart of T.
437 This is true for non-addressable components (which don't have their
438 own alias set), as well as components of objects in alias set zero.
439 This later point is a special case wherein we wish to override the
440 alias set used by the component, but we don't have per-FIELD_DECL
441 assignable alias sets. */
444 component_uses_parent_alias_set (tree t
)
448 /* If we're at the end, it vacuously uses its own alias set. */
449 if (!handled_component_p (t
))
452 switch (TREE_CODE (t
))
455 if (DECL_NONADDRESSABLE_P (TREE_OPERAND (t
, 1)))
460 case ARRAY_RANGE_REF
:
461 if (TYPE_NONALIASED_COMPONENT (TREE_TYPE (TREE_OPERAND (t
, 0))))
470 /* Bitfields and casts are never addressable. */
474 t
= TREE_OPERAND (t
, 0);
475 if (get_alias_set (TREE_TYPE (t
)) == 0)
480 /* Return the alias set for T, which may be either a type or an
481 expression. Call language-specific routine for help, if needed. */
484 get_alias_set (tree t
)
488 /* If we're not doing any alias analysis, just assume everything
489 aliases everything else. Also return 0 if this or its type is
491 if (! flag_strict_aliasing
|| t
== error_mark_node
493 && (TREE_TYPE (t
) == 0 || TREE_TYPE (t
) == error_mark_node
)))
496 /* We can be passed either an expression or a type. This and the
497 language-specific routine may make mutually-recursive calls to each other
498 to figure out what to do. At each juncture, we see if this is a tree
499 that the language may need to handle specially. First handle things that
505 /* Remove any nops, then give the language a chance to do
506 something with this tree before we look at it. */
508 set
= lang_hooks
.get_alias_set (t
);
512 /* First see if the actual object referenced is an INDIRECT_REF from a
513 restrict-qualified pointer or a "void *". */
514 while (handled_component_p (inner
))
516 inner
= TREE_OPERAND (inner
, 0);
520 /* Check for accesses through restrict-qualified pointers. */
521 if (INDIRECT_REF_P (inner
))
523 tree decl
= find_base_decl (TREE_OPERAND (inner
, 0));
525 if (decl
&& DECL_POINTER_ALIAS_SET_KNOWN_P (decl
))
527 /* If we haven't computed the actual alias set, do it now. */
528 if (DECL_POINTER_ALIAS_SET (decl
) == -2)
530 tree pointed_to_type
= TREE_TYPE (TREE_TYPE (decl
));
532 /* No two restricted pointers can point at the same thing.
533 However, a restricted pointer can point at the same thing
534 as an unrestricted pointer, if that unrestricted pointer
535 is based on the restricted pointer. So, we make the
536 alias set for the restricted pointer a subset of the
537 alias set for the type pointed to by the type of the
539 HOST_WIDE_INT pointed_to_alias_set
540 = get_alias_set (pointed_to_type
);
542 if (pointed_to_alias_set
== 0)
543 /* It's not legal to make a subset of alias set zero. */
544 DECL_POINTER_ALIAS_SET (decl
) = 0;
545 else if (AGGREGATE_TYPE_P (pointed_to_type
))
546 /* For an aggregate, we must treat the restricted
547 pointer the same as an ordinary pointer. If we
548 were to make the type pointed to by the
549 restricted pointer a subset of the pointed-to
550 type, then we would believe that other subsets
551 of the pointed-to type (such as fields of that
552 type) do not conflict with the type pointed to
553 by the restricted pointer. */
554 DECL_POINTER_ALIAS_SET (decl
)
555 = pointed_to_alias_set
;
558 DECL_POINTER_ALIAS_SET (decl
) = new_alias_set ();
559 record_alias_subset (pointed_to_alias_set
,
560 DECL_POINTER_ALIAS_SET (decl
));
564 /* We use the alias set indicated in the declaration. */
565 return DECL_POINTER_ALIAS_SET (decl
);
568 /* If we have an INDIRECT_REF via a void pointer, we don't
569 know anything about what that might alias. Likewise if the
570 pointer is marked that way. */
571 else if (TREE_CODE (TREE_TYPE (inner
)) == VOID_TYPE
572 || (TYPE_REF_CAN_ALIAS_ALL
573 (TREE_TYPE (TREE_OPERAND (inner
, 0)))))
577 /* Otherwise, pick up the outermost object that we could have a pointer
578 to, processing conversions as above. */
579 while (component_uses_parent_alias_set (t
))
581 t
= TREE_OPERAND (t
, 0);
585 /* If we've already determined the alias set for a decl, just return
586 it. This is necessary for C++ anonymous unions, whose component
587 variables don't look like union members (boo!). */
588 if (TREE_CODE (t
) == VAR_DECL
589 && DECL_RTL_SET_P (t
) && MEM_P (DECL_RTL (t
)))
590 return MEM_ALIAS_SET (DECL_RTL (t
));
592 /* Now all we care about is the type. */
596 /* Variant qualifiers don't affect the alias set, so get the main
597 variant. If this is a type with a known alias set, return it. */
598 t
= TYPE_MAIN_VARIANT (t
);
599 if (TYPE_ALIAS_SET_KNOWN_P (t
))
600 return TYPE_ALIAS_SET (t
);
602 /* See if the language has special handling for this type. */
603 set
= lang_hooks
.get_alias_set (t
);
607 /* There are no objects of FUNCTION_TYPE, so there's no point in
608 using up an alias set for them. (There are, of course, pointers
609 and references to functions, but that's different.) */
610 else if (TREE_CODE (t
) == FUNCTION_TYPE
)
613 /* Unless the language specifies otherwise, let vector types alias
614 their components. This avoids some nasty type punning issues in
615 normal usage. And indeed lets vectors be treated more like an
617 else if (TREE_CODE (t
) == VECTOR_TYPE
)
618 set
= get_alias_set (TREE_TYPE (t
));
621 /* Otherwise make a new alias set for this type. */
622 set
= new_alias_set ();
624 TYPE_ALIAS_SET (t
) = set
;
626 /* If this is an aggregate type, we must record any component aliasing
628 if (AGGREGATE_TYPE_P (t
) || TREE_CODE (t
) == COMPLEX_TYPE
)
629 record_component_aliases (t
);
634 /* Return a brand-new alias set. */
636 static GTY(()) HOST_WIDE_INT last_alias_set
;
641 if (flag_strict_aliasing
)
644 VARRAY_GENERIC_PTR_INIT (alias_sets
, 10, "alias sets");
646 VARRAY_GROW (alias_sets
, last_alias_set
+ 2);
647 return ++last_alias_set
;
653 /* Indicate that things in SUBSET can alias things in SUPERSET, but that
654 not everything that aliases SUPERSET also aliases SUBSET. For example,
655 in C, a store to an `int' can alias a load of a structure containing an
656 `int', and vice versa. But it can't alias a load of a 'double' member
657 of the same structure. Here, the structure would be the SUPERSET and
658 `int' the SUBSET. This relationship is also described in the comment at
659 the beginning of this file.
661 This function should be called only once per SUPERSET/SUBSET pair.
663 It is illegal for SUPERSET to be zero; everything is implicitly a
664 subset of alias set zero. */
667 record_alias_subset (HOST_WIDE_INT superset
, HOST_WIDE_INT subset
)
669 alias_set_entry superset_entry
;
670 alias_set_entry subset_entry
;
672 /* It is possible in complex type situations for both sets to be the same,
673 in which case we can ignore this operation. */
674 if (superset
== subset
)
677 gcc_assert (superset
);
679 superset_entry
= get_alias_set_entry (superset
);
680 if (superset_entry
== 0)
682 /* Create an entry for the SUPERSET, so that we have a place to
683 attach the SUBSET. */
684 superset_entry
= ggc_alloc (sizeof (struct alias_set_entry
));
685 superset_entry
->alias_set
= superset
;
686 superset_entry
->children
687 = splay_tree_new_ggc (splay_tree_compare_ints
);
688 superset_entry
->has_zero_child
= 0;
689 VARRAY_GENERIC_PTR (alias_sets
, superset
) = superset_entry
;
693 superset_entry
->has_zero_child
= 1;
696 subset_entry
= get_alias_set_entry (subset
);
697 /* If there is an entry for the subset, enter all of its children
698 (if they are not already present) as children of the SUPERSET. */
701 if (subset_entry
->has_zero_child
)
702 superset_entry
->has_zero_child
= 1;
704 splay_tree_foreach (subset_entry
->children
, insert_subset_children
,
705 superset_entry
->children
);
708 /* Enter the SUBSET itself as a child of the SUPERSET. */
709 splay_tree_insert (superset_entry
->children
,
710 (splay_tree_key
) subset
, 0);
714 /* Record that component types of TYPE, if any, are part of that type for
715 aliasing purposes. For record types, we only record component types
716 for fields that are marked addressable. For array types, we always
717 record the component types, so the front end should not call this
718 function if the individual component aren't addressable. */
721 record_component_aliases (tree type
)
723 HOST_WIDE_INT superset
= get_alias_set (type
);
729 switch (TREE_CODE (type
))
732 if (! TYPE_NONALIASED_COMPONENT (type
))
733 record_alias_subset (superset
, get_alias_set (TREE_TYPE (type
)));
738 case QUAL_UNION_TYPE
:
739 /* Recursively record aliases for the base classes, if there are any. */
740 if (TYPE_BINFO (type
))
743 tree binfo
, base_binfo
;
745 for (binfo
= TYPE_BINFO (type
), i
= 0;
746 BINFO_BASE_ITERATE (binfo
, i
, base_binfo
); i
++)
747 record_alias_subset (superset
,
748 get_alias_set (BINFO_TYPE (base_binfo
)));
750 for (field
= TYPE_FIELDS (type
); field
!= 0; field
= TREE_CHAIN (field
))
751 if (TREE_CODE (field
) == FIELD_DECL
&& ! DECL_NONADDRESSABLE_P (field
))
752 record_alias_subset (superset
, get_alias_set (TREE_TYPE (field
)));
756 record_alias_subset (superset
, get_alias_set (TREE_TYPE (type
)));
764 /* Allocate an alias set for use in storing and reading from the varargs
767 static GTY(()) HOST_WIDE_INT varargs_set
= -1;
770 get_varargs_alias_set (void)
773 /* We now lower VA_ARG_EXPR, and there's currently no way to attach the
774 varargs alias set to an INDIRECT_REF (FIXME!), so we can't
775 consistently use the varargs alias set for loads from the varargs
776 area. So don't use it anywhere. */
779 if (varargs_set
== -1)
780 varargs_set
= new_alias_set ();
786 /* Likewise, but used for the fixed portions of the frame, e.g., register
789 static GTY(()) HOST_WIDE_INT frame_set
= -1;
792 get_frame_alias_set (void)
795 frame_set
= new_alias_set ();
800 /* Inside SRC, the source of a SET, find a base address. */
803 find_base_value (rtx src
)
807 switch (GET_CODE (src
))
815 /* At the start of a function, argument registers have known base
816 values which may be lost later. Returning an ADDRESS
817 expression here allows optimization based on argument values
818 even when the argument registers are used for other purposes. */
819 if (regno
< FIRST_PSEUDO_REGISTER
&& copying_arguments
)
820 return new_reg_base_value
[regno
];
822 /* If a pseudo has a known base value, return it. Do not do this
823 for non-fixed hard regs since it can result in a circular
824 dependency chain for registers which have values at function entry.
826 The test above is not sufficient because the scheduler may move
827 a copy out of an arg reg past the NOTE_INSN_FUNCTION_BEGIN. */
828 if ((regno
>= FIRST_PSEUDO_REGISTER
|| fixed_regs
[regno
])
829 && regno
< VARRAY_SIZE (reg_base_value
))
831 /* If we're inside init_alias_analysis, use new_reg_base_value
832 to reduce the number of relaxation iterations. */
833 if (new_reg_base_value
&& new_reg_base_value
[regno
]
834 && REG_N_SETS (regno
) == 1)
835 return new_reg_base_value
[regno
];
837 if (VARRAY_RTX (reg_base_value
, regno
))
838 return VARRAY_RTX (reg_base_value
, regno
);
844 /* Check for an argument passed in memory. Only record in the
845 copying-arguments block; it is too hard to track changes
847 if (copying_arguments
848 && (XEXP (src
, 0) == arg_pointer_rtx
849 || (GET_CODE (XEXP (src
, 0)) == PLUS
850 && XEXP (XEXP (src
, 0), 0) == arg_pointer_rtx
)))
851 return gen_rtx_ADDRESS (VOIDmode
, src
);
856 if (GET_CODE (src
) != PLUS
&& GET_CODE (src
) != MINUS
)
859 /* ... fall through ... */
864 rtx temp
, src_0
= XEXP (src
, 0), src_1
= XEXP (src
, 1);
866 /* If either operand is a REG that is a known pointer, then it
868 if (REG_P (src_0
) && REG_POINTER (src_0
))
869 return find_base_value (src_0
);
870 if (REG_P (src_1
) && REG_POINTER (src_1
))
871 return find_base_value (src_1
);
873 /* If either operand is a REG, then see if we already have
874 a known value for it. */
877 temp
= find_base_value (src_0
);
884 temp
= find_base_value (src_1
);
889 /* If either base is named object or a special address
890 (like an argument or stack reference), then use it for the
893 && (GET_CODE (src_0
) == SYMBOL_REF
894 || GET_CODE (src_0
) == LABEL_REF
895 || (GET_CODE (src_0
) == ADDRESS
896 && GET_MODE (src_0
) != VOIDmode
)))
900 && (GET_CODE (src_1
) == SYMBOL_REF
901 || GET_CODE (src_1
) == LABEL_REF
902 || (GET_CODE (src_1
) == ADDRESS
903 && GET_MODE (src_1
) != VOIDmode
)))
906 /* Guess which operand is the base address:
907 If either operand is a symbol, then it is the base. If
908 either operand is a CONST_INT, then the other is the base. */
909 if (GET_CODE (src_1
) == CONST_INT
|| CONSTANT_P (src_0
))
910 return find_base_value (src_0
);
911 else if (GET_CODE (src_0
) == CONST_INT
|| CONSTANT_P (src_1
))
912 return find_base_value (src_1
);
918 /* The standard form is (lo_sum reg sym) so look only at the
920 return find_base_value (XEXP (src
, 1));
923 /* If the second operand is constant set the base
924 address to the first operand. */
925 if (GET_CODE (XEXP (src
, 1)) == CONST_INT
&& INTVAL (XEXP (src
, 1)) != 0)
926 return find_base_value (XEXP (src
, 0));
930 if (GET_MODE_SIZE (GET_MODE (src
)) < GET_MODE_SIZE (Pmode
))
940 return find_base_value (XEXP (src
, 0));
943 case SIGN_EXTEND
: /* used for NT/Alpha pointers */
945 rtx temp
= find_base_value (XEXP (src
, 0));
947 if (temp
!= 0 && CONSTANT_P (temp
))
948 temp
= convert_memory_address (Pmode
, temp
);
960 /* Called from init_alias_analysis indirectly through note_stores. */
962 /* While scanning insns to find base values, reg_seen[N] is nonzero if
963 register N has been set in this function. */
964 static char *reg_seen
;
966 /* Addresses which are known not to alias anything else are identified
967 by a unique integer. */
968 static int unique_id
;
971 record_set (rtx dest
, rtx set
, void *data ATTRIBUTE_UNUSED
)
980 regno
= REGNO (dest
);
982 gcc_assert (regno
< VARRAY_SIZE (reg_base_value
));
984 /* If this spans multiple hard registers, then we must indicate that every
985 register has an unusable value. */
986 if (regno
< FIRST_PSEUDO_REGISTER
)
987 n
= hard_regno_nregs
[regno
][GET_MODE (dest
)];
994 reg_seen
[regno
+ n
] = 1;
995 new_reg_base_value
[regno
+ n
] = 0;
1002 /* A CLOBBER wipes out any old value but does not prevent a previously
1003 unset register from acquiring a base address (i.e. reg_seen is not
1005 if (GET_CODE (set
) == CLOBBER
)
1007 new_reg_base_value
[regno
] = 0;
1010 src
= SET_SRC (set
);
1014 if (reg_seen
[regno
])
1016 new_reg_base_value
[regno
] = 0;
1019 reg_seen
[regno
] = 1;
1020 new_reg_base_value
[regno
] = gen_rtx_ADDRESS (Pmode
,
1021 GEN_INT (unique_id
++));
1025 /* If this is not the first set of REGNO, see whether the new value
1026 is related to the old one. There are two cases of interest:
1028 (1) The register might be assigned an entirely new value
1029 that has the same base term as the original set.
1031 (2) The set might be a simple self-modification that
1032 cannot change REGNO's base value.
1034 If neither case holds, reject the original base value as invalid.
1035 Note that the following situation is not detected:
1037 extern int x, y; int *p = &x; p += (&y-&x);
1039 ANSI C does not allow computing the difference of addresses
1040 of distinct top level objects. */
1041 if (new_reg_base_value
[regno
] != 0
1042 && find_base_value (src
) != new_reg_base_value
[regno
])
1043 switch (GET_CODE (src
))
1047 if (XEXP (src
, 0) != dest
&& XEXP (src
, 1) != dest
)
1048 new_reg_base_value
[regno
] = 0;
1051 /* If the value we add in the PLUS is also a valid base value,
1052 this might be the actual base value, and the original value
1055 rtx other
= NULL_RTX
;
1057 if (XEXP (src
, 0) == dest
)
1058 other
= XEXP (src
, 1);
1059 else if (XEXP (src
, 1) == dest
)
1060 other
= XEXP (src
, 0);
1062 if (! other
|| find_base_value (other
))
1063 new_reg_base_value
[regno
] = 0;
1067 if (XEXP (src
, 0) != dest
|| GET_CODE (XEXP (src
, 1)) != CONST_INT
)
1068 new_reg_base_value
[regno
] = 0;
1071 new_reg_base_value
[regno
] = 0;
1074 /* If this is the first set of a register, record the value. */
1075 else if ((regno
>= FIRST_PSEUDO_REGISTER
|| ! fixed_regs
[regno
])
1076 && ! reg_seen
[regno
] && new_reg_base_value
[regno
] == 0)
1077 new_reg_base_value
[regno
] = find_base_value (src
);
1079 reg_seen
[regno
] = 1;
1082 /* Called from loop optimization when a new pseudo-register is
1083 created. It indicates that REGNO is being set to VAL. f INVARIANT
1084 is true then this value also describes an invariant relationship
1085 which can be used to deduce that two registers with unknown values
1089 record_base_value (unsigned int regno
, rtx val
, int invariant
)
1091 if (invariant
&& alias_invariant
&& regno
< alias_invariant_size
)
1092 alias_invariant
[regno
] = val
;
1094 if (regno
>= VARRAY_SIZE (reg_base_value
))
1095 VARRAY_GROW (reg_base_value
, max_reg_num ());
1099 VARRAY_RTX (reg_base_value
, regno
)
1100 = REG_BASE_VALUE (val
);
1103 VARRAY_RTX (reg_base_value
, regno
)
1104 = find_base_value (val
);
1107 /* Clear alias info for a register. This is used if an RTL transformation
1108 changes the value of a register. This is used in flow by AUTO_INC_DEC
1109 optimizations. We don't need to clear reg_base_value, since flow only
1110 changes the offset. */
1113 clear_reg_alias_info (rtx reg
)
1115 unsigned int regno
= REGNO (reg
);
1117 if (regno
>= FIRST_PSEUDO_REGISTER
)
1119 regno
-= FIRST_PSEUDO_REGISTER
;
1120 if (regno
< reg_known_value_size
)
1122 reg_known_value
[regno
] = reg
;
1123 reg_known_equiv_p
[regno
] = false;
1128 /* If a value is known for REGNO, return it. */
1131 get_reg_known_value (unsigned int regno
)
1133 if (regno
>= FIRST_PSEUDO_REGISTER
)
1135 regno
-= FIRST_PSEUDO_REGISTER
;
1136 if (regno
< reg_known_value_size
)
1137 return reg_known_value
[regno
];
1145 set_reg_known_value (unsigned int regno
, rtx val
)
1147 if (regno
>= FIRST_PSEUDO_REGISTER
)
1149 regno
-= FIRST_PSEUDO_REGISTER
;
1150 if (regno
< reg_known_value_size
)
1151 reg_known_value
[regno
] = val
;
1155 /* Similarly for reg_known_equiv_p. */
1158 get_reg_known_equiv_p (unsigned int regno
)
1160 if (regno
>= FIRST_PSEUDO_REGISTER
)
1162 regno
-= FIRST_PSEUDO_REGISTER
;
1163 if (regno
< reg_known_value_size
)
1164 return reg_known_equiv_p
[regno
];
1170 set_reg_known_equiv_p (unsigned int regno
, bool val
)
1172 if (regno
>= FIRST_PSEUDO_REGISTER
)
1174 regno
-= FIRST_PSEUDO_REGISTER
;
1175 if (regno
< reg_known_value_size
)
1176 reg_known_equiv_p
[regno
] = val
;
1181 /* Returns a canonical version of X, from the point of view alias
1182 analysis. (For example, if X is a MEM whose address is a register,
1183 and the register has a known value (say a SYMBOL_REF), then a MEM
1184 whose address is the SYMBOL_REF is returned.) */
1189 /* Recursively look for equivalences. */
1190 if (REG_P (x
) && REGNO (x
) >= FIRST_PSEUDO_REGISTER
)
1192 rtx t
= get_reg_known_value (REGNO (x
));
1196 return canon_rtx (t
);
1199 if (GET_CODE (x
) == PLUS
)
1201 rtx x0
= canon_rtx (XEXP (x
, 0));
1202 rtx x1
= canon_rtx (XEXP (x
, 1));
1204 if (x0
!= XEXP (x
, 0) || x1
!= XEXP (x
, 1))
1206 if (GET_CODE (x0
) == CONST_INT
)
1207 return plus_constant (x1
, INTVAL (x0
));
1208 else if (GET_CODE (x1
) == CONST_INT
)
1209 return plus_constant (x0
, INTVAL (x1
));
1210 return gen_rtx_PLUS (GET_MODE (x
), x0
, x1
);
1214 /* This gives us much better alias analysis when called from
1215 the loop optimizer. Note we want to leave the original
1216 MEM alone, but need to return the canonicalized MEM with
1217 all the flags with their original values. */
1219 x
= replace_equiv_address_nv (x
, canon_rtx (XEXP (x
, 0)));
1224 /* Return 1 if X and Y are identical-looking rtx's.
1225 Expect that X and Y has been already canonicalized.
1227 We use the data in reg_known_value above to see if two registers with
1228 different numbers are, in fact, equivalent. */
1231 rtx_equal_for_memref_p (rtx x
, rtx y
)
1238 if (x
== 0 && y
== 0)
1240 if (x
== 0 || y
== 0)
1246 code
= GET_CODE (x
);
1247 /* Rtx's of different codes cannot be equal. */
1248 if (code
!= GET_CODE (y
))
1251 /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
1252 (REG:SI x) and (REG:HI x) are NOT equivalent. */
1254 if (GET_MODE (x
) != GET_MODE (y
))
1257 /* Some RTL can be compared without a recursive examination. */
1261 return REGNO (x
) == REGNO (y
);
1264 return XEXP (x
, 0) == XEXP (y
, 0);
1267 return XSTR (x
, 0) == XSTR (y
, 0);
1272 /* There's no need to compare the contents of CONST_DOUBLEs or
1273 CONST_INTs because pointer equality is a good enough
1274 comparison for these nodes. */
1281 /* canon_rtx knows how to handle plus. No need to canonicalize. */
1283 return ((rtx_equal_for_memref_p (XEXP (x
, 0), XEXP (y
, 0))
1284 && rtx_equal_for_memref_p (XEXP (x
, 1), XEXP (y
, 1)))
1285 || (rtx_equal_for_memref_p (XEXP (x
, 0), XEXP (y
, 1))
1286 && rtx_equal_for_memref_p (XEXP (x
, 1), XEXP (y
, 0))));
1287 /* For commutative operations, the RTX match if the operand match in any
1288 order. Also handle the simple binary and unary cases without a loop. */
1289 if (COMMUTATIVE_P (x
))
1291 rtx xop0
= canon_rtx (XEXP (x
, 0));
1292 rtx yop0
= canon_rtx (XEXP (y
, 0));
1293 rtx yop1
= canon_rtx (XEXP (y
, 1));
1295 return ((rtx_equal_for_memref_p (xop0
, yop0
)
1296 && rtx_equal_for_memref_p (canon_rtx (XEXP (x
, 1)), yop1
))
1297 || (rtx_equal_for_memref_p (xop0
, yop1
)
1298 && rtx_equal_for_memref_p (canon_rtx (XEXP (x
, 1)), yop0
)));
1300 else if (NON_COMMUTATIVE_P (x
))
1302 return (rtx_equal_for_memref_p (canon_rtx (XEXP (x
, 0)),
1303 canon_rtx (XEXP (y
, 0)))
1304 && rtx_equal_for_memref_p (canon_rtx (XEXP (x
, 1)),
1305 canon_rtx (XEXP (y
, 1))));
1307 else if (UNARY_P (x
))
1308 return rtx_equal_for_memref_p (canon_rtx (XEXP (x
, 0)),
1309 canon_rtx (XEXP (y
, 0)));
1311 /* Compare the elements. If any pair of corresponding elements
1312 fail to match, return 0 for the whole things.
1314 Limit cases to types which actually appear in addresses. */
1316 fmt
= GET_RTX_FORMAT (code
);
1317 for (i
= GET_RTX_LENGTH (code
) - 1; i
>= 0; i
--)
1322 if (XINT (x
, i
) != XINT (y
, i
))
1327 /* Two vectors must have the same length. */
1328 if (XVECLEN (x
, i
) != XVECLEN (y
, i
))
1331 /* And the corresponding elements must match. */
1332 for (j
= 0; j
< XVECLEN (x
, i
); j
++)
1333 if (rtx_equal_for_memref_p (canon_rtx (XVECEXP (x
, i
, j
)),
1334 canon_rtx (XVECEXP (y
, i
, j
))) == 0)
1339 if (rtx_equal_for_memref_p (canon_rtx (XEXP (x
, i
)),
1340 canon_rtx (XEXP (y
, i
))) == 0)
1344 /* This can happen for asm operands. */
1346 if (strcmp (XSTR (x
, i
), XSTR (y
, i
)))
1350 /* This can happen for an asm which clobbers memory. */
1354 /* It is believed that rtx's at this level will never
1355 contain anything but integers and other rtx's,
1356 except for within LABEL_REFs and SYMBOL_REFs. */
1364 /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
1365 X and return it, or return 0 if none found. */
1368 find_symbolic_term (rtx x
)
1374 code
= GET_CODE (x
);
1375 if (code
== SYMBOL_REF
|| code
== LABEL_REF
)
1380 fmt
= GET_RTX_FORMAT (code
);
1381 for (i
= GET_RTX_LENGTH (code
) - 1; i
>= 0; i
--)
1387 t
= find_symbolic_term (XEXP (x
, i
));
1391 else if (fmt
[i
] == 'E')
1398 find_base_term (rtx x
)
1401 struct elt_loc_list
*l
;
1403 #if defined (FIND_BASE_TERM)
1404 /* Try machine-dependent ways to find the base term. */
1405 x
= FIND_BASE_TERM (x
);
1408 switch (GET_CODE (x
))
1411 return REG_BASE_VALUE (x
);
1414 if (GET_MODE_SIZE (GET_MODE (x
)) < GET_MODE_SIZE (Pmode
))
1424 return find_base_term (XEXP (x
, 0));
1427 case SIGN_EXTEND
: /* Used for Alpha/NT pointers */
1429 rtx temp
= find_base_term (XEXP (x
, 0));
1431 if (temp
!= 0 && CONSTANT_P (temp
))
1432 temp
= convert_memory_address (Pmode
, temp
);
1438 val
= CSELIB_VAL_PTR (x
);
1441 for (l
= val
->locs
; l
; l
= l
->next
)
1442 if ((x
= find_base_term (l
->loc
)) != 0)
1448 if (GET_CODE (x
) != PLUS
&& GET_CODE (x
) != MINUS
)
1455 rtx tmp1
= XEXP (x
, 0);
1456 rtx tmp2
= XEXP (x
, 1);
1458 /* This is a little bit tricky since we have to determine which of
1459 the two operands represents the real base address. Otherwise this
1460 routine may return the index register instead of the base register.
1462 That may cause us to believe no aliasing was possible, when in
1463 fact aliasing is possible.
1465 We use a few simple tests to guess the base register. Additional
1466 tests can certainly be added. For example, if one of the operands
1467 is a shift or multiply, then it must be the index register and the
1468 other operand is the base register. */
1470 if (tmp1
== pic_offset_table_rtx
&& CONSTANT_P (tmp2
))
1471 return find_base_term (tmp2
);
1473 /* If either operand is known to be a pointer, then use it
1474 to determine the base term. */
1475 if (REG_P (tmp1
) && REG_POINTER (tmp1
))
1476 return find_base_term (tmp1
);
1478 if (REG_P (tmp2
) && REG_POINTER (tmp2
))
1479 return find_base_term (tmp2
);
1481 /* Neither operand was known to be a pointer. Go ahead and find the
1482 base term for both operands. */
1483 tmp1
= find_base_term (tmp1
);
1484 tmp2
= find_base_term (tmp2
);
1486 /* If either base term is named object or a special address
1487 (like an argument or stack reference), then use it for the
1490 && (GET_CODE (tmp1
) == SYMBOL_REF
1491 || GET_CODE (tmp1
) == LABEL_REF
1492 || (GET_CODE (tmp1
) == ADDRESS
1493 && GET_MODE (tmp1
) != VOIDmode
)))
1497 && (GET_CODE (tmp2
) == SYMBOL_REF
1498 || GET_CODE (tmp2
) == LABEL_REF
1499 || (GET_CODE (tmp2
) == ADDRESS
1500 && GET_MODE (tmp2
) != VOIDmode
)))
1503 /* We could not determine which of the two operands was the
1504 base register and which was the index. So we can determine
1505 nothing from the base alias check. */
1510 if (GET_CODE (XEXP (x
, 1)) == CONST_INT
&& INTVAL (XEXP (x
, 1)) != 0)
1511 return find_base_term (XEXP (x
, 0));
1523 /* Return 0 if the addresses X and Y are known to point to different
1524 objects, 1 if they might be pointers to the same object. */
1527 base_alias_check (rtx x
, rtx y
, enum machine_mode x_mode
,
1528 enum machine_mode y_mode
)
1530 rtx x_base
= find_base_term (x
);
1531 rtx y_base
= find_base_term (y
);
1533 /* If the address itself has no known base see if a known equivalent
1534 value has one. If either address still has no known base, nothing
1535 is known about aliasing. */
1540 if (! flag_expensive_optimizations
|| (x_c
= canon_rtx (x
)) == x
)
1543 x_base
= find_base_term (x_c
);
1551 if (! flag_expensive_optimizations
|| (y_c
= canon_rtx (y
)) == y
)
1554 y_base
= find_base_term (y_c
);
1559 /* If the base addresses are equal nothing is known about aliasing. */
1560 if (rtx_equal_p (x_base
, y_base
))
1563 /* The base addresses of the read and write are different expressions.
1564 If they are both symbols and they are not accessed via AND, there is
1565 no conflict. We can bring knowledge of object alignment into play
1566 here. For example, on alpha, "char a, b;" can alias one another,
1567 though "char a; long b;" cannot. */
1568 if (GET_CODE (x_base
) != ADDRESS
&& GET_CODE (y_base
) != ADDRESS
)
1570 if (GET_CODE (x
) == AND
&& GET_CODE (y
) == AND
)
1572 if (GET_CODE (x
) == AND
1573 && (GET_CODE (XEXP (x
, 1)) != CONST_INT
1574 || (int) GET_MODE_UNIT_SIZE (y_mode
) < -INTVAL (XEXP (x
, 1))))
1576 if (GET_CODE (y
) == AND
1577 && (GET_CODE (XEXP (y
, 1)) != CONST_INT
1578 || (int) GET_MODE_UNIT_SIZE (x_mode
) < -INTVAL (XEXP (y
, 1))))
1580 /* Differing symbols never alias. */
1584 /* If one address is a stack reference there can be no alias:
1585 stack references using different base registers do not alias,
1586 a stack reference can not alias a parameter, and a stack reference
1587 can not alias a global. */
1588 if ((GET_CODE (x_base
) == ADDRESS
&& GET_MODE (x_base
) == Pmode
)
1589 || (GET_CODE (y_base
) == ADDRESS
&& GET_MODE (y_base
) == Pmode
))
1592 if (! flag_argument_noalias
)
1595 if (flag_argument_noalias
> 1)
1598 /* Weak noalias assertion (arguments are distinct, but may match globals). */
1599 return ! (GET_MODE (x_base
) == VOIDmode
&& GET_MODE (y_base
) == VOIDmode
);
1602 /* Convert the address X into something we can use. This is done by returning
1603 it unchanged unless it is a value; in the latter case we call cselib to get
1604 a more useful rtx. */
1610 struct elt_loc_list
*l
;
1612 if (GET_CODE (x
) != VALUE
)
1614 v
= CSELIB_VAL_PTR (x
);
1617 for (l
= v
->locs
; l
; l
= l
->next
)
1618 if (CONSTANT_P (l
->loc
))
1620 for (l
= v
->locs
; l
; l
= l
->next
)
1621 if (!REG_P (l
->loc
) && !MEM_P (l
->loc
))
1624 return v
->locs
->loc
;
1629 /* Return the address of the (N_REFS + 1)th memory reference to ADDR
1630 where SIZE is the size in bytes of the memory reference. If ADDR
1631 is not modified by the memory reference then ADDR is returned. */
1634 addr_side_effect_eval (rtx addr
, int size
, int n_refs
)
1638 switch (GET_CODE (addr
))
1641 offset
= (n_refs
+ 1) * size
;
1644 offset
= -(n_refs
+ 1) * size
;
1647 offset
= n_refs
* size
;
1650 offset
= -n_refs
* size
;
1658 addr
= gen_rtx_PLUS (GET_MODE (addr
), XEXP (addr
, 0),
1661 addr
= XEXP (addr
, 0);
1662 addr
= canon_rtx (addr
);
1667 /* Return nonzero if X and Y (memory addresses) could reference the
1668 same location in memory. C is an offset accumulator. When
1669 C is nonzero, we are testing aliases between X and Y + C.
1670 XSIZE is the size in bytes of the X reference,
1671 similarly YSIZE is the size in bytes for Y.
1672 Expect that canon_rtx has been already called for X and Y.
1674 If XSIZE or YSIZE is zero, we do not know the amount of memory being
1675 referenced (the reference was BLKmode), so make the most pessimistic
1678 If XSIZE or YSIZE is negative, we may access memory outside the object
1679 being referenced as a side effect. This can happen when using AND to
1680 align memory references, as is done on the Alpha.
1682 Nice to notice that varying addresses cannot conflict with fp if no
1683 local variables had their addresses taken, but that's too hard now. */
1686 memrefs_conflict_p (int xsize
, rtx x
, int ysize
, rtx y
, HOST_WIDE_INT c
)
1688 if (GET_CODE (x
) == VALUE
)
1690 if (GET_CODE (y
) == VALUE
)
1692 if (GET_CODE (x
) == HIGH
)
1694 else if (GET_CODE (x
) == LO_SUM
)
1697 x
= addr_side_effect_eval (x
, xsize
, 0);
1698 if (GET_CODE (y
) == HIGH
)
1700 else if (GET_CODE (y
) == LO_SUM
)
1703 y
= addr_side_effect_eval (y
, ysize
, 0);
1705 if (rtx_equal_for_memref_p (x
, y
))
1707 if (xsize
<= 0 || ysize
<= 0)
1709 if (c
>= 0 && xsize
> c
)
1711 if (c
< 0 && ysize
+c
> 0)
1716 /* This code used to check for conflicts involving stack references and
1717 globals but the base address alias code now handles these cases. */
1719 if (GET_CODE (x
) == PLUS
)
1721 /* The fact that X is canonicalized means that this
1722 PLUS rtx is canonicalized. */
1723 rtx x0
= XEXP (x
, 0);
1724 rtx x1
= XEXP (x
, 1);
1726 if (GET_CODE (y
) == PLUS
)
1728 /* The fact that Y is canonicalized means that this
1729 PLUS rtx is canonicalized. */
1730 rtx y0
= XEXP (y
, 0);
1731 rtx y1
= XEXP (y
, 1);
1733 if (rtx_equal_for_memref_p (x1
, y1
))
1734 return memrefs_conflict_p (xsize
, x0
, ysize
, y0
, c
);
1735 if (rtx_equal_for_memref_p (x0
, y0
))
1736 return memrefs_conflict_p (xsize
, x1
, ysize
, y1
, c
);
1737 if (GET_CODE (x1
) == CONST_INT
)
1739 if (GET_CODE (y1
) == CONST_INT
)
1740 return memrefs_conflict_p (xsize
, x0
, ysize
, y0
,
1741 c
- INTVAL (x1
) + INTVAL (y1
));
1743 return memrefs_conflict_p (xsize
, x0
, ysize
, y
,
1746 else if (GET_CODE (y1
) == CONST_INT
)
1747 return memrefs_conflict_p (xsize
, x
, ysize
, y0
, c
+ INTVAL (y1
));
1751 else if (GET_CODE (x1
) == CONST_INT
)
1752 return memrefs_conflict_p (xsize
, x0
, ysize
, y
, c
- INTVAL (x1
));
1754 else if (GET_CODE (y
) == PLUS
)
1756 /* The fact that Y is canonicalized means that this
1757 PLUS rtx is canonicalized. */
1758 rtx y0
= XEXP (y
, 0);
1759 rtx y1
= XEXP (y
, 1);
1761 if (GET_CODE (y1
) == CONST_INT
)
1762 return memrefs_conflict_p (xsize
, x
, ysize
, y0
, c
+ INTVAL (y1
));
1767 if (GET_CODE (x
) == GET_CODE (y
))
1768 switch (GET_CODE (x
))
1772 /* Handle cases where we expect the second operands to be the
1773 same, and check only whether the first operand would conflict
1776 rtx x1
= canon_rtx (XEXP (x
, 1));
1777 rtx y1
= canon_rtx (XEXP (y
, 1));
1778 if (! rtx_equal_for_memref_p (x1
, y1
))
1780 x0
= canon_rtx (XEXP (x
, 0));
1781 y0
= canon_rtx (XEXP (y
, 0));
1782 if (rtx_equal_for_memref_p (x0
, y0
))
1783 return (xsize
== 0 || ysize
== 0
1784 || (c
>= 0 && xsize
> c
) || (c
< 0 && ysize
+c
> 0));
1786 /* Can't properly adjust our sizes. */
1787 if (GET_CODE (x1
) != CONST_INT
)
1789 xsize
/= INTVAL (x1
);
1790 ysize
/= INTVAL (x1
);
1792 return memrefs_conflict_p (xsize
, x0
, ysize
, y0
, c
);
1796 /* Are these registers known not to be equal? */
1797 if (alias_invariant
)
1799 unsigned int r_x
= REGNO (x
), r_y
= REGNO (y
);
1800 rtx i_x
, i_y
; /* invariant relationships of X and Y */
1802 i_x
= r_x
>= alias_invariant_size
? 0 : alias_invariant
[r_x
];
1803 i_y
= r_y
>= alias_invariant_size
? 0 : alias_invariant
[r_y
];
1805 if (i_x
== 0 && i_y
== 0)
1808 if (! memrefs_conflict_p (xsize
, i_x
? i_x
: x
,
1809 ysize
, i_y
? i_y
: y
, c
))
1818 /* Treat an access through an AND (e.g. a subword access on an Alpha)
1819 as an access with indeterminate size. Assume that references
1820 besides AND are aligned, so if the size of the other reference is
1821 at least as large as the alignment, assume no other overlap. */
1822 if (GET_CODE (x
) == AND
&& GET_CODE (XEXP (x
, 1)) == CONST_INT
)
1824 if (GET_CODE (y
) == AND
|| ysize
< -INTVAL (XEXP (x
, 1)))
1826 return memrefs_conflict_p (xsize
, canon_rtx (XEXP (x
, 0)), ysize
, y
, c
);
1828 if (GET_CODE (y
) == AND
&& GET_CODE (XEXP (y
, 1)) == CONST_INT
)
1830 /* ??? If we are indexing far enough into the array/structure, we
1831 may yet be able to determine that we can not overlap. But we
1832 also need to that we are far enough from the end not to overlap
1833 a following reference, so we do nothing with that for now. */
1834 if (GET_CODE (x
) == AND
|| xsize
< -INTVAL (XEXP (y
, 1)))
1836 return memrefs_conflict_p (xsize
, x
, ysize
, canon_rtx (XEXP (y
, 0)), c
);
1841 if (GET_CODE (x
) == CONST_INT
&& GET_CODE (y
) == CONST_INT
)
1843 c
+= (INTVAL (y
) - INTVAL (x
));
1844 return (xsize
<= 0 || ysize
<= 0
1845 || (c
>= 0 && xsize
> c
) || (c
< 0 && ysize
+c
> 0));
1848 if (GET_CODE (x
) == CONST
)
1850 if (GET_CODE (y
) == CONST
)
1851 return memrefs_conflict_p (xsize
, canon_rtx (XEXP (x
, 0)),
1852 ysize
, canon_rtx (XEXP (y
, 0)), c
);
1854 return memrefs_conflict_p (xsize
, canon_rtx (XEXP (x
, 0)),
1857 if (GET_CODE (y
) == CONST
)
1858 return memrefs_conflict_p (xsize
, x
, ysize
,
1859 canon_rtx (XEXP (y
, 0)), c
);
1862 return (xsize
<= 0 || ysize
<= 0
1863 || (rtx_equal_for_memref_p (x
, y
)
1864 && ((c
>= 0 && xsize
> c
) || (c
< 0 && ysize
+c
> 0))));
1871 /* Functions to compute memory dependencies.
1873 Since we process the insns in execution order, we can build tables
1874 to keep track of what registers are fixed (and not aliased), what registers
1875 are varying in known ways, and what registers are varying in unknown
1878 If both memory references are volatile, then there must always be a
1879 dependence between the two references, since their order can not be
1880 changed. A volatile and non-volatile reference can be interchanged
1883 A MEM_IN_STRUCT reference at a non-AND varying address can never
1884 conflict with a non-MEM_IN_STRUCT reference at a fixed address. We
1885 also must allow AND addresses, because they may generate accesses
1886 outside the object being referenced. This is used to generate
1887 aligned addresses from unaligned addresses, for instance, the alpha
1888 storeqi_unaligned pattern. */
1890 /* Read dependence: X is read after read in MEM takes place. There can
1891 only be a dependence here if both reads are volatile. */
1894 read_dependence (rtx mem
, rtx x
)
1896 return MEM_VOLATILE_P (x
) && MEM_VOLATILE_P (mem
);
1899 /* Returns MEM1 if and only if MEM1 is a scalar at a fixed address and
1900 MEM2 is a reference to a structure at a varying address, or returns
1901 MEM2 if vice versa. Otherwise, returns NULL_RTX. If a non-NULL
1902 value is returned MEM1 and MEM2 can never alias. VARIES_P is used
1903 to decide whether or not an address may vary; it should return
1904 nonzero whenever variation is possible.
1905 MEM1_ADDR and MEM2_ADDR are the addresses of MEM1 and MEM2. */
1908 fixed_scalar_and_varying_struct_p (rtx mem1
, rtx mem2
, rtx mem1_addr
,
1910 int (*varies_p
) (rtx
, int))
1912 if (! flag_strict_aliasing
)
1915 if (MEM_SCALAR_P (mem1
) && MEM_IN_STRUCT_P (mem2
)
1916 && !varies_p (mem1_addr
, 1) && varies_p (mem2_addr
, 1))
1917 /* MEM1 is a scalar at a fixed address; MEM2 is a struct at a
1921 if (MEM_IN_STRUCT_P (mem1
) && MEM_SCALAR_P (mem2
)
1922 && varies_p (mem1_addr
, 1) && !varies_p (mem2_addr
, 1))
1923 /* MEM2 is a scalar at a fixed address; MEM1 is a struct at a
1930 /* Returns nonzero if something about the mode or address format MEM1
1931 indicates that it might well alias *anything*. */
1934 aliases_everything_p (rtx mem
)
1936 if (GET_CODE (XEXP (mem
, 0)) == AND
)
1937 /* If the address is an AND, it's very hard to know at what it is
1938 actually pointing. */
1944 /* Return true if we can determine that the fields referenced cannot
1945 overlap for any pair of objects. */
1948 nonoverlapping_component_refs_p (tree x
, tree y
)
1950 tree fieldx
, fieldy
, typex
, typey
, orig_y
;
1954 /* The comparison has to be done at a common type, since we don't
1955 know how the inheritance hierarchy works. */
1959 fieldx
= TREE_OPERAND (x
, 1);
1960 typex
= TYPE_MAIN_VARIANT (DECL_FIELD_CONTEXT (fieldx
));
1965 fieldy
= TREE_OPERAND (y
, 1);
1966 typey
= TYPE_MAIN_VARIANT (DECL_FIELD_CONTEXT (fieldy
));
1971 y
= TREE_OPERAND (y
, 0);
1973 while (y
&& TREE_CODE (y
) == COMPONENT_REF
);
1975 x
= TREE_OPERAND (x
, 0);
1977 while (x
&& TREE_CODE (x
) == COMPONENT_REF
);
1978 /* Never found a common type. */
1982 /* If we're left with accessing different fields of a structure,
1984 if (TREE_CODE (typex
) == RECORD_TYPE
1985 && fieldx
!= fieldy
)
1988 /* The comparison on the current field failed. If we're accessing
1989 a very nested structure, look at the next outer level. */
1990 x
= TREE_OPERAND (x
, 0);
1991 y
= TREE_OPERAND (y
, 0);
1994 && TREE_CODE (x
) == COMPONENT_REF
1995 && TREE_CODE (y
) == COMPONENT_REF
);
2000 /* Look at the bottom of the COMPONENT_REF list for a DECL, and return it. */
2003 decl_for_component_ref (tree x
)
2007 x
= TREE_OPERAND (x
, 0);
2009 while (x
&& TREE_CODE (x
) == COMPONENT_REF
);
2011 return x
&& DECL_P (x
) ? x
: NULL_TREE
;
2014 /* Walk up the COMPONENT_REF list and adjust OFFSET to compensate for the
2015 offset of the field reference. */
2018 adjust_offset_for_component_ref (tree x
, rtx offset
)
2020 HOST_WIDE_INT ioffset
;
2025 ioffset
= INTVAL (offset
);
2028 tree offset
= component_ref_field_offset (x
);
2029 tree field
= TREE_OPERAND (x
, 1);
2031 if (! host_integerp (offset
, 1))
2033 ioffset
+= (tree_low_cst (offset
, 1)
2034 + (tree_low_cst (DECL_FIELD_BIT_OFFSET (field
), 1)
2037 x
= TREE_OPERAND (x
, 0);
2039 while (x
&& TREE_CODE (x
) == COMPONENT_REF
);
2041 return GEN_INT (ioffset
);
2044 /* Return nonzero if we can determine the exprs corresponding to memrefs
2045 X and Y and they do not overlap. */
2048 nonoverlapping_memrefs_p (rtx x
, rtx y
)
2050 tree exprx
= MEM_EXPR (x
), expry
= MEM_EXPR (y
);
2053 rtx moffsetx
, moffsety
;
2054 HOST_WIDE_INT offsetx
= 0, offsety
= 0, sizex
, sizey
, tem
;
2056 /* Unless both have exprs, we can't tell anything. */
2057 if (exprx
== 0 || expry
== 0)
2060 /* If both are field references, we may be able to determine something. */
2061 if (TREE_CODE (exprx
) == COMPONENT_REF
2062 && TREE_CODE (expry
) == COMPONENT_REF
2063 && nonoverlapping_component_refs_p (exprx
, expry
))
2067 /* If the field reference test failed, look at the DECLs involved. */
2068 moffsetx
= MEM_OFFSET (x
);
2069 if (TREE_CODE (exprx
) == COMPONENT_REF
)
2071 if (TREE_CODE (expry
) == VAR_DECL
2072 && POINTER_TYPE_P (TREE_TYPE (expry
)))
2074 tree field
= TREE_OPERAND (exprx
, 1);
2075 tree fieldcontext
= DECL_FIELD_CONTEXT (field
);
2076 if (ipa_type_escape_field_does_not_clobber_p (fieldcontext
,
2081 tree t
= decl_for_component_ref (exprx
);
2084 moffsetx
= adjust_offset_for_component_ref (exprx
, moffsetx
);
2088 else if (INDIRECT_REF_P (exprx
))
2090 exprx
= TREE_OPERAND (exprx
, 0);
2091 if (flag_argument_noalias
< 2
2092 || TREE_CODE (exprx
) != PARM_DECL
)
2096 moffsety
= MEM_OFFSET (y
);
2097 if (TREE_CODE (expry
) == COMPONENT_REF
)
2099 if (TREE_CODE (exprx
) == VAR_DECL
2100 && POINTER_TYPE_P (TREE_TYPE (exprx
)))
2102 tree field
= TREE_OPERAND (expry
, 1);
2103 tree fieldcontext
= DECL_FIELD_CONTEXT (field
);
2104 if (ipa_type_escape_field_does_not_clobber_p (fieldcontext
,
2109 tree t
= decl_for_component_ref (expry
);
2112 moffsety
= adjust_offset_for_component_ref (expry
, moffsety
);
2116 else if (INDIRECT_REF_P (expry
))
2118 expry
= TREE_OPERAND (expry
, 0);
2119 if (flag_argument_noalias
< 2
2120 || TREE_CODE (expry
) != PARM_DECL
)
2124 if (! DECL_P (exprx
) || ! DECL_P (expry
))
2127 rtlx
= DECL_RTL (exprx
);
2128 rtly
= DECL_RTL (expry
);
2130 /* If either RTL is not a MEM, it must be a REG or CONCAT, meaning they
2131 can't overlap unless they are the same because we never reuse that part
2132 of the stack frame used for locals for spilled pseudos. */
2133 if ((!MEM_P (rtlx
) || !MEM_P (rtly
))
2134 && ! rtx_equal_p (rtlx
, rtly
))
2137 /* Get the base and offsets of both decls. If either is a register, we
2138 know both are and are the same, so use that as the base. The only
2139 we can avoid overlap is if we can deduce that they are nonoverlapping
2140 pieces of that decl, which is very rare. */
2141 basex
= MEM_P (rtlx
) ? XEXP (rtlx
, 0) : rtlx
;
2142 if (GET_CODE (basex
) == PLUS
&& GET_CODE (XEXP (basex
, 1)) == CONST_INT
)
2143 offsetx
= INTVAL (XEXP (basex
, 1)), basex
= XEXP (basex
, 0);
2145 basey
= MEM_P (rtly
) ? XEXP (rtly
, 0) : rtly
;
2146 if (GET_CODE (basey
) == PLUS
&& GET_CODE (XEXP (basey
, 1)) == CONST_INT
)
2147 offsety
= INTVAL (XEXP (basey
, 1)), basey
= XEXP (basey
, 0);
2149 /* If the bases are different, we know they do not overlap if both
2150 are constants or if one is a constant and the other a pointer into the
2151 stack frame. Otherwise a different base means we can't tell if they
2153 if (! rtx_equal_p (basex
, basey
))
2154 return ((CONSTANT_P (basex
) && CONSTANT_P (basey
))
2155 || (CONSTANT_P (basex
) && REG_P (basey
)
2156 && REGNO_PTR_FRAME_P (REGNO (basey
)))
2157 || (CONSTANT_P (basey
) && REG_P (basex
)
2158 && REGNO_PTR_FRAME_P (REGNO (basex
))));
2160 sizex
= (!MEM_P (rtlx
) ? (int) GET_MODE_SIZE (GET_MODE (rtlx
))
2161 : MEM_SIZE (rtlx
) ? INTVAL (MEM_SIZE (rtlx
))
2163 sizey
= (!MEM_P (rtly
) ? (int) GET_MODE_SIZE (GET_MODE (rtly
))
2164 : MEM_SIZE (rtly
) ? INTVAL (MEM_SIZE (rtly
)) :
2167 /* If we have an offset for either memref, it can update the values computed
2170 offsetx
+= INTVAL (moffsetx
), sizex
-= INTVAL (moffsetx
);
2172 offsety
+= INTVAL (moffsety
), sizey
-= INTVAL (moffsety
);
2174 /* If a memref has both a size and an offset, we can use the smaller size.
2175 We can't do this if the offset isn't known because we must view this
2176 memref as being anywhere inside the DECL's MEM. */
2177 if (MEM_SIZE (x
) && moffsetx
)
2178 sizex
= INTVAL (MEM_SIZE (x
));
2179 if (MEM_SIZE (y
) && moffsety
)
2180 sizey
= INTVAL (MEM_SIZE (y
));
2182 /* Put the values of the memref with the lower offset in X's values. */
2183 if (offsetx
> offsety
)
2185 tem
= offsetx
, offsetx
= offsety
, offsety
= tem
;
2186 tem
= sizex
, sizex
= sizey
, sizey
= tem
;
2189 /* If we don't know the size of the lower-offset value, we can't tell
2190 if they conflict. Otherwise, we do the test. */
2191 return sizex
>= 0 && offsety
>= offsetx
+ sizex
;
2194 /* True dependence: X is read after store in MEM takes place. */
2197 true_dependence (rtx mem
, enum machine_mode mem_mode
, rtx x
,
2198 int (*varies
) (rtx
, int))
2200 rtx x_addr
, mem_addr
;
2203 if (MEM_VOLATILE_P (x
) && MEM_VOLATILE_P (mem
))
2206 /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2207 This is used in epilogue deallocation functions. */
2208 if (GET_MODE (x
) == BLKmode
&& GET_CODE (XEXP (x
, 0)) == SCRATCH
)
2210 if (GET_MODE (mem
) == BLKmode
&& GET_CODE (XEXP (mem
, 0)) == SCRATCH
)
2213 if (DIFFERENT_ALIAS_SETS_P (x
, mem
))
2216 /* Read-only memory is by definition never modified, and therefore can't
2217 conflict with anything. We don't expect to find read-only set on MEM,
2218 but stupid user tricks can produce them, so don't die. */
2219 if (MEM_READONLY_P (x
))
2222 if (nonoverlapping_memrefs_p (mem
, x
))
2225 if (mem_mode
== VOIDmode
)
2226 mem_mode
= GET_MODE (mem
);
2228 x_addr
= get_addr (XEXP (x
, 0));
2229 mem_addr
= get_addr (XEXP (mem
, 0));
2231 base
= find_base_term (x_addr
);
2232 if (base
&& (GET_CODE (base
) == LABEL_REF
2233 || (GET_CODE (base
) == SYMBOL_REF
2234 && CONSTANT_POOL_ADDRESS_P (base
))))
2237 if (! base_alias_check (x_addr
, mem_addr
, GET_MODE (x
), mem_mode
))
2240 x_addr
= canon_rtx (x_addr
);
2241 mem_addr
= canon_rtx (mem_addr
);
2243 if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode
), mem_addr
,
2244 SIZE_FOR_MODE (x
), x_addr
, 0))
2247 if (aliases_everything_p (x
))
2250 /* We cannot use aliases_everything_p to test MEM, since we must look
2251 at MEM_MODE, rather than GET_MODE (MEM). */
2252 if (mem_mode
== QImode
|| GET_CODE (mem_addr
) == AND
)
2255 /* In true_dependence we also allow BLKmode to alias anything. Why
2256 don't we do this in anti_dependence and output_dependence? */
2257 if (mem_mode
== BLKmode
|| GET_MODE (x
) == BLKmode
)
2260 return ! fixed_scalar_and_varying_struct_p (mem
, x
, mem_addr
, x_addr
,
2264 /* Canonical true dependence: X is read after store in MEM takes place.
2265 Variant of true_dependence which assumes MEM has already been
2266 canonicalized (hence we no longer do that here).
2267 The mem_addr argument has been added, since true_dependence computed
2268 this value prior to canonicalizing. */
2271 canon_true_dependence (rtx mem
, enum machine_mode mem_mode
, rtx mem_addr
,
2272 rtx x
, int (*varies
) (rtx
, int))
2276 if (MEM_VOLATILE_P (x
) && MEM_VOLATILE_P (mem
))
2279 /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2280 This is used in epilogue deallocation functions. */
2281 if (GET_MODE (x
) == BLKmode
&& GET_CODE (XEXP (x
, 0)) == SCRATCH
)
2283 if (GET_MODE (mem
) == BLKmode
&& GET_CODE (XEXP (mem
, 0)) == SCRATCH
)
2286 if (DIFFERENT_ALIAS_SETS_P (x
, mem
))
2289 /* Read-only memory is by definition never modified, and therefore can't
2290 conflict with anything. We don't expect to find read-only set on MEM,
2291 but stupid user tricks can produce them, so don't die. */
2292 if (MEM_READONLY_P (x
))
2295 if (nonoverlapping_memrefs_p (x
, mem
))
2298 x_addr
= get_addr (XEXP (x
, 0));
2300 if (! base_alias_check (x_addr
, mem_addr
, GET_MODE (x
), mem_mode
))
2303 x_addr
= canon_rtx (x_addr
);
2304 if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode
), mem_addr
,
2305 SIZE_FOR_MODE (x
), x_addr
, 0))
2308 if (aliases_everything_p (x
))
2311 /* We cannot use aliases_everything_p to test MEM, since we must look
2312 at MEM_MODE, rather than GET_MODE (MEM). */
2313 if (mem_mode
== QImode
|| GET_CODE (mem_addr
) == AND
)
2316 /* In true_dependence we also allow BLKmode to alias anything. Why
2317 don't we do this in anti_dependence and output_dependence? */
2318 if (mem_mode
== BLKmode
|| GET_MODE (x
) == BLKmode
)
2321 return ! fixed_scalar_and_varying_struct_p (mem
, x
, mem_addr
, x_addr
,
2325 /* Returns nonzero if a write to X might alias a previous read from
2326 (or, if WRITEP is nonzero, a write to) MEM. */
2329 write_dependence_p (rtx mem
, rtx x
, int writep
)
2331 rtx x_addr
, mem_addr
;
2335 if (MEM_VOLATILE_P (x
) && MEM_VOLATILE_P (mem
))
2338 /* (mem:BLK (scratch)) is a special mechanism to conflict with everything.
2339 This is used in epilogue deallocation functions. */
2340 if (GET_MODE (x
) == BLKmode
&& GET_CODE (XEXP (x
, 0)) == SCRATCH
)
2342 if (GET_MODE (mem
) == BLKmode
&& GET_CODE (XEXP (mem
, 0)) == SCRATCH
)
2345 if (DIFFERENT_ALIAS_SETS_P (x
, mem
))
2348 /* A read from read-only memory can't conflict with read-write memory. */
2349 if (!writep
&& MEM_READONLY_P (mem
))
2352 if (nonoverlapping_memrefs_p (x
, mem
))
2355 x_addr
= get_addr (XEXP (x
, 0));
2356 mem_addr
= get_addr (XEXP (mem
, 0));
2360 base
= find_base_term (mem_addr
);
2361 if (base
&& (GET_CODE (base
) == LABEL_REF
2362 || (GET_CODE (base
) == SYMBOL_REF
2363 && CONSTANT_POOL_ADDRESS_P (base
))))
2367 if (! base_alias_check (x_addr
, mem_addr
, GET_MODE (x
),
2371 x_addr
= canon_rtx (x_addr
);
2372 mem_addr
= canon_rtx (mem_addr
);
2374 if (!memrefs_conflict_p (SIZE_FOR_MODE (mem
), mem_addr
,
2375 SIZE_FOR_MODE (x
), x_addr
, 0))
2379 = fixed_scalar_and_varying_struct_p (mem
, x
, mem_addr
, x_addr
,
2382 return (!(fixed_scalar
== mem
&& !aliases_everything_p (x
))
2383 && !(fixed_scalar
== x
&& !aliases_everything_p (mem
)));
2386 /* Anti dependence: X is written after read in MEM takes place. */
2389 anti_dependence (rtx mem
, rtx x
)
2391 return write_dependence_p (mem
, x
, /*writep=*/0);
2394 /* Output dependence: X is written after store in MEM takes place. */
2397 output_dependence (rtx mem
, rtx x
)
2399 return write_dependence_p (mem
, x
, /*writep=*/1);
2404 init_alias_once (void)
2408 for (i
= 0; i
< FIRST_PSEUDO_REGISTER
; i
++)
2409 /* Check whether this register can hold an incoming pointer
2410 argument. FUNCTION_ARG_REGNO_P tests outgoing register
2411 numbers, so translate if necessary due to register windows. */
2412 if (FUNCTION_ARG_REGNO_P (OUTGOING_REGNO (i
))
2413 && HARD_REGNO_MODE_OK (i
, Pmode
))
2414 static_reg_base_value
[i
]
2415 = gen_rtx_ADDRESS (VOIDmode
, gen_rtx_REG (Pmode
, i
));
2417 static_reg_base_value
[STACK_POINTER_REGNUM
]
2418 = gen_rtx_ADDRESS (Pmode
, stack_pointer_rtx
);
2419 static_reg_base_value
[ARG_POINTER_REGNUM
]
2420 = gen_rtx_ADDRESS (Pmode
, arg_pointer_rtx
);
2421 static_reg_base_value
[FRAME_POINTER_REGNUM
]
2422 = gen_rtx_ADDRESS (Pmode
, frame_pointer_rtx
);
2423 #if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
2424 static_reg_base_value
[HARD_FRAME_POINTER_REGNUM
]
2425 = gen_rtx_ADDRESS (Pmode
, hard_frame_pointer_rtx
);
2429 /* Set MEMORY_MODIFIED when X modifies DATA (that is assumed
2430 to be memory reference. */
2431 static bool memory_modified
;
2433 memory_modified_1 (rtx x
, rtx pat ATTRIBUTE_UNUSED
, void *data
)
2437 if (anti_dependence (x
, (rtx
)data
) || output_dependence (x
, (rtx
)data
))
2438 memory_modified
= true;
2443 /* Return true when INSN possibly modify memory contents of MEM
2444 (i.e. address can be modified). */
2446 memory_modified_in_insn_p (rtx mem
, rtx insn
)
2450 memory_modified
= false;
2451 note_stores (PATTERN (insn
), memory_modified_1
, mem
);
2452 return memory_modified
;
2455 /* Initialize the aliasing machinery. Initialize the REG_KNOWN_VALUE
2459 init_alias_analysis (void)
2461 unsigned int maxreg
= max_reg_num ();
2467 timevar_push (TV_ALIAS_ANALYSIS
);
2469 reg_known_value_size
= maxreg
- FIRST_PSEUDO_REGISTER
;
2470 reg_known_value
= ggc_calloc (reg_known_value_size
, sizeof (rtx
));
2471 reg_known_equiv_p
= xcalloc (reg_known_value_size
, sizeof (bool));
2473 /* Overallocate reg_base_value to allow some growth during loop
2474 optimization. Loop unrolling can create a large number of
2476 if (old_reg_base_value
)
2478 reg_base_value
= old_reg_base_value
;
2479 /* If varray gets large zeroing cost may get important. */
2480 if (VARRAY_SIZE (reg_base_value
) > 256
2481 && VARRAY_SIZE (reg_base_value
) > 4 * maxreg
)
2482 VARRAY_GROW (reg_base_value
, maxreg
);
2483 VARRAY_CLEAR (reg_base_value
);
2484 if (VARRAY_SIZE (reg_base_value
) < maxreg
)
2485 VARRAY_GROW (reg_base_value
, maxreg
);
2489 VARRAY_RTX_INIT (reg_base_value
, maxreg
, "reg_base_value");
2492 new_reg_base_value
= xmalloc (maxreg
* sizeof (rtx
));
2493 reg_seen
= xmalloc (maxreg
);
2495 /* The basic idea is that each pass through this loop will use the
2496 "constant" information from the previous pass to propagate alias
2497 information through another level of assignments.
2499 This could get expensive if the assignment chains are long. Maybe
2500 we should throttle the number of iterations, possibly based on
2501 the optimization level or flag_expensive_optimizations.
2503 We could propagate more information in the first pass by making use
2504 of REG_N_SETS to determine immediately that the alias information
2505 for a pseudo is "constant".
2507 A program with an uninitialized variable can cause an infinite loop
2508 here. Instead of doing a full dataflow analysis to detect such problems
2509 we just cap the number of iterations for the loop.
2511 The state of the arrays for the set chain in question does not matter
2512 since the program has undefined behavior. */
2517 /* Assume nothing will change this iteration of the loop. */
2520 /* We want to assign the same IDs each iteration of this loop, so
2521 start counting from zero each iteration of the loop. */
2524 /* We're at the start of the function each iteration through the
2525 loop, so we're copying arguments. */
2526 copying_arguments
= true;
2528 /* Wipe the potential alias information clean for this pass. */
2529 memset (new_reg_base_value
, 0, maxreg
* sizeof (rtx
));
2531 /* Wipe the reg_seen array clean. */
2532 memset (reg_seen
, 0, maxreg
);
2534 /* Mark all hard registers which may contain an address.
2535 The stack, frame and argument pointers may contain an address.
2536 An argument register which can hold a Pmode value may contain
2537 an address even if it is not in BASE_REGS.
2539 The address expression is VOIDmode for an argument and
2540 Pmode for other registers. */
2542 memcpy (new_reg_base_value
, static_reg_base_value
,
2543 FIRST_PSEUDO_REGISTER
* sizeof (rtx
));
2545 /* Walk the insns adding values to the new_reg_base_value array. */
2546 for (insn
= get_insns (); insn
; insn
= NEXT_INSN (insn
))
2552 #if defined (HAVE_prologue) || defined (HAVE_epilogue)
2553 /* The prologue/epilogue insns are not threaded onto the
2554 insn chain until after reload has completed. Thus,
2555 there is no sense wasting time checking if INSN is in
2556 the prologue/epilogue until after reload has completed. */
2557 if (reload_completed
2558 && prologue_epilogue_contains (insn
))
2562 /* If this insn has a noalias note, process it, Otherwise,
2563 scan for sets. A simple set will have no side effects
2564 which could change the base value of any other register. */
2566 if (GET_CODE (PATTERN (insn
)) == SET
2567 && REG_NOTES (insn
) != 0
2568 && find_reg_note (insn
, REG_NOALIAS
, NULL_RTX
))
2569 record_set (SET_DEST (PATTERN (insn
)), NULL_RTX
, NULL
);
2571 note_stores (PATTERN (insn
), record_set
, NULL
);
2573 set
= single_set (insn
);
2576 && REG_P (SET_DEST (set
))
2577 && REGNO (SET_DEST (set
)) >= FIRST_PSEUDO_REGISTER
)
2579 unsigned int regno
= REGNO (SET_DEST (set
));
2580 rtx src
= SET_SRC (set
);
2583 if (REG_NOTES (insn
) != 0
2584 && (((note
= find_reg_note (insn
, REG_EQUAL
, 0)) != 0
2585 && REG_N_SETS (regno
) == 1)
2586 || (note
= find_reg_note (insn
, REG_EQUIV
, NULL_RTX
)) != 0)
2587 && GET_CODE (XEXP (note
, 0)) != EXPR_LIST
2588 && ! rtx_varies_p (XEXP (note
, 0), 1)
2589 && ! reg_overlap_mentioned_p (SET_DEST (set
),
2592 set_reg_known_value (regno
, XEXP (note
, 0));
2593 set_reg_known_equiv_p (regno
,
2594 REG_NOTE_KIND (note
) == REG_EQUIV
);
2596 else if (REG_N_SETS (regno
) == 1
2597 && GET_CODE (src
) == PLUS
2598 && REG_P (XEXP (src
, 0))
2599 && (t
= get_reg_known_value (REGNO (XEXP (src
, 0))))
2600 && GET_CODE (XEXP (src
, 1)) == CONST_INT
)
2602 t
= plus_constant (t
, INTVAL (XEXP (src
, 1)));
2603 set_reg_known_value (regno
, t
);
2604 set_reg_known_equiv_p (regno
, 0);
2606 else if (REG_N_SETS (regno
) == 1
2607 && ! rtx_varies_p (src
, 1))
2609 set_reg_known_value (regno
, src
);
2610 set_reg_known_equiv_p (regno
, 0);
2614 else if (NOTE_P (insn
)
2615 && NOTE_LINE_NUMBER (insn
) == NOTE_INSN_FUNCTION_BEG
)
2616 copying_arguments
= false;
2619 /* Now propagate values from new_reg_base_value to reg_base_value. */
2620 gcc_assert (maxreg
== (unsigned int) max_reg_num());
2622 for (ui
= 0; ui
< maxreg
; ui
++)
2624 if (new_reg_base_value
[ui
]
2625 && new_reg_base_value
[ui
] != VARRAY_RTX (reg_base_value
, ui
)
2626 && ! rtx_equal_p (new_reg_base_value
[ui
],
2627 VARRAY_RTX (reg_base_value
, ui
)))
2629 VARRAY_RTX (reg_base_value
, ui
) = new_reg_base_value
[ui
];
2634 while (changed
&& ++pass
< MAX_ALIAS_LOOP_PASSES
);
2636 /* Fill in the remaining entries. */
2637 for (i
= 0; i
< (int)reg_known_value_size
; i
++)
2638 if (reg_known_value
[i
] == 0)
2639 reg_known_value
[i
] = regno_reg_rtx
[i
+ FIRST_PSEUDO_REGISTER
];
2641 /* Simplify the reg_base_value array so that no register refers to
2642 another register, except to special registers indirectly through
2643 ADDRESS expressions.
2645 In theory this loop can take as long as O(registers^2), but unless
2646 there are very long dependency chains it will run in close to linear
2649 This loop may not be needed any longer now that the main loop does
2650 a better job at propagating alias information. */
2656 for (ui
= 0; ui
< maxreg
; ui
++)
2658 rtx base
= VARRAY_RTX (reg_base_value
, ui
);
2659 if (base
&& REG_P (base
))
2661 unsigned int base_regno
= REGNO (base
);
2662 if (base_regno
== ui
) /* register set from itself */
2663 VARRAY_RTX (reg_base_value
, ui
) = 0;
2665 VARRAY_RTX (reg_base_value
, ui
)
2666 = VARRAY_RTX (reg_base_value
, base_regno
);
2671 while (changed
&& pass
< MAX_ALIAS_LOOP_PASSES
);
2674 free (new_reg_base_value
);
2675 new_reg_base_value
= 0;
2678 timevar_pop (TV_ALIAS_ANALYSIS
);
2682 end_alias_analysis (void)
2684 old_reg_base_value
= reg_base_value
;
2685 ggc_free (reg_known_value
);
2686 reg_known_value
= 0;
2687 reg_known_value_size
= 0;
2688 free (reg_known_equiv_p
);
2689 reg_known_equiv_p
= 0;
2690 if (alias_invariant
)
2692 ggc_free (alias_invariant
);
2693 alias_invariant
= 0;
2694 alias_invariant_size
= 0;
2698 /* Do control and data flow analysis; write some of the results to the
2701 rest_of_handle_cfg (void)
2704 dump_flow_info (dump_file
);
2706 cleanup_cfg (CLEANUP_EXPENSIVE
2707 | (flag_thread_jumps
? CLEANUP_THREADING
: 0));
2710 struct tree_opt_pass pass_cfg
=
2714 rest_of_handle_cfg
, /* execute */
2717 0, /* static_pass_number */
2718 TV_FLOW
, /* tv_id */
2719 0, /* properties_required */
2720 0, /* properties_provided */
2721 0, /* properties_destroyed */
2722 0, /* todo_flags_start */
2723 TODO_dump_func
, /* todo_flags_finish */
2728 #include "gt-alias.h"