re PR rtl-optimization/24762 ([killloop-branch] code motion of non-invariant expressi...
[gcc.git] / gcc / df-scan.c
1 /* FIXME: We need to go back and add the warning messages about code
2 moved across setjmp. */
3
4
5 /* Scanning of rtl for dataflow analysis.
6 Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
7 Free Software Foundation, Inc.
8 Originally contributed by Michael P. Hayes
9 (m.hayes@elec.canterbury.ac.nz, mhayes@redhat.com)
10 Major rewrite contributed by Danny Berlin (dberlin@dberlin.org)
11 and Kenneth Zadeck (zadeck@naturalbridge.com).
12
13 This file is part of GCC.
14
15 GCC is free software; you can redistribute it and/or modify it under
16 the terms of the GNU General Public License as published by the Free
17 Software Foundation; either version 2, or (at your option) any later
18 version.
19
20 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
21 WARRANTY; without even the implied warranty of MERCHANTABILITY or
22 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
23 for more details.
24
25 You should have received a copy of the GNU General Public License
26 along with GCC; see the file COPYING. If not, write to the Free
27 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
28 02110-1301, USA.
29 */
30
31 #include "config.h"
32 #include "system.h"
33 #include "coretypes.h"
34 #include "tm.h"
35 #include "rtl.h"
36 #include "tm_p.h"
37 #include "insn-config.h"
38 #include "recog.h"
39 #include "function.h"
40 #include "regs.h"
41 #include "output.h"
42 #include "alloc-pool.h"
43 #include "flags.h"
44 #include "hard-reg-set.h"
45 #include "basic-block.h"
46 #include "sbitmap.h"
47 #include "bitmap.h"
48 #include "timevar.h"
49 #include "tree.h"
50 #include "target.h"
51 #include "target-def.h"
52 #include "df.h"
53
54 #ifndef HAVE_epilogue
55 #define HAVE_epilogue 0
56 #endif
57 #ifndef HAVE_prologue
58 #define HAVE_prologue 0
59 #endif
60 #ifndef HAVE_sibcall_epilogue
61 #define HAVE_sibcall_epilogue 0
62 #endif
63
64 #ifndef EPILOGUE_USES
65 #define EPILOGUE_USES(REGNO) 0
66 #endif
67
68 /* Indicates where we are in the compilation. */
69 int df_state;
70
71 /* The bitmap_obstack is used to hold some static variables that
72 should not be reset after each function is compiled. */
73
74 static bitmap_obstack persistent_obstack;
75
76 /* The set of hard registers in eliminables[i].from. */
77
78 static HARD_REG_SET elim_reg_set;
79
80 /* This is a bitmap copy of regs_invalidated_by_call so that we can
81 easily add it into bitmaps, etc. */
82
83 bitmap df_invalidated_by_call = NULL;
84
85 /* Initialize ur_in and ur_out as if all hard registers were partially
86 available. */
87
88 static void df_ref_record (struct dataflow *, rtx, rtx *,
89 basic_block, rtx, enum df_ref_type,
90 enum df_ref_flags, bool record_live);
91 static void df_def_record_1 (struct dataflow *, rtx, basic_block, rtx,
92 enum df_ref_flags, bool record_live);
93 static void df_defs_record (struct dataflow *, rtx, basic_block, rtx);
94 static void df_uses_record (struct dataflow *, rtx *, enum df_ref_type,
95 basic_block, rtx, enum df_ref_flags);
96
97 static void df_insn_refs_record (struct dataflow *, basic_block, rtx);
98 static void df_bb_refs_record (struct dataflow *, basic_block);
99 static void df_refs_record (struct dataflow *, bitmap);
100 static struct df_ref *df_ref_create_structure (struct dataflow *, rtx, rtx *,
101 basic_block, rtx, enum df_ref_type,
102 enum df_ref_flags);
103 static void df_record_entry_block_defs (struct dataflow *);
104 static void df_record_exit_block_uses (struct dataflow *);
105 static void df_grow_reg_info (struct dataflow *, struct df_ref_info *);
106 static void df_grow_ref_info (struct df_ref_info *, unsigned int);
107 static void df_grow_insn_info (struct df *);
108
109 \f
110 /*----------------------------------------------------------------------------
111 SCANNING DATAFLOW PROBLEM
112
113 There are several ways in which scanning looks just like the other
114 dataflow problems. It shares the all the mechanisms for local info
115 as well as basic block info. Where it differs is when and how often
116 it gets run. It also has no need for the iterative solver.
117 ----------------------------------------------------------------------------*/
118
119 /* Problem data for the scanning dataflow function. */
120 struct df_scan_problem_data
121 {
122 alloc_pool ref_pool;
123 alloc_pool insn_pool;
124 alloc_pool reg_pool;
125 };
126
127 typedef struct df_scan_bb_info *df_scan_bb_info_t;
128
129 static void
130 df_scan_free_internal (struct dataflow *dflow)
131 {
132 struct df *df = dflow->df;
133 struct df_scan_problem_data *problem_data =
134 (struct df_scan_problem_data *) dflow->problem_data;
135
136 free (df->def_info.regs);
137 free (df->def_info.refs);
138 memset (&df->def_info, 0, (sizeof (struct df_ref_info)));
139
140 free (df->use_info.regs);
141 free (df->use_info.refs);
142 memset (&df->use_info, 0, (sizeof (struct df_ref_info)));
143
144 free (df->insns);
145 df->insns = NULL;
146 df->insns_size = 0;
147
148 free (dflow->block_info);
149 dflow->block_info = NULL;
150 dflow->block_info_size = 0;
151
152 BITMAP_FREE (df->hardware_regs_used);
153 BITMAP_FREE (df->entry_block_defs);
154 BITMAP_FREE (df->exit_block_uses);
155
156 free_alloc_pool (dflow->block_pool);
157 free_alloc_pool (problem_data->ref_pool);
158 free_alloc_pool (problem_data->insn_pool);
159 free_alloc_pool (problem_data->reg_pool);
160 }
161
162
163 /* Get basic block info. */
164
165 struct df_scan_bb_info *
166 df_scan_get_bb_info (struct dataflow *dflow, unsigned int index)
167 {
168 gcc_assert (index < dflow->block_info_size);
169 return (struct df_scan_bb_info *) dflow->block_info[index];
170 }
171
172
173 /* Set basic block info. */
174
175 static void
176 df_scan_set_bb_info (struct dataflow *dflow, unsigned int index,
177 struct df_scan_bb_info *bb_info)
178 {
179 gcc_assert (index < dflow->block_info_size);
180 dflow->block_info[index] = (void *) bb_info;
181 }
182
183
184 /* Free basic block info. */
185
186 static void
187 df_scan_free_bb_info (struct dataflow *dflow, basic_block bb, void *vbb_info)
188 {
189 struct df_scan_bb_info *bb_info = (struct df_scan_bb_info *) vbb_info;
190 if (bb_info)
191 {
192 df_bb_refs_delete (dflow, bb->index);
193 pool_free (dflow->block_pool, bb_info);
194 }
195 }
196
197
198 /* Allocate the problem data for the scanning problem. This should be
199 called when the problem is created or when the entire function is to
200 be rescanned. */
201
202 static void
203 df_scan_alloc (struct dataflow *dflow, bitmap blocks_to_rescan)
204 {
205 struct df *df = dflow->df;
206 struct df_scan_problem_data *problem_data;
207 unsigned int insn_num = get_max_uid () + 1;
208 unsigned int block_size = 50;
209 unsigned int bb_index;
210 bitmap_iterator bi;
211
212 /* Given the number of pools, this is really faster than tearing
213 everything apart. */
214 if (dflow->problem_data)
215 df_scan_free_internal (dflow);
216
217 dflow->block_pool
218 = create_alloc_pool ("df_scan_block pool",
219 sizeof (struct df_scan_bb_info),
220 block_size);
221
222 problem_data = xmalloc (sizeof (struct df_scan_problem_data));
223 dflow->problem_data = problem_data;
224
225 problem_data->ref_pool
226 = create_alloc_pool ("df_scan_ref pool",
227 sizeof (struct df_ref), block_size);
228 problem_data->insn_pool
229 = create_alloc_pool ("df_scan_insn pool",
230 sizeof (struct df_insn_info), block_size);
231 problem_data->reg_pool
232 = create_alloc_pool ("df_scan_reg pool",
233 sizeof (struct df_reg_info), block_size);
234
235 insn_num += insn_num / 4;
236 df_grow_reg_info (dflow, &df->def_info);
237 df_grow_ref_info (&df->def_info, insn_num);
238
239 df_grow_reg_info (dflow, &df->use_info);
240 df_grow_ref_info (&df->use_info, insn_num *2);
241
242 df_grow_insn_info (df);
243 df_grow_bb_info (dflow);
244
245 EXECUTE_IF_SET_IN_BITMAP (blocks_to_rescan, 0, bb_index, bi)
246 {
247 struct df_scan_bb_info *bb_info = df_scan_get_bb_info (dflow, bb_index);
248 if (!bb_info)
249 {
250 bb_info = (struct df_scan_bb_info *) pool_alloc (dflow->block_pool);
251 df_scan_set_bb_info (dflow, bb_index, bb_info);
252 }
253 bb_info->artificial_defs = NULL;
254 bb_info->artificial_uses = NULL;
255 }
256
257 df->hardware_regs_used = BITMAP_ALLOC (NULL);
258 df->entry_block_defs = BITMAP_ALLOC (NULL);
259 df->exit_block_uses = BITMAP_ALLOC (NULL);
260 }
261
262
263 /* Free all of the data associated with the scan problem. */
264
265 static void
266 df_scan_free (struct dataflow *dflow)
267 {
268 struct df *df = dflow->df;
269
270 if (dflow->problem_data)
271 {
272 df_scan_free_internal (dflow);
273 free (dflow->problem_data);
274 }
275
276 if (df->blocks_to_scan)
277 BITMAP_FREE (df->blocks_to_scan);
278
279 if (df->blocks_to_analyze)
280 BITMAP_FREE (df->blocks_to_analyze);
281
282 free (dflow);
283 }
284
285 static void
286 df_scan_dump (struct dataflow *dflow ATTRIBUTE_UNUSED, FILE *file ATTRIBUTE_UNUSED)
287 {
288 struct df *df = dflow->df;
289 int i;
290
291 fprintf (file, " invalidated by call \t");
292 dump_bitmap (file, df_invalidated_by_call);
293 fprintf (file, " hardware regs used \t");
294 dump_bitmap (file, df->hardware_regs_used);
295 fprintf (file, " entry block uses \t");
296 dump_bitmap (file, df->entry_block_defs);
297 fprintf (file, " exit block uses \t");
298 dump_bitmap (file, df->exit_block_uses);
299 fprintf (file, " regs ever live \t");
300 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
301 if (regs_ever_live[i])
302 fprintf (file, "%d ", i);
303 fprintf (file, "\n");
304 }
305
306 static struct df_problem problem_SCAN =
307 {
308 DF_SCAN, /* Problem id. */
309 DF_NONE, /* Direction. */
310 df_scan_alloc, /* Allocate the problem specific data. */
311 NULL, /* Reset global information. */
312 df_scan_free_bb_info, /* Free basic block info. */
313 NULL, /* Local compute function. */
314 NULL, /* Init the solution specific data. */
315 NULL, /* Iterative solver. */
316 NULL, /* Confluence operator 0. */
317 NULL, /* Confluence operator n. */
318 NULL, /* Transfer function. */
319 NULL, /* Finalize function. */
320 df_scan_free, /* Free all of the problem information. */
321 df_scan_dump, /* Debugging. */
322 NULL /* Dependent problem. */
323 };
324
325
326 /* Create a new DATAFLOW instance and add it to an existing instance
327 of DF. The returned structure is what is used to get at the
328 solution. */
329
330 struct dataflow *
331 df_scan_add_problem (struct df *df)
332 {
333 return df_add_problem (df, &problem_SCAN);
334 }
335
336 /*----------------------------------------------------------------------------
337 Storage Allocation Utilities
338 ----------------------------------------------------------------------------*/
339
340
341 /* First, grow the reg_info information. If the current size is less than
342 the number of psuedos, grow to 25% more than the number of
343 pseudos.
344
345 Second, assure that all of the slots up to max_reg_num have been
346 filled with reg_info structures. */
347
348 static void
349 df_grow_reg_info (struct dataflow *dflow, struct df_ref_info *ref_info)
350 {
351 unsigned int max_reg = max_reg_num ();
352 unsigned int new_size = max_reg;
353 struct df_scan_problem_data *problem_data =
354 (struct df_scan_problem_data *) dflow->problem_data;
355 unsigned int i;
356
357 if (ref_info->regs_size < new_size)
358 {
359 new_size += new_size / 4;
360 ref_info->regs = xrealloc (ref_info->regs,
361 new_size *sizeof (struct df_reg_info*));
362 ref_info->regs_size = new_size;
363 }
364
365 for (i = ref_info->regs_inited; i < max_reg; i++)
366 {
367 struct df_reg_info *reg_info = pool_alloc (problem_data->reg_pool);
368 memset (reg_info, 0, sizeof (struct df_reg_info));
369 ref_info->regs[i] = reg_info;
370 }
371
372 ref_info->regs_inited = max_reg;
373 }
374
375
376 /* Grow the ref information. */
377
378 static void
379 df_grow_ref_info (struct df_ref_info *ref_info, unsigned int new_size)
380 {
381 if (ref_info->refs_size < new_size)
382 {
383 ref_info->refs = xrealloc (ref_info->refs,
384 new_size *sizeof (struct df_ref *));
385 memset (ref_info->refs + ref_info->refs_size, 0,
386 (new_size - ref_info->refs_size) *sizeof (struct df_ref *));
387 ref_info->refs_size = new_size;
388 }
389 }
390
391
392 /* Grow the ref information. If the current size is less than the
393 number of instructions, grow to 25% more than the number of
394 instructions. */
395
396 static void
397 df_grow_insn_info (struct df *df)
398 {
399 unsigned int new_size = get_max_uid () + 1;
400 if (df->insns_size < new_size)
401 {
402 new_size += new_size / 4;
403 df->insns = xrealloc (df->insns,
404 new_size *sizeof (struct df_insn_info *));
405 memset (df->insns + df->insns_size, 0,
406 (new_size - df->insns_size) *sizeof (struct df_insn_info *));
407 df->insns_size = new_size;
408 }
409 }
410
411
412
413 \f
414 /*----------------------------------------------------------------------------
415 PUBLIC INTERFACES FOR SMALL GRAIN CHANGES TO SCANNING.
416 ----------------------------------------------------------------------------*/
417
418 /* Rescan some BLOCKS or all the blocks defined by the last call to
419 df_set_blocks if BLOCKS is NULL); */
420
421 void
422 df_rescan_blocks (struct df *df, bitmap blocks)
423 {
424 bitmap local_blocks_to_scan = BITMAP_ALLOC (NULL);
425
426 struct dataflow *dflow = df->problems_by_index[DF_SCAN];
427 basic_block bb;
428
429 df->def_info.refs_organized = false;
430 df->use_info.refs_organized = false;
431
432 if (blocks)
433 {
434 int i;
435
436 /* Need to assure that there are space in all of the tables. */
437 unsigned int insn_num = get_max_uid () + 1;
438 insn_num += insn_num / 4;
439
440 df_grow_reg_info (dflow, &df->def_info);
441 df_grow_ref_info (&df->def_info, insn_num);
442
443 df_grow_reg_info (dflow, &df->use_info);
444 df_grow_ref_info (&df->use_info, insn_num *2);
445
446 df_grow_insn_info (df);
447 df_grow_bb_info (dflow);
448
449 bitmap_copy (local_blocks_to_scan, blocks);
450 df->def_info.add_refs_inline = true;
451 df->use_info.add_refs_inline = true;
452
453 for (i = df->num_problems_defined; i; i--)
454 {
455 bitmap blocks_to_reset = NULL;
456 if (*dflow->problem->reset_fun)
457 {
458 if (!blocks_to_reset)
459 {
460 blocks_to_reset = BITMAP_ALLOC (NULL);
461 bitmap_copy (blocks_to_reset, local_blocks_to_scan);
462 if (df->blocks_to_scan)
463 bitmap_ior_into (blocks_to_reset, df->blocks_to_scan);
464 }
465 (*dflow->problem->reset_fun) (dflow, blocks_to_reset);
466 }
467 if (blocks_to_reset)
468 BITMAP_FREE (blocks_to_reset);
469 }
470
471 df_refs_delete (dflow, local_blocks_to_scan);
472
473 /* This may be a mistake, but if an explicit blocks is passed in
474 and the set of blocks to analyze has been explicitly set, add
475 the extra blocks to blocks_to_analyze. The alternative is to
476 put an assert here. We do not want this to just go by
477 silently or else we may get storage leaks. */
478 if (df->blocks_to_analyze)
479 bitmap_ior_into (df->blocks_to_analyze, blocks);
480 }
481 else
482 {
483 /* If we are going to do everything, just reallocate everything.
484 Most stuff is allocated in pools so this is faster than
485 walking it. */
486 if (df->blocks_to_analyze)
487 bitmap_copy (local_blocks_to_scan, df->blocks_to_analyze);
488 else
489 FOR_ALL_BB (bb)
490 {
491 bitmap_set_bit (local_blocks_to_scan, bb->index);
492 }
493 df_scan_alloc (dflow, local_blocks_to_scan);
494
495 df->def_info.add_refs_inline = false;
496 df->use_info.add_refs_inline = false;
497 }
498
499 df_refs_record (dflow, local_blocks_to_scan);
500 #if 0
501 bitmap_print (stderr, local_blocks_to_scan, "scanning: ", "\n");
502 #endif
503
504 if (!df->blocks_to_scan)
505 df->blocks_to_scan = BITMAP_ALLOC (NULL);
506
507 bitmap_ior_into (df->blocks_to_scan, local_blocks_to_scan);
508 BITMAP_FREE (local_blocks_to_scan);
509 }
510
511 /* Create a new ref of type DF_REF_TYPE for register REG at address
512 LOC within INSN of BB. */
513
514 struct df_ref *
515 df_ref_create (struct df *df, rtx reg, rtx *loc, rtx insn,
516 basic_block bb,
517 enum df_ref_type ref_type,
518 enum df_ref_flags ref_flags)
519 {
520 struct dataflow *dflow = df->problems_by_index[DF_SCAN];
521 struct df_scan_bb_info *bb_info;
522
523 df_grow_reg_info (dflow, &df->use_info);
524 df_grow_reg_info (dflow, &df->def_info);
525 df_grow_bb_info (dflow);
526
527 /* Make sure there is the bb_info for this block. */
528 bb_info = df_scan_get_bb_info (dflow, bb->index);
529 if (!bb_info)
530 {
531 bb_info = (struct df_scan_bb_info *) pool_alloc (dflow->block_pool);
532 df_scan_set_bb_info (dflow, bb->index, bb_info);
533 bb_info->artificial_defs = NULL;
534 bb_info->artificial_uses = NULL;
535 }
536
537 if (ref_type == DF_REF_REG_DEF)
538 df->def_info.add_refs_inline = true;
539 else
540 df->use_info.add_refs_inline = true;
541
542 return df_ref_create_structure (dflow, reg, loc, bb, insn, ref_type, ref_flags);
543 }
544
545
546 \f
547 /*----------------------------------------------------------------------------
548 UTILITIES TO CREATE AND DESTROY REFS AND CHAINS.
549 ----------------------------------------------------------------------------*/
550
551
552 /* Get the artifical uses for a basic block. */
553
554 struct df_ref *
555 df_get_artificial_defs (struct df *df, unsigned int bb_index)
556 {
557 struct dataflow *dflow = df->problems_by_index[DF_SCAN];
558 return df_scan_get_bb_info (dflow, bb_index)->artificial_defs;
559 }
560
561
562 /* Get the artifical uses for a basic block. */
563
564 struct df_ref *
565 df_get_artificial_uses (struct df *df, unsigned int bb_index)
566 {
567 struct dataflow *dflow = df->problems_by_index[DF_SCAN];
568 return df_scan_get_bb_info (dflow, bb_index)->artificial_uses;
569 }
570
571
572 /* Link REF at the front of reg_use or reg_def chain for REGNO. */
573
574 void
575 df_reg_chain_create (struct df_reg_info *reg_info,
576 struct df_ref *ref)
577 {
578 struct df_ref *head = reg_info->reg_chain;
579 reg_info->reg_chain = ref;
580
581 DF_REF_NEXT_REG (ref) = head;
582
583 /* We cannot actually link to the head of the chain. */
584 DF_REF_PREV_REG (ref) = NULL;
585
586 if (head)
587 DF_REF_PREV_REG (head) = ref;
588 }
589
590
591 /* Remove REF from the CHAIN. Return the head of the chain. This
592 will be CHAIN unless the REF was at the beginning of the chain. */
593
594 static struct df_ref *
595 df_ref_unlink (struct df_ref *chain, struct df_ref *ref)
596 {
597 struct df_ref *orig_chain = chain;
598 struct df_ref *prev = NULL;
599 while (chain)
600 {
601 if (chain == ref)
602 {
603 if (prev)
604 {
605 prev->next_ref = ref->next_ref;
606 ref->next_ref = NULL;
607 return orig_chain;
608 }
609 else
610 {
611 chain = ref->next_ref;
612 ref->next_ref = NULL;
613 return chain;
614 }
615 }
616
617 prev = chain;
618 chain = chain->next_ref;
619 }
620
621 /* Someone passed in a ref that was not in the chain. */
622 gcc_unreachable ();
623 return NULL;
624 }
625
626
627 /* Unlink and delete REF at the reg_use or reg_def chain. Also delete
628 the def-use or use-def chain if it exists. Returns the next ref in
629 uses or defs chain. */
630
631 struct df_ref *
632 df_reg_chain_unlink (struct dataflow *dflow, struct df_ref *ref)
633 {
634 struct df *df = dflow->df;
635 struct df_ref *next = DF_REF_NEXT_REG (ref);
636 struct df_ref *prev = DF_REF_PREV_REG (ref);
637 struct df_scan_problem_data *problem_data =
638 (struct df_scan_problem_data *) dflow->problem_data;
639 struct df_reg_info *reg_info;
640 struct df_ref *next_ref = ref->next_ref;
641 unsigned int id = DF_REF_ID (ref);
642
643 if (DF_REF_TYPE (ref) == DF_REF_REG_DEF)
644 {
645 reg_info = DF_REG_DEF_GET (df, DF_REF_REGNO (ref));
646 df->def_info.bitmap_size--;
647 if (df->def_info.refs && (id < df->def_info.refs_size))
648 DF_DEFS_SET (df, id, NULL);
649 }
650 else
651 {
652 reg_info = DF_REG_USE_GET (df, DF_REF_REGNO (ref));
653 df->use_info.bitmap_size--;
654 if (df->use_info.refs && (id < df->use_info.refs_size))
655 DF_USES_SET (df, id, NULL);
656 }
657
658 /* Delete any def-use or use-def chains that start here. */
659 if (DF_REF_CHAIN (ref))
660 df_chain_unlink (df->problems_by_index[DF_CHAIN], ref, NULL);
661
662 reg_info->n_refs--;
663
664 /* Unlink from the reg chain. If there is no prev, this is the
665 first of the list. If not, just join the next and prev. */
666 if (prev)
667 {
668 DF_REF_NEXT_REG (prev) = next;
669 if (next)
670 DF_REF_PREV_REG (next) = prev;
671 }
672 else
673 {
674 reg_info->reg_chain = next;
675 if (next)
676 DF_REF_PREV_REG (next) = NULL;
677 }
678
679 pool_free (problem_data->ref_pool, ref);
680 return next_ref;
681 }
682
683
684 /* Unlink REF from all def-use/use-def chains, etc. */
685
686 void
687 df_ref_remove (struct df *df, struct df_ref *ref)
688 {
689 struct dataflow *dflow = df->problems_by_index[DF_SCAN];
690 if (DF_REF_REG_DEF_P (ref))
691 {
692 if (DF_REF_FLAGS (ref) & DF_REF_ARTIFICIAL)
693 {
694 struct df_scan_bb_info *bb_info
695 = df_scan_get_bb_info (dflow, DF_REF_BB (ref)->index);
696 bb_info->artificial_defs
697 = df_ref_unlink (bb_info->artificial_defs, ref);
698 }
699 else
700 DF_INSN_UID_DEFS (df, DF_REF_INSN_UID (ref)) =
701 df_ref_unlink (DF_INSN_UID_DEFS (df, DF_REF_INSN_UID (ref)), ref);
702
703 if (df->def_info.add_refs_inline)
704 DF_DEFS_SET (df, DF_REF_ID (ref), NULL);
705 }
706 else
707 {
708 if (DF_REF_FLAGS (ref) & DF_REF_ARTIFICIAL)
709 {
710 struct df_scan_bb_info *bb_info
711 = df_scan_get_bb_info (dflow, DF_REF_BB (ref)->index);
712 bb_info->artificial_uses
713 = df_ref_unlink (bb_info->artificial_uses, ref);
714 }
715 else
716 DF_INSN_UID_USES (df, DF_REF_INSN_UID (ref)) =
717 df_ref_unlink (DF_INSN_UID_USES (df, DF_REF_INSN_UID (ref)), ref);
718
719 if (df->use_info.add_refs_inline)
720 DF_USES_SET (df, DF_REF_ID (ref), NULL);
721 }
722
723 df_reg_chain_unlink (dflow, ref);
724 }
725
726
727 /* Create the insn record for INSN. If there was one there, zero it out. */
728
729 static struct df_insn_info *
730 df_insn_create_insn_record (struct dataflow *dflow, rtx insn)
731 {
732 struct df *df = dflow->df;
733 struct df_scan_problem_data *problem_data =
734 (struct df_scan_problem_data *) dflow->problem_data;
735
736 struct df_insn_info *insn_rec = DF_INSN_GET (df, insn);
737 if (!insn_rec)
738 {
739 insn_rec = pool_alloc (problem_data->insn_pool);
740 DF_INSN_SET (df, insn, insn_rec);
741 }
742 memset (insn_rec, 0, sizeof (struct df_insn_info));
743
744 return insn_rec;
745 }
746
747
748 /* Delete all of the refs information from INSN. */
749
750 void
751 df_insn_refs_delete (struct dataflow *dflow, rtx insn)
752 {
753 struct df *df = dflow->df;
754 unsigned int uid = INSN_UID (insn);
755 struct df_insn_info *insn_info = NULL;
756 struct df_ref *ref;
757 struct df_scan_problem_data *problem_data =
758 (struct df_scan_problem_data *) dflow->problem_data;
759
760 if (uid < df->insns_size)
761 insn_info = DF_INSN_UID_GET (df, uid);
762
763 if (insn_info)
764 {
765 ref = insn_info->defs;
766 while (ref)
767 ref = df_reg_chain_unlink (dflow, ref);
768
769 ref = insn_info->uses;
770 while (ref)
771 ref = df_reg_chain_unlink (dflow, ref);
772
773 pool_free (problem_data->insn_pool, insn_info);
774 DF_INSN_SET (df, insn, NULL);
775 }
776 }
777
778
779 /* Delete all of the refs information from basic_block with BB_INDEX. */
780
781 void
782 df_bb_refs_delete (struct dataflow *dflow, int bb_index)
783 {
784 struct df_ref *def;
785 struct df_ref *use;
786
787 struct df_scan_bb_info *bb_info
788 = df_scan_get_bb_info (dflow, bb_index);
789 rtx insn;
790 basic_block bb = BASIC_BLOCK (bb_index);
791 FOR_BB_INSNS (bb, insn)
792 {
793 if (INSN_P (insn))
794 {
795 /* Record defs within INSN. */
796 df_insn_refs_delete (dflow, insn);
797 }
798 }
799
800 /* Get rid of any artifical uses or defs. */
801 if (bb_info)
802 {
803 def = bb_info->artificial_defs;
804 while (def)
805 def = df_reg_chain_unlink (dflow, def);
806 bb_info->artificial_defs = NULL;
807 use = bb_info->artificial_uses;
808 while (use)
809 use = df_reg_chain_unlink (dflow, use);
810 bb_info->artificial_uses = NULL;
811 }
812 }
813
814
815 /* Delete all of the refs information from BLOCKS. */
816
817 void
818 df_refs_delete (struct dataflow *dflow, bitmap blocks)
819 {
820 bitmap_iterator bi;
821 unsigned int bb_index;
822
823 EXECUTE_IF_SET_IN_BITMAP (blocks, 0, bb_index, bi)
824 {
825 df_bb_refs_delete (dflow, bb_index);
826 }
827 }
828
829
830 /* Take build ref table for either the uses or defs from the reg-use
831 or reg-def chains. */
832
833 void
834 df_reorganize_refs (struct df_ref_info *ref_info)
835 {
836 unsigned int m = ref_info->regs_inited;
837 unsigned int regno;
838 unsigned int offset = 0;
839 unsigned int size = 0;
840
841 if (ref_info->refs_organized)
842 return;
843
844 if (ref_info->refs_size < ref_info->bitmap_size)
845 {
846 int new_size = ref_info->bitmap_size + ref_info->bitmap_size / 4;
847 df_grow_ref_info (ref_info, new_size);
848 }
849
850 for (regno = 0; regno < m; regno++)
851 {
852 struct df_reg_info *reg_info = ref_info->regs[regno];
853 int count = 0;
854 if (reg_info)
855 {
856 struct df_ref *ref = reg_info->reg_chain;
857 reg_info->begin = offset;
858 while (ref)
859 {
860 ref_info->refs[offset] = ref;
861 DF_REF_ID (ref) = offset++;
862 ref = DF_REF_NEXT_REG (ref);
863 count++;
864 size++;
865 }
866 reg_info->n_refs = count;
867 }
868 }
869
870 /* The bitmap size is not decremented when refs are deleted. So
871 reset it now that we have squished out all of the empty
872 slots. */
873 ref_info->bitmap_size = size;
874 ref_info->refs_organized = true;
875 ref_info->add_refs_inline = true;
876 }
877
878 \f
879 /* Local miscellaneous routines. */
880
881 /* Local routines for recording refs. */
882
883 /* Set where we are in the compilation. */
884
885 void
886 df_set_state (int state)
887 {
888 df_state = state;
889 }
890
891
892 \f
893 /*----------------------------------------------------------------------------
894 Hard core instruction scanning code. No external interfaces here,
895 just a lot of routines that look inside insns.
896 ----------------------------------------------------------------------------*/
897
898 /* Create a ref and add it to the reg-def or reg-use chains. */
899
900 static struct df_ref *
901 df_ref_create_structure (struct dataflow *dflow, rtx reg, rtx *loc,
902 basic_block bb, rtx insn,
903 enum df_ref_type ref_type,
904 enum df_ref_flags ref_flags)
905 {
906 struct df_ref *this_ref;
907 struct df *df = dflow->df;
908 int regno = REGNO (GET_CODE (reg) == SUBREG ? SUBREG_REG (reg) : reg);
909 struct df_scan_problem_data *problem_data =
910 (struct df_scan_problem_data *) dflow->problem_data;
911
912 this_ref = pool_alloc (problem_data->ref_pool);
913 DF_REF_REG (this_ref) = reg;
914 DF_REF_REGNO (this_ref) = regno;
915 DF_REF_LOC (this_ref) = loc;
916 DF_REF_INSN (this_ref) = insn;
917 DF_REF_CHAIN (this_ref) = NULL;
918 DF_REF_TYPE (this_ref) = ref_type;
919 DF_REF_FLAGS (this_ref) = ref_flags;
920 DF_REF_DATA (this_ref) = NULL;
921 DF_REF_BB (this_ref) = bb;
922
923 /* Link the ref into the reg_def and reg_use chains and keep a count
924 of the instances. */
925 if (ref_type == DF_REF_REG_DEF)
926 {
927 struct df_reg_info *reg_info = DF_REG_DEF_GET (df, regno);
928 reg_info->n_refs++;
929
930 /* Add the ref to the reg_def chain. */
931 df_reg_chain_create (reg_info, this_ref);
932 DF_REF_ID (this_ref) = df->def_info.bitmap_size;
933 if (df->def_info.add_refs_inline)
934 {
935 if (DF_DEFS_SIZE (df) >= df->def_info.refs_size)
936 {
937 int new_size = df->def_info.bitmap_size
938 + df->def_info.bitmap_size / 4;
939 df_grow_ref_info (&df->def_info, new_size);
940 }
941 /* Add the ref to the big array of defs. */
942 DF_DEFS_SET (df, df->def_info.bitmap_size, this_ref);
943 df->def_info.refs_organized = false;
944 }
945
946 df->def_info.bitmap_size++;
947
948 if (DF_REF_FLAGS (this_ref) & DF_REF_ARTIFICIAL)
949 {
950 struct df_scan_bb_info *bb_info
951 = df_scan_get_bb_info (dflow, bb->index);
952 this_ref->next_ref = bb_info->artificial_defs;
953 bb_info->artificial_defs = this_ref;
954 }
955 else
956 {
957 this_ref->next_ref = DF_INSN_GET (df, insn)->defs;
958 DF_INSN_GET (df, insn)->defs = this_ref;
959 }
960 }
961 else
962 {
963 struct df_reg_info *reg_info = DF_REG_USE_GET (df, regno);
964 reg_info->n_refs++;
965
966 /* Add the ref to the reg_use chain. */
967 df_reg_chain_create (reg_info, this_ref);
968 DF_REF_ID (this_ref) = df->use_info.bitmap_size;
969 if (df->use_info.add_refs_inline)
970 {
971 if (DF_USES_SIZE (df) >= df->use_info.refs_size)
972 {
973 int new_size = df->use_info.bitmap_size
974 + df->use_info.bitmap_size / 4;
975 df_grow_ref_info (&df->use_info, new_size);
976 }
977 /* Add the ref to the big array of defs. */
978 DF_USES_SET (df, df->use_info.bitmap_size, this_ref);
979 df->use_info.refs_organized = false;
980 }
981
982 df->use_info.bitmap_size++;
983 if (DF_REF_FLAGS (this_ref) & DF_REF_ARTIFICIAL)
984 {
985 struct df_scan_bb_info *bb_info
986 = df_scan_get_bb_info (dflow, bb->index);
987 this_ref->next_ref = bb_info->artificial_uses;
988 bb_info->artificial_uses = this_ref;
989 }
990 else
991 {
992 this_ref->next_ref = DF_INSN_GET (df, insn)->uses;
993 DF_INSN_GET (df, insn)->uses = this_ref;
994 }
995 }
996 return this_ref;
997 }
998
999
1000 /* Create new references of type DF_REF_TYPE for each part of register REG
1001 at address LOC within INSN of BB. */
1002
1003 static void
1004 df_ref_record (struct dataflow *dflow, rtx reg, rtx *loc,
1005 basic_block bb, rtx insn,
1006 enum df_ref_type ref_type,
1007 enum df_ref_flags ref_flags,
1008 bool record_live)
1009 {
1010 unsigned int regno;
1011 struct df *df = dflow->df;
1012
1013 gcc_assert (REG_P (reg) || GET_CODE (reg) == SUBREG);
1014
1015 /* For the reg allocator we are interested in some SUBREG rtx's, but not
1016 all. Notably only those representing a word extraction from a multi-word
1017 reg. As written in the docu those should have the form
1018 (subreg:SI (reg:M A) N), with size(SImode) > size(Mmode).
1019 XXX Is that true? We could also use the global word_mode variable. */
1020 if ((df->flags & DF_SUBREGS) == 0
1021 && GET_CODE (reg) == SUBREG
1022 && (GET_MODE_SIZE (GET_MODE (reg)) < GET_MODE_SIZE (word_mode)
1023 || GET_MODE_SIZE (GET_MODE (reg))
1024 >= GET_MODE_SIZE (GET_MODE (SUBREG_REG (reg)))))
1025 {
1026 loc = &SUBREG_REG (reg);
1027 reg = *loc;
1028 ref_flags |= DF_REF_STRIPPED;
1029 }
1030
1031 regno = REGNO (GET_CODE (reg) == SUBREG ? SUBREG_REG (reg) : reg);
1032 if (regno < FIRST_PSEUDO_REGISTER)
1033 {
1034 int i;
1035 int endregno;
1036
1037 if (! (df->flags & DF_HARD_REGS))
1038 return;
1039
1040 /* GET_MODE (reg) is correct here. We do not want to go into a SUBREG
1041 for the mode, because we only want to add references to regs, which
1042 are really referenced. E.g., a (subreg:SI (reg:DI 0) 0) does _not_
1043 reference the whole reg 0 in DI mode (which would also include
1044 reg 1, at least, if 0 and 1 are SImode registers). */
1045 endregno = hard_regno_nregs[regno][GET_MODE (reg)];
1046 if (GET_CODE (reg) == SUBREG)
1047 regno += subreg_regno_offset (regno, GET_MODE (SUBREG_REG (reg)),
1048 SUBREG_BYTE (reg), GET_MODE (reg));
1049 endregno += regno;
1050
1051 for (i = regno; i < endregno; i++)
1052 {
1053 /* Calls are handled at call site because regs_ever_live
1054 doesn't include clobbered regs, only used ones. */
1055 if (ref_type == DF_REF_REG_DEF && record_live)
1056 regs_ever_live[i] = 1;
1057 else if ((ref_type == DF_REF_REG_USE
1058 || ref_type == DF_REF_REG_MEM_STORE
1059 || ref_type == DF_REF_REG_MEM_LOAD)
1060 && ((ref_flags & DF_REF_ARTIFICIAL) == 0))
1061 {
1062 /* Set regs_ever_live on uses of non-eliminable frame
1063 pointers and arg pointers. */
1064 if (! (TEST_HARD_REG_BIT (elim_reg_set, regno)
1065 && (regno == FRAME_POINTER_REGNUM
1066 || regno == ARG_POINTER_REGNUM)))
1067 regs_ever_live[i] = 1;
1068 }
1069
1070 df_ref_create_structure (dflow, regno_reg_rtx[i], loc,
1071 bb, insn, ref_type, ref_flags);
1072 }
1073 }
1074 else
1075 {
1076 df_ref_create_structure (dflow, reg, loc,
1077 bb, insn, ref_type, ref_flags);
1078 }
1079 }
1080
1081
1082 /* A set to a non-paradoxical SUBREG for which the number of word_mode units
1083 covered by the outer mode is smaller than that covered by the inner mode,
1084 is a read-modify-write operation.
1085 This function returns true iff the SUBREG X is such a SUBREG. */
1086
1087 bool
1088 df_read_modify_subreg_p (rtx x)
1089 {
1090 unsigned int isize, osize;
1091 if (GET_CODE (x) != SUBREG)
1092 return false;
1093 isize = GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)));
1094 osize = GET_MODE_SIZE (GET_MODE (x));
1095 return (isize > osize && isize > UNITS_PER_WORD);
1096 }
1097
1098
1099 /* Process all the registers defined in the rtx, X.
1100 Autoincrement/decrement definitions will be picked up by
1101 df_uses_record. */
1102
1103 static void
1104 df_def_record_1 (struct dataflow *dflow, rtx x,
1105 basic_block bb, rtx insn,
1106 enum df_ref_flags flags, bool record_live)
1107 {
1108 rtx *loc;
1109 rtx dst;
1110
1111 /* We may recursively call ourselves on EXPR_LIST when dealing with PARALLEL
1112 construct. */
1113 if (GET_CODE (x) == EXPR_LIST || GET_CODE (x) == CLOBBER)
1114 loc = &XEXP (x, 0);
1115 else
1116 loc = &SET_DEST (x);
1117 dst = *loc;
1118
1119 /* Some targets place small structures in registers for
1120 return values of functions. */
1121 if (GET_CODE (dst) == PARALLEL && GET_MODE (dst) == BLKmode)
1122 {
1123 int i;
1124
1125 for (i = XVECLEN (dst, 0) - 1; i >= 0; i--)
1126 {
1127 rtx temp = XVECEXP (dst, 0, i);
1128 if (GET_CODE (temp) == EXPR_LIST || GET_CODE (temp) == CLOBBER
1129 || GET_CODE (temp) == SET)
1130 df_def_record_1 (dflow, temp, bb, insn,
1131 GET_CODE (temp) == CLOBBER ? flags | DF_REF_CLOBBER : flags,
1132 record_live);
1133 }
1134 return;
1135 }
1136
1137 /* Maybe, we should flag the use of STRICT_LOW_PART somehow. It might
1138 be handy for the reg allocator. */
1139 while (GET_CODE (dst) == STRICT_LOW_PART
1140 || GET_CODE (dst) == ZERO_EXTRACT
1141 || df_read_modify_subreg_p (dst))
1142 {
1143 #if 0
1144 /* Strict low part always contains SUBREG, but we do not want to make
1145 it appear outside, as whole register is always considered. */
1146 if (GET_CODE (dst) == STRICT_LOW_PART)
1147 {
1148 loc = &XEXP (dst, 0);
1149 dst = *loc;
1150 }
1151 #endif
1152 loc = &XEXP (dst, 0);
1153 dst = *loc;
1154 flags |= DF_REF_READ_WRITE;
1155 }
1156
1157 if (REG_P (dst)
1158 || (GET_CODE (dst) == SUBREG && REG_P (SUBREG_REG (dst))))
1159 df_ref_record (dflow, dst, loc, bb, insn,
1160 DF_REF_REG_DEF, flags, record_live);
1161 }
1162
1163
1164 /* Process all the registers defined in the pattern rtx, X. */
1165
1166 static void
1167 df_defs_record (struct dataflow *dflow, rtx x, basic_block bb, rtx insn)
1168 {
1169 RTX_CODE code = GET_CODE (x);
1170
1171 if (code == SET || code == CLOBBER)
1172 {
1173 /* Mark the single def within the pattern. */
1174 df_def_record_1 (dflow, x, bb, insn,
1175 code == CLOBBER ? DF_REF_CLOBBER : 0, true);
1176 }
1177 else if (code == COND_EXEC)
1178 {
1179 df_defs_record (dflow, COND_EXEC_CODE (x), bb, insn);
1180 }
1181 else if (code == PARALLEL)
1182 {
1183 int i;
1184
1185 /* Mark the multiple defs within the pattern. */
1186 for (i = XVECLEN (x, 0) - 1; i >= 0; i--)
1187 df_defs_record (dflow, XVECEXP (x, 0, i), bb, insn);
1188 }
1189 }
1190
1191
1192 /* Process all the registers used in the rtx at address LOC. */
1193
1194 static void
1195 df_uses_record (struct dataflow *dflow, rtx *loc, enum df_ref_type ref_type,
1196 basic_block bb, rtx insn, enum df_ref_flags flags)
1197 {
1198 RTX_CODE code;
1199 rtx x;
1200 retry:
1201 x = *loc;
1202 if (!x)
1203 return;
1204 code = GET_CODE (x);
1205 switch (code)
1206 {
1207 case LABEL_REF:
1208 case SYMBOL_REF:
1209 case CONST_INT:
1210 case CONST:
1211 case CONST_DOUBLE:
1212 case CONST_VECTOR:
1213 case PC:
1214 case CC0:
1215 case ADDR_VEC:
1216 case ADDR_DIFF_VEC:
1217 return;
1218
1219 case CLOBBER:
1220 /* If we are clobbering a MEM, mark any registers inside the address
1221 as being used. */
1222 if (MEM_P (XEXP (x, 0)))
1223 df_uses_record (dflow, &XEXP (XEXP (x, 0), 0),
1224 DF_REF_REG_MEM_STORE, bb, insn, flags);
1225
1226 /* If we're clobbering a REG then we have a def so ignore. */
1227 return;
1228
1229 case MEM:
1230 df_uses_record (dflow, &XEXP (x, 0), DF_REF_REG_MEM_LOAD, bb, insn,
1231 flags & DF_REF_IN_NOTE);
1232 return;
1233
1234 case SUBREG:
1235 /* While we're here, optimize this case. */
1236
1237 /* In case the SUBREG is not of a REG, do not optimize. */
1238 if (!REG_P (SUBREG_REG (x)))
1239 {
1240 loc = &SUBREG_REG (x);
1241 df_uses_record (dflow, loc, ref_type, bb, insn, flags);
1242 return;
1243 }
1244 /* ... Fall through ... */
1245
1246 case REG:
1247 df_ref_record (dflow, x, loc, bb, insn, ref_type, flags, true);
1248 return;
1249
1250 case SET:
1251 {
1252 rtx dst = SET_DEST (x);
1253 gcc_assert (!(flags & DF_REF_IN_NOTE));
1254 df_uses_record (dflow, &SET_SRC (x), DF_REF_REG_USE, bb, insn, flags);
1255
1256 switch (GET_CODE (dst))
1257 {
1258 case SUBREG:
1259 if (df_read_modify_subreg_p (dst))
1260 {
1261 df_uses_record (dflow, &SUBREG_REG (dst),
1262 DF_REF_REG_USE, bb,
1263 insn, flags | DF_REF_READ_WRITE);
1264 break;
1265 }
1266 /* Fall through. */
1267 case REG:
1268 case PARALLEL:
1269 case SCRATCH:
1270 case PC:
1271 case CC0:
1272 break;
1273 case MEM:
1274 df_uses_record (dflow, &XEXP (dst, 0),
1275 DF_REF_REG_MEM_STORE,
1276 bb, insn, flags);
1277 break;
1278 case STRICT_LOW_PART:
1279 {
1280 rtx *temp = &XEXP (dst, 0);
1281 /* A strict_low_part uses the whole REG and not just the
1282 SUBREG. */
1283 dst = XEXP (dst, 0);
1284 df_uses_record (dflow,
1285 (GET_CODE (dst) == SUBREG)
1286 ? &SUBREG_REG (dst) : temp,
1287 DF_REF_REG_USE, bb,
1288 insn, DF_REF_READ_WRITE);
1289 }
1290 break;
1291 case ZERO_EXTRACT:
1292 case SIGN_EXTRACT:
1293 df_uses_record (dflow, &XEXP (dst, 0),
1294 DF_REF_REG_USE, bb, insn,
1295 DF_REF_READ_WRITE);
1296 df_uses_record (dflow, &XEXP (dst, 1),
1297 DF_REF_REG_USE, bb, insn, flags);
1298 df_uses_record (dflow, &XEXP (dst, 2),
1299 DF_REF_REG_USE, bb, insn, flags);
1300 dst = XEXP (dst, 0);
1301 break;
1302 default:
1303 gcc_unreachable ();
1304 }
1305 return;
1306 }
1307
1308 case RETURN:
1309 break;
1310
1311 case ASM_OPERANDS:
1312 case UNSPEC_VOLATILE:
1313 case TRAP_IF:
1314 case ASM_INPUT:
1315 {
1316 /* Traditional and volatile asm instructions must be
1317 considered to use and clobber all hard registers, all
1318 pseudo-registers and all of memory. So must TRAP_IF and
1319 UNSPEC_VOLATILE operations.
1320
1321 Consider for instance a volatile asm that changes the fpu
1322 rounding mode. An insn should not be moved across this
1323 even if it only uses pseudo-regs because it might give an
1324 incorrectly rounded result.
1325
1326 However, flow.c's liveness computation did *not* do this,
1327 giving the reasoning as " ?!? Unfortunately, marking all
1328 hard registers as live causes massive problems for the
1329 register allocator and marking all pseudos as live creates
1330 mountains of uninitialized variable warnings."
1331
1332 In order to maintain the status quo with regard to liveness
1333 and uses, we do what flow.c did and just mark any regs we
1334 can find in ASM_OPERANDS as used. Later on, when liveness
1335 is computed, asm insns are scanned and regs_asm_clobbered
1336 is filled out.
1337
1338 For all ASM_OPERANDS, we must traverse the vector of input
1339 operands. We can not just fall through here since then we
1340 would be confused by the ASM_INPUT rtx inside ASM_OPERANDS,
1341 which do not indicate traditional asms unlike their normal
1342 usage. */
1343 if (code == ASM_OPERANDS)
1344 {
1345 int j;
1346
1347 for (j = 0; j < ASM_OPERANDS_INPUT_LENGTH (x); j++)
1348 df_uses_record (dflow, &ASM_OPERANDS_INPUT (x, j),
1349 DF_REF_REG_USE, bb, insn, flags);
1350 return;
1351 }
1352 break;
1353 }
1354
1355 case PRE_DEC:
1356 case POST_DEC:
1357 case PRE_INC:
1358 case POST_INC:
1359 case PRE_MODIFY:
1360 case POST_MODIFY:
1361 /* Catch the def of the register being modified. */
1362 flags |= DF_REF_READ_WRITE;
1363 df_ref_record (dflow, XEXP (x, 0), &XEXP (x, 0), bb, insn,
1364 DF_REF_REG_DEF, flags, true);
1365
1366 /* ... Fall through to handle uses ... */
1367
1368 default:
1369 break;
1370 }
1371
1372 /* Recursively scan the operands of this expression. */
1373 {
1374 const char *fmt = GET_RTX_FORMAT (code);
1375 int i;
1376
1377 for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
1378 {
1379 if (fmt[i] == 'e')
1380 {
1381 /* Tail recursive case: save a function call level. */
1382 if (i == 0)
1383 {
1384 loc = &XEXP (x, 0);
1385 goto retry;
1386 }
1387 df_uses_record (dflow, &XEXP (x, i), ref_type, bb, insn, flags);
1388 }
1389 else if (fmt[i] == 'E')
1390 {
1391 int j;
1392 for (j = 0; j < XVECLEN (x, i); j++)
1393 df_uses_record (dflow, &XVECEXP (x, i, j), ref_type,
1394 bb, insn, flags);
1395 }
1396 }
1397 }
1398 }
1399
1400 /* Return true if *LOC contains an asm. */
1401
1402 static int
1403 df_insn_contains_asm_1 (rtx *loc, void *data ATTRIBUTE_UNUSED)
1404 {
1405 if ( !*loc)
1406 return 0;
1407 if (GET_CODE (*loc) == ASM_OPERANDS)
1408 return 1;
1409 return 0;
1410 }
1411
1412
1413 /* Return true if INSN contains an ASM. */
1414
1415 static int
1416 df_insn_contains_asm (rtx insn)
1417 {
1418 return for_each_rtx (&insn, df_insn_contains_asm_1, NULL);
1419 }
1420
1421
1422
1423 /* Record all the refs for DF within INSN of basic block BB. */
1424
1425 static void
1426 df_insn_refs_record (struct dataflow *dflow, basic_block bb, rtx insn)
1427 {
1428 int i;
1429 struct df *df = dflow->df;
1430
1431 if (INSN_P (insn))
1432 {
1433 rtx note;
1434
1435 if (df_insn_contains_asm (insn))
1436 DF_INSN_CONTAINS_ASM (df, insn) = true;
1437
1438 /* Record register defs. */
1439 df_defs_record (dflow, PATTERN (insn), bb, insn);
1440
1441 if (df->flags & DF_EQUIV_NOTES)
1442 for (note = REG_NOTES (insn); note;
1443 note = XEXP (note, 1))
1444 {
1445 switch (REG_NOTE_KIND (note))
1446 {
1447 case REG_EQUIV:
1448 case REG_EQUAL:
1449 df_uses_record (dflow, &XEXP (note, 0), DF_REF_REG_USE,
1450 bb, insn, DF_REF_IN_NOTE);
1451 default:
1452 break;
1453 }
1454 }
1455
1456 if (CALL_P (insn))
1457 {
1458 rtx note;
1459
1460 /* Record the registers used to pass arguments, and explicitly
1461 noted as clobbered. */
1462 for (note = CALL_INSN_FUNCTION_USAGE (insn); note;
1463 note = XEXP (note, 1))
1464 {
1465 if (GET_CODE (XEXP (note, 0)) == USE)
1466 df_uses_record (dflow, &XEXP (XEXP (note, 0), 0),
1467 DF_REF_REG_USE,
1468 bb, insn, 0);
1469 else if (GET_CODE (XEXP (note, 0)) == CLOBBER)
1470 {
1471 df_defs_record (dflow, XEXP (note, 0), bb, insn);
1472 if (REG_P (XEXP (XEXP (note, 0), 0)))
1473 {
1474 rtx reg = XEXP (XEXP (note, 0), 0);
1475 int regno_last;
1476 int regno_first;
1477 int i;
1478
1479 regno_last = regno_first = REGNO (reg);
1480 if (regno_first < FIRST_PSEUDO_REGISTER)
1481 regno_last
1482 += hard_regno_nregs[regno_first][GET_MODE (reg)] - 1;
1483 for (i = regno_first; i <= regno_last; i++)
1484 regs_ever_live[i] = 1;
1485 }
1486 }
1487 }
1488
1489 /* The stack ptr is used (honorarily) by a CALL insn. */
1490 df_uses_record (dflow, &regno_reg_rtx[STACK_POINTER_REGNUM],
1491 DF_REF_REG_USE, bb, insn,
1492 0);
1493
1494 if (df->flags & DF_HARD_REGS)
1495 {
1496 bitmap_iterator bi;
1497 unsigned int ui;
1498 /* Calls may also reference any of the global registers,
1499 so they are recorded as used. */
1500 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1501 if (global_regs[i])
1502 df_uses_record (dflow, &regno_reg_rtx[i],
1503 DF_REF_REG_USE, bb, insn,
1504 0);
1505 EXECUTE_IF_SET_IN_BITMAP (df_invalidated_by_call, 0, ui, bi)
1506 df_ref_record (dflow, regno_reg_rtx[ui], &regno_reg_rtx[ui], bb, insn,
1507 DF_REF_REG_DEF, DF_REF_CLOBBER, false);
1508 }
1509 }
1510
1511 /* Record the register uses. */
1512 df_uses_record (dflow, &PATTERN (insn),
1513 DF_REF_REG_USE, bb, insn, 0);
1514
1515 }
1516 }
1517
1518 static bool
1519 df_has_eh_preds (basic_block bb)
1520 {
1521 edge e;
1522 edge_iterator ei;
1523
1524 FOR_EACH_EDGE (e, ei, bb->preds)
1525 {
1526 if (e->flags & EDGE_EH)
1527 return true;
1528 }
1529 return false;
1530 }
1531
1532 /* Record all the refs within the basic block BB. */
1533
1534 static void
1535 df_bb_refs_record (struct dataflow *dflow, basic_block bb)
1536 {
1537 struct df *df = dflow->df;
1538 rtx insn;
1539 int luid = 0;
1540 struct df_scan_bb_info *bb_info = df_scan_get_bb_info (dflow, bb->index);
1541
1542 /* Need to make sure that there is a record in the basic block info. */
1543 if (!bb_info)
1544 {
1545 bb_info = (struct df_scan_bb_info *) pool_alloc (dflow->block_pool);
1546 df_scan_set_bb_info (dflow, bb->index, bb_info);
1547 bb_info->artificial_defs = NULL;
1548 bb_info->artificial_uses = NULL;
1549 }
1550
1551 /* Scan the block an insn at a time from beginning to end. */
1552 FOR_BB_INSNS (bb, insn)
1553 {
1554 df_insn_create_insn_record (dflow, insn);
1555 if (INSN_P (insn))
1556 {
1557 /* Record defs within INSN. */
1558 DF_INSN_LUID (df, insn) = luid++;
1559 df_insn_refs_record (dflow, bb, insn);
1560 }
1561 DF_INSN_LUID (df, insn) = luid;
1562 }
1563
1564 #ifdef EH_RETURN_DATA_REGNO
1565 if ((df->flags & DF_HARD_REGS)
1566 && df_has_eh_preds (bb))
1567 {
1568 unsigned int i;
1569 /* Mark the registers that will contain data for the handler. */
1570 for (i = 0; ; ++i)
1571 {
1572 unsigned regno = EH_RETURN_DATA_REGNO (i);
1573 if (regno == INVALID_REGNUM)
1574 break;
1575 df_ref_record (dflow, regno_reg_rtx[i], &regno_reg_rtx[i], bb, NULL,
1576 DF_REF_REG_DEF, DF_REF_ARTIFICIAL | DF_REF_AT_TOP,
1577 false);
1578 }
1579 }
1580 #endif
1581
1582
1583 if ((df->flags & DF_HARD_REGS)
1584 && df_has_eh_preds (bb))
1585 {
1586 #ifdef EH_USES
1587 unsigned int i;
1588 /* This code is putting in a artificial ref for the use at the
1589 TOP of the block that receives the exception. It is too
1590 cumbersome to actually put the ref on the edge. We could
1591 either model this at the top of the receiver block or the
1592 bottom of the sender block.
1593
1594 The bottom of the sender block is problematic because not all
1595 out-edges of the a block are eh-edges. However, it is true
1596 that all edges into a block are either eh-edges or none of
1597 them are eh-edges. Thus, we can model this at the top of the
1598 eh-receiver for all of the edges at once. */
1599 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1600 if (EH_USES (i))
1601 df_uses_record (dflow, &regno_reg_rtx[i],
1602 DF_REF_REG_USE, EXIT_BLOCK_PTR, NULL,
1603 DF_REF_ARTIFICIAL | DF_REF_AT_TOP);
1604 #endif
1605
1606 /* The following code (down thru the arg_pointer seting APPEARS
1607 to be necessary because there is nothing that actually
1608 describes what the exception handling code may actually need
1609 to keep alive. */
1610 if (reload_completed)
1611 {
1612 if (frame_pointer_needed)
1613 {
1614 df_uses_record (dflow, &regno_reg_rtx[FRAME_POINTER_REGNUM],
1615 DF_REF_REG_USE, bb, NULL, DF_REF_ARTIFICIAL);
1616 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
1617 df_uses_record (dflow, &regno_reg_rtx[HARD_FRAME_POINTER_REGNUM],
1618 DF_REF_REG_USE, bb, NULL, DF_REF_ARTIFICIAL);
1619 #endif
1620 }
1621 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
1622 if (fixed_regs[ARG_POINTER_REGNUM])
1623 df_uses_record (dflow, &regno_reg_rtx[ARG_POINTER_REGNUM],
1624 DF_REF_REG_USE, bb, NULL,
1625 DF_REF_ARTIFICIAL);
1626 #endif
1627 }
1628 }
1629
1630 if ((df->flags & DF_HARD_REGS)
1631 && bb->index >= NUM_FIXED_BLOCKS)
1632 {
1633 /* Before reload, there are a few registers that must be forced
1634 live everywhere -- which might not already be the case for
1635 blocks within infinite loops. */
1636 if (! reload_completed)
1637 {
1638
1639 /* Any reference to any pseudo before reload is a potential
1640 reference of the frame pointer. */
1641 df_uses_record (dflow, &regno_reg_rtx[FRAME_POINTER_REGNUM],
1642 DF_REF_REG_USE, bb, NULL, DF_REF_ARTIFICIAL);
1643
1644 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
1645 /* Pseudos with argument area equivalences may require
1646 reloading via the argument pointer. */
1647 if (fixed_regs[ARG_POINTER_REGNUM])
1648 df_uses_record (dflow, &regno_reg_rtx[ARG_POINTER_REGNUM],
1649 DF_REF_REG_USE, bb, NULL,
1650 DF_REF_ARTIFICIAL);
1651 #endif
1652
1653 /* Any constant, or pseudo with constant equivalences, may
1654 require reloading from memory using the pic register. */
1655 if ((unsigned) PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM
1656 && fixed_regs[PIC_OFFSET_TABLE_REGNUM])
1657 df_uses_record (dflow, &regno_reg_rtx[PIC_OFFSET_TABLE_REGNUM],
1658 DF_REF_REG_USE, bb, NULL,
1659 DF_REF_ARTIFICIAL);
1660 }
1661 /* The all-important stack pointer must always be live. */
1662 df_uses_record (dflow, &regno_reg_rtx[STACK_POINTER_REGNUM],
1663 DF_REF_REG_USE, bb, NULL, DF_REF_ARTIFICIAL);
1664 }
1665 }
1666
1667
1668 /* Record all the refs in the basic blocks specified by BLOCKS. */
1669
1670 static void
1671 df_refs_record (struct dataflow *dflow, bitmap blocks)
1672 {
1673 unsigned int bb_index;
1674 bitmap_iterator bi;
1675
1676 EXECUTE_IF_SET_IN_BITMAP (blocks, 0, bb_index, bi)
1677 {
1678 basic_block bb = BASIC_BLOCK (bb_index);
1679 df_bb_refs_record (dflow, bb);
1680 }
1681
1682 if (bitmap_bit_p (blocks, EXIT_BLOCK))
1683 df_record_exit_block_uses (dflow);
1684
1685 if (bitmap_bit_p (blocks, ENTRY_BLOCK))
1686 df_record_entry_block_defs (dflow);
1687 }
1688
1689
1690 /*----------------------------------------------------------------------------
1691 Specialized hard register scanning functions.
1692 ----------------------------------------------------------------------------*/
1693
1694 /* Mark a register in SET. Hard registers in large modes get all
1695 of their component registers set as well. */
1696
1697 static void
1698 df_mark_reg (rtx reg, void *vset)
1699 {
1700 bitmap set = (bitmap) vset;
1701 int regno = REGNO (reg);
1702
1703 gcc_assert (GET_MODE (reg) != BLKmode);
1704
1705 bitmap_set_bit (set, regno);
1706 if (regno < FIRST_PSEUDO_REGISTER)
1707 {
1708 int n = hard_regno_nregs[regno][GET_MODE (reg)];
1709 while (--n > 0)
1710 bitmap_set_bit (set, regno + n);
1711 }
1712 }
1713
1714
1715 /* Record the (conservative) set of hard registers that are defined on
1716 entry to the function. */
1717
1718 static void
1719 df_record_entry_block_defs (struct dataflow * dflow)
1720 {
1721 unsigned int i;
1722 bitmap_iterator bi;
1723 rtx r;
1724 struct df * df = dflow->df;
1725
1726 bitmap_clear (df->entry_block_defs);
1727
1728 if (! (df->flags & DF_HARD_REGS))
1729 return;
1730
1731 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1732 {
1733 if (FUNCTION_ARG_REGNO_P (i))
1734 #ifdef INCOMING_REGNO
1735 bitmap_set_bit (df->entry_block_defs, INCOMING_REGNO (i));
1736 #else
1737 bitmap_set_bit (df->entry_block_defs, i);
1738 #endif
1739 }
1740
1741 /* Once the prologue has been generated, all of these registers
1742 should just show up in the first regular block. */
1743 if (HAVE_prologue && epilogue_completed)
1744 {
1745 /* Defs for the callee saved registers are inserted so that the
1746 pushes have some defining location. */
1747 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1748 if ((call_used_regs[i] == 0) && (regs_ever_live[i]))
1749 bitmap_set_bit (df->entry_block_defs, i);
1750 }
1751 else
1752 {
1753 if (REG_P (INCOMING_RETURN_ADDR_RTX))
1754 bitmap_set_bit (df->entry_block_defs, REGNO (INCOMING_RETURN_ADDR_RTX));
1755
1756 /* If STATIC_CHAIN_INCOMING_REGNUM == STATIC_CHAIN_REGNUM
1757 only STATIC_CHAIN_REGNUM is defined. If they are different,
1758 we only care about the STATIC_CHAIN_INCOMING_REGNUM. */
1759 #ifdef STATIC_CHAIN_INCOMING_REGNUM
1760 bitmap_set_bit (df->entry_block_defs, STATIC_CHAIN_INCOMING_REGNUM);
1761 #else
1762 #ifdef STATIC_CHAIN_REGNUM
1763 bitmap_set_bit (df->entry_block_defs, STATIC_CHAIN_REGNUM);
1764 #endif
1765 #endif
1766
1767 r = TARGET_STRUCT_VALUE_RTX (current_function_decl, true);
1768 if (r && REG_P (r))
1769 bitmap_set_bit (df->entry_block_defs, REGNO (r));
1770 }
1771
1772 /* These registers are live everywhere. */
1773 if (!reload_completed)
1774 {
1775 /* Any reference to any pseudo before reload is a potential
1776 reference of the frame pointer. */
1777 bitmap_set_bit (df->entry_block_defs, FRAME_POINTER_REGNUM);
1778
1779 #ifdef EH_USES
1780 /* The ia-64, the only machine that uses this, does not define these
1781 until after reload. */
1782 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1783 if (EH_USES (i))
1784 {
1785 bitmap_set_bit (df->entry_block_defs, i);
1786 }
1787 #endif
1788
1789 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
1790 /* Pseudos with argument area equivalences may require
1791 reloading via the argument pointer. */
1792 if (fixed_regs[ARG_POINTER_REGNUM])
1793 bitmap_set_bit (df->entry_block_defs, ARG_POINTER_REGNUM);
1794 #endif
1795
1796 #ifdef PIC_OFFSET_TABLE_REGNUM
1797 /* Any constant, or pseudo with constant equivalences, may
1798 require reloading from memory using the pic register. */
1799 if ((unsigned) PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM
1800 && fixed_regs[PIC_OFFSET_TABLE_REGNUM])
1801 bitmap_set_bit (df->entry_block_defs, PIC_OFFSET_TABLE_REGNUM);
1802 #endif
1803 }
1804
1805 (*targetm.live_on_entry) (df->entry_block_defs);
1806
1807 EXECUTE_IF_SET_IN_BITMAP (df->entry_block_defs, 0, i, bi)
1808 {
1809 df_ref_record (dflow, regno_reg_rtx[i], &regno_reg_rtx[i],
1810 ENTRY_BLOCK_PTR, NULL,
1811 DF_REF_REG_DEF, DF_REF_ARTIFICIAL , false);
1812 }
1813 }
1814
1815
1816 /* Record the set of hard registers that are used in the exit block. */
1817
1818 static void
1819 df_record_exit_block_uses (struct dataflow *dflow)
1820 {
1821 unsigned int i;
1822 bitmap_iterator bi;
1823 struct df *df = dflow->df;
1824
1825 bitmap_clear (df->exit_block_uses);
1826
1827 if (! (df->flags & DF_HARD_REGS))
1828 return;
1829
1830 /* If exiting needs the right stack value, consider the stack
1831 pointer live at the end of the function. */
1832 if ((HAVE_epilogue && epilogue_completed)
1833 || ! EXIT_IGNORE_STACK
1834 || (! FRAME_POINTER_REQUIRED
1835 && ! current_function_calls_alloca
1836 && flag_omit_frame_pointer)
1837 || current_function_sp_is_unchanging)
1838 {
1839 bitmap_set_bit (df->exit_block_uses, STACK_POINTER_REGNUM);
1840 }
1841
1842 /* Mark the frame pointer if needed at the end of the function.
1843 If we end up eliminating it, it will be removed from the live
1844 list of each basic block by reload. */
1845
1846 if (! reload_completed || frame_pointer_needed)
1847 {
1848 bitmap_set_bit (df->exit_block_uses, FRAME_POINTER_REGNUM);
1849 #if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
1850 /* If they are different, also mark the hard frame pointer as live. */
1851 if (! LOCAL_REGNO (HARD_FRAME_POINTER_REGNUM))
1852 bitmap_set_bit (df->exit_block_uses, HARD_FRAME_POINTER_REGNUM);
1853 #endif
1854 }
1855
1856 #ifndef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
1857 /* Many architectures have a GP register even without flag_pic.
1858 Assume the pic register is not in use, or will be handled by
1859 other means, if it is not fixed. */
1860 if ((unsigned) PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM
1861 && fixed_regs[PIC_OFFSET_TABLE_REGNUM])
1862 bitmap_set_bit (df->exit_block_uses, PIC_OFFSET_TABLE_REGNUM);
1863 #endif
1864
1865 /* Mark all global registers, and all registers used by the
1866 epilogue as being live at the end of the function since they
1867 may be referenced by our caller. */
1868 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1869 if (global_regs[i] || EPILOGUE_USES (i))
1870 bitmap_set_bit (df->exit_block_uses, i);
1871
1872 if (HAVE_epilogue && epilogue_completed)
1873 {
1874 /* Mark all call-saved registers that we actually used. */
1875 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1876 if (regs_ever_live[i] && ! LOCAL_REGNO (i)
1877 && ! TEST_HARD_REG_BIT (regs_invalidated_by_call, i))
1878 bitmap_set_bit (df->exit_block_uses, i);
1879 }
1880
1881 #ifdef EH_RETURN_DATA_REGNO
1882 /* Mark the registers that will contain data for the handler. */
1883 if (reload_completed && current_function_calls_eh_return)
1884 for (i = 0; ; ++i)
1885 {
1886 unsigned regno = EH_RETURN_DATA_REGNO (i);
1887 if (regno == INVALID_REGNUM)
1888 break;
1889 bitmap_set_bit (df->exit_block_uses, regno);
1890 }
1891 #endif
1892
1893 #ifdef EH_RETURN_STACKADJ_RTX
1894 if ((! HAVE_epilogue || ! epilogue_completed)
1895 && current_function_calls_eh_return)
1896 {
1897 rtx tmp = EH_RETURN_STACKADJ_RTX;
1898 if (tmp && REG_P (tmp))
1899 df_mark_reg (tmp, df->exit_block_uses);
1900 }
1901 #endif
1902
1903 #ifdef EH_RETURN_HANDLER_RTX
1904 if ((! HAVE_epilogue || ! epilogue_completed)
1905 && current_function_calls_eh_return)
1906 {
1907 rtx tmp = EH_RETURN_HANDLER_RTX;
1908 if (tmp && REG_P (tmp))
1909 df_mark_reg (tmp, df->exit_block_uses);
1910 }
1911 #endif
1912
1913 /* Mark function return value. */
1914 diddle_return_value (df_mark_reg, (void*) df->exit_block_uses);
1915
1916 if (df->flags & DF_HARD_REGS)
1917 EXECUTE_IF_SET_IN_BITMAP (df->exit_block_uses, 0, i, bi)
1918 df_uses_record (dflow, &regno_reg_rtx[i],
1919 DF_REF_REG_USE, EXIT_BLOCK_PTR, NULL,
1920 DF_REF_ARTIFICIAL);
1921 }
1922
1923 static bool initialized = false;
1924
1925 /* Initialize some platform specific structures. */
1926
1927 void
1928 df_hard_reg_init (void)
1929 {
1930 int i;
1931 #ifdef ELIMINABLE_REGS
1932 static const struct {const int from, to; } eliminables[] = ELIMINABLE_REGS;
1933 #endif
1934 /* After reload, some ports add certain bits to regs_ever_live so
1935 this cannot be reset. */
1936
1937 if (!reload_completed)
1938 memset (regs_ever_live, 0, sizeof (regs_ever_live));
1939
1940 if (initialized)
1941 return;
1942
1943 bitmap_obstack_initialize (&persistent_obstack);
1944
1945 /* Record which registers will be eliminated. We use this in
1946 mark_used_regs. */
1947 CLEAR_HARD_REG_SET (elim_reg_set);
1948
1949 #ifdef ELIMINABLE_REGS
1950 for (i = 0; i < (int) ARRAY_SIZE (eliminables); i++)
1951 SET_HARD_REG_BIT (elim_reg_set, eliminables[i].from);
1952 #else
1953 SET_HARD_REG_BIT (elim_reg_set, FRAME_POINTER_REGNUM);
1954 #endif
1955
1956 df_invalidated_by_call = BITMAP_ALLOC (&persistent_obstack);
1957
1958 /* Inconveniently, this is only readily available in hard reg set
1959 form. */
1960 for (i = 0; i < FIRST_PSEUDO_REGISTER; ++i)
1961 if (TEST_HARD_REG_BIT (regs_invalidated_by_call, i))
1962 bitmap_set_bit (df_invalidated_by_call, i);
1963
1964 initialized = true;
1965 }