re PR c++/24780 (ICE set_mem_attributes_minus_bitpos)
[gcc.git] / gcc / alias.c
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).
5
6 This file is part of GCC.
7
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
11 version.
12
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
16 for more details.
17
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
21 02110-1301, USA. */
22
23 #include "config.h"
24 #include "system.h"
25 #include "coretypes.h"
26 #include "tm.h"
27 #include "rtl.h"
28 #include "tree.h"
29 #include "tm_p.h"
30 #include "function.h"
31 #include "alias.h"
32 #include "emit-rtl.h"
33 #include "regs.h"
34 #include "hard-reg-set.h"
35 #include "basic-block.h"
36 #include "flags.h"
37 #include "output.h"
38 #include "toplev.h"
39 #include "cselib.h"
40 #include "splay-tree.h"
41 #include "ggc.h"
42 #include "langhooks.h"
43 #include "timevar.h"
44 #include "target.h"
45 #include "cgraph.h"
46 #include "varray.h"
47 #include "tree-pass.h"
48 #include "ipa-type-escape.h"
49
50 /* The aliasing API provided here solves related but different problems:
51
52 Say there exists (in c)
53
54 struct X {
55 struct Y y1;
56 struct Z z2;
57 } x1, *px1, *px2;
58
59 struct Y y2, *py;
60 struct Z z2, *pz;
61
62
63 py = &px1.y1;
64 px2 = &x1;
65
66 Consider the four questions:
67
68 Can a store to x1 interfere with px2->y1?
69 Can a store to x1 interfere with px2->z2?
70 (*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?
73
74 The answer to these questions can be yes, yes, yes, and maybe.
75
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).
80
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.
88
89 The pass ipa-type-escape does this analysis for the types whose
90 instances do not escape across the compilation boundary.
91
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.
99 */
100
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:
105
106 struct S { int i; double d; };
107
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
111 like:
112 struct S
113 / \
114 / \
115 |/_ _\|
116 int double
117
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'.
121
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.
126
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. */
130
131 struct alias_set_entry GTY(())
132 {
133 /* The alias set number, as stored in MEM_ALIAS_SET. */
134 HOST_WIDE_INT alias_set;
135
136 /* The children of the alias set. These are not just the immediate
137 children, but, in fact, all descendants. So, if we have:
138
139 struct T { struct S s; float f; }
140
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;
144
145 /* Nonzero if would have a child of zero: this effectively makes this
146 alias set the same as alias set zero. */
147 int has_zero_child;
148 };
149 typedef struct alias_set_entry *alias_set_entry;
150
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,
156 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,
163 int (*) (rtx, int));
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);
170
171 static void memory_modified_1 (rtx, rtx, void *);
172 static void record_alias_subset (HOST_WIDE_INT, HOST_WIDE_INT);
173
174 /* Set up all info needed to perform alias analysis on memory references. */
175
176 /* Returns the size in bytes of the mode of X. */
177 #define SIZE_FOR_MODE(X) (GET_MODE_SIZE (GET_MODE (X)))
178
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
182 not legal ANSI C. */
183 #define DIFFERENT_ALIAS_SETS_P(MEM1, MEM2) \
184 mems_in_disjoint_alias_sets_p (MEM1, MEM2)
185
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
189
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
194 of the first set.
195
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.
199
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.
204
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. */
208
209 static GTY(()) varray_type reg_base_value;
210 static rtx *new_reg_base_value;
211
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
214 array. */
215 static GTY((deletable)) varray_type old_reg_base_value;
216
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];
220
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)
224
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.
228
229 The length of this array is REG_BASE_VALUE_SIZE.
230
231 Because this array contains only pseudo registers it has no effect
232 after reload. */
233 static GTY((length("alias_invariant_size"))) rtx *alias_invariant;
234 static GTY(()) unsigned int alias_invariant_size;
235
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;
240
241 /* Indicates number of valid entries in reg_known_value. */
242 static GTY(()) unsigned int reg_known_value_size;
243
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.
248
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;
257
258 /* True when scanning insns from the start of the rtl to the
259 NOTE_INSN_FUNCTION_BEG note. */
260 static bool copying_arguments;
261
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;
264 \f
265 /* Returns a pointer to the alias set entry for ALIAS_SET, if there is
266 such an entry, or NULL otherwise. */
267
268 static inline alias_set_entry
269 get_alias_set_entry (HOST_WIDE_INT alias_set)
270 {
271 return (alias_set_entry)VARRAY_GENERIC_PTR (alias_sets, alias_set);
272 }
273
274 /* Returns nonzero if the alias sets for MEM1 and MEM2 are such that
275 the two MEMs cannot alias each other. */
276
277 static inline int
278 mems_in_disjoint_alias_sets_p (rtx mem1, rtx mem2)
279 {
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)));
289
290 return ! alias_sets_conflict_p (MEM_ALIAS_SET (mem1), MEM_ALIAS_SET (mem2));
291 }
292
293 /* Insert the NODE into the splay tree given by DATA. Used by
294 record_alias_subset via splay_tree_foreach. */
295
296 static int
297 insert_subset_children (splay_tree_node node, void *data)
298 {
299 splay_tree_insert ((splay_tree) data, node->key, node->value);
300
301 return 0;
302 }
303
304 /* Return 1 if the two specified alias sets may conflict. */
305
306 int
307 alias_sets_conflict_p (HOST_WIDE_INT set1, HOST_WIDE_INT set2)
308 {
309 alias_set_entry ase;
310
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. */
315 || set1 == set2)
316 return 1;
317
318 /* See if the first alias set is a subset of the second. */
319 ase = get_alias_set_entry (set1);
320 if (ase != 0
321 && (ase->has_zero_child
322 || splay_tree_lookup (ase->children,
323 (splay_tree_key) set2)))
324 return 1;
325
326 /* Now do the same, but with the alias sets reversed. */
327 ase = get_alias_set_entry (set2);
328 if (ase != 0
329 && (ase->has_zero_child
330 || splay_tree_lookup (ase->children,
331 (splay_tree_key) set1)))
332 return 1;
333
334 /* The two alias sets are distinct and neither one is the
335 child of the other. Therefore, they cannot alias. */
336 return 0;
337 }
338
339 /* Return 1 if the two specified alias sets might conflict, or if any subtype
340 of these alias sets might conflict. */
341
342 int
343 alias_sets_might_conflict_p (HOST_WIDE_INT set1, HOST_WIDE_INT set2)
344 {
345 if (set1 == 0 || set2 == 0 || set1 == set2)
346 return 1;
347
348 return 0;
349 }
350
351 \f
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. */
356
357 int
358 objects_must_conflict_p (tree t1, tree t2)
359 {
360 HOST_WIDE_INT set1, set2;
361
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)
366 return 0;
367
368 /* If they are the same type, they must conflict. */
369 if (t1 == t2
370 /* Likewise if both are volatile. */
371 || (t1 != 0 && TYPE_VOLATILE (t1) && t2 != 0 && TYPE_VOLATILE (t2)))
372 return 1;
373
374 set1 = t1 ? get_alias_set (t1) : 0;
375 set2 = t2 ? get_alias_set (t2) : 0;
376
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;
383 }
384 \f
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. */
389
390 static tree
391 find_base_decl (tree t)
392 {
393 tree d0, d1;
394
395 if (t == 0 || t == error_mark_node || ! POINTER_TYPE_P (TREE_TYPE (t)))
396 return 0;
397
398 /* If this is a declaration, return it. If T is based on a restrict
399 qualified decl, return that decl. */
400 if (DECL_P (t))
401 {
402 if (TREE_CODE (t) == VAR_DECL && DECL_BASED_ON_RESTRICT_P (t))
403 t = DECL_GET_RESTRICT_BASE (t);
404 return t;
405 }
406
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)))
411 {
412 case tcc_unary:
413 return find_base_decl (TREE_OPERAND (t, 0));
414
415 case tcc_binary:
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));
419 if (d0 == d1)
420 return d0;
421 else if (d0 == 0)
422 return d1;
423 else if (d1 == 0)
424 return d0;
425 else
426 return 0;
427
428 default:
429 return 0;
430 }
431 }
432
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.
436
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. */
442
443 bool
444 component_uses_parent_alias_set (tree t)
445 {
446 while (1)
447 {
448 /* If we're at the end, it vacuously uses its own alias set. */
449 if (!handled_component_p (t))
450 return false;
451
452 switch (TREE_CODE (t))
453 {
454 case COMPONENT_REF:
455 if (DECL_NONADDRESSABLE_P (TREE_OPERAND (t, 1)))
456 return true;
457 break;
458
459 case ARRAY_REF:
460 case ARRAY_RANGE_REF:
461 if (TYPE_NONALIASED_COMPONENT (TREE_TYPE (TREE_OPERAND (t, 0))))
462 return true;
463 break;
464
465 case REALPART_EXPR:
466 case IMAGPART_EXPR:
467 break;
468
469 default:
470 /* Bitfields and casts are never addressable. */
471 return true;
472 }
473
474 t = TREE_OPERAND (t, 0);
475 if (get_alias_set (TREE_TYPE (t)) == 0)
476 return true;
477 }
478 }
479
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. */
482
483 HOST_WIDE_INT
484 get_alias_set (tree t)
485 {
486 HOST_WIDE_INT set;
487
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
490 an error. */
491 if (! flag_strict_aliasing || t == error_mark_node
492 || (! TYPE_P (t)
493 && (TREE_TYPE (t) == 0 || TREE_TYPE (t) == error_mark_node)))
494 return 0;
495
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
500 aren't types. */
501 if (! TYPE_P (t))
502 {
503 tree inner = t;
504
505 /* Remove any nops, then give the language a chance to do
506 something with this tree before we look at it. */
507 STRIP_NOPS (t);
508 set = lang_hooks.get_alias_set (t);
509 if (set != -1)
510 return set;
511
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))
515 {
516 inner = TREE_OPERAND (inner, 0);
517 STRIP_NOPS (inner);
518 }
519
520 /* Check for accesses through restrict-qualified pointers. */
521 if (INDIRECT_REF_P (inner))
522 {
523 tree decl = find_base_decl (TREE_OPERAND (inner, 0));
524
525 if (decl && DECL_POINTER_ALIAS_SET_KNOWN_P (decl))
526 {
527 /* If we haven't computed the actual alias set, do it now. */
528 if (DECL_POINTER_ALIAS_SET (decl) == -2)
529 {
530 tree pointed_to_type = TREE_TYPE (TREE_TYPE (decl));
531
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
538 decl. */
539 HOST_WIDE_INT pointed_to_alias_set
540 = get_alias_set (pointed_to_type);
541
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;
556 else
557 {
558 DECL_POINTER_ALIAS_SET (decl) = new_alias_set ();
559 record_alias_subset (pointed_to_alias_set,
560 DECL_POINTER_ALIAS_SET (decl));
561 }
562 }
563
564 /* We use the alias set indicated in the declaration. */
565 return DECL_POINTER_ALIAS_SET (decl);
566 }
567
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)))))
574 return 0;
575 }
576
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))
580 {
581 t = TREE_OPERAND (t, 0);
582 STRIP_NOPS (t);
583 }
584
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));
591
592 /* Now all we care about is the type. */
593 t = TREE_TYPE (t);
594 }
595
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);
601
602 /* See if the language has special handling for this type. */
603 set = lang_hooks.get_alias_set (t);
604 if (set != -1)
605 return set;
606
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)
611 set = 0;
612
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
616 array slice. */
617 else if (TREE_CODE (t) == VECTOR_TYPE)
618 set = get_alias_set (TREE_TYPE (t));
619
620 else
621 /* Otherwise make a new alias set for this type. */
622 set = new_alias_set ();
623
624 TYPE_ALIAS_SET (t) = set;
625
626 /* If this is an aggregate type, we must record any component aliasing
627 information. */
628 if (AGGREGATE_TYPE_P (t) || TREE_CODE (t) == COMPLEX_TYPE)
629 record_component_aliases (t);
630
631 return set;
632 }
633
634 /* Return a brand-new alias set. */
635
636 static GTY(()) HOST_WIDE_INT last_alias_set;
637
638 HOST_WIDE_INT
639 new_alias_set (void)
640 {
641 if (flag_strict_aliasing)
642 {
643 if (!alias_sets)
644 VARRAY_GENERIC_PTR_INIT (alias_sets, 10, "alias sets");
645 else
646 VARRAY_GROW (alias_sets, last_alias_set + 2);
647 return ++last_alias_set;
648 }
649 else
650 return 0;
651 }
652
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.
660
661 This function should be called only once per SUPERSET/SUBSET pair.
662
663 It is illegal for SUPERSET to be zero; everything is implicitly a
664 subset of alias set zero. */
665
666 static void
667 record_alias_subset (HOST_WIDE_INT superset, HOST_WIDE_INT subset)
668 {
669 alias_set_entry superset_entry;
670 alias_set_entry subset_entry;
671
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)
675 return;
676
677 gcc_assert (superset);
678
679 superset_entry = get_alias_set_entry (superset);
680 if (superset_entry == 0)
681 {
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;
690 }
691
692 if (subset == 0)
693 superset_entry->has_zero_child = 1;
694 else
695 {
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. */
699 if (subset_entry)
700 {
701 if (subset_entry->has_zero_child)
702 superset_entry->has_zero_child = 1;
703
704 splay_tree_foreach (subset_entry->children, insert_subset_children,
705 superset_entry->children);
706 }
707
708 /* Enter the SUBSET itself as a child of the SUPERSET. */
709 splay_tree_insert (superset_entry->children,
710 (splay_tree_key) subset, 0);
711 }
712 }
713
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. */
719
720 void
721 record_component_aliases (tree type)
722 {
723 HOST_WIDE_INT superset = get_alias_set (type);
724 tree field;
725
726 if (superset == 0)
727 return;
728
729 switch (TREE_CODE (type))
730 {
731 case ARRAY_TYPE:
732 if (! TYPE_NONALIASED_COMPONENT (type))
733 record_alias_subset (superset, get_alias_set (TREE_TYPE (type)));
734 break;
735
736 case RECORD_TYPE:
737 case UNION_TYPE:
738 case QUAL_UNION_TYPE:
739 /* Recursively record aliases for the base classes, if there are any. */
740 if (TYPE_BINFO (type))
741 {
742 int i;
743 tree binfo, base_binfo;
744
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)));
749 }
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)));
753 break;
754
755 case COMPLEX_TYPE:
756 record_alias_subset (superset, get_alias_set (TREE_TYPE (type)));
757 break;
758
759 default:
760 break;
761 }
762 }
763
764 /* Allocate an alias set for use in storing and reading from the varargs
765 spill area. */
766
767 static GTY(()) HOST_WIDE_INT varargs_set = -1;
768
769 HOST_WIDE_INT
770 get_varargs_alias_set (void)
771 {
772 #if 1
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. */
777 return 0;
778 #else
779 if (varargs_set == -1)
780 varargs_set = new_alias_set ();
781
782 return varargs_set;
783 #endif
784 }
785
786 /* Likewise, but used for the fixed portions of the frame, e.g., register
787 save areas. */
788
789 static GTY(()) HOST_WIDE_INT frame_set = -1;
790
791 HOST_WIDE_INT
792 get_frame_alias_set (void)
793 {
794 if (frame_set == -1)
795 frame_set = new_alias_set ();
796
797 return frame_set;
798 }
799
800 /* Inside SRC, the source of a SET, find a base address. */
801
802 static rtx
803 find_base_value (rtx src)
804 {
805 unsigned int regno;
806
807 switch (GET_CODE (src))
808 {
809 case SYMBOL_REF:
810 case LABEL_REF:
811 return src;
812
813 case REG:
814 regno = REGNO (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];
821
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.
825
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))
830 {
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];
836
837 if (VARRAY_RTX (reg_base_value, regno))
838 return VARRAY_RTX (reg_base_value, regno);
839 }
840
841 return 0;
842
843 case MEM:
844 /* Check for an argument passed in memory. Only record in the
845 copying-arguments block; it is too hard to track changes
846 otherwise. */
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);
852 return 0;
853
854 case CONST:
855 src = XEXP (src, 0);
856 if (GET_CODE (src) != PLUS && GET_CODE (src) != MINUS)
857 break;
858
859 /* ... fall through ... */
860
861 case PLUS:
862 case MINUS:
863 {
864 rtx temp, src_0 = XEXP (src, 0), src_1 = XEXP (src, 1);
865
866 /* If either operand is a REG that is a known pointer, then it
867 is the base. */
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);
872
873 /* If either operand is a REG, then see if we already have
874 a known value for it. */
875 if (REG_P (src_0))
876 {
877 temp = find_base_value (src_0);
878 if (temp != 0)
879 src_0 = temp;
880 }
881
882 if (REG_P (src_1))
883 {
884 temp = find_base_value (src_1);
885 if (temp!= 0)
886 src_1 = temp;
887 }
888
889 /* If either base is named object or a special address
890 (like an argument or stack reference), then use it for the
891 base term. */
892 if (src_0 != 0
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)))
897 return src_0;
898
899 if (src_1 != 0
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)))
904 return src_1;
905
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);
913
914 return 0;
915 }
916
917 case LO_SUM:
918 /* The standard form is (lo_sum reg sym) so look only at the
919 second operand. */
920 return find_base_value (XEXP (src, 1));
921
922 case AND:
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));
927 return 0;
928
929 case TRUNCATE:
930 if (GET_MODE_SIZE (GET_MODE (src)) < GET_MODE_SIZE (Pmode))
931 break;
932 /* Fall through. */
933 case HIGH:
934 case PRE_INC:
935 case PRE_DEC:
936 case POST_INC:
937 case POST_DEC:
938 case PRE_MODIFY:
939 case POST_MODIFY:
940 return find_base_value (XEXP (src, 0));
941
942 case ZERO_EXTEND:
943 case SIGN_EXTEND: /* used for NT/Alpha pointers */
944 {
945 rtx temp = find_base_value (XEXP (src, 0));
946
947 if (temp != 0 && CONSTANT_P (temp))
948 temp = convert_memory_address (Pmode, temp);
949
950 return temp;
951 }
952
953 default:
954 break;
955 }
956
957 return 0;
958 }
959
960 /* Called from init_alias_analysis indirectly through note_stores. */
961
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;
965
966 /* Addresses which are known not to alias anything else are identified
967 by a unique integer. */
968 static int unique_id;
969
970 static void
971 record_set (rtx dest, rtx set, void *data ATTRIBUTE_UNUSED)
972 {
973 unsigned regno;
974 rtx src;
975 int n;
976
977 if (!REG_P (dest))
978 return;
979
980 regno = REGNO (dest);
981
982 gcc_assert (regno < VARRAY_SIZE (reg_base_value));
983
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)];
988 else
989 n = 1;
990 if (n != 1)
991 {
992 while (--n >= 0)
993 {
994 reg_seen[regno + n] = 1;
995 new_reg_base_value[regno + n] = 0;
996 }
997 return;
998 }
999
1000 if (set)
1001 {
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
1004 set). */
1005 if (GET_CODE (set) == CLOBBER)
1006 {
1007 new_reg_base_value[regno] = 0;
1008 return;
1009 }
1010 src = SET_SRC (set);
1011 }
1012 else
1013 {
1014 if (reg_seen[regno])
1015 {
1016 new_reg_base_value[regno] = 0;
1017 return;
1018 }
1019 reg_seen[regno] = 1;
1020 new_reg_base_value[regno] = gen_rtx_ADDRESS (Pmode,
1021 GEN_INT (unique_id++));
1022 return;
1023 }
1024
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:
1027
1028 (1) The register might be assigned an entirely new value
1029 that has the same base term as the original set.
1030
1031 (2) The set might be a simple self-modification that
1032 cannot change REGNO's base value.
1033
1034 If neither case holds, reject the original base value as invalid.
1035 Note that the following situation is not detected:
1036
1037 extern int x, y; int *p = &x; p += (&y-&x);
1038
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))
1044 {
1045 case LO_SUM:
1046 case MINUS:
1047 if (XEXP (src, 0) != dest && XEXP (src, 1) != dest)
1048 new_reg_base_value[regno] = 0;
1049 break;
1050 case PLUS:
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
1053 an index. */
1054 {
1055 rtx other = NULL_RTX;
1056
1057 if (XEXP (src, 0) == dest)
1058 other = XEXP (src, 1);
1059 else if (XEXP (src, 1) == dest)
1060 other = XEXP (src, 0);
1061
1062 if (! other || find_base_value (other))
1063 new_reg_base_value[regno] = 0;
1064 break;
1065 }
1066 case AND:
1067 if (XEXP (src, 0) != dest || GET_CODE (XEXP (src, 1)) != CONST_INT)
1068 new_reg_base_value[regno] = 0;
1069 break;
1070 default:
1071 new_reg_base_value[regno] = 0;
1072 break;
1073 }
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);
1078
1079 reg_seen[regno] = 1;
1080 }
1081
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
1086 are different. */
1087
1088 void
1089 record_base_value (unsigned int regno, rtx val, int invariant)
1090 {
1091 if (invariant && alias_invariant && regno < alias_invariant_size)
1092 alias_invariant[regno] = val;
1093
1094 if (regno >= VARRAY_SIZE (reg_base_value))
1095 VARRAY_GROW (reg_base_value, max_reg_num ());
1096
1097 if (REG_P (val))
1098 {
1099 VARRAY_RTX (reg_base_value, regno)
1100 = REG_BASE_VALUE (val);
1101 return;
1102 }
1103 VARRAY_RTX (reg_base_value, regno)
1104 = find_base_value (val);
1105 }
1106
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. */
1111
1112 void
1113 clear_reg_alias_info (rtx reg)
1114 {
1115 unsigned int regno = REGNO (reg);
1116
1117 if (regno >= FIRST_PSEUDO_REGISTER)
1118 {
1119 regno -= FIRST_PSEUDO_REGISTER;
1120 if (regno < reg_known_value_size)
1121 {
1122 reg_known_value[regno] = reg;
1123 reg_known_equiv_p[regno] = false;
1124 }
1125 }
1126 }
1127
1128 /* If a value is known for REGNO, return it. */
1129
1130 rtx
1131 get_reg_known_value (unsigned int regno)
1132 {
1133 if (regno >= FIRST_PSEUDO_REGISTER)
1134 {
1135 regno -= FIRST_PSEUDO_REGISTER;
1136 if (regno < reg_known_value_size)
1137 return reg_known_value[regno];
1138 }
1139 return NULL;
1140 }
1141
1142 /* Set it. */
1143
1144 static void
1145 set_reg_known_value (unsigned int regno, rtx val)
1146 {
1147 if (regno >= FIRST_PSEUDO_REGISTER)
1148 {
1149 regno -= FIRST_PSEUDO_REGISTER;
1150 if (regno < reg_known_value_size)
1151 reg_known_value[regno] = val;
1152 }
1153 }
1154
1155 /* Similarly for reg_known_equiv_p. */
1156
1157 bool
1158 get_reg_known_equiv_p (unsigned int regno)
1159 {
1160 if (regno >= FIRST_PSEUDO_REGISTER)
1161 {
1162 regno -= FIRST_PSEUDO_REGISTER;
1163 if (regno < reg_known_value_size)
1164 return reg_known_equiv_p[regno];
1165 }
1166 return false;
1167 }
1168
1169 static void
1170 set_reg_known_equiv_p (unsigned int regno, bool val)
1171 {
1172 if (regno >= FIRST_PSEUDO_REGISTER)
1173 {
1174 regno -= FIRST_PSEUDO_REGISTER;
1175 if (regno < reg_known_value_size)
1176 reg_known_equiv_p[regno] = val;
1177 }
1178 }
1179
1180
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.) */
1185
1186 rtx
1187 canon_rtx (rtx x)
1188 {
1189 /* Recursively look for equivalences. */
1190 if (REG_P (x) && REGNO (x) >= FIRST_PSEUDO_REGISTER)
1191 {
1192 rtx t = get_reg_known_value (REGNO (x));
1193 if (t == x)
1194 return x;
1195 if (t)
1196 return canon_rtx (t);
1197 }
1198
1199 if (GET_CODE (x) == PLUS)
1200 {
1201 rtx x0 = canon_rtx (XEXP (x, 0));
1202 rtx x1 = canon_rtx (XEXP (x, 1));
1203
1204 if (x0 != XEXP (x, 0) || x1 != XEXP (x, 1))
1205 {
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);
1211 }
1212 }
1213
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. */
1218 else if (MEM_P (x))
1219 x = replace_equiv_address_nv (x, canon_rtx (XEXP (x, 0)));
1220
1221 return x;
1222 }
1223
1224 /* Return 1 if X and Y are identical-looking rtx's.
1225 Expect that X and Y has been already canonicalized.
1226
1227 We use the data in reg_known_value above to see if two registers with
1228 different numbers are, in fact, equivalent. */
1229
1230 static int
1231 rtx_equal_for_memref_p (rtx x, rtx y)
1232 {
1233 int i;
1234 int j;
1235 enum rtx_code code;
1236 const char *fmt;
1237
1238 if (x == 0 && y == 0)
1239 return 1;
1240 if (x == 0 || y == 0)
1241 return 0;
1242
1243 if (x == y)
1244 return 1;
1245
1246 code = GET_CODE (x);
1247 /* Rtx's of different codes cannot be equal. */
1248 if (code != GET_CODE (y))
1249 return 0;
1250
1251 /* (MULT:SI x y) and (MULT:HI x y) are NOT equivalent.
1252 (REG:SI x) and (REG:HI x) are NOT equivalent. */
1253
1254 if (GET_MODE (x) != GET_MODE (y))
1255 return 0;
1256
1257 /* Some RTL can be compared without a recursive examination. */
1258 switch (code)
1259 {
1260 case REG:
1261 return REGNO (x) == REGNO (y);
1262
1263 case LABEL_REF:
1264 return XEXP (x, 0) == XEXP (y, 0);
1265
1266 case SYMBOL_REF:
1267 return XSTR (x, 0) == XSTR (y, 0);
1268
1269 case VALUE:
1270 case CONST_INT:
1271 case CONST_DOUBLE:
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. */
1275 return 0;
1276
1277 default:
1278 break;
1279 }
1280
1281 /* canon_rtx knows how to handle plus. No need to canonicalize. */
1282 if (code == PLUS)
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))
1290 {
1291 rtx xop0 = canon_rtx (XEXP (x, 0));
1292 rtx yop0 = canon_rtx (XEXP (y, 0));
1293 rtx yop1 = canon_rtx (XEXP (y, 1));
1294
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)));
1299 }
1300 else if (NON_COMMUTATIVE_P (x))
1301 {
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))));
1306 }
1307 else if (UNARY_P (x))
1308 return rtx_equal_for_memref_p (canon_rtx (XEXP (x, 0)),
1309 canon_rtx (XEXP (y, 0)));
1310
1311 /* Compare the elements. If any pair of corresponding elements
1312 fail to match, return 0 for the whole things.
1313
1314 Limit cases to types which actually appear in addresses. */
1315
1316 fmt = GET_RTX_FORMAT (code);
1317 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1318 {
1319 switch (fmt[i])
1320 {
1321 case 'i':
1322 if (XINT (x, i) != XINT (y, i))
1323 return 0;
1324 break;
1325
1326 case 'E':
1327 /* Two vectors must have the same length. */
1328 if (XVECLEN (x, i) != XVECLEN (y, i))
1329 return 0;
1330
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)
1335 return 0;
1336 break;
1337
1338 case 'e':
1339 if (rtx_equal_for_memref_p (canon_rtx (XEXP (x, i)),
1340 canon_rtx (XEXP (y, i))) == 0)
1341 return 0;
1342 break;
1343
1344 /* This can happen for asm operands. */
1345 case 's':
1346 if (strcmp (XSTR (x, i), XSTR (y, i)))
1347 return 0;
1348 break;
1349
1350 /* This can happen for an asm which clobbers memory. */
1351 case '0':
1352 break;
1353
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. */
1357 default:
1358 gcc_unreachable ();
1359 }
1360 }
1361 return 1;
1362 }
1363
1364 /* Given an rtx X, find a SYMBOL_REF or LABEL_REF within
1365 X and return it, or return 0 if none found. */
1366
1367 static rtx
1368 find_symbolic_term (rtx x)
1369 {
1370 int i;
1371 enum rtx_code code;
1372 const char *fmt;
1373
1374 code = GET_CODE (x);
1375 if (code == SYMBOL_REF || code == LABEL_REF)
1376 return x;
1377 if (OBJECT_P (x))
1378 return 0;
1379
1380 fmt = GET_RTX_FORMAT (code);
1381 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1382 {
1383 rtx t;
1384
1385 if (fmt[i] == 'e')
1386 {
1387 t = find_symbolic_term (XEXP (x, i));
1388 if (t != 0)
1389 return t;
1390 }
1391 else if (fmt[i] == 'E')
1392 break;
1393 }
1394 return 0;
1395 }
1396
1397 rtx
1398 find_base_term (rtx x)
1399 {
1400 cselib_val *val;
1401 struct elt_loc_list *l;
1402
1403 #if defined (FIND_BASE_TERM)
1404 /* Try machine-dependent ways to find the base term. */
1405 x = FIND_BASE_TERM (x);
1406 #endif
1407
1408 switch (GET_CODE (x))
1409 {
1410 case REG:
1411 return REG_BASE_VALUE (x);
1412
1413 case TRUNCATE:
1414 if (GET_MODE_SIZE (GET_MODE (x)) < GET_MODE_SIZE (Pmode))
1415 return 0;
1416 /* Fall through. */
1417 case HIGH:
1418 case PRE_INC:
1419 case PRE_DEC:
1420 case POST_INC:
1421 case POST_DEC:
1422 case PRE_MODIFY:
1423 case POST_MODIFY:
1424 return find_base_term (XEXP (x, 0));
1425
1426 case ZERO_EXTEND:
1427 case SIGN_EXTEND: /* Used for Alpha/NT pointers */
1428 {
1429 rtx temp = find_base_term (XEXP (x, 0));
1430
1431 if (temp != 0 && CONSTANT_P (temp))
1432 temp = convert_memory_address (Pmode, temp);
1433
1434 return temp;
1435 }
1436
1437 case VALUE:
1438 val = CSELIB_VAL_PTR (x);
1439 if (!val)
1440 return 0;
1441 for (l = val->locs; l; l = l->next)
1442 if ((x = find_base_term (l->loc)) != 0)
1443 return x;
1444 return 0;
1445
1446 case CONST:
1447 x = XEXP (x, 0);
1448 if (GET_CODE (x) != PLUS && GET_CODE (x) != MINUS)
1449 return 0;
1450 /* Fall through. */
1451 case LO_SUM:
1452 case PLUS:
1453 case MINUS:
1454 {
1455 rtx tmp1 = XEXP (x, 0);
1456 rtx tmp2 = XEXP (x, 1);
1457
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.
1461
1462 That may cause us to believe no aliasing was possible, when in
1463 fact aliasing is possible.
1464
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. */
1469
1470 if (tmp1 == pic_offset_table_rtx && CONSTANT_P (tmp2))
1471 return find_base_term (tmp2);
1472
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);
1477
1478 if (REG_P (tmp2) && REG_POINTER (tmp2))
1479 return find_base_term (tmp2);
1480
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);
1485
1486 /* If either base term is named object or a special address
1487 (like an argument or stack reference), then use it for the
1488 base term. */
1489 if (tmp1 != 0
1490 && (GET_CODE (tmp1) == SYMBOL_REF
1491 || GET_CODE (tmp1) == LABEL_REF
1492 || (GET_CODE (tmp1) == ADDRESS
1493 && GET_MODE (tmp1) != VOIDmode)))
1494 return tmp1;
1495
1496 if (tmp2 != 0
1497 && (GET_CODE (tmp2) == SYMBOL_REF
1498 || GET_CODE (tmp2) == LABEL_REF
1499 || (GET_CODE (tmp2) == ADDRESS
1500 && GET_MODE (tmp2) != VOIDmode)))
1501 return tmp2;
1502
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. */
1506 return 0;
1507 }
1508
1509 case AND:
1510 if (GET_CODE (XEXP (x, 1)) == CONST_INT && INTVAL (XEXP (x, 1)) != 0)
1511 return find_base_term (XEXP (x, 0));
1512 return 0;
1513
1514 case SYMBOL_REF:
1515 case LABEL_REF:
1516 return x;
1517
1518 default:
1519 return 0;
1520 }
1521 }
1522
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. */
1525
1526 static int
1527 base_alias_check (rtx x, rtx y, enum machine_mode x_mode,
1528 enum machine_mode y_mode)
1529 {
1530 rtx x_base = find_base_term (x);
1531 rtx y_base = find_base_term (y);
1532
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. */
1536 if (x_base == 0)
1537 {
1538 rtx x_c;
1539
1540 if (! flag_expensive_optimizations || (x_c = canon_rtx (x)) == x)
1541 return 1;
1542
1543 x_base = find_base_term (x_c);
1544 if (x_base == 0)
1545 return 1;
1546 }
1547
1548 if (y_base == 0)
1549 {
1550 rtx y_c;
1551 if (! flag_expensive_optimizations || (y_c = canon_rtx (y)) == y)
1552 return 1;
1553
1554 y_base = find_base_term (y_c);
1555 if (y_base == 0)
1556 return 1;
1557 }
1558
1559 /* If the base addresses are equal nothing is known about aliasing. */
1560 if (rtx_equal_p (x_base, y_base))
1561 return 1;
1562
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)
1569 {
1570 if (GET_CODE (x) == AND && GET_CODE (y) == AND)
1571 return 1;
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))))
1575 return 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))))
1579 return 1;
1580 /* Differing symbols never alias. */
1581 return 0;
1582 }
1583
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))
1590 return 0;
1591
1592 if (! flag_argument_noalias)
1593 return 1;
1594
1595 if (flag_argument_noalias > 1)
1596 return 0;
1597
1598 /* Weak noalias assertion (arguments are distinct, but may match globals). */
1599 return ! (GET_MODE (x_base) == VOIDmode && GET_MODE (y_base) == VOIDmode);
1600 }
1601
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. */
1605
1606 rtx
1607 get_addr (rtx x)
1608 {
1609 cselib_val *v;
1610 struct elt_loc_list *l;
1611
1612 if (GET_CODE (x) != VALUE)
1613 return x;
1614 v = CSELIB_VAL_PTR (x);
1615 if (v)
1616 {
1617 for (l = v->locs; l; l = l->next)
1618 if (CONSTANT_P (l->loc))
1619 return l->loc;
1620 for (l = v->locs; l; l = l->next)
1621 if (!REG_P (l->loc) && !MEM_P (l->loc))
1622 return l->loc;
1623 if (v->locs)
1624 return v->locs->loc;
1625 }
1626 return x;
1627 }
1628
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. */
1632
1633 static rtx
1634 addr_side_effect_eval (rtx addr, int size, int n_refs)
1635 {
1636 int offset = 0;
1637
1638 switch (GET_CODE (addr))
1639 {
1640 case PRE_INC:
1641 offset = (n_refs + 1) * size;
1642 break;
1643 case PRE_DEC:
1644 offset = -(n_refs + 1) * size;
1645 break;
1646 case POST_INC:
1647 offset = n_refs * size;
1648 break;
1649 case POST_DEC:
1650 offset = -n_refs * size;
1651 break;
1652
1653 default:
1654 return addr;
1655 }
1656
1657 if (offset)
1658 addr = gen_rtx_PLUS (GET_MODE (addr), XEXP (addr, 0),
1659 GEN_INT (offset));
1660 else
1661 addr = XEXP (addr, 0);
1662 addr = canon_rtx (addr);
1663
1664 return addr;
1665 }
1666
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.
1673
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
1676 assumptions.
1677
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.
1681
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. */
1684
1685 static int
1686 memrefs_conflict_p (int xsize, rtx x, int ysize, rtx y, HOST_WIDE_INT c)
1687 {
1688 if (GET_CODE (x) == VALUE)
1689 x = get_addr (x);
1690 if (GET_CODE (y) == VALUE)
1691 y = get_addr (y);
1692 if (GET_CODE (x) == HIGH)
1693 x = XEXP (x, 0);
1694 else if (GET_CODE (x) == LO_SUM)
1695 x = XEXP (x, 1);
1696 else
1697 x = addr_side_effect_eval (x, xsize, 0);
1698 if (GET_CODE (y) == HIGH)
1699 y = XEXP (y, 0);
1700 else if (GET_CODE (y) == LO_SUM)
1701 y = XEXP (y, 1);
1702 else
1703 y = addr_side_effect_eval (y, ysize, 0);
1704
1705 if (rtx_equal_for_memref_p (x, y))
1706 {
1707 if (xsize <= 0 || ysize <= 0)
1708 return 1;
1709 if (c >= 0 && xsize > c)
1710 return 1;
1711 if (c < 0 && ysize+c > 0)
1712 return 1;
1713 return 0;
1714 }
1715
1716 /* This code used to check for conflicts involving stack references and
1717 globals but the base address alias code now handles these cases. */
1718
1719 if (GET_CODE (x) == PLUS)
1720 {
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);
1725
1726 if (GET_CODE (y) == PLUS)
1727 {
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);
1732
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)
1738 {
1739 if (GET_CODE (y1) == CONST_INT)
1740 return memrefs_conflict_p (xsize, x0, ysize, y0,
1741 c - INTVAL (x1) + INTVAL (y1));
1742 else
1743 return memrefs_conflict_p (xsize, x0, ysize, y,
1744 c - INTVAL (x1));
1745 }
1746 else if (GET_CODE (y1) == CONST_INT)
1747 return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1748
1749 return 1;
1750 }
1751 else if (GET_CODE (x1) == CONST_INT)
1752 return memrefs_conflict_p (xsize, x0, ysize, y, c - INTVAL (x1));
1753 }
1754 else if (GET_CODE (y) == PLUS)
1755 {
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);
1760
1761 if (GET_CODE (y1) == CONST_INT)
1762 return memrefs_conflict_p (xsize, x, ysize, y0, c + INTVAL (y1));
1763 else
1764 return 1;
1765 }
1766
1767 if (GET_CODE (x) == GET_CODE (y))
1768 switch (GET_CODE (x))
1769 {
1770 case MULT:
1771 {
1772 /* Handle cases where we expect the second operands to be the
1773 same, and check only whether the first operand would conflict
1774 or not. */
1775 rtx x0, y0;
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))
1779 return 1;
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));
1785
1786 /* Can't properly adjust our sizes. */
1787 if (GET_CODE (x1) != CONST_INT)
1788 return 1;
1789 xsize /= INTVAL (x1);
1790 ysize /= INTVAL (x1);
1791 c /= INTVAL (x1);
1792 return memrefs_conflict_p (xsize, x0, ysize, y0, c);
1793 }
1794
1795 case REG:
1796 /* Are these registers known not to be equal? */
1797 if (alias_invariant)
1798 {
1799 unsigned int r_x = REGNO (x), r_y = REGNO (y);
1800 rtx i_x, i_y; /* invariant relationships of X and Y */
1801
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];
1804
1805 if (i_x == 0 && i_y == 0)
1806 break;
1807
1808 if (! memrefs_conflict_p (xsize, i_x ? i_x : x,
1809 ysize, i_y ? i_y : y, c))
1810 return 0;
1811 }
1812 break;
1813
1814 default:
1815 break;
1816 }
1817
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)
1823 {
1824 if (GET_CODE (y) == AND || ysize < -INTVAL (XEXP (x, 1)))
1825 xsize = -1;
1826 return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)), ysize, y, c);
1827 }
1828 if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT)
1829 {
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)))
1835 ysize = -1;
1836 return memrefs_conflict_p (xsize, x, ysize, canon_rtx (XEXP (y, 0)), c);
1837 }
1838
1839 if (CONSTANT_P (x))
1840 {
1841 if (GET_CODE (x) == CONST_INT && GET_CODE (y) == CONST_INT)
1842 {
1843 c += (INTVAL (y) - INTVAL (x));
1844 return (xsize <= 0 || ysize <= 0
1845 || (c >= 0 && xsize > c) || (c < 0 && ysize+c > 0));
1846 }
1847
1848 if (GET_CODE (x) == CONST)
1849 {
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);
1853 else
1854 return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)),
1855 ysize, y, c);
1856 }
1857 if (GET_CODE (y) == CONST)
1858 return memrefs_conflict_p (xsize, x, ysize,
1859 canon_rtx (XEXP (y, 0)), c);
1860
1861 if (CONSTANT_P (y))
1862 return (xsize <= 0 || ysize <= 0
1863 || (rtx_equal_for_memref_p (x, y)
1864 && ((c >= 0 && xsize > c) || (c < 0 && ysize+c > 0))));
1865
1866 return 1;
1867 }
1868 return 1;
1869 }
1870
1871 /* Functions to compute memory dependencies.
1872
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
1876 ways.
1877
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
1881 though.
1882
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. */
1889
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. */
1892
1893 int
1894 read_dependence (rtx mem, rtx x)
1895 {
1896 return MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem);
1897 }
1898
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. */
1906
1907 static rtx
1908 fixed_scalar_and_varying_struct_p (rtx mem1, rtx mem2, rtx mem1_addr,
1909 rtx mem2_addr,
1910 int (*varies_p) (rtx, int))
1911 {
1912 if (! flag_strict_aliasing)
1913 return NULL_RTX;
1914
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
1918 varying address. */
1919 return mem1;
1920
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
1924 varying address. */
1925 return mem2;
1926
1927 return NULL_RTX;
1928 }
1929
1930 /* Returns nonzero if something about the mode or address format MEM1
1931 indicates that it might well alias *anything*. */
1932
1933 static int
1934 aliases_everything_p (rtx mem)
1935 {
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. */
1939 return 1;
1940
1941 return 0;
1942 }
1943
1944 /* Return true if we can determine that the fields referenced cannot
1945 overlap for any pair of objects. */
1946
1947 static bool
1948 nonoverlapping_component_refs_p (tree x, tree y)
1949 {
1950 tree fieldx, fieldy, typex, typey, orig_y;
1951
1952 do
1953 {
1954 /* The comparison has to be done at a common type, since we don't
1955 know how the inheritance hierarchy works. */
1956 orig_y = y;
1957 do
1958 {
1959 fieldx = TREE_OPERAND (x, 1);
1960 typex = TYPE_MAIN_VARIANT (DECL_FIELD_CONTEXT (fieldx));
1961
1962 y = orig_y;
1963 do
1964 {
1965 fieldy = TREE_OPERAND (y, 1);
1966 typey = TYPE_MAIN_VARIANT (DECL_FIELD_CONTEXT (fieldy));
1967
1968 if (typex == typey)
1969 goto found;
1970
1971 y = TREE_OPERAND (y, 0);
1972 }
1973 while (y && TREE_CODE (y) == COMPONENT_REF);
1974
1975 x = TREE_OPERAND (x, 0);
1976 }
1977 while (x && TREE_CODE (x) == COMPONENT_REF);
1978 /* Never found a common type. */
1979 return false;
1980
1981 found:
1982 /* If we're left with accessing different fields of a structure,
1983 then no overlap. */
1984 if (TREE_CODE (typex) == RECORD_TYPE
1985 && fieldx != fieldy)
1986 return true;
1987
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);
1992 }
1993 while (x && y
1994 && TREE_CODE (x) == COMPONENT_REF
1995 && TREE_CODE (y) == COMPONENT_REF);
1996
1997 return false;
1998 }
1999
2000 /* Look at the bottom of the COMPONENT_REF list for a DECL, and return it. */
2001
2002 static tree
2003 decl_for_component_ref (tree x)
2004 {
2005 do
2006 {
2007 x = TREE_OPERAND (x, 0);
2008 }
2009 while (x && TREE_CODE (x) == COMPONENT_REF);
2010
2011 return x && DECL_P (x) ? x : NULL_TREE;
2012 }
2013
2014 /* Walk up the COMPONENT_REF list and adjust OFFSET to compensate for the
2015 offset of the field reference. */
2016
2017 static rtx
2018 adjust_offset_for_component_ref (tree x, rtx offset)
2019 {
2020 HOST_WIDE_INT ioffset;
2021
2022 if (! offset)
2023 return NULL_RTX;
2024
2025 ioffset = INTVAL (offset);
2026 do
2027 {
2028 tree offset = component_ref_field_offset (x);
2029 tree field = TREE_OPERAND (x, 1);
2030
2031 if (! host_integerp (offset, 1))
2032 return NULL_RTX;
2033 ioffset += (tree_low_cst (offset, 1)
2034 + (tree_low_cst (DECL_FIELD_BIT_OFFSET (field), 1)
2035 / BITS_PER_UNIT));
2036
2037 x = TREE_OPERAND (x, 0);
2038 }
2039 while (x && TREE_CODE (x) == COMPONENT_REF);
2040
2041 return GEN_INT (ioffset);
2042 }
2043
2044 /* Return nonzero if we can determine the exprs corresponding to memrefs
2045 X and Y and they do not overlap. */
2046
2047 static int
2048 nonoverlapping_memrefs_p (rtx x, rtx y)
2049 {
2050 tree exprx = MEM_EXPR (x), expry = MEM_EXPR (y);
2051 rtx rtlx, rtly;
2052 rtx basex, basey;
2053 rtx moffsetx, moffsety;
2054 HOST_WIDE_INT offsetx = 0, offsety = 0, sizex, sizey, tem;
2055
2056 /* Unless both have exprs, we can't tell anything. */
2057 if (exprx == 0 || expry == 0)
2058 return 0;
2059
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))
2064 return 1;
2065
2066
2067 /* If the field reference test failed, look at the DECLs involved. */
2068 moffsetx = MEM_OFFSET (x);
2069 if (TREE_CODE (exprx) == COMPONENT_REF)
2070 {
2071 if (TREE_CODE (expry) == VAR_DECL
2072 && POINTER_TYPE_P (TREE_TYPE (expry)))
2073 {
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,
2077 TREE_TYPE (field)))
2078 return 1;
2079 }
2080 {
2081 tree t = decl_for_component_ref (exprx);
2082 if (! t)
2083 return 0;
2084 moffsetx = adjust_offset_for_component_ref (exprx, moffsetx);
2085 exprx = t;
2086 }
2087 }
2088 else if (INDIRECT_REF_P (exprx))
2089 {
2090 exprx = TREE_OPERAND (exprx, 0);
2091 if (flag_argument_noalias < 2
2092 || TREE_CODE (exprx) != PARM_DECL)
2093 return 0;
2094 }
2095
2096 moffsety = MEM_OFFSET (y);
2097 if (TREE_CODE (expry) == COMPONENT_REF)
2098 {
2099 if (TREE_CODE (exprx) == VAR_DECL
2100 && POINTER_TYPE_P (TREE_TYPE (exprx)))
2101 {
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,
2105 TREE_TYPE (field)))
2106 return 1;
2107 }
2108 {
2109 tree t = decl_for_component_ref (expry);
2110 if (! t)
2111 return 0;
2112 moffsety = adjust_offset_for_component_ref (expry, moffsety);
2113 expry = t;
2114 }
2115 }
2116 else if (INDIRECT_REF_P (expry))
2117 {
2118 expry = TREE_OPERAND (expry, 0);
2119 if (flag_argument_noalias < 2
2120 || TREE_CODE (expry) != PARM_DECL)
2121 return 0;
2122 }
2123
2124 if (! DECL_P (exprx) || ! DECL_P (expry))
2125 return 0;
2126
2127 rtlx = DECL_RTL (exprx);
2128 rtly = DECL_RTL (expry);
2129
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))
2135 return 1;
2136
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);
2144
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);
2148
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
2152 overlap or not. */
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))));
2159
2160 sizex = (!MEM_P (rtlx) ? (int) GET_MODE_SIZE (GET_MODE (rtlx))
2161 : MEM_SIZE (rtlx) ? INTVAL (MEM_SIZE (rtlx))
2162 : -1);
2163 sizey = (!MEM_P (rtly) ? (int) GET_MODE_SIZE (GET_MODE (rtly))
2164 : MEM_SIZE (rtly) ? INTVAL (MEM_SIZE (rtly)) :
2165 -1);
2166
2167 /* If we have an offset for either memref, it can update the values computed
2168 above. */
2169 if (moffsetx)
2170 offsetx += INTVAL (moffsetx), sizex -= INTVAL (moffsetx);
2171 if (moffsety)
2172 offsety += INTVAL (moffsety), sizey -= INTVAL (moffsety);
2173
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));
2181
2182 /* Put the values of the memref with the lower offset in X's values. */
2183 if (offsetx > offsety)
2184 {
2185 tem = offsetx, offsetx = offsety, offsety = tem;
2186 tem = sizex, sizex = sizey, sizey = tem;
2187 }
2188
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;
2192 }
2193
2194 /* True dependence: X is read after store in MEM takes place. */
2195
2196 int
2197 true_dependence (rtx mem, enum machine_mode mem_mode, rtx x,
2198 int (*varies) (rtx, int))
2199 {
2200 rtx x_addr, mem_addr;
2201 rtx base;
2202
2203 if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2204 return 1;
2205
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)
2209 return 1;
2210 if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2211 return 1;
2212
2213 if (DIFFERENT_ALIAS_SETS_P (x, mem))
2214 return 0;
2215
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))
2220 return 0;
2221
2222 if (nonoverlapping_memrefs_p (mem, x))
2223 return 0;
2224
2225 if (mem_mode == VOIDmode)
2226 mem_mode = GET_MODE (mem);
2227
2228 x_addr = get_addr (XEXP (x, 0));
2229 mem_addr = get_addr (XEXP (mem, 0));
2230
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))))
2235 return 0;
2236
2237 if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
2238 return 0;
2239
2240 x_addr = canon_rtx (x_addr);
2241 mem_addr = canon_rtx (mem_addr);
2242
2243 if (! memrefs_conflict_p (GET_MODE_SIZE (mem_mode), mem_addr,
2244 SIZE_FOR_MODE (x), x_addr, 0))
2245 return 0;
2246
2247 if (aliases_everything_p (x))
2248 return 1;
2249
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)
2253 return 1;
2254
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)
2258 return 1;
2259
2260 return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2261 varies);
2262 }
2263
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. */
2269
2270 int
2271 canon_true_dependence (rtx mem, enum machine_mode mem_mode, rtx mem_addr,
2272 rtx x, int (*varies) (rtx, int))
2273 {
2274 rtx x_addr;
2275
2276 if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2277 return 1;
2278
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)
2282 return 1;
2283 if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2284 return 1;
2285
2286 if (DIFFERENT_ALIAS_SETS_P (x, mem))
2287 return 0;
2288
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))
2293 return 0;
2294
2295 if (nonoverlapping_memrefs_p (x, mem))
2296 return 0;
2297
2298 x_addr = get_addr (XEXP (x, 0));
2299
2300 if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
2301 return 0;
2302
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))
2306 return 0;
2307
2308 if (aliases_everything_p (x))
2309 return 1;
2310
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)
2314 return 1;
2315
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)
2319 return 1;
2320
2321 return ! fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2322 varies);
2323 }
2324
2325 /* Returns nonzero if a write to X might alias a previous read from
2326 (or, if WRITEP is nonzero, a write to) MEM. */
2327
2328 static int
2329 write_dependence_p (rtx mem, rtx x, int writep)
2330 {
2331 rtx x_addr, mem_addr;
2332 rtx fixed_scalar;
2333 rtx base;
2334
2335 if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
2336 return 1;
2337
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)
2341 return 1;
2342 if (GET_MODE (mem) == BLKmode && GET_CODE (XEXP (mem, 0)) == SCRATCH)
2343 return 1;
2344
2345 if (DIFFERENT_ALIAS_SETS_P (x, mem))
2346 return 0;
2347
2348 /* A read from read-only memory can't conflict with read-write memory. */
2349 if (!writep && MEM_READONLY_P (mem))
2350 return 0;
2351
2352 if (nonoverlapping_memrefs_p (x, mem))
2353 return 0;
2354
2355 x_addr = get_addr (XEXP (x, 0));
2356 mem_addr = get_addr (XEXP (mem, 0));
2357
2358 if (! writep)
2359 {
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))))
2364 return 0;
2365 }
2366
2367 if (! base_alias_check (x_addr, mem_addr, GET_MODE (x),
2368 GET_MODE (mem)))
2369 return 0;
2370
2371 x_addr = canon_rtx (x_addr);
2372 mem_addr = canon_rtx (mem_addr);
2373
2374 if (!memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
2375 SIZE_FOR_MODE (x), x_addr, 0))
2376 return 0;
2377
2378 fixed_scalar
2379 = fixed_scalar_and_varying_struct_p (mem, x, mem_addr, x_addr,
2380 rtx_addr_varies_p);
2381
2382 return (!(fixed_scalar == mem && !aliases_everything_p (x))
2383 && !(fixed_scalar == x && !aliases_everything_p (mem)));
2384 }
2385
2386 /* Anti dependence: X is written after read in MEM takes place. */
2387
2388 int
2389 anti_dependence (rtx mem, rtx x)
2390 {
2391 return write_dependence_p (mem, x, /*writep=*/0);
2392 }
2393
2394 /* Output dependence: X is written after store in MEM takes place. */
2395
2396 int
2397 output_dependence (rtx mem, rtx x)
2398 {
2399 return write_dependence_p (mem, x, /*writep=*/1);
2400 }
2401 \f
2402
2403 void
2404 init_alias_once (void)
2405 {
2406 int i;
2407
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));
2416
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);
2426 #endif
2427 }
2428
2429 /* Set MEMORY_MODIFIED when X modifies DATA (that is assumed
2430 to be memory reference. */
2431 static bool memory_modified;
2432 static void
2433 memory_modified_1 (rtx x, rtx pat ATTRIBUTE_UNUSED, void *data)
2434 {
2435 if (MEM_P (x))
2436 {
2437 if (anti_dependence (x, (rtx)data) || output_dependence (x, (rtx)data))
2438 memory_modified = true;
2439 }
2440 }
2441
2442
2443 /* Return true when INSN possibly modify memory contents of MEM
2444 (i.e. address can be modified). */
2445 bool
2446 memory_modified_in_insn_p (rtx mem, rtx insn)
2447 {
2448 if (!INSN_P (insn))
2449 return false;
2450 memory_modified = false;
2451 note_stores (PATTERN (insn), memory_modified_1, mem);
2452 return memory_modified;
2453 }
2454
2455 /* Initialize the aliasing machinery. Initialize the REG_KNOWN_VALUE
2456 array. */
2457
2458 void
2459 init_alias_analysis (void)
2460 {
2461 unsigned int maxreg = max_reg_num ();
2462 int changed, pass;
2463 int i;
2464 unsigned int ui;
2465 rtx insn;
2466
2467 timevar_push (TV_ALIAS_ANALYSIS);
2468
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));
2472
2473 /* Overallocate reg_base_value to allow some growth during loop
2474 optimization. Loop unrolling can create a large number of
2475 registers. */
2476 if (old_reg_base_value)
2477 {
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);
2486 }
2487 else
2488 {
2489 VARRAY_RTX_INIT (reg_base_value, maxreg, "reg_base_value");
2490 }
2491
2492 new_reg_base_value = xmalloc (maxreg * sizeof (rtx));
2493 reg_seen = xmalloc (maxreg);
2494
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.
2498
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.
2502
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".
2506
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.
2510
2511 The state of the arrays for the set chain in question does not matter
2512 since the program has undefined behavior. */
2513
2514 pass = 0;
2515 do
2516 {
2517 /* Assume nothing will change this iteration of the loop. */
2518 changed = 0;
2519
2520 /* We want to assign the same IDs each iteration of this loop, so
2521 start counting from zero each iteration of the loop. */
2522 unique_id = 0;
2523
2524 /* We're at the start of the function each iteration through the
2525 loop, so we're copying arguments. */
2526 copying_arguments = true;
2527
2528 /* Wipe the potential alias information clean for this pass. */
2529 memset (new_reg_base_value, 0, maxreg * sizeof (rtx));
2530
2531 /* Wipe the reg_seen array clean. */
2532 memset (reg_seen, 0, maxreg);
2533
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.
2538
2539 The address expression is VOIDmode for an argument and
2540 Pmode for other registers. */
2541
2542 memcpy (new_reg_base_value, static_reg_base_value,
2543 FIRST_PSEUDO_REGISTER * sizeof (rtx));
2544
2545 /* Walk the insns adding values to the new_reg_base_value array. */
2546 for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
2547 {
2548 if (INSN_P (insn))
2549 {
2550 rtx note, set;
2551
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))
2559 continue;
2560 #endif
2561
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. */
2565
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);
2570 else
2571 note_stores (PATTERN (insn), record_set, NULL);
2572
2573 set = single_set (insn);
2574
2575 if (set != 0
2576 && REG_P (SET_DEST (set))
2577 && REGNO (SET_DEST (set)) >= FIRST_PSEUDO_REGISTER)
2578 {
2579 unsigned int regno = REGNO (SET_DEST (set));
2580 rtx src = SET_SRC (set);
2581 rtx t;
2582
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),
2590 XEXP (note, 0)))
2591 {
2592 set_reg_known_value (regno, XEXP (note, 0));
2593 set_reg_known_equiv_p (regno,
2594 REG_NOTE_KIND (note) == REG_EQUIV);
2595 }
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)
2601 {
2602 t = plus_constant (t, INTVAL (XEXP (src, 1)));
2603 set_reg_known_value (regno, t);
2604 set_reg_known_equiv_p (regno, 0);
2605 }
2606 else if (REG_N_SETS (regno) == 1
2607 && ! rtx_varies_p (src, 1))
2608 {
2609 set_reg_known_value (regno, src);
2610 set_reg_known_equiv_p (regno, 0);
2611 }
2612 }
2613 }
2614 else if (NOTE_P (insn)
2615 && NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
2616 copying_arguments = false;
2617 }
2618
2619 /* Now propagate values from new_reg_base_value to reg_base_value. */
2620 gcc_assert (maxreg == (unsigned int) max_reg_num());
2621
2622 for (ui = 0; ui < maxreg; ui++)
2623 {
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)))
2628 {
2629 VARRAY_RTX (reg_base_value, ui) = new_reg_base_value[ui];
2630 changed = 1;
2631 }
2632 }
2633 }
2634 while (changed && ++pass < MAX_ALIAS_LOOP_PASSES);
2635
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];
2640
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.
2644
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
2647 time.
2648
2649 This loop may not be needed any longer now that the main loop does
2650 a better job at propagating alias information. */
2651 pass = 0;
2652 do
2653 {
2654 changed = 0;
2655 pass++;
2656 for (ui = 0; ui < maxreg; ui++)
2657 {
2658 rtx base = VARRAY_RTX (reg_base_value, ui);
2659 if (base && REG_P (base))
2660 {
2661 unsigned int base_regno = REGNO (base);
2662 if (base_regno == ui) /* register set from itself */
2663 VARRAY_RTX (reg_base_value, ui) = 0;
2664 else
2665 VARRAY_RTX (reg_base_value, ui)
2666 = VARRAY_RTX (reg_base_value, base_regno);
2667 changed = 1;
2668 }
2669 }
2670 }
2671 while (changed && pass < MAX_ALIAS_LOOP_PASSES);
2672
2673 /* Clean up. */
2674 free (new_reg_base_value);
2675 new_reg_base_value = 0;
2676 free (reg_seen);
2677 reg_seen = 0;
2678 timevar_pop (TV_ALIAS_ANALYSIS);
2679 }
2680
2681 void
2682 end_alias_analysis (void)
2683 {
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)
2691 {
2692 ggc_free (alias_invariant);
2693 alias_invariant = 0;
2694 alias_invariant_size = 0;
2695 }
2696 }
2697 \f
2698 /* Do control and data flow analysis; write some of the results to the
2699 dump file. */
2700 static void
2701 rest_of_handle_cfg (void)
2702 {
2703 if (dump_file)
2704 dump_flow_info (dump_file);
2705 if (optimize)
2706 cleanup_cfg (CLEANUP_EXPENSIVE
2707 | (flag_thread_jumps ? CLEANUP_THREADING : 0));
2708 }
2709
2710 struct tree_opt_pass pass_cfg =
2711 {
2712 "cfg", /* name */
2713 NULL, /* gate */
2714 rest_of_handle_cfg, /* execute */
2715 NULL, /* sub */
2716 NULL, /* next */
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 */
2724 'f' /* letter */
2725 };
2726
2727
2728 #include "gt-alias.h"