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