gcc50: Disconnect from buildworld.
[dragonfly.git] / contrib / gcc-5.0 / gcc / df-problems.c
1 /* Standard problems for dataflow support routines.
2    Copyright (C) 1999-2015 Free Software Foundation, Inc.
3    Originally contributed by Michael P. Hayes
4              (m.hayes@elec.canterbury.ac.nz, mhayes@redhat.com)
5    Major rewrite contributed by Danny Berlin (dberlin@dberlin.org)
6              and Kenneth Zadeck (zadeck@naturalbridge.com).
7
8 This file is part of GCC.
9
10 GCC is free software; you can redistribute it and/or modify it under
11 the terms of the GNU General Public License as published by the Free
12 Software Foundation; either version 3, or (at your option) any later
13 version.
14
15 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
16 WARRANTY; without even the implied warranty of MERCHANTABILITY or
17 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
18 for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3.  If not see
22 <http://www.gnu.org/licenses/>.  */
23
24 #include "config.h"
25 #include "system.h"
26 #include "coretypes.h"
27 #include "tm.h"
28 #include "rtl.h"
29 #include "tm_p.h"
30 #include "insn-config.h"
31 #include "recog.h"
32 #include "hashtab.h"
33 #include "hash-set.h"
34 #include "vec.h"
35 #include "machmode.h"
36 #include "hard-reg-set.h"
37 #include "input.h"
38 #include "function.h"
39 #include "regs.h"
40 #include "alloc-pool.h"
41 #include "flags.h"
42 #include "predict.h"
43 #include "dominance.h"
44 #include "cfg.h"
45 #include "cfganal.h"
46 #include "basic-block.h"
47 #include "sbitmap.h"
48 #include "bitmap.h"
49 #include "target.h"
50 #include "timevar.h"
51 #include "df.h"
52 #include "except.h"
53 #include "dce.h"
54 #include "valtrack.h"
55 #include "dumpfile.h"
56 #include "rtl-iter.h"
57
58 /* Note that turning REG_DEAD_DEBUGGING on will cause
59    gcc.c-torture/unsorted/dump-noaddr.c to fail because it prints
60    addresses in the dumps.  */
61 #define REG_DEAD_DEBUGGING 0
62
63 #define DF_SPARSE_THRESHOLD 32
64
65 static bitmap_head seen_in_block;
66 static bitmap_head seen_in_insn;
67
68 /*----------------------------------------------------------------------------
69    Utility functions.
70 ----------------------------------------------------------------------------*/
71
72 /* Generic versions to get the void* version of the block info.  Only
73    used inside the problem instance vectors.  */
74
75 /* Dump a def-use or use-def chain for REF to FILE.  */
76
77 void
78 df_chain_dump (struct df_link *link, FILE *file)
79 {
80   fprintf (file, "{ ");
81   for (; link; link = link->next)
82     {
83       fprintf (file, "%c%d(bb %d insn %d) ",
84                DF_REF_REG_DEF_P (link->ref)
85                ? 'd'
86                : (DF_REF_FLAGS (link->ref) & DF_REF_IN_NOTE) ? 'e' : 'u',
87                DF_REF_ID (link->ref),
88                DF_REF_BBNO (link->ref),
89                DF_REF_IS_ARTIFICIAL (link->ref)
90                ? -1 : DF_REF_INSN_UID (link->ref));
91     }
92   fprintf (file, "}");
93 }
94
95
96 /* Print some basic block info as part of df_dump.  */
97
98 void
99 df_print_bb_index (basic_block bb, FILE *file)
100 {
101   edge e;
102   edge_iterator ei;
103
104   fprintf (file, "\n( ");
105     FOR_EACH_EDGE (e, ei, bb->preds)
106     {
107       basic_block pred = e->src;
108       fprintf (file, "%d%s ", pred->index, e->flags & EDGE_EH ? "(EH)" : "");
109     }
110   fprintf (file, ")->[%d]->( ", bb->index);
111   FOR_EACH_EDGE (e, ei, bb->succs)
112     {
113       basic_block succ = e->dest;
114       fprintf (file, "%d%s ", succ->index, e->flags & EDGE_EH ? "(EH)" : "");
115     }
116   fprintf (file, ")\n");
117 }
118
119 \f
120 /*----------------------------------------------------------------------------
121    REACHING DEFINITIONS
122
123    Find the locations in the function where each definition site for a
124    pseudo reaches.  In and out bitvectors are built for each basic
125    block.  The id field in the ref is used to index into these sets.
126    See df.h for details.
127
128    If the DF_RD_PRUNE_DEAD_DEFS changeable flag is set, only DEFs reaching
129    existing uses are included in the global reaching DEFs set, or in other
130    words only DEFs that are still live.  This is a kind of pruned version
131    of the traditional reaching definitions problem that is much less
132    complex to compute and produces enough information to compute UD-chains.
133    In this context, live must be interpreted in the DF_LR sense: Uses that
134    are upward exposed but maybe not initialized on all paths through the
135    CFG.  For a USE that is not reached by a DEF on all paths, we still want
136    to make those DEFs that do reach the USE visible, and pruning based on
137    DF_LIVE would make that impossible.
138    ----------------------------------------------------------------------------*/
139
140 /* This problem plays a large number of games for the sake of
141    efficiency.
142
143    1) The order of the bits in the bitvectors.  After the scanning
144    phase, all of the defs are sorted.  All of the defs for the reg 0
145    are first, followed by all defs for reg 1 and so on.
146
147    2) There are two kill sets, one if the number of defs is less or
148    equal to DF_SPARSE_THRESHOLD and another if the number of defs is
149    greater.
150
151    <= : Data is built directly in the kill set.
152
153    > : One level of indirection is used to keep from generating long
154    strings of 1 bits in the kill sets.  Bitvectors that are indexed
155    by the regnum are used to represent that there is a killing def
156    for the register.  The confluence and transfer functions use
157    these along with the bitmap_clear_range call to remove ranges of
158    bits without actually generating a knockout vector.
159
160    The kill and sparse_kill and the dense_invalidated_by_call and
161    sparse_invalidated_by_call both play this game.  */
162
163 /* Private data used to compute the solution for this problem.  These
164    data structures are not accessible outside of this module.  */
165 struct df_rd_problem_data
166 {
167   /* The set of defs to regs invalidated by call.  */
168   bitmap_head sparse_invalidated_by_call;
169   /* The set of defs to regs invalidate by call for rd.  */
170   bitmap_head dense_invalidated_by_call;
171   /* An obstack for the bitmaps we need for this problem.  */
172   bitmap_obstack rd_bitmaps;
173 };
174
175
176 /* Free basic block info.  */
177
178 static void
179 df_rd_free_bb_info (basic_block bb ATTRIBUTE_UNUSED,
180                     void *vbb_info)
181 {
182   struct df_rd_bb_info *bb_info = (struct df_rd_bb_info *) vbb_info;
183   if (bb_info)
184     {
185       bitmap_clear (&bb_info->kill);
186       bitmap_clear (&bb_info->sparse_kill);
187       bitmap_clear (&bb_info->gen);
188       bitmap_clear (&bb_info->in);
189       bitmap_clear (&bb_info->out);
190     }
191 }
192
193
194 /* Allocate or reset bitmaps for DF_RD blocks. The solution bits are
195    not touched unless the block is new.  */
196
197 static void
198 df_rd_alloc (bitmap all_blocks)
199 {
200   unsigned int bb_index;
201   bitmap_iterator bi;
202   struct df_rd_problem_data *problem_data;
203
204   if (df_rd->problem_data)
205     {
206       problem_data = (struct df_rd_problem_data *) df_rd->problem_data;
207       bitmap_clear (&problem_data->sparse_invalidated_by_call);
208       bitmap_clear (&problem_data->dense_invalidated_by_call);
209     }
210   else
211     {
212       problem_data = XNEW (struct df_rd_problem_data);
213       df_rd->problem_data = problem_data;
214
215       bitmap_obstack_initialize (&problem_data->rd_bitmaps);
216       bitmap_initialize (&problem_data->sparse_invalidated_by_call,
217                          &problem_data->rd_bitmaps);
218       bitmap_initialize (&problem_data->dense_invalidated_by_call,
219                          &problem_data->rd_bitmaps);
220     }
221
222   df_grow_bb_info (df_rd);
223
224   /* Because of the clustering of all use sites for the same pseudo,
225      we have to process all of the blocks before doing the analysis.  */
226
227   EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi)
228     {
229       struct df_rd_bb_info *bb_info = df_rd_get_bb_info (bb_index);
230       
231       /* When bitmaps are already initialized, just clear them.  */
232       if (bb_info->kill.obstack)
233         {
234           bitmap_clear (&bb_info->kill);
235           bitmap_clear (&bb_info->sparse_kill);
236           bitmap_clear (&bb_info->gen);
237         }
238       else
239         {
240           bitmap_initialize (&bb_info->kill, &problem_data->rd_bitmaps);
241           bitmap_initialize (&bb_info->sparse_kill, &problem_data->rd_bitmaps);
242           bitmap_initialize (&bb_info->gen, &problem_data->rd_bitmaps);
243           bitmap_initialize (&bb_info->in, &problem_data->rd_bitmaps);
244           bitmap_initialize (&bb_info->out, &problem_data->rd_bitmaps);
245         }
246     }
247   df_rd->optional_p = true;
248 }
249
250
251 /* Add the effect of the top artificial defs of BB to the reaching definitions
252    bitmap LOCAL_RD.  */
253
254 void
255 df_rd_simulate_artificial_defs_at_top (basic_block bb, bitmap local_rd)
256 {
257   int bb_index = bb->index;
258   df_ref def;
259   FOR_EACH_ARTIFICIAL_DEF (def, bb_index)
260     if (DF_REF_FLAGS (def) & DF_REF_AT_TOP)
261       {
262         unsigned int dregno = DF_REF_REGNO (def);
263         if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL)))
264           bitmap_clear_range (local_rd,
265                               DF_DEFS_BEGIN (dregno),
266                               DF_DEFS_COUNT (dregno));
267         bitmap_set_bit (local_rd, DF_REF_ID (def));
268       }
269 }
270
271 /* Add the effect of the defs of INSN to the reaching definitions bitmap
272    LOCAL_RD.  */
273
274 void
275 df_rd_simulate_one_insn (basic_block bb ATTRIBUTE_UNUSED, rtx_insn *insn,
276                          bitmap local_rd)
277 {
278   df_ref def;
279
280   FOR_EACH_INSN_DEF (def, insn)
281     {
282       unsigned int dregno = DF_REF_REGNO (def);
283       if ((!(df->changeable_flags & DF_NO_HARD_REGS))
284           || (dregno >= FIRST_PSEUDO_REGISTER))
285         {
286           if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL)))
287             bitmap_clear_range (local_rd,
288                                 DF_DEFS_BEGIN (dregno),
289                                 DF_DEFS_COUNT (dregno));
290           if (!(DF_REF_FLAGS (def)
291                 & (DF_REF_MUST_CLOBBER | DF_REF_MAY_CLOBBER)))
292             bitmap_set_bit (local_rd, DF_REF_ID (def));
293         }
294     }
295 }
296
297 /* Process a list of DEFs for df_rd_bb_local_compute.  This is a bit
298    more complicated than just simulating, because we must produce the
299    gen and kill sets and hence deal with the two possible representations
300    of kill sets.   */
301
302 static void
303 df_rd_bb_local_compute_process_def (struct df_rd_bb_info *bb_info,
304                                     df_ref def,
305                                     int top_flag)
306 {
307   for (; def; def = DF_REF_NEXT_LOC (def))
308     {
309       if (top_flag == (DF_REF_FLAGS (def) & DF_REF_AT_TOP))
310         {
311           unsigned int regno = DF_REF_REGNO (def);
312           unsigned int begin = DF_DEFS_BEGIN (regno);
313           unsigned int n_defs = DF_DEFS_COUNT (regno);
314
315           if ((!(df->changeable_flags & DF_NO_HARD_REGS))
316               || (regno >= FIRST_PSEUDO_REGISTER))
317             {
318               /* Only the last def(s) for a regno in the block has any
319                  effect.  */
320               if (!bitmap_bit_p (&seen_in_block, regno))
321                 {
322                   /* The first def for regno in insn gets to knock out the
323                      defs from other instructions.  */
324                   if ((!bitmap_bit_p (&seen_in_insn, regno))
325                       /* If the def is to only part of the reg, it does
326                          not kill the other defs that reach here.  */
327                       && (!(DF_REF_FLAGS (def) &
328                             (DF_REF_PARTIAL | DF_REF_CONDITIONAL | DF_REF_MAY_CLOBBER))))
329                     {
330                       if (n_defs > DF_SPARSE_THRESHOLD)
331                         {
332                           bitmap_set_bit (&bb_info->sparse_kill, regno);
333                           bitmap_clear_range (&bb_info->gen, begin, n_defs);
334                         }
335                       else
336                         {
337                           bitmap_set_range (&bb_info->kill, begin, n_defs);
338                           bitmap_clear_range (&bb_info->gen, begin, n_defs);
339                         }
340                     }
341
342                   bitmap_set_bit (&seen_in_insn, regno);
343                   /* All defs for regno in the instruction may be put into
344                      the gen set.  */
345                   if (!(DF_REF_FLAGS (def)
346                         & (DF_REF_MUST_CLOBBER | DF_REF_MAY_CLOBBER)))
347                     bitmap_set_bit (&bb_info->gen, DF_REF_ID (def));
348                 }
349             }
350         }
351     }
352 }
353
354 /* Compute local reaching def info for basic block BB.  */
355
356 static void
357 df_rd_bb_local_compute (unsigned int bb_index)
358 {
359   basic_block bb = BASIC_BLOCK_FOR_FN (cfun, bb_index);
360   struct df_rd_bb_info *bb_info = df_rd_get_bb_info (bb_index);
361   rtx_insn *insn;
362
363   bitmap_clear (&seen_in_block);
364   bitmap_clear (&seen_in_insn);
365
366   /* Artificials are only hard regs.  */
367   if (!(df->changeable_flags & DF_NO_HARD_REGS))
368     df_rd_bb_local_compute_process_def (bb_info,
369                                         df_get_artificial_defs (bb_index),
370                                         0);
371
372   FOR_BB_INSNS_REVERSE (bb, insn)
373     {
374       unsigned int uid = INSN_UID (insn);
375
376       if (!INSN_P (insn))
377         continue;
378
379       df_rd_bb_local_compute_process_def (bb_info,
380                                           DF_INSN_UID_DEFS (uid), 0);
381
382       /* This complex dance with the two bitmaps is required because
383          instructions can assign twice to the same pseudo.  This
384          generally happens with calls that will have one def for the
385          result and another def for the clobber.  If only one vector
386          is used and the clobber goes first, the result will be
387          lost.  */
388       bitmap_ior_into (&seen_in_block, &seen_in_insn);
389       bitmap_clear (&seen_in_insn);
390     }
391
392   /* Process the artificial defs at the top of the block last since we
393      are going backwards through the block and these are logically at
394      the start.  */
395   if (!(df->changeable_flags & DF_NO_HARD_REGS))
396     df_rd_bb_local_compute_process_def (bb_info,
397                                         df_get_artificial_defs (bb_index),
398                                         DF_REF_AT_TOP);
399 }
400
401
402 /* Compute local reaching def info for each basic block within BLOCKS.  */
403
404 static void
405 df_rd_local_compute (bitmap all_blocks)
406 {
407   unsigned int bb_index;
408   bitmap_iterator bi;
409   unsigned int regno;
410   struct df_rd_problem_data *problem_data
411     = (struct df_rd_problem_data *) df_rd->problem_data;
412   bitmap sparse_invalidated = &problem_data->sparse_invalidated_by_call;
413   bitmap dense_invalidated = &problem_data->dense_invalidated_by_call;
414
415   bitmap_initialize (&seen_in_block, &df_bitmap_obstack);
416   bitmap_initialize (&seen_in_insn, &df_bitmap_obstack);
417
418   df_maybe_reorganize_def_refs (DF_REF_ORDER_BY_REG);
419
420   EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi)
421     {
422       df_rd_bb_local_compute (bb_index);
423     }
424
425   /* Set up the knockout bit vectors to be applied across EH_EDGES.  */
426   EXECUTE_IF_SET_IN_BITMAP (regs_invalidated_by_call_regset, 0, regno, bi)
427     {
428       if (! HARD_REGISTER_NUM_P (regno)
429           || !(df->changeable_flags & DF_NO_HARD_REGS))
430         {
431           if (DF_DEFS_COUNT (regno) > DF_SPARSE_THRESHOLD)
432             bitmap_set_bit (sparse_invalidated, regno);
433           else
434             bitmap_set_range (dense_invalidated,
435                               DF_DEFS_BEGIN (regno),
436                               DF_DEFS_COUNT (regno));
437         }
438     }
439
440   bitmap_clear (&seen_in_block);
441   bitmap_clear (&seen_in_insn);
442 }
443
444
445 /* Initialize the solution bit vectors for problem.  */
446
447 static void
448 df_rd_init_solution (bitmap all_blocks)
449 {
450   unsigned int bb_index;
451   bitmap_iterator bi;
452
453   EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi)
454     {
455       struct df_rd_bb_info *bb_info = df_rd_get_bb_info (bb_index);
456
457       bitmap_copy (&bb_info->out, &bb_info->gen);
458       bitmap_clear (&bb_info->in);
459     }
460 }
461
462 /* In of target gets or of out of source.  */
463
464 static bool
465 df_rd_confluence_n (edge e)
466 {
467   bitmap op1 = &df_rd_get_bb_info (e->dest->index)->in;
468   bitmap op2 = &df_rd_get_bb_info (e->src->index)->out;
469   bool changed = false;
470
471   if (e->flags & EDGE_FAKE)
472     return false;
473
474   if (e->flags & EDGE_EH)
475     {
476       struct df_rd_problem_data *problem_data
477         = (struct df_rd_problem_data *) df_rd->problem_data;
478       bitmap sparse_invalidated = &problem_data->sparse_invalidated_by_call;
479       bitmap dense_invalidated = &problem_data->dense_invalidated_by_call;
480       bitmap_iterator bi;
481       unsigned int regno;
482       bitmap_head tmp;
483
484       bitmap_initialize (&tmp, &df_bitmap_obstack);
485       bitmap_and_compl (&tmp, op2, dense_invalidated);
486
487       EXECUTE_IF_SET_IN_BITMAP (sparse_invalidated, 0, regno, bi)
488         {
489           bitmap_clear_range (&tmp,
490                               DF_DEFS_BEGIN (regno),
491                               DF_DEFS_COUNT (regno));
492         }
493       changed |= bitmap_ior_into (op1, &tmp);
494       bitmap_clear (&tmp);
495       return changed;
496     }
497   else
498     return bitmap_ior_into (op1, op2);
499 }
500
501
502 /* Transfer function.  */
503
504 static bool
505 df_rd_transfer_function (int bb_index)
506 {
507   struct df_rd_bb_info *bb_info = df_rd_get_bb_info (bb_index);
508   unsigned int regno;
509   bitmap_iterator bi;
510   bitmap in = &bb_info->in;
511   bitmap out = &bb_info->out;
512   bitmap gen = &bb_info->gen;
513   bitmap kill = &bb_info->kill;
514   bitmap sparse_kill = &bb_info->sparse_kill;
515   bool changed = false;
516
517   if (bitmap_empty_p (sparse_kill))
518     changed = bitmap_ior_and_compl (out, gen, in, kill);
519   else
520     {
521       struct df_rd_problem_data *problem_data;
522       bitmap_head tmp;
523
524       /* Note that TMP is _not_ a temporary bitmap if we end up replacing
525          OUT with TMP.  Therefore, allocate TMP in the RD bitmaps obstack.  */
526       problem_data = (struct df_rd_problem_data *) df_rd->problem_data;
527       bitmap_initialize (&tmp, &problem_data->rd_bitmaps);
528
529       bitmap_and_compl (&tmp, in, kill);
530       EXECUTE_IF_SET_IN_BITMAP (sparse_kill, 0, regno, bi)
531         {
532           bitmap_clear_range (&tmp,
533                               DF_DEFS_BEGIN (regno),
534                               DF_DEFS_COUNT (regno));
535         }
536       bitmap_ior_into (&tmp, gen);
537       changed = !bitmap_equal_p (&tmp, out);
538       if (changed)
539         {
540           bitmap_clear (out);
541           bb_info->out = tmp;
542         }
543       else
544         bitmap_clear (&tmp);
545     }
546
547   if (df->changeable_flags & DF_RD_PRUNE_DEAD_DEFS)
548     {
549       /* Create a mask of DEFs for all registers live at the end of this
550          basic block, and mask out DEFs of registers that are not live.
551          Computing the mask looks costly, but the benefit of the pruning
552          outweighs the cost.  */
553       struct df_rd_bb_info *bb_info = df_rd_get_bb_info (bb_index);
554       bitmap regs_live_out = &df_lr_get_bb_info (bb_index)->out;
555       bitmap live_defs = BITMAP_ALLOC (&df_bitmap_obstack);
556       unsigned int regno;
557       bitmap_iterator bi;
558
559       EXECUTE_IF_SET_IN_BITMAP (regs_live_out, 0, regno, bi)
560         bitmap_set_range (live_defs,
561                           DF_DEFS_BEGIN (regno),
562                           DF_DEFS_COUNT (regno));
563       changed |= bitmap_and_into (&bb_info->out, live_defs);
564       BITMAP_FREE (live_defs);
565     }
566
567   return changed;
568 }
569
570 /* Free all storage associated with the problem.  */
571
572 static void
573 df_rd_free (void)
574 {
575   struct df_rd_problem_data *problem_data
576     = (struct df_rd_problem_data *) df_rd->problem_data;
577
578   if (problem_data)
579     {
580       bitmap_obstack_release (&problem_data->rd_bitmaps);
581
582       df_rd->block_info_size = 0;
583       free (df_rd->block_info);
584       df_rd->block_info = NULL;
585       free (df_rd->problem_data);
586     }
587   free (df_rd);
588 }
589
590
591 /* Debugging info.  */
592
593 static void
594 df_rd_start_dump (FILE *file)
595 {
596   struct df_rd_problem_data *problem_data
597     = (struct df_rd_problem_data *) df_rd->problem_data;
598   unsigned int m = DF_REG_SIZE (df);
599   unsigned int regno;
600
601   if (!df_rd->block_info)
602     return;
603
604   fprintf (file, ";; Reaching defs:\n");
605
606   fprintf (file, ";;  sparse invalidated \t");
607   dump_bitmap (file, &problem_data->sparse_invalidated_by_call);
608   fprintf (file, ";;  dense invalidated \t");
609   dump_bitmap (file, &problem_data->dense_invalidated_by_call);
610
611   fprintf (file, ";;  reg->defs[] map:\t");
612   for (regno = 0; regno < m; regno++)
613     if (DF_DEFS_COUNT (regno))
614       fprintf (file, "%d[%d,%d] ", regno,
615                DF_DEFS_BEGIN (regno),
616                DF_DEFS_BEGIN (regno) + DF_DEFS_COUNT (regno) - 1);
617   fprintf (file, "\n");
618 }
619
620
621 static void
622 df_rd_dump_defs_set (bitmap defs_set, const char *prefix, FILE *file)
623 {
624   bitmap_head tmp;
625   unsigned int regno;
626   unsigned int m = DF_REG_SIZE (df);
627   bool first_reg = true;
628
629   fprintf (file, "%s\t(%d) ", prefix, (int) bitmap_count_bits (defs_set));
630
631   bitmap_initialize (&tmp, &df_bitmap_obstack);
632   for (regno = 0; regno < m; regno++)
633     {
634       if (HARD_REGISTER_NUM_P (regno)
635           && (df->changeable_flags & DF_NO_HARD_REGS))
636         continue;
637       bitmap_set_range (&tmp, DF_DEFS_BEGIN (regno), DF_DEFS_COUNT (regno));
638       bitmap_and_into (&tmp, defs_set);
639       if (! bitmap_empty_p (&tmp))
640         {
641           bitmap_iterator bi;
642           unsigned int ix;
643           bool first_def = true;
644
645           if (! first_reg)
646             fprintf (file, ",");
647           first_reg = false;
648
649           fprintf (file, "%u[", regno);
650           EXECUTE_IF_SET_IN_BITMAP (&tmp, 0, ix, bi)
651             {
652               fprintf (file, "%s%u", first_def ? "" : ",", ix);
653               first_def = false;
654             }
655           fprintf (file, "]");
656         }
657       bitmap_clear (&tmp);
658     }
659
660   fprintf (file, "\n");
661   bitmap_clear (&tmp);
662 }
663
664 /* Debugging info at top of bb.  */
665
666 static void
667 df_rd_top_dump (basic_block bb, FILE *file)
668 {
669   struct df_rd_bb_info *bb_info = df_rd_get_bb_info (bb->index);
670   if (!bb_info)
671     return;
672
673   df_rd_dump_defs_set (&bb_info->in, ";; rd  in  ", file);
674   df_rd_dump_defs_set (&bb_info->gen, ";; rd  gen ", file);
675   df_rd_dump_defs_set (&bb_info->kill, ";; rd  kill", file);
676 }
677
678
679 /* Debugging info at bottom of bb.  */
680
681 static void
682 df_rd_bottom_dump (basic_block bb, FILE *file)
683 {
684   struct df_rd_bb_info *bb_info = df_rd_get_bb_info (bb->index);
685   if (!bb_info)
686     return;
687
688   df_rd_dump_defs_set (&bb_info->out, ";; rd  out ", file);
689 }
690
691 /* All of the information associated with every instance of the problem.  */
692
693 static struct df_problem problem_RD =
694 {
695   DF_RD,                      /* Problem id.  */
696   DF_FORWARD,                 /* Direction.  */
697   df_rd_alloc,                /* Allocate the problem specific data.  */
698   NULL,                       /* Reset global information.  */
699   df_rd_free_bb_info,         /* Free basic block info.  */
700   df_rd_local_compute,        /* Local compute function.  */
701   df_rd_init_solution,        /* Init the solution specific data.  */
702   df_worklist_dataflow,       /* Worklist solver.  */
703   NULL,                       /* Confluence operator 0.  */
704   df_rd_confluence_n,         /* Confluence operator n.  */
705   df_rd_transfer_function,    /* Transfer function.  */
706   NULL,                       /* Finalize function.  */
707   df_rd_free,                 /* Free all of the problem information.  */
708   df_rd_free,                 /* Remove this problem from the stack of dataflow problems.  */
709   df_rd_start_dump,           /* Debugging.  */
710   df_rd_top_dump,             /* Debugging start block.  */
711   df_rd_bottom_dump,          /* Debugging end block.  */
712   NULL,                       /* Debugging start insn.  */
713   NULL,                       /* Debugging end insn.  */
714   NULL,                       /* Incremental solution verify start.  */
715   NULL,                       /* Incremental solution verify end.  */
716   NULL,                       /* Dependent problem.  */
717   sizeof (struct df_rd_bb_info),/* Size of entry of block_info array.  */
718   TV_DF_RD,                   /* Timing variable.  */
719   true                        /* Reset blocks on dropping out of blocks_to_analyze.  */
720 };
721
722
723
724 /* Create a new RD instance and add it to the existing instance
725    of DF.  */
726
727 void
728 df_rd_add_problem (void)
729 {
730   df_add_problem (&problem_RD);
731 }
732
733
734 \f
735 /*----------------------------------------------------------------------------
736    LIVE REGISTERS
737
738    Find the locations in the function where any use of a pseudo can
739    reach in the backwards direction.  In and out bitvectors are built
740    for each basic block.  The regno is used to index into these sets.
741    See df.h for details.
742    ----------------------------------------------------------------------------*/
743
744 /* Private data used to verify the solution for this problem.  */
745 struct df_lr_problem_data
746 {
747   bitmap_head *in;
748   bitmap_head *out;
749   /* An obstack for the bitmaps we need for this problem.  */
750   bitmap_obstack lr_bitmaps;
751 };
752
753 /* Free basic block info.  */
754
755 static void
756 df_lr_free_bb_info (basic_block bb ATTRIBUTE_UNUSED,
757                     void *vbb_info)
758 {
759   struct df_lr_bb_info *bb_info = (struct df_lr_bb_info *) vbb_info;
760   if (bb_info)
761     {
762       bitmap_clear (&bb_info->use);
763       bitmap_clear (&bb_info->def);
764       bitmap_clear (&bb_info->in);
765       bitmap_clear (&bb_info->out);
766     }
767 }
768
769
770 /* Allocate or reset bitmaps for DF_LR blocks. The solution bits are
771    not touched unless the block is new.  */
772
773 static void
774 df_lr_alloc (bitmap all_blocks ATTRIBUTE_UNUSED)
775 {
776   unsigned int bb_index;
777   bitmap_iterator bi;
778   struct df_lr_problem_data *problem_data;
779
780   df_grow_bb_info (df_lr);
781   if (df_lr->problem_data)
782     problem_data = (struct df_lr_problem_data *) df_lr->problem_data;
783   else
784     {
785       problem_data = XNEW (struct df_lr_problem_data);
786       df_lr->problem_data = problem_data;
787
788       problem_data->out = NULL;
789       problem_data->in = NULL;
790       bitmap_obstack_initialize (&problem_data->lr_bitmaps);
791     }
792
793   EXECUTE_IF_SET_IN_BITMAP (df_lr->out_of_date_transfer_functions, 0, bb_index, bi)
794     {
795       struct df_lr_bb_info *bb_info = df_lr_get_bb_info (bb_index);
796       
797       /* When bitmaps are already initialized, just clear them.  */
798       if (bb_info->use.obstack)
799         {
800           bitmap_clear (&bb_info->def);
801           bitmap_clear (&bb_info->use);
802         }
803       else
804         {
805           bitmap_initialize (&bb_info->use, &problem_data->lr_bitmaps);
806           bitmap_initialize (&bb_info->def, &problem_data->lr_bitmaps);
807           bitmap_initialize (&bb_info->in, &problem_data->lr_bitmaps);
808           bitmap_initialize (&bb_info->out, &problem_data->lr_bitmaps);
809         }
810     }
811
812   df_lr->optional_p = false;
813 }
814
815
816 /* Reset the global solution for recalculation.  */
817
818 static void
819 df_lr_reset (bitmap all_blocks)
820 {
821   unsigned int bb_index;
822   bitmap_iterator bi;
823
824   EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi)
825     {
826       struct df_lr_bb_info *bb_info = df_lr_get_bb_info (bb_index);
827       gcc_assert (bb_info);
828       bitmap_clear (&bb_info->in);
829       bitmap_clear (&bb_info->out);
830     }
831 }
832
833
834 /* Compute local live register info for basic block BB.  */
835
836 static void
837 df_lr_bb_local_compute (unsigned int bb_index)
838 {
839   basic_block bb = BASIC_BLOCK_FOR_FN (cfun, bb_index);
840   struct df_lr_bb_info *bb_info = df_lr_get_bb_info (bb_index);
841   rtx_insn *insn;
842   df_ref def, use;
843
844   /* Process the registers set in an exception handler.  */
845   FOR_EACH_ARTIFICIAL_DEF (def, bb_index)
846     if ((DF_REF_FLAGS (def) & DF_REF_AT_TOP) == 0)
847       {
848         unsigned int dregno = DF_REF_REGNO (def);
849         bitmap_set_bit (&bb_info->def, dregno);
850         bitmap_clear_bit (&bb_info->use, dregno);
851       }
852
853   /* Process the hardware registers that are always live.  */
854   FOR_EACH_ARTIFICIAL_USE (use, bb_index)
855     /* Add use to set of uses in this BB.  */
856     if ((DF_REF_FLAGS (use) & DF_REF_AT_TOP) == 0)
857       bitmap_set_bit (&bb_info->use, DF_REF_REGNO (use));
858
859   FOR_BB_INSNS_REVERSE (bb, insn)
860     {
861       if (!NONDEBUG_INSN_P (insn))
862         continue;
863
864       df_insn_info *insn_info = DF_INSN_INFO_GET (insn);
865       FOR_EACH_INSN_INFO_DEF (def, insn_info)
866         /* If the def is to only part of the reg, it does
867            not kill the other defs that reach here.  */
868         if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL)))
869           {
870             unsigned int dregno = DF_REF_REGNO (def);
871             bitmap_set_bit (&bb_info->def, dregno);
872             bitmap_clear_bit (&bb_info->use, dregno);
873           }
874
875       FOR_EACH_INSN_INFO_USE (use, insn_info)
876         /* Add use to set of uses in this BB.  */
877         bitmap_set_bit (&bb_info->use, DF_REF_REGNO (use));
878     }
879
880   /* Process the registers set in an exception handler or the hard
881      frame pointer if this block is the target of a non local
882      goto.  */
883   FOR_EACH_ARTIFICIAL_DEF (def, bb_index)
884     if (DF_REF_FLAGS (def) & DF_REF_AT_TOP)
885       {
886         unsigned int dregno = DF_REF_REGNO (def);
887         bitmap_set_bit (&bb_info->def, dregno);
888         bitmap_clear_bit (&bb_info->use, dregno);
889       }
890
891 #ifdef EH_USES
892   /* Process the uses that are live into an exception handler.  */
893   FOR_EACH_ARTIFICIAL_USE (use, bb_index)
894     /* Add use to set of uses in this BB.  */
895     if (DF_REF_FLAGS (use) & DF_REF_AT_TOP)
896       bitmap_set_bit (&bb_info->use, DF_REF_REGNO (use));
897 #endif
898
899   /* If the df_live problem is not defined, such as at -O0 and -O1, we
900      still need to keep the luids up to date.  This is normally done
901      in the df_live problem since this problem has a forwards
902      scan.  */
903   if (!df_live)
904     df_recompute_luids (bb);
905 }
906
907
908 /* Compute local live register info for each basic block within BLOCKS.  */
909
910 static void
911 df_lr_local_compute (bitmap all_blocks ATTRIBUTE_UNUSED)
912 {
913   unsigned int bb_index, i;
914   bitmap_iterator bi;
915
916   bitmap_clear (&df->hardware_regs_used);
917
918   /* The all-important stack pointer must always be live.  */
919   bitmap_set_bit (&df->hardware_regs_used, STACK_POINTER_REGNUM);
920
921   /* Global regs are always live, too.  */
922   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
923     if (global_regs[i])
924       bitmap_set_bit (&df->hardware_regs_used, i);
925
926   /* Before reload, there are a few registers that must be forced
927      live everywhere -- which might not already be the case for
928      blocks within infinite loops.  */
929   if (!reload_completed)
930     {
931       unsigned int pic_offset_table_regnum = PIC_OFFSET_TABLE_REGNUM;
932       /* Any reference to any pseudo before reload is a potential
933          reference of the frame pointer.  */
934       bitmap_set_bit (&df->hardware_regs_used, FRAME_POINTER_REGNUM);
935
936 #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
937       /* Pseudos with argument area equivalences may require
938          reloading via the argument pointer.  */
939       if (fixed_regs[ARG_POINTER_REGNUM])
940         bitmap_set_bit (&df->hardware_regs_used, ARG_POINTER_REGNUM);
941 #endif
942
943       /* Any constant, or pseudo with constant equivalences, may
944          require reloading from memory using the pic register.  */
945       if (pic_offset_table_regnum != INVALID_REGNUM
946           && fixed_regs[pic_offset_table_regnum])
947         bitmap_set_bit (&df->hardware_regs_used, pic_offset_table_regnum);
948     }
949
950   EXECUTE_IF_SET_IN_BITMAP (df_lr->out_of_date_transfer_functions, 0, bb_index, bi)
951     {
952       if (bb_index == EXIT_BLOCK)
953         {
954           /* The exit block is special for this problem and its bits are
955              computed from thin air.  */
956           struct df_lr_bb_info *bb_info = df_lr_get_bb_info (EXIT_BLOCK);
957           bitmap_copy (&bb_info->use, df->exit_block_uses);
958         }
959       else
960         df_lr_bb_local_compute (bb_index);
961     }
962
963   bitmap_clear (df_lr->out_of_date_transfer_functions);
964 }
965
966
967 /* Initialize the solution vectors.  */
968
969 static void
970 df_lr_init (bitmap all_blocks)
971 {
972   unsigned int bb_index;
973   bitmap_iterator bi;
974
975   EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi)
976     {
977       struct df_lr_bb_info *bb_info = df_lr_get_bb_info (bb_index);
978       bitmap_copy (&bb_info->in, &bb_info->use);
979       bitmap_clear (&bb_info->out);
980     }
981 }
982
983
984 /* Confluence function that processes infinite loops.  This might be a
985    noreturn function that throws.  And even if it isn't, getting the
986    unwind info right helps debugging.  */
987 static void
988 df_lr_confluence_0 (basic_block bb)
989 {
990   bitmap op1 = &df_lr_get_bb_info (bb->index)->out;
991   if (bb != EXIT_BLOCK_PTR_FOR_FN (cfun))
992     bitmap_copy (op1, &df->hardware_regs_used);
993 }
994
995
996 /* Confluence function that ignores fake edges.  */
997
998 static bool
999 df_lr_confluence_n (edge e)
1000 {
1001   bitmap op1 = &df_lr_get_bb_info (e->src->index)->out;
1002   bitmap op2 = &df_lr_get_bb_info (e->dest->index)->in;
1003   bool changed = false;
1004
1005   /* Call-clobbered registers die across exception and call edges.  */
1006   /* ??? Abnormal call edges ignored for the moment, as this gets
1007      confused by sibling call edges, which crashes reg-stack.  */
1008   if (e->flags & EDGE_EH)
1009     changed = bitmap_ior_and_compl_into (op1, op2, regs_invalidated_by_call_regset);
1010   else
1011     changed = bitmap_ior_into (op1, op2);
1012
1013   changed |= bitmap_ior_into (op1, &df->hardware_regs_used);
1014   return changed;
1015 }
1016
1017
1018 /* Transfer function.  */
1019
1020 static bool
1021 df_lr_transfer_function (int bb_index)
1022 {
1023   struct df_lr_bb_info *bb_info = df_lr_get_bb_info (bb_index);
1024   bitmap in = &bb_info->in;
1025   bitmap out = &bb_info->out;
1026   bitmap use = &bb_info->use;
1027   bitmap def = &bb_info->def;
1028
1029   return bitmap_ior_and_compl (in, use, out, def);
1030 }
1031
1032
1033 /* Run the fast dce as a side effect of building LR.  */
1034
1035 static void
1036 df_lr_finalize (bitmap all_blocks)
1037 {
1038   df_lr->solutions_dirty = false;
1039   if (df->changeable_flags & DF_LR_RUN_DCE)
1040     {
1041       run_fast_df_dce ();
1042
1043       /* If dce deletes some instructions, we need to recompute the lr
1044          solution before proceeding further.  The problem is that fast
1045          dce is a pessimestic dataflow algorithm.  In the case where
1046          it deletes a statement S inside of a loop, the uses inside of
1047          S may not be deleted from the dataflow solution because they
1048          were carried around the loop.  While it is conservatively
1049          correct to leave these extra bits, the standards of df
1050          require that we maintain the best possible (least fixed
1051          point) solution.  The only way to do that is to redo the
1052          iteration from the beginning.  See PR35805 for an
1053          example.  */
1054       if (df_lr->solutions_dirty)
1055         {
1056           df_clear_flags (DF_LR_RUN_DCE);
1057           df_lr_alloc (all_blocks);
1058           df_lr_local_compute (all_blocks);
1059           df_worklist_dataflow (df_lr, all_blocks, df->postorder, df->n_blocks);
1060           df_lr_finalize (all_blocks);
1061           df_set_flags (DF_LR_RUN_DCE);
1062         }
1063     }
1064 }
1065
1066
1067 /* Free all storage associated with the problem.  */
1068
1069 static void
1070 df_lr_free (void)
1071 {
1072   struct df_lr_problem_data *problem_data
1073     = (struct df_lr_problem_data *) df_lr->problem_data;
1074   if (df_lr->block_info)
1075     {
1076
1077       df_lr->block_info_size = 0;
1078       free (df_lr->block_info);
1079       df_lr->block_info = NULL;
1080       bitmap_obstack_release (&problem_data->lr_bitmaps);
1081       free (df_lr->problem_data);
1082       df_lr->problem_data = NULL;
1083     }
1084
1085   BITMAP_FREE (df_lr->out_of_date_transfer_functions);
1086   free (df_lr);
1087 }
1088
1089
1090 /* Debugging info at top of bb.  */
1091
1092 static void
1093 df_lr_top_dump (basic_block bb, FILE *file)
1094 {
1095   struct df_lr_bb_info *bb_info = df_lr_get_bb_info (bb->index);
1096   struct df_lr_problem_data *problem_data;
1097   if (!bb_info)
1098     return;
1099
1100   fprintf (file, ";; lr  in  \t");
1101   df_print_regset (file, &bb_info->in);
1102   if (df_lr->problem_data)
1103     {
1104       problem_data = (struct df_lr_problem_data *)df_lr->problem_data;
1105       if (problem_data->in)
1106         {
1107           fprintf (file, ";;  old in  \t");
1108           df_print_regset (file, &problem_data->in[bb->index]);
1109         }
1110     }
1111   fprintf (file, ";; lr  use \t");
1112   df_print_regset (file, &bb_info->use);
1113   fprintf (file, ";; lr  def \t");
1114   df_print_regset (file, &bb_info->def);
1115 }
1116
1117
1118 /* Debugging info at bottom of bb.  */
1119
1120 static void
1121 df_lr_bottom_dump (basic_block bb, FILE *file)
1122 {
1123   struct df_lr_bb_info *bb_info = df_lr_get_bb_info (bb->index);
1124   struct df_lr_problem_data *problem_data;
1125   if (!bb_info)
1126     return;
1127
1128   fprintf (file, ";; lr  out \t");
1129   df_print_regset (file, &bb_info->out);
1130   if (df_lr->problem_data)
1131     {
1132       problem_data = (struct df_lr_problem_data *)df_lr->problem_data;
1133       if (problem_data->out)
1134         {
1135           fprintf (file, ";;  old out  \t");
1136           df_print_regset (file, &problem_data->out[bb->index]);
1137         }
1138     }
1139 }
1140
1141
1142 /* Build the datastructure to verify that the solution to the dataflow
1143    equations is not dirty.  */
1144
1145 static void
1146 df_lr_verify_solution_start (void)
1147 {
1148   basic_block bb;
1149   struct df_lr_problem_data *problem_data;
1150   if (df_lr->solutions_dirty)
1151     return;
1152
1153   /* Set it true so that the solution is recomputed.  */
1154   df_lr->solutions_dirty = true;
1155
1156   problem_data = (struct df_lr_problem_data *)df_lr->problem_data;
1157   problem_data->in = XNEWVEC (bitmap_head, last_basic_block_for_fn (cfun));
1158   problem_data->out = XNEWVEC (bitmap_head, last_basic_block_for_fn (cfun));
1159
1160   FOR_ALL_BB_FN (bb, cfun)
1161     {
1162       bitmap_initialize (&problem_data->in[bb->index], &problem_data->lr_bitmaps);
1163       bitmap_initialize (&problem_data->out[bb->index], &problem_data->lr_bitmaps);
1164       bitmap_copy (&problem_data->in[bb->index], DF_LR_IN (bb));
1165       bitmap_copy (&problem_data->out[bb->index], DF_LR_OUT (bb));
1166     }
1167 }
1168
1169
1170 /* Compare the saved datastructure and the new solution to the dataflow
1171    equations.  */
1172
1173 static void
1174 df_lr_verify_solution_end (void)
1175 {
1176   struct df_lr_problem_data *problem_data;
1177   basic_block bb;
1178
1179   problem_data = (struct df_lr_problem_data *)df_lr->problem_data;
1180
1181   if (!problem_data->out)
1182     return;
1183
1184   if (df_lr->solutions_dirty)
1185     /* Do not check if the solution is still dirty.  See the comment
1186        in df_lr_finalize for details.  */
1187     df_lr->solutions_dirty = false;
1188   else
1189     FOR_ALL_BB_FN (bb, cfun)
1190       {
1191         if ((!bitmap_equal_p (&problem_data->in[bb->index], DF_LR_IN (bb)))
1192             || (!bitmap_equal_p (&problem_data->out[bb->index], DF_LR_OUT (bb))))
1193           {
1194             /*df_dump (stderr);*/
1195             gcc_unreachable ();
1196           }
1197       }
1198
1199   /* Cannot delete them immediately because you may want to dump them
1200      if the comparison fails.  */
1201   FOR_ALL_BB_FN (bb, cfun)
1202     {
1203       bitmap_clear (&problem_data->in[bb->index]);
1204       bitmap_clear (&problem_data->out[bb->index]);
1205     }
1206
1207   free (problem_data->in);
1208   free (problem_data->out);
1209   problem_data->in = NULL;
1210   problem_data->out = NULL;
1211 }
1212
1213
1214 /* All of the information associated with every instance of the problem.  */
1215
1216 static struct df_problem problem_LR =
1217 {
1218   DF_LR,                      /* Problem id.  */
1219   DF_BACKWARD,                /* Direction.  */
1220   df_lr_alloc,                /* Allocate the problem specific data.  */
1221   df_lr_reset,                /* Reset global information.  */
1222   df_lr_free_bb_info,         /* Free basic block info.  */
1223   df_lr_local_compute,        /* Local compute function.  */
1224   df_lr_init,                 /* Init the solution specific data.  */
1225   df_worklist_dataflow,       /* Worklist solver.  */
1226   df_lr_confluence_0,         /* Confluence operator 0.  */
1227   df_lr_confluence_n,         /* Confluence operator n.  */
1228   df_lr_transfer_function,    /* Transfer function.  */
1229   df_lr_finalize,             /* Finalize function.  */
1230   df_lr_free,                 /* Free all of the problem information.  */
1231   NULL,                       /* Remove this problem from the stack of dataflow problems.  */
1232   NULL,                       /* Debugging.  */
1233   df_lr_top_dump,             /* Debugging start block.  */
1234   df_lr_bottom_dump,          /* Debugging end block.  */
1235   NULL,                       /* Debugging start insn.  */
1236   NULL,                       /* Debugging end insn.  */
1237   df_lr_verify_solution_start,/* Incremental solution verify start.  */
1238   df_lr_verify_solution_end,  /* Incremental solution verify end.  */
1239   NULL,                       /* Dependent problem.  */
1240   sizeof (struct df_lr_bb_info),/* Size of entry of block_info array.  */
1241   TV_DF_LR,                   /* Timing variable.  */
1242   false                       /* Reset blocks on dropping out of blocks_to_analyze.  */
1243 };
1244
1245
1246 /* Create a new DATAFLOW instance and add it to an existing instance
1247    of DF.  The returned structure is what is used to get at the
1248    solution.  */
1249
1250 void
1251 df_lr_add_problem (void)
1252 {
1253   df_add_problem (&problem_LR);
1254   /* These will be initialized when df_scan_blocks processes each
1255      block.  */
1256   df_lr->out_of_date_transfer_functions = BITMAP_ALLOC (&df_bitmap_obstack);
1257 }
1258
1259
1260 /* Verify that all of the lr related info is consistent and
1261    correct.  */
1262
1263 void
1264 df_lr_verify_transfer_functions (void)
1265 {
1266   basic_block bb;
1267   bitmap_head saved_def;
1268   bitmap_head saved_use;
1269   bitmap_head all_blocks;
1270
1271   if (!df)
1272     return;
1273
1274   bitmap_initialize (&saved_def, &bitmap_default_obstack); 
1275   bitmap_initialize (&saved_use, &bitmap_default_obstack);
1276   bitmap_initialize (&all_blocks, &bitmap_default_obstack);
1277
1278   FOR_ALL_BB_FN (bb, cfun)
1279     {
1280       struct df_lr_bb_info *bb_info = df_lr_get_bb_info (bb->index);
1281       bitmap_set_bit (&all_blocks, bb->index);
1282
1283       if (bb_info)
1284         {
1285           /* Make a copy of the transfer functions and then compute
1286              new ones to see if the transfer functions have
1287              changed.  */
1288           if (!bitmap_bit_p (df_lr->out_of_date_transfer_functions,
1289                              bb->index))
1290             {
1291               bitmap_copy (&saved_def, &bb_info->def);
1292               bitmap_copy (&saved_use, &bb_info->use);
1293               bitmap_clear (&bb_info->def);
1294               bitmap_clear (&bb_info->use);
1295
1296               df_lr_bb_local_compute (bb->index);
1297               gcc_assert (bitmap_equal_p (&saved_def, &bb_info->def));
1298               gcc_assert (bitmap_equal_p (&saved_use, &bb_info->use));
1299             }
1300         }
1301       else
1302         {
1303           /* If we do not have basic block info, the block must be in
1304              the list of dirty blocks or else some one has added a
1305              block behind our backs. */
1306           gcc_assert (bitmap_bit_p (df_lr->out_of_date_transfer_functions,
1307                                     bb->index));
1308         }
1309       /* Make sure no one created a block without following
1310          procedures.  */
1311       gcc_assert (df_scan_get_bb_info (bb->index));
1312     }
1313
1314   /* Make sure there are no dirty bits in blocks that have been deleted.  */
1315   gcc_assert (!bitmap_intersect_compl_p (df_lr->out_of_date_transfer_functions,
1316                                          &all_blocks));
1317
1318   bitmap_clear (&saved_def);
1319   bitmap_clear (&saved_use);
1320   bitmap_clear (&all_blocks);
1321 }
1322
1323
1324 \f
1325 /*----------------------------------------------------------------------------
1326    LIVE AND MAY-INITIALIZED REGISTERS.
1327
1328    This problem first computes the IN and OUT bitvectors for the
1329    may-initialized registers problems, which is a forward problem.
1330    It gives the set of registers for which we MAY have an available
1331    definition, i.e. for which there is an available definition on
1332    at least one path from the entry block to the entry/exit of a
1333    basic block.  Sets generate a definition, while clobbers kill
1334    a definition.
1335
1336    In and out bitvectors are built for each basic block and are indexed by
1337    regnum (see df.h for details).  In and out bitvectors in struct
1338    df_live_bb_info actually refers to the may-initialized problem;
1339
1340    Then, the in and out sets for the LIVE problem itself are computed.
1341    These are the logical AND of the IN and OUT sets from the LR problem
1342    and the may-initialized problem.
1343 ----------------------------------------------------------------------------*/
1344
1345 /* Private data used to verify the solution for this problem.  */
1346 struct df_live_problem_data
1347 {
1348   bitmap_head *in;
1349   bitmap_head *out;
1350   /* An obstack for the bitmaps we need for this problem.  */
1351   bitmap_obstack live_bitmaps;
1352 };
1353
1354 /* Scratch var used by transfer functions.  This is used to implement
1355    an optimization to reduce the amount of space used to compute the
1356    combined lr and live analysis.  */
1357 static bitmap_head df_live_scratch;
1358
1359
1360 /* Free basic block info.  */
1361
1362 static void
1363 df_live_free_bb_info (basic_block bb ATTRIBUTE_UNUSED,
1364                     void *vbb_info)
1365 {
1366   struct df_live_bb_info *bb_info = (struct df_live_bb_info *) vbb_info;
1367   if (bb_info)
1368     {
1369       bitmap_clear (&bb_info->gen);
1370       bitmap_clear (&bb_info->kill);
1371       bitmap_clear (&bb_info->in);
1372       bitmap_clear (&bb_info->out);
1373     }
1374 }
1375
1376
1377 /* Allocate or reset bitmaps for DF_LIVE blocks. The solution bits are
1378    not touched unless the block is new.  */
1379
1380 static void
1381 df_live_alloc (bitmap all_blocks ATTRIBUTE_UNUSED)
1382 {
1383   unsigned int bb_index;
1384   bitmap_iterator bi;
1385   struct df_live_problem_data *problem_data;
1386
1387   if (df_live->problem_data)
1388     problem_data = (struct df_live_problem_data *) df_live->problem_data;
1389   else
1390     {
1391       problem_data = XNEW (struct df_live_problem_data);
1392       df_live->problem_data = problem_data;
1393
1394       problem_data->out = NULL;
1395       problem_data->in = NULL;
1396       bitmap_obstack_initialize (&problem_data->live_bitmaps);
1397       bitmap_initialize (&df_live_scratch, &problem_data->live_bitmaps);
1398     }
1399
1400   df_grow_bb_info (df_live);
1401
1402   EXECUTE_IF_SET_IN_BITMAP (df_live->out_of_date_transfer_functions, 0, bb_index, bi)
1403     {
1404       struct df_live_bb_info *bb_info = df_live_get_bb_info (bb_index);
1405       
1406       /* When bitmaps are already initialized, just clear them.  */
1407       if (bb_info->kill.obstack)
1408         {
1409           bitmap_clear (&bb_info->kill);
1410           bitmap_clear (&bb_info->gen);
1411         }
1412       else
1413         {
1414           bitmap_initialize (&bb_info->kill, &problem_data->live_bitmaps);
1415           bitmap_initialize (&bb_info->gen, &problem_data->live_bitmaps);
1416           bitmap_initialize (&bb_info->in, &problem_data->live_bitmaps);
1417           bitmap_initialize (&bb_info->out, &problem_data->live_bitmaps);
1418         }
1419     }
1420   df_live->optional_p = (optimize <= 1);
1421 }
1422
1423
1424 /* Reset the global solution for recalculation.  */
1425
1426 static void
1427 df_live_reset (bitmap all_blocks)
1428 {
1429   unsigned int bb_index;
1430   bitmap_iterator bi;
1431
1432   EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi)
1433     {
1434       struct df_live_bb_info *bb_info = df_live_get_bb_info (bb_index);
1435       gcc_assert (bb_info);
1436       bitmap_clear (&bb_info->in);
1437       bitmap_clear (&bb_info->out);
1438     }
1439 }
1440
1441
1442 /* Compute local uninitialized register info for basic block BB.  */
1443
1444 static void
1445 df_live_bb_local_compute (unsigned int bb_index)
1446 {
1447   basic_block bb = BASIC_BLOCK_FOR_FN (cfun, bb_index);
1448   struct df_live_bb_info *bb_info = df_live_get_bb_info (bb_index);
1449   rtx_insn *insn;
1450   df_ref def;
1451   int luid = 0;
1452
1453   FOR_BB_INSNS (bb, insn)
1454     {
1455       unsigned int uid = INSN_UID (insn);
1456       struct df_insn_info *insn_info = DF_INSN_UID_GET (uid);
1457
1458       /* Inserting labels does not always trigger the incremental
1459          rescanning.  */
1460       if (!insn_info)
1461         {
1462           gcc_assert (!INSN_P (insn));
1463           insn_info = df_insn_create_insn_record (insn);
1464         }
1465
1466       DF_INSN_INFO_LUID (insn_info) = luid;
1467       if (!INSN_P (insn))
1468         continue;
1469
1470       luid++;
1471       FOR_EACH_INSN_INFO_DEF (def, insn_info)
1472         {
1473           unsigned int regno = DF_REF_REGNO (def);
1474
1475           if (DF_REF_FLAGS_IS_SET (def,
1476                                    DF_REF_PARTIAL | DF_REF_CONDITIONAL))
1477             /* All partial or conditional def
1478                seen are included in the gen set. */
1479             bitmap_set_bit (&bb_info->gen, regno);
1480           else if (DF_REF_FLAGS_IS_SET (def, DF_REF_MUST_CLOBBER))
1481             /* Only must clobbers for the entire reg destroy the
1482                value.  */
1483             bitmap_set_bit (&bb_info->kill, regno);
1484           else if (! DF_REF_FLAGS_IS_SET (def, DF_REF_MAY_CLOBBER))
1485             bitmap_set_bit (&bb_info->gen, regno);
1486         }
1487     }
1488
1489   FOR_EACH_ARTIFICIAL_DEF (def, bb_index)
1490     bitmap_set_bit (&bb_info->gen, DF_REF_REGNO (def));
1491 }
1492
1493
1494 /* Compute local uninitialized register info.  */
1495
1496 static void
1497 df_live_local_compute (bitmap all_blocks ATTRIBUTE_UNUSED)
1498 {
1499   unsigned int bb_index;
1500   bitmap_iterator bi;
1501
1502   df_grow_insn_info ();
1503
1504   EXECUTE_IF_SET_IN_BITMAP (df_live->out_of_date_transfer_functions,
1505                             0, bb_index, bi)
1506     {
1507       df_live_bb_local_compute (bb_index);
1508     }
1509
1510   bitmap_clear (df_live->out_of_date_transfer_functions);
1511 }
1512
1513
1514 /* Initialize the solution vectors.  */
1515
1516 static void
1517 df_live_init (bitmap all_blocks)
1518 {
1519   unsigned int bb_index;
1520   bitmap_iterator bi;
1521
1522   EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi)
1523     {
1524       struct df_live_bb_info *bb_info = df_live_get_bb_info (bb_index);
1525       struct df_lr_bb_info *bb_lr_info = df_lr_get_bb_info (bb_index);
1526
1527       /* No register may reach a location where it is not used.  Thus
1528          we trim the rr result to the places where it is used.  */
1529       bitmap_and (&bb_info->out, &bb_info->gen, &bb_lr_info->out);
1530       bitmap_clear (&bb_info->in);
1531     }
1532 }
1533
1534 /* Forward confluence function that ignores fake edges.  */
1535
1536 static bool
1537 df_live_confluence_n (edge e)
1538 {
1539   bitmap op1 = &df_live_get_bb_info (e->dest->index)->in;
1540   bitmap op2 = &df_live_get_bb_info (e->src->index)->out;
1541
1542   if (e->flags & EDGE_FAKE)
1543     return false;
1544
1545   return bitmap_ior_into (op1, op2);
1546 }
1547
1548
1549 /* Transfer function for the forwards may-initialized problem.  */
1550
1551 static bool
1552 df_live_transfer_function (int bb_index)
1553 {
1554   struct df_live_bb_info *bb_info = df_live_get_bb_info (bb_index);
1555   struct df_lr_bb_info *bb_lr_info = df_lr_get_bb_info (bb_index);
1556   bitmap in = &bb_info->in;
1557   bitmap out = &bb_info->out;
1558   bitmap gen = &bb_info->gen;
1559   bitmap kill = &bb_info->kill;
1560
1561   /* We need to use a scratch set here so that the value returned from this
1562      function invocation properly reflects whether the sets changed in a
1563      significant way; i.e. not just because the lr set was anded in.  */
1564   bitmap_and (&df_live_scratch, gen, &bb_lr_info->out);
1565   /* No register may reach a location where it is not used.  Thus
1566      we trim the rr result to the places where it is used.  */
1567   bitmap_and_into (in, &bb_lr_info->in);
1568
1569   return bitmap_ior_and_compl (out, &df_live_scratch, in, kill);
1570 }
1571
1572
1573 /* And the LR info with the may-initialized registers to produce the LIVE info.  */
1574
1575 static void
1576 df_live_finalize (bitmap all_blocks)
1577 {
1578
1579   if (df_live->solutions_dirty)
1580     {
1581       bitmap_iterator bi;
1582       unsigned int bb_index;
1583
1584       EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi)
1585         {
1586           struct df_lr_bb_info *bb_lr_info = df_lr_get_bb_info (bb_index);
1587           struct df_live_bb_info *bb_live_info = df_live_get_bb_info (bb_index);
1588
1589           /* No register may reach a location where it is not used.  Thus
1590              we trim the rr result to the places where it is used.  */
1591           bitmap_and_into (&bb_live_info->in, &bb_lr_info->in);
1592           bitmap_and_into (&bb_live_info->out, &bb_lr_info->out);
1593         }
1594
1595       df_live->solutions_dirty = false;
1596     }
1597 }
1598
1599
1600 /* Free all storage associated with the problem.  */
1601
1602 static void
1603 df_live_free (void)
1604 {
1605   struct df_live_problem_data *problem_data
1606     = (struct df_live_problem_data *) df_live->problem_data;
1607   if (df_live->block_info)
1608     {
1609       df_live->block_info_size = 0;
1610       free (df_live->block_info);
1611       df_live->block_info = NULL;
1612       bitmap_clear (&df_live_scratch);
1613       bitmap_obstack_release (&problem_data->live_bitmaps);
1614       free (problem_data);
1615       df_live->problem_data = NULL;
1616     }
1617   BITMAP_FREE (df_live->out_of_date_transfer_functions);
1618   free (df_live);
1619 }
1620
1621
1622 /* Debugging info at top of bb.  */
1623
1624 static void
1625 df_live_top_dump (basic_block bb, FILE *file)
1626 {
1627   struct df_live_bb_info *bb_info = df_live_get_bb_info (bb->index);
1628   struct df_live_problem_data *problem_data;
1629
1630   if (!bb_info)
1631     return;
1632
1633   fprintf (file, ";; live  in  \t");
1634   df_print_regset (file, &bb_info->in);
1635   if (df_live->problem_data)
1636     {
1637       problem_data = (struct df_live_problem_data *)df_live->problem_data;
1638       if (problem_data->in)
1639         {
1640           fprintf (file, ";;  old in  \t");
1641           df_print_regset (file, &problem_data->in[bb->index]);
1642         }
1643     }
1644   fprintf (file, ";; live  gen \t");
1645   df_print_regset (file, &bb_info->gen);
1646   fprintf (file, ";; live  kill\t");
1647   df_print_regset (file, &bb_info->kill);
1648 }
1649
1650
1651 /* Debugging info at bottom of bb.  */
1652
1653 static void
1654 df_live_bottom_dump (basic_block bb, FILE *file)
1655 {
1656   struct df_live_bb_info *bb_info = df_live_get_bb_info (bb->index);
1657   struct df_live_problem_data *problem_data;
1658
1659   if (!bb_info)
1660     return;
1661
1662   fprintf (file, ";; live  out \t");
1663   df_print_regset (file, &bb_info->out);
1664   if (df_live->problem_data)
1665     {
1666       problem_data = (struct df_live_problem_data *)df_live->problem_data;
1667       if (problem_data->out)
1668         {
1669           fprintf (file, ";;  old out  \t");
1670           df_print_regset (file, &problem_data->out[bb->index]);
1671         }
1672     }
1673 }
1674
1675
1676 /* Build the datastructure to verify that the solution to the dataflow
1677    equations is not dirty.  */
1678
1679 static void
1680 df_live_verify_solution_start (void)
1681 {
1682   basic_block bb;
1683   struct df_live_problem_data *problem_data;
1684   if (df_live->solutions_dirty)
1685     return;
1686
1687   /* Set it true so that the solution is recomputed.  */
1688   df_live->solutions_dirty = true;
1689
1690   problem_data = (struct df_live_problem_data *)df_live->problem_data;
1691   problem_data->in = XNEWVEC (bitmap_head, last_basic_block_for_fn (cfun));
1692   problem_data->out = XNEWVEC (bitmap_head, last_basic_block_for_fn (cfun));
1693
1694   FOR_ALL_BB_FN (bb, cfun)
1695     {
1696       bitmap_initialize (&problem_data->in[bb->index], &problem_data->live_bitmaps);
1697       bitmap_initialize (&problem_data->out[bb->index], &problem_data->live_bitmaps);
1698       bitmap_copy (&problem_data->in[bb->index], DF_LIVE_IN (bb));
1699       bitmap_copy (&problem_data->out[bb->index], DF_LIVE_OUT (bb));
1700     }
1701 }
1702
1703
1704 /* Compare the saved datastructure and the new solution to the dataflow
1705    equations.  */
1706
1707 static void
1708 df_live_verify_solution_end (void)
1709 {
1710   struct df_live_problem_data *problem_data;
1711   basic_block bb;
1712
1713   problem_data = (struct df_live_problem_data *)df_live->problem_data;
1714   if (!problem_data->out)
1715     return;
1716
1717   FOR_ALL_BB_FN (bb, cfun)
1718     {
1719       if ((!bitmap_equal_p (&problem_data->in[bb->index], DF_LIVE_IN (bb)))
1720           || (!bitmap_equal_p (&problem_data->out[bb->index], DF_LIVE_OUT (bb))))
1721         {
1722           /*df_dump (stderr);*/
1723           gcc_unreachable ();
1724         }
1725     }
1726
1727   /* Cannot delete them immediately because you may want to dump them
1728      if the comparison fails.  */
1729   FOR_ALL_BB_FN (bb, cfun)
1730     {
1731       bitmap_clear (&problem_data->in[bb->index]);
1732       bitmap_clear (&problem_data->out[bb->index]);
1733     }
1734
1735   free (problem_data->in);
1736   free (problem_data->out);
1737   free (problem_data);
1738   df_live->problem_data = NULL;
1739 }
1740
1741
1742 /* All of the information associated with every instance of the problem.  */
1743
1744 static struct df_problem problem_LIVE =
1745 {
1746   DF_LIVE,                      /* Problem id.  */
1747   DF_FORWARD,                   /* Direction.  */
1748   df_live_alloc,                /* Allocate the problem specific data.  */
1749   df_live_reset,                /* Reset global information.  */
1750   df_live_free_bb_info,         /* Free basic block info.  */
1751   df_live_local_compute,        /* Local compute function.  */
1752   df_live_init,                 /* Init the solution specific data.  */
1753   df_worklist_dataflow,         /* Worklist solver.  */
1754   NULL,                         /* Confluence operator 0.  */
1755   df_live_confluence_n,         /* Confluence operator n.  */
1756   df_live_transfer_function,    /* Transfer function.  */
1757   df_live_finalize,             /* Finalize function.  */
1758   df_live_free,                 /* Free all of the problem information.  */
1759   df_live_free,                 /* Remove this problem from the stack of dataflow problems.  */
1760   NULL,                         /* Debugging.  */
1761   df_live_top_dump,             /* Debugging start block.  */
1762   df_live_bottom_dump,          /* Debugging end block.  */
1763   NULL,                         /* Debugging start insn.  */
1764   NULL,                         /* Debugging end insn.  */
1765   df_live_verify_solution_start,/* Incremental solution verify start.  */
1766   df_live_verify_solution_end,  /* Incremental solution verify end.  */
1767   &problem_LR,                  /* Dependent problem.  */
1768   sizeof (struct df_live_bb_info),/* Size of entry of block_info array.  */
1769   TV_DF_LIVE,                   /* Timing variable.  */
1770   false                         /* Reset blocks on dropping out of blocks_to_analyze.  */
1771 };
1772
1773
1774 /* Create a new DATAFLOW instance and add it to an existing instance
1775    of DF.  The returned structure is what is used to get at the
1776    solution.  */
1777
1778 void
1779 df_live_add_problem (void)
1780 {
1781   df_add_problem (&problem_LIVE);
1782   /* These will be initialized when df_scan_blocks processes each
1783      block.  */
1784   df_live->out_of_date_transfer_functions = BITMAP_ALLOC (&df_bitmap_obstack);
1785 }
1786
1787
1788 /* Set all of the blocks as dirty.  This needs to be done if this
1789    problem is added after all of the insns have been scanned.  */
1790
1791 void
1792 df_live_set_all_dirty (void)
1793 {
1794   basic_block bb;
1795   FOR_ALL_BB_FN (bb, cfun)
1796     bitmap_set_bit (df_live->out_of_date_transfer_functions,
1797                     bb->index);
1798 }
1799
1800
1801 /* Verify that all of the lr related info is consistent and
1802    correct.  */
1803
1804 void
1805 df_live_verify_transfer_functions (void)
1806 {
1807   basic_block bb;
1808   bitmap_head saved_gen;
1809   bitmap_head saved_kill;
1810   bitmap_head all_blocks;
1811
1812   if (!df)
1813     return;
1814
1815   bitmap_initialize (&saved_gen, &bitmap_default_obstack);
1816   bitmap_initialize (&saved_kill, &bitmap_default_obstack);
1817   bitmap_initialize (&all_blocks, &bitmap_default_obstack);
1818
1819   df_grow_insn_info ();
1820
1821   FOR_ALL_BB_FN (bb, cfun)
1822     {
1823       struct df_live_bb_info *bb_info = df_live_get_bb_info (bb->index);
1824       bitmap_set_bit (&all_blocks, bb->index);
1825
1826       if (bb_info)
1827         {
1828           /* Make a copy of the transfer functions and then compute
1829              new ones to see if the transfer functions have
1830              changed.  */
1831           if (!bitmap_bit_p (df_live->out_of_date_transfer_functions,
1832                              bb->index))
1833             {
1834               bitmap_copy (&saved_gen, &bb_info->gen);
1835               bitmap_copy (&saved_kill, &bb_info->kill);
1836               bitmap_clear (&bb_info->gen);
1837               bitmap_clear (&bb_info->kill);
1838
1839               df_live_bb_local_compute (bb->index);
1840               gcc_assert (bitmap_equal_p (&saved_gen, &bb_info->gen));
1841               gcc_assert (bitmap_equal_p (&saved_kill, &bb_info->kill));
1842             }
1843         }
1844       else
1845         {
1846           /* If we do not have basic block info, the block must be in
1847              the list of dirty blocks or else some one has added a
1848              block behind our backs. */
1849           gcc_assert (bitmap_bit_p (df_live->out_of_date_transfer_functions,
1850                                     bb->index));
1851         }
1852       /* Make sure no one created a block without following
1853          procedures.  */
1854       gcc_assert (df_scan_get_bb_info (bb->index));
1855     }
1856
1857   /* Make sure there are no dirty bits in blocks that have been deleted.  */
1858   gcc_assert (!bitmap_intersect_compl_p (df_live->out_of_date_transfer_functions,
1859                                          &all_blocks));
1860   bitmap_clear (&saved_gen);
1861   bitmap_clear (&saved_kill);
1862   bitmap_clear (&all_blocks);
1863 }
1864 \f
1865 /*----------------------------------------------------------------------------
1866    CREATE DEF_USE (DU) and / or USE_DEF (UD) CHAINS
1867
1868    Link either the defs to the uses and / or the uses to the defs.
1869
1870    These problems are set up like the other dataflow problems so that
1871    they nicely fit into the framework.  They are much simpler and only
1872    involve a single traversal of instructions and an examination of
1873    the reaching defs information (the dependent problem).
1874 ----------------------------------------------------------------------------*/
1875
1876 #define df_chain_problem_p(FLAG) (((enum df_chain_flags)df_chain->local_flags)&(FLAG))
1877
1878 /* Create a du or ud chain from SRC to DST and link it into SRC.   */
1879
1880 struct df_link *
1881 df_chain_create (df_ref src, df_ref dst)
1882 {
1883   struct df_link *head = DF_REF_CHAIN (src);
1884   struct df_link *link = (struct df_link *) pool_alloc (df_chain->block_pool);
1885
1886   DF_REF_CHAIN (src) = link;
1887   link->next = head;
1888   link->ref = dst;
1889   return link;
1890 }
1891
1892
1893 /* Delete any du or ud chains that start at REF and point to
1894    TARGET.  */
1895 static void
1896 df_chain_unlink_1 (df_ref ref, df_ref target)
1897 {
1898   struct df_link *chain = DF_REF_CHAIN (ref);
1899   struct df_link *prev = NULL;
1900
1901   while (chain)
1902     {
1903       if (chain->ref == target)
1904         {
1905           if (prev)
1906             prev->next = chain->next;
1907           else
1908             DF_REF_CHAIN (ref) = chain->next;
1909           pool_free (df_chain->block_pool, chain);
1910           return;
1911         }
1912       prev = chain;
1913       chain = chain->next;
1914     }
1915 }
1916
1917
1918 /* Delete a du or ud chain that leave or point to REF.  */
1919
1920 void
1921 df_chain_unlink (df_ref ref)
1922 {
1923   struct df_link *chain = DF_REF_CHAIN (ref);
1924   while (chain)
1925     {
1926       struct df_link *next = chain->next;
1927       /* Delete the other side if it exists.  */
1928       df_chain_unlink_1 (chain->ref, ref);
1929       pool_free (df_chain->block_pool, chain);
1930       chain = next;
1931     }
1932   DF_REF_CHAIN (ref) = NULL;
1933 }
1934
1935
1936 /* Copy the du or ud chain starting at FROM_REF and attach it to
1937    TO_REF.  */
1938
1939 void
1940 df_chain_copy (df_ref to_ref,
1941                struct df_link *from_ref)
1942 {
1943   while (from_ref)
1944     {
1945       df_chain_create (to_ref, from_ref->ref);
1946       from_ref = from_ref->next;
1947     }
1948 }
1949
1950
1951 /* Remove this problem from the stack of dataflow problems.  */
1952
1953 static void
1954 df_chain_remove_problem (void)
1955 {
1956   bitmap_iterator bi;
1957   unsigned int bb_index;
1958
1959   /* Wholesale destruction of the old chains.  */
1960   if (df_chain->block_pool)
1961     free_alloc_pool (df_chain->block_pool);
1962
1963   EXECUTE_IF_SET_IN_BITMAP (df_chain->out_of_date_transfer_functions, 0, bb_index, bi)
1964     {
1965       rtx_insn *insn;
1966       df_ref def, use;
1967       basic_block bb = BASIC_BLOCK_FOR_FN (cfun, bb_index);
1968
1969       if (df_chain_problem_p (DF_DU_CHAIN))
1970         FOR_EACH_ARTIFICIAL_DEF (def, bb_index)
1971           DF_REF_CHAIN (def) = NULL;
1972       if (df_chain_problem_p (DF_UD_CHAIN))
1973         FOR_EACH_ARTIFICIAL_USE (use, bb_index)
1974           DF_REF_CHAIN (use) = NULL;
1975
1976       FOR_BB_INSNS (bb, insn)
1977         if (INSN_P (insn))
1978           {
1979             df_insn_info *insn_info = DF_INSN_INFO_GET (insn);
1980             if (df_chain_problem_p (DF_DU_CHAIN))
1981               FOR_EACH_INSN_INFO_DEF (def, insn_info)
1982                 DF_REF_CHAIN (def) = NULL;
1983             if (df_chain_problem_p (DF_UD_CHAIN))
1984               {
1985                 FOR_EACH_INSN_INFO_USE (use, insn_info)
1986                   DF_REF_CHAIN (use) = NULL;
1987                 FOR_EACH_INSN_INFO_EQ_USE (use, insn_info)
1988                   DF_REF_CHAIN (use) = NULL;
1989               }
1990           }
1991     }
1992
1993   bitmap_clear (df_chain->out_of_date_transfer_functions);
1994   df_chain->block_pool = NULL;
1995 }
1996
1997
1998 /* Remove the chain problem completely.  */
1999
2000 static void
2001 df_chain_fully_remove_problem (void)
2002 {
2003   df_chain_remove_problem ();
2004   BITMAP_FREE (df_chain->out_of_date_transfer_functions);
2005   free (df_chain);
2006 }
2007
2008
2009 /* Create def-use or use-def chains.  */
2010
2011 static void
2012 df_chain_alloc (bitmap all_blocks ATTRIBUTE_UNUSED)
2013 {
2014   df_chain_remove_problem ();
2015   df_chain->block_pool = create_alloc_pool ("df_chain_block pool",
2016                                          sizeof (struct df_link), 50);
2017   df_chain->optional_p = true;
2018 }
2019
2020
2021 /* Reset all of the chains when the set of basic blocks changes.  */
2022
2023 static void
2024 df_chain_reset (bitmap blocks_to_clear ATTRIBUTE_UNUSED)
2025 {
2026   df_chain_remove_problem ();
2027 }
2028
2029
2030 /* Create the chains for a list of USEs.  */
2031
2032 static void
2033 df_chain_create_bb_process_use (bitmap local_rd,
2034                                 df_ref use,
2035                                 int top_flag)
2036 {
2037   bitmap_iterator bi;
2038   unsigned int def_index;
2039
2040   for (; use; use = DF_REF_NEXT_LOC (use))
2041     {
2042       unsigned int uregno = DF_REF_REGNO (use);
2043       if ((!(df->changeable_flags & DF_NO_HARD_REGS))
2044           || (uregno >= FIRST_PSEUDO_REGISTER))
2045         {
2046           /* Do not want to go through this for an uninitialized var.  */
2047           int count = DF_DEFS_COUNT (uregno);
2048           if (count)
2049             {
2050               if (top_flag == (DF_REF_FLAGS (use) & DF_REF_AT_TOP))
2051                 {
2052                   unsigned int first_index = DF_DEFS_BEGIN (uregno);
2053                   unsigned int last_index = first_index + count - 1;
2054
2055                   EXECUTE_IF_SET_IN_BITMAP (local_rd, first_index, def_index, bi)
2056                     {
2057                       df_ref def;
2058                       if (def_index > last_index)
2059                         break;
2060
2061                       def = DF_DEFS_GET (def_index);
2062                       if (df_chain_problem_p (DF_DU_CHAIN))
2063                         df_chain_create (def, use);
2064                       if (df_chain_problem_p (DF_UD_CHAIN))
2065                         df_chain_create (use, def);
2066                     }
2067                 }
2068             }
2069         }
2070     }
2071 }
2072
2073
2074 /* Create chains from reaching defs bitmaps for basic block BB.  */
2075
2076 static void
2077 df_chain_create_bb (unsigned int bb_index)
2078 {
2079   basic_block bb = BASIC_BLOCK_FOR_FN (cfun, bb_index);
2080   struct df_rd_bb_info *bb_info = df_rd_get_bb_info (bb_index);
2081   rtx_insn *insn;
2082   bitmap_head cpy;
2083
2084   bitmap_initialize (&cpy, &bitmap_default_obstack);
2085   bitmap_copy (&cpy, &bb_info->in);
2086   bitmap_set_bit (df_chain->out_of_date_transfer_functions, bb_index);
2087
2088   /* Since we are going forwards, process the artificial uses first
2089      then the artificial defs second.  */
2090
2091 #ifdef EH_USES
2092   /* Create the chains for the artificial uses from the EH_USES at the
2093      beginning of the block.  */
2094
2095   /* Artificials are only hard regs.  */
2096   if (!(df->changeable_flags & DF_NO_HARD_REGS))
2097     df_chain_create_bb_process_use (&cpy,
2098                                     df_get_artificial_uses (bb->index),
2099                                     DF_REF_AT_TOP);
2100 #endif
2101
2102   df_rd_simulate_artificial_defs_at_top (bb, &cpy);
2103
2104   /* Process the regular instructions next.  */
2105   FOR_BB_INSNS (bb, insn)
2106     if (INSN_P (insn))
2107       {
2108         unsigned int uid = INSN_UID (insn);
2109
2110         /* First scan the uses and link them up with the defs that remain
2111            in the cpy vector.  */
2112         df_chain_create_bb_process_use (&cpy, DF_INSN_UID_USES (uid), 0);
2113         if (df->changeable_flags & DF_EQ_NOTES)
2114           df_chain_create_bb_process_use (&cpy, DF_INSN_UID_EQ_USES (uid), 0);
2115
2116         /* Since we are going forwards, process the defs second.  */
2117         df_rd_simulate_one_insn (bb, insn, &cpy);
2118       }
2119
2120   /* Create the chains for the artificial uses of the hard registers
2121      at the end of the block.  */
2122   if (!(df->changeable_flags & DF_NO_HARD_REGS))
2123     df_chain_create_bb_process_use (&cpy,
2124                                     df_get_artificial_uses (bb->index),
2125                                     0);
2126
2127   bitmap_clear (&cpy);
2128 }
2129
2130 /* Create def-use chains from reaching use bitmaps for basic blocks
2131    in BLOCKS.  */
2132
2133 static void
2134 df_chain_finalize (bitmap all_blocks)
2135 {
2136   unsigned int bb_index;
2137   bitmap_iterator bi;
2138
2139   EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi)
2140     {
2141       df_chain_create_bb (bb_index);
2142     }
2143 }
2144
2145
2146 /* Free all storage associated with the problem.  */
2147
2148 static void
2149 df_chain_free (void)
2150 {
2151   free_alloc_pool (df_chain->block_pool);
2152   BITMAP_FREE (df_chain->out_of_date_transfer_functions);
2153   free (df_chain);
2154 }
2155
2156
2157 /* Debugging info.  */
2158
2159 static void
2160 df_chain_bb_dump (basic_block bb, FILE *file, bool top)
2161 {
2162   /* Artificials are only hard regs.  */
2163   if (df->changeable_flags & DF_NO_HARD_REGS)
2164     return;
2165   if (df_chain_problem_p (DF_UD_CHAIN))
2166     {
2167       df_ref use;
2168
2169       fprintf (file,
2170                ";;  UD chains for artificial uses at %s\n",
2171                top ? "top" : "bottom");
2172       FOR_EACH_ARTIFICIAL_USE (use, bb->index)
2173         if ((top && (DF_REF_FLAGS (use) & DF_REF_AT_TOP))
2174             || (!top && !(DF_REF_FLAGS (use) & DF_REF_AT_TOP)))
2175           {
2176             fprintf (file, ";;   reg %d ", DF_REF_REGNO (use));
2177             df_chain_dump (DF_REF_CHAIN (use), file);
2178             fprintf (file, "\n");
2179           }
2180     }
2181   if (df_chain_problem_p (DF_DU_CHAIN))
2182     {
2183       df_ref def;
2184
2185       fprintf (file,
2186                ";;  DU chains for artificial defs at %s\n",
2187                top ? "top" : "bottom");
2188       FOR_EACH_ARTIFICIAL_DEF (def, bb->index)
2189         if ((top && (DF_REF_FLAGS (def) & DF_REF_AT_TOP))
2190             || (!top && !(DF_REF_FLAGS (def) & DF_REF_AT_TOP)))
2191           {
2192             fprintf (file, ";;   reg %d ", DF_REF_REGNO (def));
2193             df_chain_dump (DF_REF_CHAIN (def), file);
2194             fprintf (file, "\n");
2195           }
2196     }
2197 }
2198
2199 static void
2200 df_chain_top_dump (basic_block bb, FILE *file)
2201 {
2202   df_chain_bb_dump (bb, file, /*top=*/true);
2203 }
2204
2205 static void
2206 df_chain_bottom_dump (basic_block bb, FILE *file)
2207 {
2208   df_chain_bb_dump (bb, file, /*top=*/false);
2209 }
2210
2211 static void
2212 df_chain_insn_top_dump (const rtx_insn *insn, FILE *file)
2213 {
2214   if (df_chain_problem_p (DF_UD_CHAIN) && INSN_P (insn))
2215     {
2216       struct df_insn_info *insn_info = DF_INSN_INFO_GET (insn);
2217       df_ref use;
2218
2219       fprintf (file, ";;   UD chains for insn luid %d uid %d\n",
2220                DF_INSN_INFO_LUID (insn_info), INSN_UID (insn));
2221       FOR_EACH_INSN_INFO_USE (use, insn_info)
2222         if (!HARD_REGISTER_NUM_P (DF_REF_REGNO (use))
2223             || !(df->changeable_flags & DF_NO_HARD_REGS))
2224           {
2225             fprintf (file, ";;      reg %d ", DF_REF_REGNO (use));
2226             if (DF_REF_FLAGS (use) & DF_REF_READ_WRITE)
2227               fprintf (file, "read/write ");
2228             df_chain_dump (DF_REF_CHAIN (use), file);
2229             fprintf (file, "\n");
2230           }
2231       FOR_EACH_INSN_INFO_EQ_USE (use, insn_info)
2232         if (!HARD_REGISTER_NUM_P (DF_REF_REGNO (use))
2233             || !(df->changeable_flags & DF_NO_HARD_REGS))
2234           {
2235             fprintf (file, ";;   eq_note reg %d ", DF_REF_REGNO (use));
2236             df_chain_dump (DF_REF_CHAIN (use), file);
2237             fprintf (file, "\n");
2238           }
2239     }
2240 }
2241
2242 static void
2243 df_chain_insn_bottom_dump (const rtx_insn *insn, FILE *file)
2244 {
2245   if (df_chain_problem_p (DF_DU_CHAIN) && INSN_P (insn))
2246     {
2247       struct df_insn_info *insn_info = DF_INSN_INFO_GET (insn);
2248       df_ref def;
2249       fprintf (file, ";;   DU chains for insn luid %d uid %d\n",
2250                DF_INSN_INFO_LUID (insn_info), INSN_UID (insn));
2251       FOR_EACH_INSN_INFO_DEF (def, insn_info)
2252         if (!HARD_REGISTER_NUM_P (DF_REF_REGNO (def))
2253             || !(df->changeable_flags & DF_NO_HARD_REGS))
2254           {
2255             fprintf (file, ";;      reg %d ", DF_REF_REGNO (def));
2256             if (DF_REF_FLAGS (def) & DF_REF_READ_WRITE)
2257               fprintf (file, "read/write ");
2258             df_chain_dump (DF_REF_CHAIN (def), file);
2259             fprintf (file, "\n");
2260           }
2261       fprintf (file, "\n");
2262     }
2263 }
2264
2265 static struct df_problem problem_CHAIN =
2266 {
2267   DF_CHAIN,                   /* Problem id.  */
2268   DF_NONE,                    /* Direction.  */
2269   df_chain_alloc,             /* Allocate the problem specific data.  */
2270   df_chain_reset,             /* Reset global information.  */
2271   NULL,                       /* Free basic block info.  */
2272   NULL,                       /* Local compute function.  */
2273   NULL,                       /* Init the solution specific data.  */
2274   NULL,                       /* Iterative solver.  */
2275   NULL,                       /* Confluence operator 0.  */
2276   NULL,                       /* Confluence operator n.  */
2277   NULL,                       /* Transfer function.  */
2278   df_chain_finalize,          /* Finalize function.  */
2279   df_chain_free,              /* Free all of the problem information.  */
2280   df_chain_fully_remove_problem,/* Remove this problem from the stack of dataflow problems.  */
2281   NULL,                       /* Debugging.  */
2282   df_chain_top_dump,          /* Debugging start block.  */
2283   df_chain_bottom_dump,       /* Debugging end block.  */
2284   df_chain_insn_top_dump,     /* Debugging start insn.  */
2285   df_chain_insn_bottom_dump,  /* Debugging end insn.  */
2286   NULL,                       /* Incremental solution verify start.  */
2287   NULL,                       /* Incremental solution verify end.  */
2288   &problem_RD,                /* Dependent problem.  */
2289   sizeof (struct df_scan_bb_info),/* Size of entry of block_info array.  */
2290   TV_DF_CHAIN,                /* Timing variable.  */
2291   false                       /* Reset blocks on dropping out of blocks_to_analyze.  */
2292 };
2293
2294
2295 /* Create a new DATAFLOW instance and add it to an existing instance
2296    of DF.  The returned structure is what is used to get at the
2297    solution.  */
2298
2299 void
2300 df_chain_add_problem (unsigned int chain_flags)
2301 {
2302   df_add_problem (&problem_CHAIN);
2303   df_chain->local_flags = chain_flags;
2304   df_chain->out_of_date_transfer_functions = BITMAP_ALLOC (&df_bitmap_obstack);
2305 }
2306
2307 #undef df_chain_problem_p
2308
2309 \f
2310 /*----------------------------------------------------------------------------
2311    WORD LEVEL LIVE REGISTERS
2312
2313    Find the locations in the function where any use of a pseudo can
2314    reach in the backwards direction.  In and out bitvectors are built
2315    for each basic block.  We only track pseudo registers that have a
2316    size of 2 * UNITS_PER_WORD; bitmaps are indexed by 2 * regno and
2317    contain two bits corresponding to each of the subwords.
2318
2319    ----------------------------------------------------------------------------*/
2320
2321 /* Private data used to verify the solution for this problem.  */
2322 struct df_word_lr_problem_data
2323 {
2324   /* An obstack for the bitmaps we need for this problem.  */
2325   bitmap_obstack word_lr_bitmaps;
2326 };
2327
2328
2329 /* Free basic block info.  */
2330
2331 static void
2332 df_word_lr_free_bb_info (basic_block bb ATTRIBUTE_UNUSED,
2333                          void *vbb_info)
2334 {
2335   struct df_word_lr_bb_info *bb_info = (struct df_word_lr_bb_info *) vbb_info;
2336   if (bb_info)
2337     {
2338       bitmap_clear (&bb_info->use);
2339       bitmap_clear (&bb_info->def);
2340       bitmap_clear (&bb_info->in);
2341       bitmap_clear (&bb_info->out);
2342     }
2343 }
2344
2345
2346 /* Allocate or reset bitmaps for DF_WORD_LR blocks. The solution bits are
2347    not touched unless the block is new.  */
2348
2349 static void
2350 df_word_lr_alloc (bitmap all_blocks ATTRIBUTE_UNUSED)
2351 {
2352   unsigned int bb_index;
2353   bitmap_iterator bi;
2354   basic_block bb;
2355   struct df_word_lr_problem_data *problem_data
2356     = XNEW (struct df_word_lr_problem_data);
2357
2358   df_word_lr->problem_data = problem_data;
2359
2360   df_grow_bb_info (df_word_lr);
2361
2362   /* Create the mapping from regnos to slots. This does not change
2363      unless the problem is destroyed and recreated.  In particular, if
2364      we end up deleting the only insn that used a subreg, we do not
2365      want to redo the mapping because this would invalidate everything
2366      else.  */
2367
2368   bitmap_obstack_initialize (&problem_data->word_lr_bitmaps);
2369
2370   FOR_EACH_BB_FN (bb, cfun)
2371     bitmap_set_bit (df_word_lr->out_of_date_transfer_functions, bb->index);
2372
2373   bitmap_set_bit (df_word_lr->out_of_date_transfer_functions, ENTRY_BLOCK);
2374   bitmap_set_bit (df_word_lr->out_of_date_transfer_functions, EXIT_BLOCK);
2375
2376   EXECUTE_IF_SET_IN_BITMAP (df_word_lr->out_of_date_transfer_functions, 0, bb_index, bi)
2377     {
2378       struct df_word_lr_bb_info *bb_info = df_word_lr_get_bb_info (bb_index);
2379       
2380       /* When bitmaps are already initialized, just clear them.  */
2381       if (bb_info->use.obstack)
2382         {
2383           bitmap_clear (&bb_info->def);
2384           bitmap_clear (&bb_info->use);
2385         }
2386       else
2387         {
2388           bitmap_initialize (&bb_info->use, &problem_data->word_lr_bitmaps);
2389           bitmap_initialize (&bb_info->def, &problem_data->word_lr_bitmaps);
2390           bitmap_initialize (&bb_info->in, &problem_data->word_lr_bitmaps);
2391           bitmap_initialize (&bb_info->out, &problem_data->word_lr_bitmaps);
2392         }
2393     }
2394
2395   df_word_lr->optional_p = true;
2396 }
2397
2398
2399 /* Reset the global solution for recalculation.  */
2400
2401 static void
2402 df_word_lr_reset (bitmap all_blocks)
2403 {
2404   unsigned int bb_index;
2405   bitmap_iterator bi;
2406
2407   EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi)
2408     {
2409       struct df_word_lr_bb_info *bb_info = df_word_lr_get_bb_info (bb_index);
2410       gcc_assert (bb_info);
2411       bitmap_clear (&bb_info->in);
2412       bitmap_clear (&bb_info->out);
2413     }
2414 }
2415
2416 /* Examine REF, and if it is for a reg we're interested in, set or
2417    clear the bits corresponding to its subwords from the bitmap
2418    according to IS_SET.  LIVE is the bitmap we should update.  We do
2419    not track hard regs or pseudos of any size other than 2 *
2420    UNITS_PER_WORD.
2421    We return true if we changed the bitmap, or if we encountered a register
2422    we're not tracking.  */
2423
2424 bool
2425 df_word_lr_mark_ref (df_ref ref, bool is_set, regset live)
2426 {
2427   rtx orig_reg = DF_REF_REG (ref);
2428   rtx reg = orig_reg;
2429   machine_mode reg_mode;
2430   unsigned regno;
2431   /* Left at -1 for whole accesses.  */
2432   int which_subword = -1;
2433   bool changed = false;
2434
2435   if (GET_CODE (reg) == SUBREG)
2436     reg = SUBREG_REG (orig_reg);
2437   regno = REGNO (reg);
2438   reg_mode = GET_MODE (reg);
2439   if (regno < FIRST_PSEUDO_REGISTER
2440       || GET_MODE_SIZE (reg_mode) != 2 * UNITS_PER_WORD)
2441     return true;
2442
2443   if (GET_CODE (orig_reg) == SUBREG
2444       && df_read_modify_subreg_p (orig_reg))
2445     {
2446       gcc_assert (DF_REF_FLAGS_IS_SET (ref, DF_REF_PARTIAL));
2447       if (subreg_lowpart_p (orig_reg))
2448         which_subword = 0;
2449       else
2450         which_subword = 1;
2451     }
2452   if (is_set)
2453     {
2454       if (which_subword != 1)
2455         changed |= bitmap_set_bit (live, regno * 2);
2456       if (which_subword != 0)
2457         changed |= bitmap_set_bit (live, regno * 2 + 1);
2458     }
2459   else
2460     {
2461       if (which_subword != 1)
2462         changed |= bitmap_clear_bit (live, regno * 2);
2463       if (which_subword != 0)
2464         changed |= bitmap_clear_bit (live, regno * 2 + 1);
2465     }
2466   return changed;
2467 }
2468
2469 /* Compute local live register info for basic block BB.  */
2470
2471 static void
2472 df_word_lr_bb_local_compute (unsigned int bb_index)
2473 {
2474   basic_block bb = BASIC_BLOCK_FOR_FN (cfun, bb_index);
2475   struct df_word_lr_bb_info *bb_info = df_word_lr_get_bb_info (bb_index);
2476   rtx_insn *insn;
2477   df_ref def, use;
2478
2479   /* Ensure that artificial refs don't contain references to pseudos.  */
2480   FOR_EACH_ARTIFICIAL_DEF (def, bb_index)
2481     gcc_assert (DF_REF_REGNO (def) < FIRST_PSEUDO_REGISTER);
2482
2483   FOR_EACH_ARTIFICIAL_USE (use, bb_index)
2484     gcc_assert (DF_REF_REGNO (use) < FIRST_PSEUDO_REGISTER);
2485
2486   FOR_BB_INSNS_REVERSE (bb, insn)
2487     {
2488       if (!NONDEBUG_INSN_P (insn))
2489         continue;
2490
2491       df_insn_info *insn_info = DF_INSN_INFO_GET (insn);
2492       FOR_EACH_INSN_INFO_DEF (def, insn_info)
2493         /* If the def is to only part of the reg, it does
2494            not kill the other defs that reach here.  */
2495         if (!(DF_REF_FLAGS (def) & (DF_REF_CONDITIONAL)))
2496           {
2497             df_word_lr_mark_ref (def, true, &bb_info->def);
2498             df_word_lr_mark_ref (def, false, &bb_info->use);
2499           }
2500       FOR_EACH_INSN_INFO_USE (use, insn_info)
2501         df_word_lr_mark_ref (use, true, &bb_info->use);
2502     }
2503 }
2504
2505
2506 /* Compute local live register info for each basic block within BLOCKS.  */
2507
2508 static void
2509 df_word_lr_local_compute (bitmap all_blocks ATTRIBUTE_UNUSED)
2510 {
2511   unsigned int bb_index;
2512   bitmap_iterator bi;
2513
2514   EXECUTE_IF_SET_IN_BITMAP (df_word_lr->out_of_date_transfer_functions, 0, bb_index, bi)
2515     {
2516       if (bb_index == EXIT_BLOCK)
2517         {
2518           unsigned regno;
2519           bitmap_iterator bi;
2520           EXECUTE_IF_SET_IN_BITMAP (df->exit_block_uses, FIRST_PSEUDO_REGISTER,
2521                                     regno, bi)
2522             gcc_unreachable ();
2523         }
2524       else
2525         df_word_lr_bb_local_compute (bb_index);
2526     }
2527
2528   bitmap_clear (df_word_lr->out_of_date_transfer_functions);
2529 }
2530
2531
2532 /* Initialize the solution vectors.  */
2533
2534 static void
2535 df_word_lr_init (bitmap all_blocks)
2536 {
2537   unsigned int bb_index;
2538   bitmap_iterator bi;
2539
2540   EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi)
2541     {
2542       struct df_word_lr_bb_info *bb_info = df_word_lr_get_bb_info (bb_index);
2543       bitmap_copy (&bb_info->in, &bb_info->use);
2544       bitmap_clear (&bb_info->out);
2545     }
2546 }
2547
2548
2549 /* Confluence function that ignores fake edges.  */
2550
2551 static bool
2552 df_word_lr_confluence_n (edge e)
2553 {
2554   bitmap op1 = &df_word_lr_get_bb_info (e->src->index)->out;
2555   bitmap op2 = &df_word_lr_get_bb_info (e->dest->index)->in;
2556
2557   return bitmap_ior_into (op1, op2);
2558 }
2559
2560
2561 /* Transfer function.  */
2562
2563 static bool
2564 df_word_lr_transfer_function (int bb_index)
2565 {
2566   struct df_word_lr_bb_info *bb_info = df_word_lr_get_bb_info (bb_index);
2567   bitmap in = &bb_info->in;
2568   bitmap out = &bb_info->out;
2569   bitmap use = &bb_info->use;
2570   bitmap def = &bb_info->def;
2571
2572   return bitmap_ior_and_compl (in, use, out, def);
2573 }
2574
2575
2576 /* Free all storage associated with the problem.  */
2577
2578 static void
2579 df_word_lr_free (void)
2580 {
2581   struct df_word_lr_problem_data *problem_data
2582     = (struct df_word_lr_problem_data *)df_word_lr->problem_data;
2583
2584   if (df_word_lr->block_info)
2585     {
2586       df_word_lr->block_info_size = 0;
2587       free (df_word_lr->block_info);
2588       df_word_lr->block_info = NULL;
2589     }
2590
2591   BITMAP_FREE (df_word_lr->out_of_date_transfer_functions);
2592   bitmap_obstack_release (&problem_data->word_lr_bitmaps);
2593   free (problem_data);
2594   free (df_word_lr);
2595 }
2596
2597
2598 /* Debugging info at top of bb.  */
2599
2600 static void
2601 df_word_lr_top_dump (basic_block bb, FILE *file)
2602 {
2603   struct df_word_lr_bb_info *bb_info = df_word_lr_get_bb_info (bb->index);
2604   if (!bb_info)
2605     return;
2606
2607   fprintf (file, ";; blr  in  \t");
2608   df_print_word_regset (file, &bb_info->in);
2609   fprintf (file, ";; blr  use \t");
2610   df_print_word_regset (file, &bb_info->use);
2611   fprintf (file, ";; blr  def \t");
2612   df_print_word_regset (file, &bb_info->def);
2613 }
2614
2615
2616 /* Debugging info at bottom of bb.  */
2617
2618 static void
2619 df_word_lr_bottom_dump (basic_block bb, FILE *file)
2620 {
2621   struct df_word_lr_bb_info *bb_info = df_word_lr_get_bb_info (bb->index);
2622   if (!bb_info)
2623     return;
2624
2625   fprintf (file, ";; blr  out \t");
2626   df_print_word_regset (file, &bb_info->out);
2627 }
2628
2629
2630 /* All of the information associated with every instance of the problem.  */
2631
2632 static struct df_problem problem_WORD_LR =
2633 {
2634   DF_WORD_LR,                      /* Problem id.  */
2635   DF_BACKWARD,                     /* Direction.  */
2636   df_word_lr_alloc,                /* Allocate the problem specific data.  */
2637   df_word_lr_reset,                /* Reset global information.  */
2638   df_word_lr_free_bb_info,         /* Free basic block info.  */
2639   df_word_lr_local_compute,        /* Local compute function.  */
2640   df_word_lr_init,                 /* Init the solution specific data.  */
2641   df_worklist_dataflow,            /* Worklist solver.  */
2642   NULL,                            /* Confluence operator 0.  */
2643   df_word_lr_confluence_n,         /* Confluence operator n.  */
2644   df_word_lr_transfer_function,    /* Transfer function.  */
2645   NULL,                            /* Finalize function.  */
2646   df_word_lr_free,                 /* Free all of the problem information.  */
2647   df_word_lr_free,                 /* Remove this problem from the stack of dataflow problems.  */
2648   NULL,                            /* Debugging.  */
2649   df_word_lr_top_dump,             /* Debugging start block.  */
2650   df_word_lr_bottom_dump,          /* Debugging end block.  */
2651   NULL,                            /* Debugging start insn.  */
2652   NULL,                            /* Debugging end insn.  */
2653   NULL,                            /* Incremental solution verify start.  */
2654   NULL,                            /* Incremental solution verify end.  */
2655   NULL,                            /* Dependent problem.  */
2656   sizeof (struct df_word_lr_bb_info),/* Size of entry of block_info array.  */
2657   TV_DF_WORD_LR,                   /* Timing variable.  */
2658   false                            /* Reset blocks on dropping out of blocks_to_analyze.  */
2659 };
2660
2661
2662 /* Create a new DATAFLOW instance and add it to an existing instance
2663    of DF.  The returned structure is what is used to get at the
2664    solution.  */
2665
2666 void
2667 df_word_lr_add_problem (void)
2668 {
2669   df_add_problem (&problem_WORD_LR);
2670   /* These will be initialized when df_scan_blocks processes each
2671      block.  */
2672   df_word_lr->out_of_date_transfer_functions = BITMAP_ALLOC (&df_bitmap_obstack);
2673 }
2674
2675
2676 /* Simulate the effects of the defs of INSN on LIVE.  Return true if we changed
2677    any bits, which is used by the caller to determine whether a set is
2678    necessary.  We also return true if there are other reasons not to delete
2679    an insn.  */
2680
2681 bool
2682 df_word_lr_simulate_defs (rtx_insn *insn, bitmap live)
2683 {
2684   bool changed = false;
2685   df_ref def;
2686
2687   FOR_EACH_INSN_DEF (def, insn)
2688     if (DF_REF_FLAGS (def) & DF_REF_CONDITIONAL)
2689       changed = true;
2690     else
2691       changed |= df_word_lr_mark_ref (def, false, live);
2692   return changed;
2693 }
2694
2695
2696 /* Simulate the effects of the uses of INSN on LIVE.  */
2697
2698 void
2699 df_word_lr_simulate_uses (rtx_insn *insn, bitmap live)
2700 {
2701   df_ref use;
2702
2703   FOR_EACH_INSN_USE (use, insn)
2704     df_word_lr_mark_ref (use, true, live);
2705 }
2706 \f
2707 /*----------------------------------------------------------------------------
2708    This problem computes REG_DEAD and REG_UNUSED notes.
2709    ----------------------------------------------------------------------------*/
2710
2711 static void
2712 df_note_alloc (bitmap all_blocks ATTRIBUTE_UNUSED)
2713 {
2714   df_note->optional_p = true;
2715 }
2716
2717 /* This is only used if REG_DEAD_DEBUGGING is in effect.  */
2718 static void
2719 df_print_note (const char *prefix, rtx_insn *insn, rtx note)
2720 {
2721   if (dump_file)
2722     {
2723       fprintf (dump_file, "%s %d ", prefix, INSN_UID (insn));
2724       print_rtl (dump_file, note);
2725       fprintf (dump_file, "\n");
2726     }
2727 }
2728
2729
2730 /* After reg-stack, the x86 floating point stack regs are difficult to
2731    analyze because of all of the pushes, pops and rotations.  Thus, we
2732    just leave the notes alone. */
2733
2734 #ifdef STACK_REGS
2735 static inline bool
2736 df_ignore_stack_reg (int regno)
2737 {
2738   return regstack_completed
2739     && IN_RANGE (regno, FIRST_STACK_REG, LAST_STACK_REG);
2740 }
2741 #else
2742 static inline bool
2743 df_ignore_stack_reg (int regno ATTRIBUTE_UNUSED)
2744 {
2745   return false;
2746 }
2747 #endif
2748
2749
2750 /* Remove all of the REG_DEAD or REG_UNUSED notes from INSN.  */
2751
2752 static void
2753 df_remove_dead_and_unused_notes (rtx_insn *insn)
2754 {
2755   rtx *pprev = &REG_NOTES (insn);
2756   rtx link = *pprev;
2757
2758   while (link)
2759     {
2760       switch (REG_NOTE_KIND (link))
2761         {
2762         case REG_DEAD:
2763           /* After reg-stack, we need to ignore any unused notes
2764              for the stack registers.  */
2765           if (df_ignore_stack_reg (REGNO (XEXP (link, 0))))
2766             {
2767               pprev = &XEXP (link, 1);
2768               link = *pprev;
2769             }
2770           else
2771             {
2772               rtx next = XEXP (link, 1);
2773               if (REG_DEAD_DEBUGGING)
2774                 df_print_note ("deleting: ", insn, link);
2775               free_EXPR_LIST_node (link);
2776               *pprev = link = next;
2777             }
2778           break;
2779
2780         case REG_UNUSED:
2781           /* After reg-stack, we need to ignore any unused notes
2782              for the stack registers.  */
2783           if (df_ignore_stack_reg (REGNO (XEXP (link, 0))))
2784             {
2785               pprev = &XEXP (link, 1);
2786               link = *pprev;
2787             }
2788           else
2789             {
2790               rtx next = XEXP (link, 1);
2791               if (REG_DEAD_DEBUGGING)
2792                 df_print_note ("deleting: ", insn, link);
2793               free_EXPR_LIST_node (link);
2794               *pprev = link = next;
2795             }
2796           break;
2797
2798         default:
2799           pprev = &XEXP (link, 1);
2800           link = *pprev;
2801           break;
2802         }
2803     }
2804 }
2805
2806 /* Remove REG_EQUAL/REG_EQUIV notes referring to dead pseudos using LIVE
2807    as the bitmap of currently live registers.  */
2808
2809 static void
2810 df_remove_dead_eq_notes (rtx_insn *insn, bitmap live)
2811 {
2812   rtx *pprev = &REG_NOTES (insn);
2813   rtx link = *pprev;
2814
2815   while (link)
2816     {
2817       switch (REG_NOTE_KIND (link))
2818         {
2819         case REG_EQUAL:
2820         case REG_EQUIV:
2821           {
2822             /* Remove the notes that refer to dead registers.  As we have at most
2823                one REG_EQUAL/EQUIV note, all of EQ_USES will refer to this note
2824                so we need to purge the complete EQ_USES vector when removing
2825                the note using df_notes_rescan.  */
2826             df_ref use;
2827             bool deleted = false;
2828
2829             FOR_EACH_INSN_EQ_USE (use, insn)
2830               if (DF_REF_REGNO (use) > FIRST_PSEUDO_REGISTER
2831                   && DF_REF_LOC (use)
2832                   && (DF_REF_FLAGS (use) & DF_REF_IN_NOTE)
2833                   && !bitmap_bit_p (live, DF_REF_REGNO (use))
2834                   && loc_mentioned_in_p (DF_REF_LOC (use), XEXP (link, 0)))
2835                 {
2836                   deleted = true;
2837                   break;
2838                 }
2839             if (deleted)
2840               {
2841                 rtx next;
2842                 if (REG_DEAD_DEBUGGING)
2843                   df_print_note ("deleting: ", insn, link);
2844                 next = XEXP (link, 1);
2845                 free_EXPR_LIST_node (link);
2846                 *pprev = link = next;
2847                 df_notes_rescan (insn);
2848               }
2849             else
2850               {
2851                 pprev = &XEXP (link, 1);
2852                 link = *pprev;
2853               }
2854             break;
2855           }
2856
2857         default:
2858           pprev = &XEXP (link, 1);
2859           link = *pprev;
2860           break;
2861         }
2862     }
2863 }
2864
2865 /* Set a NOTE_TYPE note for REG in INSN.  */
2866
2867 static inline void
2868 df_set_note (enum reg_note note_type, rtx insn, rtx reg)
2869 {
2870   gcc_checking_assert (!DEBUG_INSN_P (insn));
2871   add_reg_note (insn, note_type, reg);
2872 }
2873
2874 /* A subroutine of df_set_unused_notes_for_mw, with a selection of its
2875    arguments.  Return true if the register value described by MWS's
2876    mw_reg is known to be completely unused, and if mw_reg can therefore
2877    be used in a REG_UNUSED note.  */
2878
2879 static bool
2880 df_whole_mw_reg_unused_p (struct df_mw_hardreg *mws,
2881                           bitmap live, bitmap artificial_uses)
2882 {
2883   unsigned int r;
2884
2885   /* If MWS describes a partial reference, create REG_UNUSED notes for
2886      individual hard registers.  */
2887   if (mws->flags & DF_REF_PARTIAL)
2888     return false;
2889
2890   /* Likewise if some part of the register is used.  */
2891   for (r = mws->start_regno; r <= mws->end_regno; r++)
2892     if (bitmap_bit_p (live, r)
2893         || bitmap_bit_p (artificial_uses, r))
2894       return false;
2895
2896   gcc_assert (REG_P (mws->mw_reg));
2897   return true;
2898 }
2899
2900
2901 /* Set the REG_UNUSED notes for the multiword hardreg defs in INSN
2902    based on the bits in LIVE.  Do not generate notes for registers in
2903    artificial uses.  DO_NOT_GEN is updated so that REG_DEAD notes are
2904    not generated if the reg is both read and written by the
2905    instruction.
2906 */
2907
2908 static void
2909 df_set_unused_notes_for_mw (rtx_insn *insn, struct df_mw_hardreg *mws,
2910                             bitmap live, bitmap do_not_gen,
2911                             bitmap artificial_uses,
2912                             struct dead_debug_local *debug)
2913 {
2914   unsigned int r;
2915
2916   if (REG_DEAD_DEBUGGING && dump_file)
2917     fprintf (dump_file, "mw_set_unused looking at mws[%d..%d]\n",
2918              mws->start_regno, mws->end_regno);
2919
2920   if (df_whole_mw_reg_unused_p (mws, live, artificial_uses))
2921     {
2922       unsigned int regno = mws->start_regno;
2923       df_set_note (REG_UNUSED, insn, mws->mw_reg);
2924       dead_debug_insert_temp (debug, regno, insn, DEBUG_TEMP_AFTER_WITH_REG);
2925
2926       if (REG_DEAD_DEBUGGING)
2927         df_print_note ("adding 1: ", insn, REG_NOTES (insn));
2928
2929       bitmap_set_bit (do_not_gen, regno);
2930       /* Only do this if the value is totally dead.  */
2931     }
2932   else
2933     for (r = mws->start_regno; r <= mws->end_regno; r++)
2934       {
2935         if (!bitmap_bit_p (live, r)
2936             && !bitmap_bit_p (artificial_uses, r))
2937           {
2938             df_set_note (REG_UNUSED, insn, regno_reg_rtx[r]);
2939             dead_debug_insert_temp (debug, r, insn, DEBUG_TEMP_AFTER_WITH_REG);
2940             if (REG_DEAD_DEBUGGING)
2941               df_print_note ("adding 2: ", insn, REG_NOTES (insn));
2942           }
2943         bitmap_set_bit (do_not_gen, r);
2944       }
2945 }
2946
2947
2948 /* A subroutine of df_set_dead_notes_for_mw, with a selection of its
2949    arguments.  Return true if the register value described by MWS's
2950    mw_reg is known to be completely dead, and if mw_reg can therefore
2951    be used in a REG_DEAD note.  */
2952
2953 static bool
2954 df_whole_mw_reg_dead_p (struct df_mw_hardreg *mws,
2955                         bitmap live, bitmap artificial_uses,
2956                         bitmap do_not_gen)
2957 {
2958   unsigned int r;
2959
2960   /* If MWS describes a partial reference, create REG_DEAD notes for
2961      individual hard registers.  */
2962   if (mws->flags & DF_REF_PARTIAL)
2963     return false;
2964
2965   /* Likewise if some part of the register is not dead.  */
2966   for (r = mws->start_regno; r <= mws->end_regno; r++)
2967     if (bitmap_bit_p (live, r)
2968         || bitmap_bit_p (artificial_uses, r)
2969         || bitmap_bit_p (do_not_gen, r))
2970       return false;
2971
2972   gcc_assert (REG_P (mws->mw_reg));
2973   return true;
2974 }
2975
2976 /* Set the REG_DEAD notes for the multiword hardreg use in INSN based
2977    on the bits in LIVE.  DO_NOT_GEN is used to keep REG_DEAD notes
2978    from being set if the instruction both reads and writes the
2979    register.  */
2980
2981 static void
2982 df_set_dead_notes_for_mw (rtx_insn *insn, struct df_mw_hardreg *mws,
2983                           bitmap live, bitmap do_not_gen,
2984                           bitmap artificial_uses, bool *added_notes_p)
2985 {
2986   unsigned int r;
2987   bool is_debug = *added_notes_p;
2988
2989   *added_notes_p = false;
2990
2991   if (REG_DEAD_DEBUGGING && dump_file)
2992     {
2993       fprintf (dump_file, "mw_set_dead looking at mws[%d..%d]\n  do_not_gen =",
2994                mws->start_regno, mws->end_regno);
2995       df_print_regset (dump_file, do_not_gen);
2996       fprintf (dump_file, "  live =");
2997       df_print_regset (dump_file, live);
2998       fprintf (dump_file, "  artificial uses =");
2999       df_print_regset (dump_file, artificial_uses);
3000     }
3001
3002   if (df_whole_mw_reg_dead_p (mws, live, artificial_uses, do_not_gen))
3003     {
3004       if (is_debug)
3005         {
3006           *added_notes_p = true;
3007           return;
3008         }
3009       /* Add a dead note for the entire multi word register.  */
3010       df_set_note (REG_DEAD, insn, mws->mw_reg);
3011       if (REG_DEAD_DEBUGGING)
3012         df_print_note ("adding 1: ", insn, REG_NOTES (insn));
3013     }
3014   else
3015     {
3016       for (r = mws->start_regno; r <= mws->end_regno; r++)
3017         if (!bitmap_bit_p (live, r)
3018             && !bitmap_bit_p (artificial_uses, r)
3019             && !bitmap_bit_p (do_not_gen, r))
3020           {
3021             if (is_debug)
3022               {
3023                 *added_notes_p = true;
3024                 return;
3025               }
3026             df_set_note (REG_DEAD, insn, regno_reg_rtx[r]);
3027             if (REG_DEAD_DEBUGGING)
3028               df_print_note ("adding 2: ", insn, REG_NOTES (insn));
3029           }
3030     }
3031   return;
3032 }
3033
3034
3035 /* Create a REG_UNUSED note if necessary for DEF in INSN updating
3036    LIVE.  Do not generate notes for registers in ARTIFICIAL_USES.  */
3037
3038 static void
3039 df_create_unused_note (rtx_insn *insn, df_ref def,
3040                        bitmap live, bitmap artificial_uses,
3041                        struct dead_debug_local *debug)
3042 {
3043   unsigned int dregno = DF_REF_REGNO (def);
3044
3045   if (REG_DEAD_DEBUGGING && dump_file)
3046     {
3047       fprintf (dump_file, "  regular looking at def ");
3048       df_ref_debug (def, dump_file);
3049     }
3050
3051   if (!((DF_REF_FLAGS (def) & DF_REF_MW_HARDREG)
3052         || bitmap_bit_p (live, dregno)
3053         || bitmap_bit_p (artificial_uses, dregno)
3054         || df_ignore_stack_reg (dregno)))
3055     {
3056       rtx reg = (DF_REF_LOC (def))
3057                 ? *DF_REF_REAL_LOC (def): DF_REF_REG (def);
3058       df_set_note (REG_UNUSED, insn, reg);
3059       dead_debug_insert_temp (debug, dregno, insn, DEBUG_TEMP_AFTER_WITH_REG);
3060       if (REG_DEAD_DEBUGGING)
3061         df_print_note ("adding 3: ", insn, REG_NOTES (insn));
3062     }
3063
3064   return;
3065 }
3066
3067
3068 /* Recompute the REG_DEAD and REG_UNUSED notes and compute register
3069    info: lifetime, bb, and number of defs and uses for basic block
3070    BB.  The three bitvectors are scratch regs used here.  */
3071
3072 static void
3073 df_note_bb_compute (unsigned int bb_index,
3074                     bitmap live, bitmap do_not_gen, bitmap artificial_uses)
3075 {
3076   basic_block bb = BASIC_BLOCK_FOR_FN (cfun, bb_index);
3077   rtx_insn *insn;
3078   df_ref def, use;
3079   struct dead_debug_local debug;
3080
3081   dead_debug_local_init (&debug, NULL, NULL);
3082
3083   bitmap_copy (live, df_get_live_out (bb));
3084   bitmap_clear (artificial_uses);
3085
3086   if (REG_DEAD_DEBUGGING && dump_file)
3087     {
3088       fprintf (dump_file, "live at bottom ");
3089       df_print_regset (dump_file, live);
3090     }
3091
3092   /* Process the artificial defs and uses at the bottom of the block
3093      to begin processing.  */
3094   FOR_EACH_ARTIFICIAL_DEF (def, bb_index)
3095     {
3096       if (REG_DEAD_DEBUGGING && dump_file)
3097         fprintf (dump_file, "artificial def %d\n", DF_REF_REGNO (def));
3098
3099       if ((DF_REF_FLAGS (def) & DF_REF_AT_TOP) == 0)
3100         bitmap_clear_bit (live, DF_REF_REGNO (def));
3101     }
3102
3103   FOR_EACH_ARTIFICIAL_USE (use, bb_index)
3104     if ((DF_REF_FLAGS (use) & DF_REF_AT_TOP) == 0)
3105       {
3106         unsigned int regno = DF_REF_REGNO (use);
3107         bitmap_set_bit (live, regno);
3108
3109         /* Notes are not generated for any of the artificial registers
3110            at the bottom of the block.  */
3111         bitmap_set_bit (artificial_uses, regno);
3112       }
3113
3114   if (REG_DEAD_DEBUGGING && dump_file)
3115     {
3116       fprintf (dump_file, "live before artificials out ");
3117       df_print_regset (dump_file, live);
3118     }
3119
3120   FOR_BB_INSNS_REVERSE (bb, insn)
3121     {
3122       df_insn_info *insn_info = DF_INSN_INFO_GET (insn);
3123       df_mw_hardreg *mw;
3124       int debug_insn;
3125
3126       if (!INSN_P (insn))
3127         continue;
3128
3129       debug_insn = DEBUG_INSN_P (insn);
3130
3131       bitmap_clear (do_not_gen);
3132       df_remove_dead_and_unused_notes (insn);
3133
3134       /* Process the defs.  */
3135       if (CALL_P (insn))
3136         {
3137           if (REG_DEAD_DEBUGGING && dump_file)
3138             {
3139               fprintf (dump_file, "processing call %d\n  live =",
3140                        INSN_UID (insn));
3141               df_print_regset (dump_file, live);
3142             }
3143
3144           /* We only care about real sets for calls.  Clobbers cannot
3145              be depended on to really die.  */
3146           FOR_EACH_INSN_INFO_MW (mw, insn_info)
3147             if ((DF_MWS_REG_DEF_P (mw))
3148                 && !df_ignore_stack_reg (mw->start_regno))
3149               df_set_unused_notes_for_mw (insn, mw, live, do_not_gen,
3150                                           artificial_uses, &debug);
3151
3152           /* All of the defs except the return value are some sort of
3153              clobber.  This code is for the return.  */
3154           FOR_EACH_INSN_INFO_DEF (def, insn_info)
3155             {
3156               unsigned int dregno = DF_REF_REGNO (def);
3157               if (!DF_REF_FLAGS_IS_SET (def, DF_REF_MUST_CLOBBER | DF_REF_MAY_CLOBBER))
3158                 {
3159                   df_create_unused_note (insn,
3160                                          def, live, artificial_uses, &debug);
3161                   bitmap_set_bit (do_not_gen, dregno);
3162                 }
3163
3164               if (!DF_REF_FLAGS_IS_SET (def, DF_REF_PARTIAL | DF_REF_CONDITIONAL))
3165                 bitmap_clear_bit (live, dregno);
3166             }
3167         }
3168       else
3169         {
3170           /* Regular insn.  */
3171           FOR_EACH_INSN_INFO_MW (mw, insn_info)
3172             if (DF_MWS_REG_DEF_P (mw))
3173               df_set_unused_notes_for_mw (insn, mw, live, do_not_gen,
3174                                           artificial_uses, &debug);
3175
3176           FOR_EACH_INSN_INFO_DEF (def, insn_info)
3177             {
3178               unsigned int dregno = DF_REF_REGNO (def);
3179               df_create_unused_note (insn,
3180                                      def, live, artificial_uses, &debug);
3181
3182               if (!DF_REF_FLAGS_IS_SET (def, DF_REF_MUST_CLOBBER | DF_REF_MAY_CLOBBER))
3183                 bitmap_set_bit (do_not_gen, dregno);
3184
3185               if (!DF_REF_FLAGS_IS_SET (def, DF_REF_PARTIAL | DF_REF_CONDITIONAL))
3186                 bitmap_clear_bit (live, dregno);
3187             }
3188         }
3189
3190       /* Process the uses.  */
3191       FOR_EACH_INSN_INFO_MW (mw, insn_info)
3192         if (DF_MWS_REG_USE_P (mw)
3193             && !df_ignore_stack_reg (mw->start_regno))
3194           {
3195             bool really_add_notes = debug_insn != 0;
3196
3197             df_set_dead_notes_for_mw (insn, mw, live, do_not_gen,
3198                                       artificial_uses,
3199                                       &really_add_notes);
3200
3201             if (really_add_notes)
3202               debug_insn = -1;
3203           }
3204
3205       FOR_EACH_INSN_INFO_USE (use, insn_info)
3206         {
3207           unsigned int uregno = DF_REF_REGNO (use);
3208
3209           if (REG_DEAD_DEBUGGING && dump_file && !debug_insn)
3210             {
3211               fprintf (dump_file, "  regular looking at use ");
3212               df_ref_debug (use, dump_file);
3213             }
3214
3215           if (!bitmap_bit_p (live, uregno))
3216             {
3217               if (debug_insn)
3218                 {
3219                   if (debug_insn > 0)
3220                     {
3221                       /* We won't add REG_UNUSED or REG_DEAD notes for
3222                          these, so we don't have to mess with them in
3223                          debug insns either.  */
3224                       if (!bitmap_bit_p (artificial_uses, uregno)
3225                           && !df_ignore_stack_reg (uregno))
3226                         dead_debug_add (&debug, use, uregno);
3227                       continue;
3228                     }
3229                   break;
3230                 }
3231               else
3232                 dead_debug_insert_temp (&debug, uregno, insn,
3233                                         DEBUG_TEMP_BEFORE_WITH_REG);
3234
3235               if ( (!(DF_REF_FLAGS (use)
3236                       & (DF_REF_MW_HARDREG | DF_REF_READ_WRITE)))
3237                    && (!bitmap_bit_p (do_not_gen, uregno))
3238                    && (!bitmap_bit_p (artificial_uses, uregno))
3239                    && (!df_ignore_stack_reg (uregno)))
3240                 {
3241                   rtx reg = (DF_REF_LOC (use))
3242                             ? *DF_REF_REAL_LOC (use) : DF_REF_REG (use);
3243                   df_set_note (REG_DEAD, insn, reg);
3244
3245                   if (REG_DEAD_DEBUGGING)
3246                     df_print_note ("adding 4: ", insn, REG_NOTES (insn));
3247                 }
3248               /* This register is now live.  */
3249               bitmap_set_bit (live, uregno);
3250             }
3251         }
3252
3253       df_remove_dead_eq_notes (insn, live);
3254
3255       if (debug_insn == -1)
3256         {
3257           /* ??? We could probably do better here, replacing dead
3258              registers with their definitions.  */
3259           INSN_VAR_LOCATION_LOC (insn) = gen_rtx_UNKNOWN_VAR_LOC ();
3260           df_insn_rescan_debug_internal (insn);
3261         }
3262     }
3263
3264   dead_debug_local_finish (&debug, NULL);
3265 }
3266
3267
3268 /* Compute register info: lifetime, bb, and number of defs and uses.  */
3269 static void
3270 df_note_compute (bitmap all_blocks)
3271 {
3272   unsigned int bb_index;
3273   bitmap_iterator bi;
3274   bitmap_head live, do_not_gen, artificial_uses;
3275
3276   bitmap_initialize (&live, &df_bitmap_obstack);
3277   bitmap_initialize (&do_not_gen, &df_bitmap_obstack);
3278   bitmap_initialize (&artificial_uses, &df_bitmap_obstack);
3279
3280   EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi)
3281   {
3282     /* ??? Unlike fast DCE, we don't use global_debug for uses of dead
3283        pseudos in debug insns because we don't always (re)visit blocks
3284        with death points after visiting dead uses.  Even changing this
3285        loop to postorder would still leave room for visiting a death
3286        point before visiting a subsequent debug use.  */
3287     df_note_bb_compute (bb_index, &live, &do_not_gen, &artificial_uses);
3288   }
3289
3290   bitmap_clear (&live);
3291   bitmap_clear (&do_not_gen);
3292   bitmap_clear (&artificial_uses);
3293 }
3294
3295
3296 /* Free all storage associated with the problem.  */
3297
3298 static void
3299 df_note_free (void)
3300 {
3301   free (df_note);
3302 }
3303
3304
3305 /* All of the information associated every instance of the problem.  */
3306
3307 static struct df_problem problem_NOTE =
3308 {
3309   DF_NOTE,                    /* Problem id.  */
3310   DF_NONE,                    /* Direction.  */
3311   df_note_alloc,              /* Allocate the problem specific data.  */
3312   NULL,                       /* Reset global information.  */
3313   NULL,                       /* Free basic block info.  */
3314   df_note_compute,            /* Local compute function.  */
3315   NULL,                       /* Init the solution specific data.  */
3316   NULL,                       /* Iterative solver.  */
3317   NULL,                       /* Confluence operator 0.  */
3318   NULL,                       /* Confluence operator n.  */
3319   NULL,                       /* Transfer function.  */
3320   NULL,                       /* Finalize function.  */
3321   df_note_free,               /* Free all of the problem information.  */
3322   df_note_free,               /* Remove this problem from the stack of dataflow problems.  */
3323   NULL,                       /* Debugging.  */
3324   NULL,                       /* Debugging start block.  */
3325   NULL,                       /* Debugging end block.  */
3326   NULL,                       /* Debugging start insn.  */
3327   NULL,                       /* Debugging end insn.  */
3328   NULL,                       /* Incremental solution verify start.  */
3329   NULL,                       /* Incremental solution verify end.  */
3330   &problem_LR,                /* Dependent problem.  */
3331   sizeof (struct df_scan_bb_info),/* Size of entry of block_info array.  */
3332   TV_DF_NOTE,                 /* Timing variable.  */
3333   false                       /* Reset blocks on dropping out of blocks_to_analyze.  */
3334 };
3335
3336
3337 /* Create a new DATAFLOW instance and add it to an existing instance
3338    of DF.  The returned structure is what is used to get at the
3339    solution.  */
3340
3341 void
3342 df_note_add_problem (void)
3343 {
3344   df_add_problem (&problem_NOTE);
3345 }
3346
3347
3348
3349 \f
3350 /*----------------------------------------------------------------------------
3351    Functions for simulating the effects of single insns.
3352
3353    You can either simulate in the forwards direction, starting from
3354    the top of a block or the backwards direction from the end of the
3355    block.  If you go backwards, defs are examined first to clear bits,
3356    then uses are examined to set bits.  If you go forwards, defs are
3357    examined first to set bits, then REG_DEAD and REG_UNUSED notes
3358    are examined to clear bits.  In either case, the result of examining
3359    a def can be undone (respectively by a use or a REG_UNUSED note).
3360
3361    If you start at the top of the block, use one of DF_LIVE_IN or
3362    DF_LR_IN.  If you start at the bottom of the block use one of
3363    DF_LIVE_OUT or DF_LR_OUT.  BE SURE TO PASS A COPY OF THESE SETS,
3364    THEY WILL BE DESTROYED.
3365 ----------------------------------------------------------------------------*/
3366
3367
3368 /* Find the set of DEFs for INSN.  */
3369
3370 void
3371 df_simulate_find_defs (rtx_insn *insn, bitmap defs)
3372 {
3373   df_ref def;
3374
3375   FOR_EACH_INSN_DEF (def, insn)
3376     bitmap_set_bit (defs, DF_REF_REGNO (def));
3377 }
3378
3379 /* Find the set of uses for INSN.  This includes partial defs.  */
3380
3381 static void
3382 df_simulate_find_uses (rtx_insn *insn, bitmap uses)
3383 {
3384   df_ref def, use;
3385   struct df_insn_info *insn_info = DF_INSN_INFO_GET (insn);
3386
3387   FOR_EACH_INSN_INFO_DEF (def, insn_info)
3388     if (DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL))
3389       bitmap_set_bit (uses, DF_REF_REGNO (def));
3390   FOR_EACH_INSN_INFO_USE (use, insn_info)
3391     bitmap_set_bit (uses, DF_REF_REGNO (use));
3392 }
3393
3394 /* Find the set of real DEFs, which are not clobbers, for INSN.  */
3395
3396 void
3397 df_simulate_find_noclobber_defs (rtx_insn *insn, bitmap defs)
3398 {
3399   df_ref def;
3400
3401   FOR_EACH_INSN_DEF (def, insn)
3402     if (!(DF_REF_FLAGS (def) & (DF_REF_MUST_CLOBBER | DF_REF_MAY_CLOBBER)))
3403       bitmap_set_bit (defs, DF_REF_REGNO (def));
3404 }
3405
3406
3407 /* Simulate the effects of the defs of INSN on LIVE.  */
3408
3409 void
3410 df_simulate_defs (rtx_insn *insn, bitmap live)
3411 {
3412   df_ref def;
3413
3414   FOR_EACH_INSN_DEF (def, insn)
3415     {
3416       unsigned int dregno = DF_REF_REGNO (def);
3417
3418       /* If the def is to only part of the reg, it does
3419          not kill the other defs that reach here.  */
3420       if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL)))
3421         bitmap_clear_bit (live, dregno);
3422     }
3423 }
3424
3425
3426 /* Simulate the effects of the uses of INSN on LIVE.  */
3427
3428 void
3429 df_simulate_uses (rtx_insn *insn, bitmap live)
3430 {
3431   df_ref use;
3432
3433   if (DEBUG_INSN_P (insn))
3434     return;
3435
3436   FOR_EACH_INSN_USE (use, insn)
3437     /* Add use to set of uses in this BB.  */
3438     bitmap_set_bit (live, DF_REF_REGNO (use));
3439 }
3440
3441
3442 /* Add back the always live regs in BB to LIVE.  */
3443
3444 static inline void
3445 df_simulate_fixup_sets (basic_block bb, bitmap live)
3446 {
3447   /* These regs are considered always live so if they end up dying
3448      because of some def, we need to bring the back again.  */
3449   if (bb_has_eh_pred (bb))
3450     bitmap_ior_into (live, &df->eh_block_artificial_uses);
3451   else
3452     bitmap_ior_into (live, &df->regular_block_artificial_uses);
3453 }
3454
3455
3456 /*----------------------------------------------------------------------------
3457    The following three functions are used only for BACKWARDS scanning:
3458    i.e. they process the defs before the uses.
3459
3460    df_simulate_initialize_backwards should be called first with a
3461    bitvector copyied from the DF_LIVE_OUT or DF_LR_OUT.  Then
3462    df_simulate_one_insn_backwards should be called for each insn in
3463    the block, starting with the last one.  Finally,
3464    df_simulate_finalize_backwards can be called to get a new value
3465    of the sets at the top of the block (this is rarely used).
3466    ----------------------------------------------------------------------------*/
3467
3468 /* Apply the artificial uses and defs at the end of BB in a backwards
3469    direction.  */
3470
3471 void
3472 df_simulate_initialize_backwards (basic_block bb, bitmap live)
3473 {
3474   df_ref def, use;
3475   int bb_index = bb->index;
3476
3477   FOR_EACH_ARTIFICIAL_DEF (def, bb_index)
3478     if ((DF_REF_FLAGS (def) & DF_REF_AT_TOP) == 0)
3479       bitmap_clear_bit (live, DF_REF_REGNO (def));
3480
3481   FOR_EACH_ARTIFICIAL_USE (use, bb_index)
3482     if ((DF_REF_FLAGS (use) & DF_REF_AT_TOP) == 0)
3483       bitmap_set_bit (live, DF_REF_REGNO (use));
3484 }
3485
3486
3487 /* Simulate the backwards effects of INSN on the bitmap LIVE.  */
3488
3489 void
3490 df_simulate_one_insn_backwards (basic_block bb, rtx_insn *insn, bitmap live)
3491 {
3492   if (!NONDEBUG_INSN_P (insn))
3493     return;
3494
3495   df_simulate_defs (insn, live);
3496   df_simulate_uses (insn, live);
3497   df_simulate_fixup_sets (bb, live);
3498 }
3499
3500
3501 /* Apply the artificial uses and defs at the top of BB in a backwards
3502    direction.  */
3503
3504 void
3505 df_simulate_finalize_backwards (basic_block bb, bitmap live)
3506 {
3507   df_ref def;
3508 #ifdef EH_USES
3509   df_ref use;
3510 #endif
3511   int bb_index = bb->index;
3512
3513   FOR_EACH_ARTIFICIAL_DEF (def, bb_index)
3514     if (DF_REF_FLAGS (def) & DF_REF_AT_TOP)
3515       bitmap_clear_bit (live, DF_REF_REGNO (def));
3516
3517 #ifdef EH_USES
3518   FOR_EACH_ARTIFICIAL_USE (use, bb_index)
3519     if (DF_REF_FLAGS (use) & DF_REF_AT_TOP)
3520       bitmap_set_bit (live, DF_REF_REGNO (use));
3521 #endif
3522 }
3523 /*----------------------------------------------------------------------------
3524    The following three functions are used only for FORWARDS scanning:
3525    i.e. they process the defs and the REG_DEAD and REG_UNUSED notes.
3526    Thus it is important to add the DF_NOTES problem to the stack of
3527    problems computed before using these functions.
3528
3529    df_simulate_initialize_forwards should be called first with a
3530    bitvector copyied from the DF_LIVE_IN or DF_LR_IN.  Then
3531    df_simulate_one_insn_forwards should be called for each insn in
3532    the block, starting with the first one.
3533    ----------------------------------------------------------------------------*/
3534
3535 /* Initialize the LIVE bitmap, which should be copied from DF_LIVE_IN or
3536    DF_LR_IN for basic block BB, for forward scanning by marking artificial
3537    defs live.  */
3538
3539 void
3540 df_simulate_initialize_forwards (basic_block bb, bitmap live)
3541 {
3542   df_ref def;
3543   int bb_index = bb->index;
3544
3545   FOR_EACH_ARTIFICIAL_DEF (def, bb_index)
3546     if (DF_REF_FLAGS (def) & DF_REF_AT_TOP)
3547       bitmap_set_bit (live, DF_REF_REGNO (def));
3548 }
3549
3550 /* Simulate the forwards effects of INSN on the bitmap LIVE.  */
3551
3552 void
3553 df_simulate_one_insn_forwards (basic_block bb, rtx_insn *insn, bitmap live)
3554 {
3555   rtx link;
3556   if (! INSN_P (insn))
3557     return;
3558
3559   /* Make sure that DF_NOTE really is an active df problem.  */
3560   gcc_assert (df_note);
3561
3562   /* Note that this is the opposite as how the problem is defined, because
3563      in the LR problem defs _kill_ liveness.  However, they do so backwards,
3564      while here the scan is performed forwards!  So, first assume that the
3565      def is live, and if this is not true REG_UNUSED notes will rectify the
3566      situation.  */
3567   df_simulate_find_noclobber_defs (insn, live);
3568
3569   /* Clear all of the registers that go dead.  */
3570   for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
3571     {
3572       switch (REG_NOTE_KIND (link))
3573         {
3574         case REG_DEAD:
3575         case REG_UNUSED:
3576           {
3577             rtx reg = XEXP (link, 0);
3578             int regno = REGNO (reg);
3579             if (HARD_REGISTER_NUM_P (regno))
3580               bitmap_clear_range (live, regno,
3581                                   hard_regno_nregs[regno][GET_MODE (reg)]);
3582             else
3583               bitmap_clear_bit (live, regno);
3584           }
3585           break;
3586         default:
3587           break;
3588         }
3589     }
3590   df_simulate_fixup_sets (bb, live);
3591 }
3592 \f
3593 /* Used by the next two functions to encode information about the
3594    memory references we found.  */
3595 #define MEMREF_NORMAL 1
3596 #define MEMREF_VOLATILE 2
3597
3598 /* Return an OR of MEMREF_NORMAL or MEMREF_VOLATILE for the MEMs in X.  */
3599
3600 static int
3601 find_memory (rtx insn)
3602 {
3603   int flags = 0;
3604   subrtx_iterator::array_type array;
3605   FOR_EACH_SUBRTX (iter, array, PATTERN (insn), NONCONST)
3606     {
3607       const_rtx x = *iter;
3608       if (GET_CODE (x) == ASM_OPERANDS && MEM_VOLATILE_P (x))
3609         flags |= MEMREF_VOLATILE;
3610       else if (MEM_P (x))
3611         {
3612           if (MEM_VOLATILE_P (x))
3613             flags |= MEMREF_VOLATILE;
3614           else if (!MEM_READONLY_P (x))
3615             flags |= MEMREF_NORMAL;
3616         }
3617     }
3618   return flags;
3619 }
3620
3621 /* A subroutine of can_move_insns_across_p called through note_stores.
3622    DATA points to an integer in which we set either the bit for
3623    MEMREF_NORMAL or the bit for MEMREF_VOLATILE if we find a MEM
3624    of either kind.  */
3625
3626 static void
3627 find_memory_stores (rtx x, const_rtx pat ATTRIBUTE_UNUSED,
3628                     void *data ATTRIBUTE_UNUSED)
3629 {
3630   int *pflags = (int *)data;
3631   if (GET_CODE (x) == SUBREG)
3632     x = XEXP (x, 0);
3633   /* Treat stores to SP as stores to memory, this will prevent problems
3634      when there are references to the stack frame.  */
3635   if (x == stack_pointer_rtx)
3636     *pflags |= MEMREF_VOLATILE;
3637   if (!MEM_P (x))
3638     return;
3639   *pflags |= MEM_VOLATILE_P (x) ? MEMREF_VOLATILE : MEMREF_NORMAL;
3640 }
3641
3642 /* Scan BB backwards, using df_simulate functions to keep track of
3643    lifetimes, up to insn POINT.  The result is stored in LIVE.  */
3644
3645 void
3646 simulate_backwards_to_point (basic_block bb, regset live, rtx point)
3647 {
3648   rtx_insn *insn;
3649   bitmap_copy (live, df_get_live_out (bb));
3650   df_simulate_initialize_backwards (bb, live);
3651
3652   /* Scan and update life information until we reach the point we're
3653      interested in.  */
3654   for (insn = BB_END (bb); insn != point; insn = PREV_INSN (insn))
3655     df_simulate_one_insn_backwards (bb, insn, live);
3656 }
3657
3658 /* Return true if it is safe to move a group of insns, described by
3659    the range FROM to TO, backwards across another group of insns,
3660    described by ACROSS_FROM to ACROSS_TO.  It is assumed that there
3661    are no insns between ACROSS_TO and FROM, but they may be in
3662    different basic blocks; MERGE_BB is the block from which the
3663    insns will be moved.  The caller must pass in a regset MERGE_LIVE
3664    which specifies the registers live after TO.
3665
3666    This function may be called in one of two cases: either we try to
3667    move identical instructions from all successor blocks into their
3668    predecessor, or we try to move from only one successor block.  If
3669    OTHER_BRANCH_LIVE is nonnull, it indicates that we're dealing with
3670    the second case.  It should contain a set of registers live at the
3671    end of ACROSS_TO which must not be clobbered by moving the insns.
3672    In that case, we're also more careful about moving memory references
3673    and trapping insns.
3674
3675    We return false if it is not safe to move the entire group, but it
3676    may still be possible to move a subgroup.  PMOVE_UPTO, if nonnull,
3677    is set to point at the last moveable insn in such a case.  */
3678
3679 bool
3680 can_move_insns_across (rtx_insn *from, rtx_insn *to,
3681                        rtx_insn *across_from, rtx_insn *across_to,
3682                        basic_block merge_bb, regset merge_live,
3683                        regset other_branch_live, rtx_insn **pmove_upto)
3684 {
3685   rtx_insn *insn, *next, *max_to;
3686   bitmap merge_set, merge_use, local_merge_live;
3687   bitmap test_set, test_use;
3688   unsigned i, fail = 0;
3689   bitmap_iterator bi;
3690   int memrefs_in_across = 0;
3691   int mem_sets_in_across = 0;
3692   bool trapping_insns_in_across = false;
3693
3694   if (pmove_upto != NULL)
3695     *pmove_upto = NULL;
3696
3697   /* Find real bounds, ignoring debug insns.  */
3698   while (!NONDEBUG_INSN_P (from) && from != to)
3699     from = NEXT_INSN (from);
3700   while (!NONDEBUG_INSN_P (to) && from != to)
3701     to = PREV_INSN (to);
3702
3703   for (insn = across_to; ; insn = next)
3704     {
3705       if (CALL_P (insn))
3706         {
3707           if (RTL_CONST_OR_PURE_CALL_P (insn))
3708             /* Pure functions can read from memory.  Const functions can
3709                read from arguments that the ABI has forced onto the stack.
3710                Neither sort of read can be volatile.  */
3711             memrefs_in_across |= MEMREF_NORMAL;
3712           else
3713             {
3714               memrefs_in_across |= MEMREF_VOLATILE;
3715               mem_sets_in_across |= MEMREF_VOLATILE;
3716             }
3717         }
3718       if (NONDEBUG_INSN_P (insn))
3719         {
3720           if (volatile_insn_p (PATTERN (insn)))
3721             return false;
3722           memrefs_in_across |= find_memory (insn);
3723           note_stores (PATTERN (insn), find_memory_stores,
3724                        &mem_sets_in_across);
3725           /* This is used just to find sets of the stack pointer.  */
3726           memrefs_in_across |= mem_sets_in_across;
3727           trapping_insns_in_across |= may_trap_p (PATTERN (insn));
3728         }
3729       next = PREV_INSN (insn);
3730       if (insn == across_from)
3731         break;
3732     }
3733
3734   /* Collect:
3735      MERGE_SET = set of registers set in MERGE_BB
3736      MERGE_USE = set of registers used in MERGE_BB and live at its top
3737      MERGE_LIVE = set of registers live at the point inside the MERGE
3738      range that we've reached during scanning
3739      TEST_SET = set of registers set between ACROSS_FROM and ACROSS_END.
3740      TEST_USE = set of registers used between ACROSS_FROM and ACROSS_END,
3741      and live before ACROSS_FROM.  */
3742
3743   merge_set = BITMAP_ALLOC (&reg_obstack);
3744   merge_use = BITMAP_ALLOC (&reg_obstack);
3745   local_merge_live = BITMAP_ALLOC (&reg_obstack);
3746   test_set = BITMAP_ALLOC (&reg_obstack);
3747   test_use = BITMAP_ALLOC (&reg_obstack);
3748
3749   /* Compute the set of registers set and used in the ACROSS range.  */
3750   if (other_branch_live != NULL)
3751     bitmap_copy (test_use, other_branch_live);
3752   df_simulate_initialize_backwards (merge_bb, test_use);
3753   for (insn = across_to; ; insn = next)
3754     {
3755       if (NONDEBUG_INSN_P (insn))
3756         {
3757           df_simulate_find_defs (insn, test_set);
3758           df_simulate_defs (insn, test_use);
3759           df_simulate_uses (insn, test_use);
3760         }
3761       next = PREV_INSN (insn);
3762       if (insn == across_from)
3763         break;
3764     }
3765
3766   /* Compute an upper bound for the amount of insns moved, by finding
3767      the first insn in MERGE that sets a register in TEST_USE, or uses
3768      a register in TEST_SET.  We also check for calls, trapping operations,
3769      and memory references.  */
3770   max_to = NULL;
3771   for (insn = from; ; insn = next)
3772     {
3773       if (CALL_P (insn))
3774         break;
3775       if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_EPILOGUE_BEG)
3776         break;
3777       if (NONDEBUG_INSN_P (insn))
3778         {
3779           if (may_trap_or_fault_p (PATTERN (insn))
3780               && (trapping_insns_in_across
3781                   || other_branch_live != NULL
3782                   || volatile_insn_p (PATTERN (insn))))
3783             break;
3784
3785           /* We cannot move memory stores past each other, or move memory
3786              reads past stores, at least not without tracking them and
3787              calling true_dependence on every pair.
3788
3789              If there is no other branch and no memory references or
3790              sets in the ACROSS range, we can move memory references
3791              freely, even volatile ones.
3792
3793              Otherwise, the rules are as follows: volatile memory
3794              references and stores can't be moved at all, and any type
3795              of memory reference can't be moved if there are volatile
3796              accesses or stores in the ACROSS range.  That leaves
3797              normal reads, which can be moved, as the trapping case is
3798              dealt with elsewhere.  */
3799           if (other_branch_live != NULL || memrefs_in_across != 0)
3800             {
3801               int mem_ref_flags = 0;
3802               int mem_set_flags = 0;
3803               note_stores (PATTERN (insn), find_memory_stores, &mem_set_flags);
3804               mem_ref_flags = find_memory (insn);
3805               /* Catch sets of the stack pointer.  */
3806               mem_ref_flags |= mem_set_flags;
3807
3808               if ((mem_ref_flags | mem_set_flags) & MEMREF_VOLATILE)
3809                 break;
3810               if ((memrefs_in_across & MEMREF_VOLATILE) && mem_ref_flags != 0)
3811                 break;
3812               if (mem_set_flags != 0
3813                   || (mem_sets_in_across != 0 && mem_ref_flags != 0))
3814                 break;
3815             }
3816           df_simulate_find_uses (insn, merge_use);
3817           /* We're only interested in uses which use a value live at
3818              the top, not one previously set in this block.  */
3819           bitmap_and_compl_into (merge_use, merge_set);
3820           df_simulate_find_defs (insn, merge_set);
3821           if (bitmap_intersect_p (merge_set, test_use)
3822               || bitmap_intersect_p (merge_use, test_set))
3823             break;
3824 #ifdef HAVE_cc0
3825           if (!sets_cc0_p (insn))
3826 #endif
3827             max_to = insn;
3828         }
3829       next = NEXT_INSN (insn);
3830       if (insn == to)
3831         break;
3832     }
3833   if (max_to != to)
3834     fail = 1;
3835
3836   if (max_to == NULL_RTX || (fail && pmove_upto == NULL))
3837     goto out;
3838
3839   /* Now, lower this upper bound by also taking into account that
3840      a range of insns moved across ACROSS must not leave a register
3841      live at the end that will be clobbered in ACROSS.  We need to
3842      find a point where TEST_SET & LIVE == 0.
3843
3844      Insns in the MERGE range that set registers which are also set
3845      in the ACROSS range may still be moved as long as we also move
3846      later insns which use the results of the set, and make the
3847      register dead again.  This is verified by the condition stated
3848      above.  We only need to test it for registers that are set in
3849      the moved region.
3850
3851      MERGE_LIVE is provided by the caller and holds live registers after
3852      TO.  */
3853   bitmap_copy (local_merge_live, merge_live);
3854   for (insn = to; insn != max_to; insn = PREV_INSN (insn))
3855     df_simulate_one_insn_backwards (merge_bb, insn, local_merge_live);
3856
3857   /* We're not interested in registers that aren't set in the moved
3858      region at all.  */
3859   bitmap_and_into (local_merge_live, merge_set);
3860   for (;;)
3861     {
3862       if (NONDEBUG_INSN_P (insn))
3863         {
3864           if (!bitmap_intersect_p (test_set, local_merge_live)
3865 #ifdef HAVE_cc0
3866               && !sets_cc0_p (insn)
3867 #endif
3868               )
3869             {
3870               max_to = insn;
3871               break;
3872             }
3873
3874           df_simulate_one_insn_backwards (merge_bb, insn,
3875                                           local_merge_live);
3876         }
3877       if (insn == from)
3878         {
3879           fail = 1;
3880           goto out;
3881         }
3882       insn = PREV_INSN (insn);
3883     }
3884
3885   if (max_to != to)
3886     fail = 1;
3887
3888   if (pmove_upto)
3889     *pmove_upto = max_to;
3890
3891   /* For small register class machines, don't lengthen lifetimes of
3892      hard registers before reload.  */
3893   if (! reload_completed
3894       && targetm.small_register_classes_for_mode_p (VOIDmode))
3895     {
3896       EXECUTE_IF_SET_IN_BITMAP (merge_set, 0, i, bi)
3897         {
3898           if (i < FIRST_PSEUDO_REGISTER
3899               && ! fixed_regs[i]
3900               && ! global_regs[i])
3901             {
3902               fail = 1;
3903               break;
3904             }
3905         }
3906     }
3907
3908  out:
3909   BITMAP_FREE (merge_set);
3910   BITMAP_FREE (merge_use);
3911   BITMAP_FREE (local_merge_live);
3912   BITMAP_FREE (test_set);
3913   BITMAP_FREE (test_use);
3914
3915   return !fail;
3916 }
3917
3918 \f
3919 /*----------------------------------------------------------------------------
3920    MULTIPLE DEFINITIONS
3921
3922    Find the locations in the function reached by multiple definition sites
3923    for a live pseudo.  In and out bitvectors are built for each basic
3924    block.  They are restricted for efficiency to live registers.
3925
3926    The gen and kill sets for the problem are obvious.  Together they
3927    include all defined registers in a basic block; the gen set includes
3928    registers where a partial or conditional or may-clobber definition is
3929    last in the BB, while the kill set includes registers with a complete
3930    definition coming last.  However, the computation of the dataflow
3931    itself is interesting.
3932
3933    The idea behind it comes from SSA form's iterated dominance frontier
3934    criterion for inserting PHI functions.  Just like in that case, we can use
3935    the dominance frontier to find places where multiple definitions meet;
3936    a register X defined in a basic block BB1 has multiple definitions in
3937    basic blocks in BB1's dominance frontier.
3938
3939    So, the in-set of a basic block BB2 is not just the union of the
3940    out-sets of BB2's predecessors, but includes some more bits that come
3941    from the basic blocks of whose dominance frontier BB2 is part (BB1 in
3942    the previous paragraph).  I called this set the init-set of BB2.
3943
3944       (Note: I actually use the kill-set only to build the init-set.
3945       gen bits are anyway propagated from BB1 to BB2 by dataflow).
3946
3947     For example, if you have
3948
3949        BB1 : r10 = 0
3950              r11 = 0
3951              if <...> goto BB2 else goto BB3;
3952
3953        BB2 : r10 = 1
3954              r12 = 1
3955              goto BB3;
3956
3957        BB3 :
3958
3959     you have BB3 in BB2's dominance frontier but not in BB1's, so that the
3960     init-set of BB3 includes r10 and r12, but not r11.  Note that we do
3961     not need to iterate the dominance frontier, because we do not insert
3962     anything like PHI functions there!  Instead, dataflow will take care of
3963     propagating the information to BB3's successors.
3964    ---------------------------------------------------------------------------*/
3965
3966 /* Private data used to verify the solution for this problem.  */
3967 struct df_md_problem_data
3968 {
3969   /* An obstack for the bitmaps we need for this problem.  */
3970   bitmap_obstack md_bitmaps;
3971 };
3972
3973 /* Scratch var used by transfer functions.  This is used to do md analysis
3974    only for live registers.  */
3975 static bitmap_head df_md_scratch;
3976
3977
3978 static void
3979 df_md_free_bb_info (basic_block bb ATTRIBUTE_UNUSED,
3980                     void *vbb_info)
3981 {
3982   struct df_md_bb_info *bb_info = (struct df_md_bb_info *) vbb_info;
3983   if (bb_info)
3984     {
3985       bitmap_clear (&bb_info->kill);
3986       bitmap_clear (&bb_info->gen);
3987       bitmap_clear (&bb_info->init);
3988       bitmap_clear (&bb_info->in);
3989       bitmap_clear (&bb_info->out);
3990     }
3991 }
3992
3993
3994 /* Allocate or reset bitmaps for DF_MD. The solution bits are
3995    not touched unless the block is new.  */
3996
3997 static void
3998 df_md_alloc (bitmap all_blocks)
3999 {
4000   unsigned int bb_index;
4001   bitmap_iterator bi;
4002   struct df_md_problem_data *problem_data;
4003
4004   df_grow_bb_info (df_md);
4005   if (df_md->problem_data)
4006     problem_data = (struct df_md_problem_data *) df_md->problem_data;
4007   else
4008     {
4009       problem_data = XNEW (struct df_md_problem_data);
4010       df_md->problem_data = problem_data;
4011       bitmap_obstack_initialize (&problem_data->md_bitmaps);
4012     }
4013   bitmap_initialize (&df_md_scratch, &problem_data->md_bitmaps);
4014
4015   EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi)
4016     {
4017       struct df_md_bb_info *bb_info = df_md_get_bb_info (bb_index);
4018       /* When bitmaps are already initialized, just clear them.  */
4019       if (bb_info->init.obstack)
4020         {
4021           bitmap_clear (&bb_info->init);
4022           bitmap_clear (&bb_info->gen);
4023           bitmap_clear (&bb_info->kill);
4024           bitmap_clear (&bb_info->in);
4025           bitmap_clear (&bb_info->out);
4026         }
4027       else
4028         {
4029           bitmap_initialize (&bb_info->init, &problem_data->md_bitmaps);
4030           bitmap_initialize (&bb_info->gen, &problem_data->md_bitmaps);
4031           bitmap_initialize (&bb_info->kill, &problem_data->md_bitmaps);
4032           bitmap_initialize (&bb_info->in, &problem_data->md_bitmaps);
4033           bitmap_initialize (&bb_info->out, &problem_data->md_bitmaps);
4034         }
4035     }
4036
4037   df_md->optional_p = true;
4038 }
4039
4040 /* Add the effect of the top artificial defs of BB to the multiple definitions
4041    bitmap LOCAL_MD.  */
4042
4043 void
4044 df_md_simulate_artificial_defs_at_top (basic_block bb, bitmap local_md)
4045 {
4046   int bb_index = bb->index;
4047   df_ref def;
4048   FOR_EACH_ARTIFICIAL_DEF (def, bb_index)
4049     if (DF_REF_FLAGS (def) & DF_REF_AT_TOP)
4050       {
4051         unsigned int dregno = DF_REF_REGNO (def);
4052         if (DF_REF_FLAGS (def)
4053             & (DF_REF_PARTIAL | DF_REF_CONDITIONAL | DF_REF_MAY_CLOBBER))
4054           bitmap_set_bit (local_md, dregno);
4055         else
4056           bitmap_clear_bit (local_md, dregno);
4057       }
4058 }
4059
4060
4061 /* Add the effect of the defs of INSN to the reaching definitions bitmap
4062    LOCAL_MD.  */
4063
4064 void
4065 df_md_simulate_one_insn (basic_block bb ATTRIBUTE_UNUSED, rtx_insn *insn,
4066                          bitmap local_md)
4067 {
4068   df_ref def;
4069
4070   FOR_EACH_INSN_DEF (def, insn)
4071     {
4072       unsigned int dregno = DF_REF_REGNO (def);
4073       if ((!(df->changeable_flags & DF_NO_HARD_REGS))
4074           || (dregno >= FIRST_PSEUDO_REGISTER))
4075         {
4076           if (DF_REF_FLAGS (def)
4077               & (DF_REF_PARTIAL | DF_REF_CONDITIONAL | DF_REF_MAY_CLOBBER))
4078            bitmap_set_bit (local_md, DF_REF_ID (def));
4079          else
4080            bitmap_clear_bit (local_md, DF_REF_ID (def));
4081         }
4082     }
4083 }
4084
4085 static void
4086 df_md_bb_local_compute_process_def (struct df_md_bb_info *bb_info,
4087                                     df_ref def,
4088                                     int top_flag)
4089 {
4090   bitmap_clear (&seen_in_insn);
4091
4092   for (; def; def = DF_REF_NEXT_LOC (def))
4093     {
4094       unsigned int dregno = DF_REF_REGNO (def);
4095       if (((!(df->changeable_flags & DF_NO_HARD_REGS))
4096             || (dregno >= FIRST_PSEUDO_REGISTER))
4097           && top_flag == (DF_REF_FLAGS (def) & DF_REF_AT_TOP))
4098         {
4099           if (!bitmap_bit_p (&seen_in_insn, dregno))
4100             {
4101               if (DF_REF_FLAGS (def)
4102                   & (DF_REF_PARTIAL | DF_REF_CONDITIONAL | DF_REF_MAY_CLOBBER))
4103                 {
4104                   bitmap_set_bit (&bb_info->gen, dregno);
4105                   bitmap_clear_bit (&bb_info->kill, dregno);
4106                 }
4107               else
4108                 {
4109                   /* When we find a clobber and a regular def,
4110                      make sure the regular def wins.  */
4111                   bitmap_set_bit (&seen_in_insn, dregno);
4112                   bitmap_set_bit (&bb_info->kill, dregno);
4113                   bitmap_clear_bit (&bb_info->gen, dregno);
4114                 }
4115             }
4116         }
4117     }
4118 }
4119
4120
4121 /* Compute local multiple def info for basic block BB.  */
4122
4123 static void
4124 df_md_bb_local_compute (unsigned int bb_index)
4125 {
4126   basic_block bb = BASIC_BLOCK_FOR_FN (cfun, bb_index);
4127   struct df_md_bb_info *bb_info = df_md_get_bb_info (bb_index);
4128   rtx_insn *insn;
4129
4130   /* Artificials are only hard regs.  */
4131   if (!(df->changeable_flags & DF_NO_HARD_REGS))
4132     df_md_bb_local_compute_process_def (bb_info,
4133                                         df_get_artificial_defs (bb_index),
4134                                         DF_REF_AT_TOP);
4135
4136   FOR_BB_INSNS (bb, insn)
4137     {
4138       unsigned int uid = INSN_UID (insn);
4139       if (!INSN_P (insn))
4140         continue;
4141
4142       df_md_bb_local_compute_process_def (bb_info, DF_INSN_UID_DEFS (uid), 0);
4143     }
4144
4145   if (!(df->changeable_flags & DF_NO_HARD_REGS))
4146     df_md_bb_local_compute_process_def (bb_info,
4147                                         df_get_artificial_defs (bb_index),
4148                                         0);
4149 }
4150
4151 /* Compute local reaching def info for each basic block within BLOCKS.  */
4152
4153 static void
4154 df_md_local_compute (bitmap all_blocks)
4155 {
4156   unsigned int bb_index, df_bb_index;
4157   bitmap_iterator bi1, bi2;
4158   basic_block bb;
4159   bitmap_head *frontiers;
4160
4161   bitmap_initialize (&seen_in_insn, &bitmap_default_obstack);
4162
4163   EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi1)
4164     {
4165       df_md_bb_local_compute (bb_index);
4166     }
4167
4168   bitmap_clear (&seen_in_insn);
4169
4170   frontiers = XNEWVEC (bitmap_head, last_basic_block_for_fn (cfun));
4171   FOR_ALL_BB_FN (bb, cfun)
4172     bitmap_initialize (&frontiers[bb->index], &bitmap_default_obstack);
4173
4174   compute_dominance_frontiers (frontiers);
4175
4176   /* Add each basic block's kills to the nodes in the frontier of the BB.  */
4177   EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi1)
4178     {
4179       bitmap kill = &df_md_get_bb_info (bb_index)->kill;
4180       EXECUTE_IF_SET_IN_BITMAP (&frontiers[bb_index], 0, df_bb_index, bi2)
4181         {
4182           basic_block bb = BASIC_BLOCK_FOR_FN (cfun, df_bb_index);
4183           if (bitmap_bit_p (all_blocks, df_bb_index))
4184             bitmap_ior_and_into (&df_md_get_bb_info (df_bb_index)->init, kill,
4185                                  df_get_live_in (bb));
4186         }
4187     }
4188
4189   FOR_ALL_BB_FN (bb, cfun)
4190     bitmap_clear (&frontiers[bb->index]);
4191   free (frontiers);
4192 }
4193
4194
4195 /* Reset the global solution for recalculation.  */
4196
4197 static void
4198 df_md_reset (bitmap all_blocks)
4199 {
4200   unsigned int bb_index;
4201   bitmap_iterator bi;
4202
4203   EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi)
4204     {
4205       struct df_md_bb_info *bb_info = df_md_get_bb_info (bb_index);
4206       gcc_assert (bb_info);
4207       bitmap_clear (&bb_info->in);
4208       bitmap_clear (&bb_info->out);
4209     }
4210 }
4211
4212 static bool
4213 df_md_transfer_function (int bb_index)
4214 {
4215   basic_block bb = BASIC_BLOCK_FOR_FN (cfun, bb_index);
4216   struct df_md_bb_info *bb_info = df_md_get_bb_info (bb_index);
4217   bitmap in = &bb_info->in;
4218   bitmap out = &bb_info->out;
4219   bitmap gen = &bb_info->gen;
4220   bitmap kill = &bb_info->kill;
4221
4222   /* We need to use a scratch set here so that the value returned from this
4223      function invocation properly reflects whether the sets changed in a
4224      significant way; i.e. not just because the live set was anded in.  */
4225   bitmap_and (&df_md_scratch, gen, df_get_live_out (bb));
4226
4227   /* Multiple definitions of a register are not relevant if it is not
4228      live.  Thus we trim the result to the places where it is live.  */
4229   bitmap_and_into (in, df_get_live_in (bb));
4230
4231   return bitmap_ior_and_compl (out, &df_md_scratch, in, kill);
4232 }
4233
4234 /* Initialize the solution bit vectors for problem.  */
4235
4236 static void
4237 df_md_init (bitmap all_blocks)
4238 {
4239   unsigned int bb_index;
4240   bitmap_iterator bi;
4241
4242   EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi)
4243     {
4244       struct df_md_bb_info *bb_info = df_md_get_bb_info (bb_index);
4245
4246       bitmap_copy (&bb_info->in, &bb_info->init);
4247       df_md_transfer_function (bb_index);
4248     }
4249 }
4250
4251 static void
4252 df_md_confluence_0 (basic_block bb)
4253 {
4254   struct df_md_bb_info *bb_info = df_md_get_bb_info (bb->index);
4255   bitmap_copy (&bb_info->in, &bb_info->init);
4256 }
4257
4258 /* In of target gets or of out of source.  */
4259
4260 static bool
4261 df_md_confluence_n (edge e)
4262 {
4263   bitmap op1 = &df_md_get_bb_info (e->dest->index)->in;
4264   bitmap op2 = &df_md_get_bb_info (e->src->index)->out;
4265
4266   if (e->flags & EDGE_FAKE)
4267     return false;
4268
4269   if (e->flags & EDGE_EH)
4270     return bitmap_ior_and_compl_into (op1, op2,
4271                                       regs_invalidated_by_call_regset);
4272   else
4273     return bitmap_ior_into (op1, op2);
4274 }
4275
4276 /* Free all storage associated with the problem.  */
4277
4278 static void
4279 df_md_free (void)
4280 {
4281   struct df_md_problem_data *problem_data
4282     = (struct df_md_problem_data *) df_md->problem_data;
4283
4284   bitmap_obstack_release (&problem_data->md_bitmaps);
4285   free (problem_data);
4286   df_md->problem_data = NULL;
4287
4288   df_md->block_info_size = 0;
4289   free (df_md->block_info);
4290   df_md->block_info = NULL;
4291   free (df_md);
4292 }
4293
4294
4295 /* Debugging info at top of bb.  */
4296
4297 static void
4298 df_md_top_dump (basic_block bb, FILE *file)
4299 {
4300   struct df_md_bb_info *bb_info = df_md_get_bb_info (bb->index);
4301   if (!bb_info)
4302     return;
4303
4304   fprintf (file, ";; md  in  \t");
4305   df_print_regset (file, &bb_info->in);
4306   fprintf (file, ";; md  init  \t");
4307   df_print_regset (file, &bb_info->init);
4308   fprintf (file, ";; md  gen \t");
4309   df_print_regset (file, &bb_info->gen);
4310   fprintf (file, ";; md  kill \t");
4311   df_print_regset (file, &bb_info->kill);
4312 }
4313
4314 /* Debugging info at bottom of bb.  */
4315
4316 static void
4317 df_md_bottom_dump (basic_block bb, FILE *file)
4318 {
4319   struct df_md_bb_info *bb_info = df_md_get_bb_info (bb->index);
4320   if (!bb_info)
4321     return;
4322
4323   fprintf (file, ";; md  out \t");
4324   df_print_regset (file, &bb_info->out);
4325 }
4326
4327 static struct df_problem problem_MD =
4328 {
4329   DF_MD,                      /* Problem id.  */
4330   DF_FORWARD,                 /* Direction.  */
4331   df_md_alloc,                /* Allocate the problem specific data.  */
4332   df_md_reset,                /* Reset global information.  */
4333   df_md_free_bb_info,         /* Free basic block info.  */
4334   df_md_local_compute,        /* Local compute function.  */
4335   df_md_init,                 /* Init the solution specific data.  */
4336   df_worklist_dataflow,       /* Worklist solver.  */
4337   df_md_confluence_0,         /* Confluence operator 0.  */
4338   df_md_confluence_n,         /* Confluence operator n.  */
4339   df_md_transfer_function,    /* Transfer function.  */
4340   NULL,                       /* Finalize function.  */
4341   df_md_free,                 /* Free all of the problem information.  */
4342   df_md_free,                 /* Remove this problem from the stack of dataflow problems.  */
4343   NULL,                       /* Debugging.  */
4344   df_md_top_dump,             /* Debugging start block.  */
4345   df_md_bottom_dump,          /* Debugging end block.  */
4346   NULL,                       /* Debugging start insn.  */
4347   NULL,                       /* Debugging end insn.  */
4348   NULL,                       /* Incremental solution verify start.  */
4349   NULL,                       /* Incremental solution verify end.  */
4350   NULL,                       /* Dependent problem.  */
4351   sizeof (struct df_md_bb_info),/* Size of entry of block_info array.  */
4352   TV_DF_MD,                   /* Timing variable.  */
4353   false                       /* Reset blocks on dropping out of blocks_to_analyze.  */
4354 };
4355
4356 /* Create a new MD instance and add it to the existing instance
4357    of DF.  */
4358
4359 void
4360 df_md_add_problem (void)
4361 {
4362   df_add_problem (&problem_MD);
4363 }
4364
4365
4366