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)
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. */
30 #include "hard-reg-set.h"
31 #include "basic-block.h"
36 #include "splay-tree.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
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'. */
83 /* Nonzero if would have a child of zero: this effectively makes this
84 alias set the same as alias set zero. */
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
,
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
,
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
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
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
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
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
;
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. */
212 mems_in_disjoint_alias_sets_p (mem1
, 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))
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. */
236 insert_subset_children (node
, data
)
237 splay_tree_node node
;
240 splay_tree_insert ((splay_tree
) data
, node
->key
, node
->value
);
245 /* Return 1 if the two specified alias sets may conflict. */
248 alias_sets_conflict_p (set1
, set2
)
249 HOST_WIDE_INT set1
, set2
;
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. */
260 /* See if the first alias set is a subset of the second. */
261 ase
= get_alias_set_entry (set1
);
263 && (ase
->has_zero_child
264 || splay_tree_lookup (ase
->children
,
265 (splay_tree_key
) set2
)))
268 /* Now do the same, but with the alias sets reversed. */
269 ase
= get_alias_set_entry (set2
);
271 && (ase
->has_zero_child
272 || splay_tree_lookup (ase
->children
,
273 (splay_tree_key
) set1
)))
276 /* The two alias sets are distinct and neither one is the
277 child of the other. Therefore, they cannot alias. */
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
)
291 if (TREE_CODE (type
) != RECORD_TYPE
&& TREE_CODE (type
) != UNION_TYPE
292 && TREE_CODE (type
) != QUAL_UNION_TYPE
)
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
))))
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
)
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)
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
)))
327 /* If they are the same type, they must conflict. */
329 /* Likewise if both are volatile. */
330 || (t1
!= 0 && TYPE_VOLATILE (t1
) && t2
!= 0 && TYPE_VOLATILE (t2
)))
333 /* If one is aggregate and the other is scalar then they may not
335 if ((t1
!= 0 && AGGREGATE_TYPE_P (t1
))
336 != (t2
!= 0 && AGGREGATE_TYPE_P (t2
)))
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. */
355 if (t
== 0 || t
== error_mark_node
|| ! POINTER_TYPE_P (TREE_TYPE (t
)))
358 /* If this is a declaration, return it. */
359 if (TREE_CODE_CLASS (TREE_CODE (t
)) == 'd')
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
)))
368 return find_base_decl (TREE_OPERAND (t
, 0));
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));
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;
404 /* Return 1 if T is an expression that get_inner_reference handles. */
407 handled_component_p (t
)
410 switch (TREE_CODE (t
))
415 case NON_LVALUE_EXPR
:
420 return (TYPE_MODE (TREE_TYPE (t
))
421 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (t
, 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. */
435 /* If we're at the end, it is vacuously addressable. */
436 if (! handled_component_p (t
))
439 /* Bitfields are never addressable. */
440 else if (TREE_CODE (t
) == BIT_FIELD_REF
)
443 else if (TREE_CODE (t
) == COMPONENT_REF
444 && ! DECL_NONADDRESSABLE_P (TREE_OPERAND (t
, 1))
445 && can_address_p (TREE_OPERAND (t
, 0)))
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)))
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. */
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
469 if (! flag_strict_aliasing
|| t
== error_mark_node
471 && (TREE_TYPE (t
) == 0 || TREE_TYPE (t
) == error_mark_node
)))
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. */
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. */
489 if ((set
= lang_get_alias_set (t
)) != -1)
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
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
)
513 /* Give the language another chance to do something special. */
515 && (set
= lang_get_alias_set (t
)) != -1)
518 /* Now all we care about is the type. */
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
)
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
549 if (AGGREGATE_TYPE_P (t
) || TREE_CODE (t
) == COMPLEX_TYPE
)
550 record_component_aliases (t
);
555 /* Return a brand-new alias set. */
560 static HOST_WIDE_INT last_alias_set
;
562 if (flag_strict_aliasing
)
563 return ++last_alias_set
;
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. */
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
;
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. */
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
);
604 superset_entry
->has_zero_child
= 1;
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. */
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. */
632 record_component_aliases (type
)
635 HOST_WIDE_INT superset
= get_alias_set (type
);
641 switch (TREE_CODE (type
))
644 if (! TYPE_NONALIASED_COMPONENT (type
))
645 record_alias_subset (superset
, get_alias_set (TREE_TYPE (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
)));
657 record_alias_subset (superset
, get_alias_set (TREE_TYPE (type
)));
665 /* Allocate an alias set for use in storing and reading from the varargs
669 get_varargs_alias_set ()
671 static HOST_WIDE_INT set
= -1;
674 set
= new_alias_set ();
679 /* Likewise, but used for the fixed portions of the frame, e.g., register
683 get_frame_alias_set ()
685 static HOST_WIDE_INT set
= -1;
688 set
= new_alias_set ();
693 /* Inside SRC, the source of a SET, find a base address. */
696 find_base_value (src
)
700 switch (GET_CODE (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
];
729 /* Check for an argument passed in memory. Only record in the
730 copying-arguments block; it is too hard to track changes
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
);
741 if (GET_CODE (src
) != PLUS
&& GET_CODE (src
) != MINUS
)
744 /* ... fall through ... */
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
);
760 if (GET_CODE (src_1
) == REG
)
762 temp
= find_base_value (src_1
);
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
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
);
787 /* The standard form is (lo_sum reg sym) so look only at the
789 return find_base_value (XEXP (src
, 1));
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));
799 if (GET_MODE_SIZE (GET_MODE (src
)) < GET_MODE_SIZE (Pmode
))
803 case SIGN_EXTEND
: /* used for NT/Alpha pointers */
805 return find_base_value (XEXP (src
, 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
;
825 record_set (dest
, set
, data
)
827 void *data ATTRIBUTE_UNUSED
;
829 register unsigned regno
;
832 if (GET_CODE (dest
) != REG
)
835 regno
= REGNO (dest
);
837 if (regno
>= reg_base_value_size
)
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
845 if (GET_CODE (set
) == CLOBBER
)
847 new_reg_base_value
[regno
] = 0;
856 new_reg_base_value
[regno
] = 0;
860 new_reg_base_value
[regno
] = gen_rtx_ADDRESS (Pmode
,
861 GEN_INT (unique_id
++));
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
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
))
876 if (XEXP (src
, 0) != dest
&& XEXP (src
, 1) != dest
)
877 new_reg_base_value
[regno
] = 0;
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
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;
896 if (XEXP (src
, 0) != dest
|| GET_CODE (XEXP (src
, 1)) != CONST_INT
)
897 new_reg_base_value
[regno
] = 0;
900 new_reg_base_value
[regno
] = 0;
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
);
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
918 record_base_value (regno
, val
, invariant
)
923 if (regno
>= reg_base_value_size
)
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
)];
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.) */
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
);
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. */
996 rtx_equal_for_memref_p (x
, y
)
1001 register enum rtx_code code
;
1002 register const char *fmt
;
1004 if (x
== 0 && y
== 0)
1006 if (x
== 0 || y
== 0)
1015 code
= GET_CODE (x
);
1016 /* Rtx's of different codes cannot be equal. */
1017 if (code
!= GET_CODE (y
))
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
))
1026 /* Some RTL can be compared without a recursive examination. */
1030 return REGNO (x
) == REGNO (y
);
1033 return XEXP (x
, 0) == XEXP (y
, 0);
1036 return XSTR (x
, 0) == XSTR (y
, 0);
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. */
1046 return (XINT (x
, 1) == XINT (y
, 1)
1047 && rtx_equal_for_memref_p (XEXP (x
, 0), XEXP (y
, 0)));
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
--)
1077 if (XINT (x
, i
) != XINT (y
, i
))
1082 /* Two vectors must have the same length. */
1083 if (XVECLEN (x
, i
) != XVECLEN (y
, i
))
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)
1094 if (rtx_equal_for_memref_p (XEXP (x
, i
), XEXP (y
, i
)) == 0)
1098 /* This can happen for an asm which clobbers memory. */
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. */
1112 /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
1113 X and return it, or return 0 if none found. */
1116 find_symbolic_term (x
)
1120 register enum rtx_code code
;
1121 register const char *fmt
;
1123 code
= GET_CODE (x
);
1124 if (code
== SYMBOL_REF
|| code
== LABEL_REF
)
1126 if (GET_RTX_CLASS (code
) == 'o')
1129 fmt
= GET_RTX_FORMAT (code
);
1130 for (i
= GET_RTX_LENGTH (code
) - 1; i
>= 0; i
--)
1136 t
= find_symbolic_term (XEXP (x
, i
));
1140 else if (fmt
[i
] == 'E')
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
);
1158 switch (GET_CODE (x
))
1161 return REG_BASE_VALUE (x
);
1164 case SIGN_EXTEND
: /* Used for Alpha/NT pointers */
1170 return find_base_term (XEXP (x
, 0));
1173 val
= CSELIB_VAL_PTR (x
);
1174 for (l
= val
->locs
; l
; l
= l
->next
)
1175 if ((x
= find_base_term (l
->loc
)) != 0)
1181 if (GET_CODE (x
) != PLUS
&& GET_CODE (x
) != 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
1223 && (GET_CODE (tmp1
) == SYMBOL_REF
1224 || GET_CODE (tmp1
) == LABEL_REF
1225 || (GET_CODE (tmp1
) == ADDRESS
1226 && GET_MODE (tmp1
) != VOIDmode
)))
1230 && (GET_CODE (tmp2
) == SYMBOL_REF
1231 || GET_CODE (tmp2
) == LABEL_REF
1232 || (GET_CODE (tmp2
) == ADDRESS
1233 && GET_MODE (tmp2
) != VOIDmode
)))
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. */
1243 if (GET_CODE (XEXP (x
, 0)) == REG
&& GET_CODE (XEXP (x
, 1)) == CONST_INT
)
1244 return REG_BASE_VALUE (XEXP (x
, 0));
1252 return REG_BASE_VALUE (frame_pointer_rtx
);
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. */
1263 base_alias_check (x
, y
, x_mode
, y_mode
)
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. */
1277 if (! flag_expensive_optimizations
|| (x_c
= canon_rtx (x
)) == x
)
1280 x_base
= find_base_term (x_c
);
1288 if (! flag_expensive_optimizations
|| (y_c
= canon_rtx (y
)) == y
)
1291 y_base
= find_base_term (y_c
);
1296 /* If the base addresses are equal nothing is known about aliasing. */
1297 if (rtx_equal_p (x_base
, y_base
))
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
)
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))))
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))))
1317 /* Differing symbols never alias. */
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
))
1329 if (! flag_argument_noalias
)
1332 if (flag_argument_noalias
> 1)
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. */
1348 struct elt_loc_list
*l
;
1350 if (GET_CODE (x
) != VALUE
)
1352 v
= CSELIB_VAL_PTR (x
);
1353 for (l
= v
->locs
; l
; l
= l
->next
)
1354 if (CONSTANT_P (l
->loc
))
1356 for (l
= v
->locs
; l
; l
= l
->next
)
1357 if (GET_CODE (l
->loc
) != REG
&& GET_CODE (l
->loc
) != MEM
)
1360 return v
->locs
->loc
;
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
)
1376 switch (GET_CODE (addr
))
1379 offset
= (n_refs
+ 1) * size
;
1382 offset
= -(n_refs
+ 1) * size
;
1385 offset
= n_refs
* size
;
1388 offset
= -n_refs
* size
;
1396 addr
= gen_rtx_PLUS (GET_MODE (addr
), XEXP (addr
, 0), GEN_INT (offset
));
1398 addr
= XEXP (addr
, 0);
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
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. */
1421 memrefs_conflict_p (xsize
, x
, ysize
, y
, c
)
1426 if (GET_CODE (x
) == VALUE
)
1428 if (GET_CODE (y
) == VALUE
)
1430 if (GET_CODE (x
) == HIGH
)
1432 else if (GET_CODE (x
) == LO_SUM
)
1435 x
= canon_rtx (addr_side_effect_eval (x
, xsize
, 0));
1436 if (GET_CODE (y
) == HIGH
)
1438 else if (GET_CODE (y
) == LO_SUM
)
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)
1447 if (c
>= 0 && xsize
> c
)
1449 if (c
< 0 && ysize
+c
> 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
));
1481 return memrefs_conflict_p (xsize
, x0
, ysize
, y
,
1484 else if (GET_CODE (y1
) == CONST_INT
)
1485 return memrefs_conflict_p (xsize
, x
, ysize
, y0
, c
+ INTVAL (y1
));
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
));
1505 if (GET_CODE (x
) == GET_CODE (y
))
1506 switch (GET_CODE (x
))
1510 /* Handle cases where we expect the second operands to be the
1511 same, and check only whether the first operand would conflict
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
))
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
)
1527 xsize
/= INTVAL (x1
);
1528 ysize
/= INTVAL (x1
);
1530 return memrefs_conflict_p (xsize
, x0
, ysize
, y0
, c
);
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)
1546 if (! memrefs_conflict_p (xsize
, i_x
? i_x
: x
,
1547 ysize
, i_y
? i_y
: y
, c
))
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)))
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)))
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;
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
);
1604 return memrefs_conflict_p (xsize
, canon_rtx (XEXP (x
, 0)),
1607 if (GET_CODE (y
) == CONST
)
1608 return memrefs_conflict_p (xsize
, x
, ysize
,
1609 canon_rtx (XEXP (y
, 0)), c
);
1612 return (xsize
<= 0 || ysize
<= 0
1613 || (rtx_equal_for_memref_p (x
, y
)
1614 && ((c
>= 0 && xsize
> c
) || (c
< 0 && ysize
+c
> 0))));
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
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
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
)
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. */
1660 fixed_scalar_and_varying_struct_p (mem1
, mem2
, mem1_addr
, mem2_addr
, varies_p
)
1662 rtx mem1_addr
, mem2_addr
;
1663 int (*varies_p
) PARAMS ((rtx
, int));
1665 if (! flag_strict_aliasing
)
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
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
1683 /* Returns nonzero if something about the mode or address format MEM1
1684 indicates that it might well alias *anything*. */
1687 aliases_everything_p (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. */
1698 /* True dependence: X is read after store in MEM takes place. */
1701 true_dependence (mem
, mem_mode
, x
, varies
)
1703 enum machine_mode mem_mode
;
1705 int (*varies
) PARAMS ((rtx
, int));
1707 register rtx x_addr
, mem_addr
;
1710 if (MEM_VOLATILE_P (x
) && MEM_VOLATILE_P (mem
))
1713 if (DIFFERENT_ALIAS_SETS_P (x
, mem
))
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
))
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
))))
1741 if (! base_alias_check (x_addr
, mem_addr
, GET_MODE (x
), mem_mode
))
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))
1751 if (aliases_everything_p (x
))
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
)
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
)
1764 return ! fixed_scalar_and_varying_struct_p (mem
, x
, mem_addr
, x_addr
,
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. */
1772 write_dependence_p (mem
, x
, writep
)
1777 rtx x_addr
, mem_addr
;
1781 if (MEM_VOLATILE_P (x
) && MEM_VOLATILE_P (mem
))
1784 if (DIFFERENT_ALIAS_SETS_P (x
, mem
))
1787 /* Unchanging memory can't conflict with non-unchanging memory. */
1788 if (RTX_UNCHANGING_P (x
) != RTX_UNCHANGING_P (mem
))
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
))
1797 x_addr
= get_addr (XEXP (x
, 0));
1798 mem_addr
= get_addr (XEXP (mem
, 0));
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
))))
1809 if (! base_alias_check (x_addr
, mem_addr
, GET_MODE (x
),
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))
1821 = fixed_scalar_and_varying_struct_p (mem
, x
, mem_addr
, x_addr
,
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
)
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
)
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. */
1852 nonlocal_mentioned_p (x
)
1856 register RTX_CODE code
;
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
);
1873 code
= GET_CODE (x
);
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
)])
1891 /* Global registers are not local. */
1892 if (regno
< FIRST_PSEUDO_REGISTER
&& global_regs
[regno
])
1906 /* Constants in the function's constants pool are constant. */
1907 if (CONSTANT_POOL_ADDRESS_P (x
))
1912 /* Non-constant calls and recursion are not local. */
1916 /* Be overly conservative and consider any volatile memory
1917 reference as not local. */
1918 if (MEM_VOLATILE_P (x
))
1920 base
= find_base_term (XEXP (x
, 0));
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
1935 || XEXP (base
, 0) == frame_pointer_rtx
))
1937 /* Constants in the function's constant pool are constant. */
1938 if (GET_CODE (base
) == SYMBOL_REF
&& CONSTANT_POOL_ADDRESS_P (base
))
1943 case UNSPEC_VOLATILE
:
1948 if (MEM_VOLATILE_P (x
))
1957 /* Recursively scan the operands of this expression. */
1960 register const char *fmt
= GET_RTX_FORMAT (code
);
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
)))
1970 else if (fmt
[i
] == 'E')
1973 for (j
= 0; j
< XVECLEN (x
, i
); j
++)
1974 if (nonlocal_mentioned_p (XVECEXP (x
, i
, j
)))
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
1988 Morgan Kaufmann, 1997
1990 and heavily borrowed from flow_depth_first_order_compute. */
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
));
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
;
2026 /* Look at the edge on the top of the stack. */
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
++;
2041 /* Since the DEST node has been visited for the first
2042 time, check its successors. */
2043 stack
[sp
++] = dest
->succ
;
2046 post
[dest
->index
] = postnum
++;
2050 if (dest
!= EXIT_BLOCK_PTR
2051 && pre
[src
->index
] >= pre
[dest
->index
]
2052 && post
[dest
->index
] == 0)
2055 if (! e
->succ_next
&& src
!= ENTRY_BLOCK_PTR
)
2056 post
[src
->index
] = postnum
++;
2059 stack
[sp
- 1] = e
->succ_next
;
2068 sbitmap_free (visited
);
2073 /* Mark the function if it is constant. */
2076 mark_constant_function ()
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
)
2088 /* A loop might not return which counts as a side effect. */
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;
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
;
2121 #ifndef OUTGOING_REGNO
2122 #define OUTGOING_REGNO(N) N
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
2139 init_alias_analysis ()
2141 int maxreg
= max_reg_num ();
2144 register unsigned int ui
;
2147 reg_known_value_size
= maxreg
;
2150 = (rtx
*) xcalloc ((maxreg
- FIRST_PSEUDO_REGISTER
), sizeof (rtx
))
2151 - FIRST_PSEUDO_REGISTER
;
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
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. */
2195 /* Assume nothing will change this iteration of the loop. */
2198 /* We want to assign the same IDs each iteration of this loop, so
2199 start counting from zero each iteration of the loop. */
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
);
2236 /* Walk the insns adding values to the new_reg_base_value array. */
2237 for (insn
= get_insns (); insn
; insn
= NEXT_INSN (insn
))
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
))
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
);
2262 note_stores (PATTERN (insn
), record_set
, NULL
);
2264 set
= single_set (insn
);
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
];
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
2338 This loop may not be needed any longer now that the main loop does
2339 a better job at propagating alias information. */
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;
2354 reg_base_value
[ui
] = reg_base_value
[base_regno
];
2359 while (changed
&& pass
< MAX_ALIAS_LOOP_PASSES
);
2362 free (new_reg_base_value
);
2363 new_reg_base_value
= 0;
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;
2378 ggc_del_root (reg_base_value
);
2379 free (reg_base_value
);
2382 reg_base_value_size
= 0;
2383 if (alias_invariant
)
2385 free (alias_invariant
);
2386 alias_invariant
= 0;