1 /* Shrink-wrapping related optimizations.
2    Copyright (C) 1987-2022 Free Software Foundation, Inc.
3 
4 This file is part of GCC.
5 
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
9 version.
10 
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 for more details.
15 
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3.  If not see
18 <http://www.gnu.org/licenses/>.  */
19 
20 /* This file handles shrink-wrapping related optimizations.  */
21 
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "backend.h"
26 #include "target.h"
27 #include "rtl.h"
28 #include "tree.h"
29 #include "cfghooks.h"
30 #include "df.h"
31 #include "memmodel.h"
32 #include "tm_p.h"
33 #include "regs.h"
34 #include "insn-config.h"
35 #include "emit-rtl.h"
36 #include "output.h"
37 #include "tree-pass.h"
38 #include "cfgrtl.h"
39 #include "cfgbuild.h"
40 #include "bb-reorder.h"
41 #include "shrink-wrap.h"
42 #include "regcprop.h"
43 #include "rtl-iter.h"
44 #include "valtrack.h"
45 #include "function-abi.h"
46 #include "print-rtl.h"
47 
48 /* Return true if INSN requires the stack frame to be set up.
49    PROLOGUE_USED contains the hard registers used in the function
50    prologue.  SET_UP_BY_PROLOGUE is the set of registers we expect the
51    prologue to set up for the function.  */
52 bool
requires_stack_frame_p(rtx_insn * insn,HARD_REG_SET prologue_used,HARD_REG_SET set_up_by_prologue)53 requires_stack_frame_p (rtx_insn *insn, HARD_REG_SET prologue_used,
54                               HARD_REG_SET set_up_by_prologue)
55 {
56   df_ref def, use;
57   HARD_REG_SET hardregs;
58   unsigned regno;
59 
60   if (CALL_P (insn) && !FAKE_CALL_P (insn))
61     return !SIBLING_CALL_P (insn);
62 
63   /* We need a frame to get the unique CFA expected by the unwinder.  */
64   if (cfun->can_throw_non_call_exceptions && can_throw_internal (insn))
65     return true;
66 
67   CLEAR_HARD_REG_SET (hardregs);
68   FOR_EACH_INSN_DEF (def, insn)
69     {
70       rtx dreg = DF_REF_REG (def);
71 
72       if (!REG_P (dreg))
73           continue;
74 
75       add_to_hard_reg_set (&hardregs, GET_MODE (dreg), REGNO (dreg));
76     }
77   if (hard_reg_set_intersect_p (hardregs, prologue_used))
78     return true;
79   hardregs &= ~crtl->abi->full_reg_clobbers ();
80   for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
81     if (TEST_HARD_REG_BIT (hardregs, regno)
82           && df_regs_ever_live_p (regno))
83       return true;
84 
85   FOR_EACH_INSN_USE (use, insn)
86     {
87       rtx reg = DF_REF_REG (use);
88 
89       if (!REG_P (reg))
90           continue;
91 
92       add_to_hard_reg_set (&hardregs, GET_MODE (reg),
93                                  REGNO (reg));
94     }
95   if (hard_reg_set_intersect_p (hardregs, set_up_by_prologue))
96     return true;
97 
98   return false;
99 }
100 
101 /* See whether there has a single live edge from BB, which dest uses
102    [REGNO, END_REGNO).  Return the live edge if its dest bb has
103    one or two predecessors.  Otherwise return NULL.  */
104 
105 static edge
live_edge_for_reg(basic_block bb,int regno,int end_regno)106 live_edge_for_reg (basic_block bb, int regno, int end_regno)
107 {
108   edge e, live_edge;
109   edge_iterator ei;
110   bitmap live;
111   int i;
112 
113   live_edge = NULL;
114   FOR_EACH_EDGE (e, ei, bb->succs)
115     {
116       live = df_get_live_in (e->dest);
117       for (i = regno; i < end_regno; i++)
118           if (REGNO_REG_SET_P (live, i))
119             {
120               if (live_edge && live_edge != e)
121                 return NULL;
122               live_edge = e;
123             }
124     }
125 
126   /* We can sometimes encounter dead code.  Don't try to move it
127      into the exit block.  */
128   if (!live_edge || live_edge->dest == EXIT_BLOCK_PTR_FOR_FN (cfun))
129     return NULL;
130 
131   /* Reject targets of abnormal edges.  This is needed for correctness
132      on ports like Alpha and MIPS, whose pic_offset_table_rtx can die on
133      exception edges even though it is generally treated as call-saved
134      for the majority of the compilation.  Moving across abnormal edges
135      isn't going to be interesting for shrink-wrap usage anyway.  */
136   if (live_edge->flags & EDGE_ABNORMAL)
137     return NULL;
138 
139   /* When live_edge->dest->preds == 2, we can create a new block on
140      the edge to make it meet the requirement.  */
141   if (EDGE_COUNT (live_edge->dest->preds) > 2)
142     return NULL;
143 
144   return live_edge;
145 }
146 
147 /* Try to move INSN from BB to a successor.  Return true on success.
148    USES and DEFS are the set of registers that are used and defined
149    after INSN in BB.  SPLIT_P indicates whether a live edge from BB
150    is splitted or not.  */
151 
152 static bool
move_insn_for_shrink_wrap(basic_block bb,rtx_insn * insn,const_hard_reg_set uses,const_hard_reg_set defs,bool * split_p,struct dead_debug_local * debug)153 move_insn_for_shrink_wrap (basic_block bb, rtx_insn *insn,
154                                  const_hard_reg_set uses,
155                                  const_hard_reg_set defs,
156                                  bool *split_p,
157                                  struct dead_debug_local *debug)
158 {
159   rtx set, src, dest;
160   bitmap live_out, live_in, bb_uses = NULL, bb_defs = NULL;
161   unsigned int i, dregno, end_dregno;
162   unsigned int sregno = FIRST_PSEUDO_REGISTER;
163   unsigned int end_sregno = FIRST_PSEUDO_REGISTER;
164   basic_block next_block;
165   edge live_edge;
166   rtx_insn *dinsn;
167   df_ref def;
168 
169   /* Look for a simple register assignment.  We don't use single_set here
170      because we can't deal with any CLOBBERs, USEs, or REG_UNUSED secondary
171      destinations.  */
172   if (!INSN_P (insn))
173     return false;
174   set = PATTERN (insn);
175   if (GET_CODE (set) != SET)
176     return false;
177   src = SET_SRC (set);
178   dest = SET_DEST (set);
179 
180   /* For the destination, we want only a register.  Also disallow STACK
181      or FRAME related adjustments.  They are likely part of the prologue,
182      so keep them in the entry block.  */
183   if (!REG_P (dest)
184       || dest == stack_pointer_rtx
185       || dest == frame_pointer_rtx
186       || dest == hard_frame_pointer_rtx)
187     return false;
188 
189   /* For the source, we want one of:
190       (1) A (non-overlapping) register
191       (2) A constant,
192       (3) An expression involving no more than one register.
193 
194      That last point comes from the code following, which was originally
195      written to handle only register move operations, and still only handles
196      a single source register when checking for overlaps.  Happily, the
197      same checks can be applied to expressions like (plus reg const).  */
198 
199   if (CONSTANT_P (src))
200     ;
201   else if (!REG_P (src))
202     {
203       rtx src_inner = NULL_RTX;
204 
205       if (can_throw_internal (insn))
206           return false;
207 
208       subrtx_var_iterator::array_type array;
209       FOR_EACH_SUBRTX_VAR (iter, array, src, ALL)
210           {
211             rtx x = *iter;
212             switch (GET_RTX_CLASS (GET_CODE (x)))
213               {
214               case RTX_CONST_OBJ:
215               case RTX_COMPARE:
216               case RTX_COMM_COMPARE:
217               case RTX_BIN_ARITH:
218               case RTX_COMM_ARITH:
219               case RTX_UNARY:
220               case RTX_TERNARY:
221                 /* Constant or expression.  Continue.  */
222                 break;
223 
224               case RTX_OBJ:
225               case RTX_EXTRA:
226                 switch (GET_CODE (x))
227                     {
228                     case UNSPEC:
229                     case SUBREG:
230                     case STRICT_LOW_PART:
231                     case PC:
232                     case LO_SUM:
233                       /* Ok.  Continue.  */
234                       break;
235 
236                     case REG:
237                       /* Fail if we see a second inner register.  */
238                       if (src_inner != NULL)
239                         return false;
240                       src_inner = x;
241                       break;
242 
243                     default:
244                       return false;
245                     }
246                 break;
247 
248               default:
249                 return false;
250               }
251           }
252 
253       if (src_inner != NULL)
254           src = src_inner;
255     }
256 
257   /* Make sure that the source register isn't defined later in BB.  */
258   if (REG_P (src))
259     {
260       sregno = REGNO (src);
261       end_sregno = END_REGNO (src);
262       if (overlaps_hard_reg_set_p (defs, GET_MODE (src), sregno))
263           return false;
264     }
265 
266   /* Make sure that the destination register isn't referenced later in BB.  */
267   dregno = REGNO (dest);
268   end_dregno = END_REGNO (dest);
269   if (overlaps_hard_reg_set_p (uses, GET_MODE (dest), dregno)
270       || overlaps_hard_reg_set_p (defs, GET_MODE (dest), dregno))
271     return false;
272 
273   /* See whether there is a successor block to which we could move INSN.  */
274   live_edge = live_edge_for_reg (bb, dregno, end_dregno);
275   if (!live_edge)
276     return false;
277 
278   next_block = live_edge->dest;
279   /* Create a new basic block on the edge.  */
280   if (EDGE_COUNT (next_block->preds) == 2)
281     {
282       /* split_edge for a block with only one successor is meaningless.  */
283       if (EDGE_COUNT (bb->succs) == 1)
284           return false;
285 
286       /* If DF_LIVE doesn't exist, i.e. at -O1, just give up.  */
287       if (!df_live)
288           return false;
289 
290       basic_block old_dest = live_edge->dest;
291       next_block = split_edge (live_edge);
292 
293       /* We create a new basic block.  Call df_grow_bb_info to make sure
294            all data structures are allocated.  */
295       df_grow_bb_info (df_live);
296 
297       bitmap_and (df_get_live_in (next_block), df_get_live_out (bb),
298                       df_get_live_in (old_dest));
299       df_set_bb_dirty (next_block);
300 
301       /* We should not split more than once for a function.  */
302       if (*split_p)
303           return false;
304 
305       *split_p = true;
306     }
307 
308   /* At this point we are committed to moving INSN, but let's try to
309      move it as far as we can.  */
310   do
311     {
312       if (MAY_HAVE_DEBUG_BIND_INSNS)
313           {
314             FOR_BB_INSNS_REVERSE (bb, dinsn)
315               if (DEBUG_BIND_INSN_P (dinsn))
316                 {
317                     df_ref use;
318                     FOR_EACH_INSN_USE (use, dinsn)
319                       if (refers_to_regno_p (dregno, end_dregno,
320                                                    DF_REF_REG (use), (rtx *) NULL))
321                         dead_debug_add (debug, use, DF_REF_REGNO (use));
322                 }
323               else if (dinsn == insn)
324                 break;
325           }
326       live_out = df_get_live_out (bb);
327       live_in = df_get_live_in (next_block);
328       bb = next_block;
329 
330       /* Check whether BB uses DEST or clobbers DEST.  We need to add
331            INSN to BB if so.  Either way, DEST is no longer live on entry,
332            except for any part that overlaps SRC (next loop).  */
333       if (!*split_p)
334           {
335             bb_uses = &DF_LR_BB_INFO (bb)->use;
336             bb_defs = &DF_LR_BB_INFO (bb)->def;
337           }
338       if (df_live)
339           {
340             for (i = dregno; i < end_dregno; i++)
341               {
342                 if (*split_p
343                       || REGNO_REG_SET_P (bb_uses, i)
344                       || REGNO_REG_SET_P (bb_defs, i)
345                       || REGNO_REG_SET_P (&DF_LIVE_BB_INFO (bb)->gen, i))
346                     next_block = NULL;
347                 CLEAR_REGNO_REG_SET (live_out, i);
348                 CLEAR_REGNO_REG_SET (live_in, i);
349               }
350 
351             /* Check whether BB clobbers SRC.  We need to add INSN to BB if so.
352                Either way, SRC is now live on entry.  */
353             for (i = sregno; i < end_sregno; i++)
354               {
355                 if (*split_p
356                       || REGNO_REG_SET_P (bb_defs, i)
357                       || REGNO_REG_SET_P (&DF_LIVE_BB_INFO (bb)->gen, i))
358                     next_block = NULL;
359                 SET_REGNO_REG_SET (live_out, i);
360                 SET_REGNO_REG_SET (live_in, i);
361               }
362           }
363       else
364           {
365             /* DF_LR_BB_INFO (bb)->def does not comprise the DF_REF_PARTIAL and
366                DF_REF_CONDITIONAL defs.  So if DF_LIVE doesn't exist, i.e.
367                at -O1, just give up searching NEXT_BLOCK.  */
368             next_block = NULL;
369             for (i = dregno; i < end_dregno; i++)
370               {
371                 CLEAR_REGNO_REG_SET (live_out, i);
372                 CLEAR_REGNO_REG_SET (live_in, i);
373               }
374 
375             for (i = sregno; i < end_sregno; i++)
376               {
377                 SET_REGNO_REG_SET (live_out, i);
378                 SET_REGNO_REG_SET (live_in, i);
379               }
380           }
381 
382       /* If we don't need to add the move to BB, look for a single
383            successor block.  */
384       if (next_block)
385           {
386             live_edge = live_edge_for_reg (next_block, dregno, end_dregno);
387             if (!live_edge || EDGE_COUNT (live_edge->dest->preds) > 1)
388               break;
389             next_block = live_edge->dest;
390           }
391     }
392   while (next_block);
393 
394   /* For the new created basic block, there is no dataflow info at all.
395      So skip the following dataflow update and check.  */
396   if (!(*split_p))
397     {
398       /* BB now defines DEST.  It only uses the parts of DEST that overlap SRC
399            (next loop).  */
400       for (i = dregno; i < end_dregno; i++)
401           {
402             CLEAR_REGNO_REG_SET (bb_uses, i);
403             SET_REGNO_REG_SET (bb_defs, i);
404           }
405 
406       /* BB now uses SRC.  */
407       for (i = sregno; i < end_sregno; i++)
408           SET_REGNO_REG_SET (bb_uses, i);
409     }
410 
411   /* Insert debug temps for dead REGs used in subsequent debug insns.  */
412   if (debug->used && !bitmap_empty_p (debug->used))
413     FOR_EACH_INSN_DEF (def, insn)
414       dead_debug_insert_temp (debug, DF_REF_REGNO (def), insn,
415                                     DEBUG_TEMP_BEFORE_WITH_VALUE);
416 
417   rtx_insn *insn_copy = emit_insn_after (PATTERN (insn), bb_note (bb));
418   /* Update the LABEL_NUSES count on any referenced labels. The ideal
419      solution here would be to actually move the instruction instead
420      of copying/deleting it as this loses some notations on the
421      insn.  */
422   mark_jump_label (PATTERN (insn), insn_copy, 0);
423   delete_insn (insn);
424   return true;
425 }
426 
427 /* Look for register copies in the first block of the function, and move
428    them down into successor blocks if the register is used only on one
429    path.  This exposes more opportunities for shrink-wrapping.  These
430    kinds of sets often occur when incoming argument registers are moved
431    to call-saved registers because their values are live across one or
432    more calls during the function.  */
433 
434 static void
prepare_shrink_wrap(basic_block entry_block)435 prepare_shrink_wrap (basic_block entry_block)
436 {
437   rtx_insn *insn, *curr;
438   rtx x;
439   HARD_REG_SET uses, defs;
440   df_ref def, use;
441   bool split_p = false;
442   unsigned int i;
443   struct dead_debug_local debug;
444 
445   if (JUMP_P (BB_END (entry_block)))
446     {
447       /* To have more shrink-wrapping opportunities, prepare_shrink_wrap tries
448            to sink the copies from parameter to callee saved register out of
449            entry block.  copyprop_hardreg_forward_bb_without_debug_insn is called
450            to release some dependences.  */
451       copyprop_hardreg_forward_bb_without_debug_insn (entry_block);
452     }
453 
454   dead_debug_local_init (&debug, NULL, NULL);
455   CLEAR_HARD_REG_SET (uses);
456   CLEAR_HARD_REG_SET (defs);
457 
458   FOR_BB_INSNS_REVERSE_SAFE (entry_block, insn, curr)
459     if (NONDEBUG_INSN_P (insn)
460           && !move_insn_for_shrink_wrap (entry_block, insn, uses, defs,
461                                                &split_p, &debug))
462       {
463           /* Add all defined registers to DEFs.  */
464           FOR_EACH_INSN_DEF (def, insn)
465             {
466               x = DF_REF_REG (def);
467               if (REG_P (x) && HARD_REGISTER_P (x))
468                 for (i = REGNO (x); i < END_REGNO (x); i++)
469                     SET_HARD_REG_BIT (defs, i);
470             }
471 
472           /* Add all used registers to USESs.  */
473           FOR_EACH_INSN_USE (use, insn)
474             {
475               x = DF_REF_REG (use);
476               if (REG_P (x) && HARD_REGISTER_P (x))
477                 for (i = REGNO (x); i < END_REGNO (x); i++)
478                     SET_HARD_REG_BIT (uses, i);
479             }
480       }
481 
482   dead_debug_local_finish (&debug, NULL);
483 }
484 
485 /* Return whether basic block PRO can get the prologue.  It cannot if it
486    has incoming complex edges that need a prologue inserted (we make a new
487    block for the prologue, so those edges would need to be redirected, which
488    does not work).  It also cannot if there exist registers live on entry
489    to PRO that are clobbered by the prologue.  */
490 
491 static bool
can_get_prologue(basic_block pro,HARD_REG_SET prologue_clobbered)492 can_get_prologue (basic_block pro, HARD_REG_SET prologue_clobbered)
493 {
494   edge e;
495   edge_iterator ei;
496   FOR_EACH_EDGE (e, ei, pro->preds)
497     if (e->flags & EDGE_COMPLEX
498           && !dominated_by_p (CDI_DOMINATORS, e->src, pro))
499       return false;
500 
501   HARD_REG_SET live;
502   REG_SET_TO_HARD_REG_SET (live, df_get_live_in (pro));
503   if (hard_reg_set_intersect_p (live, prologue_clobbered))
504     return false;
505 
506   return true;
507 }
508 
509 /* Return whether we can duplicate basic block BB for shrink wrapping.  We
510    cannot if the block cannot be duplicated at all, or if any of its incoming
511    edges are complex and come from a block that does not require a prologue
512    (we cannot redirect such edges), or if the block is too big to copy.
513    PRO is the basic block before which we would put the prologue, MAX_SIZE is
514    the maximum size block we allow to be copied.  */
515 
516 static bool
can_dup_for_shrink_wrapping(basic_block bb,basic_block pro,unsigned max_size)517 can_dup_for_shrink_wrapping (basic_block bb, basic_block pro, unsigned max_size)
518 {
519   if (!can_duplicate_block_p (bb))
520     return false;
521 
522   edge e;
523   edge_iterator ei;
524   FOR_EACH_EDGE (e, ei, bb->preds)
525     if (e->flags & (EDGE_COMPLEX | EDGE_CROSSING)
526           && !dominated_by_p (CDI_DOMINATORS, e->src, pro))
527       return false;
528 
529   unsigned size = 0;
530 
531   rtx_insn *insn;
532   FOR_BB_INSNS (bb, insn)
533     if (NONDEBUG_INSN_P (insn))
534       {
535           size += get_attr_min_length (insn);
536           if (size > max_size)
537             return false;
538       }
539 
540   return true;
541 }
542 
543 /* Do whatever needs to be done for exits that run without prologue.
544    Sibcalls need nothing done.  Normal exits get a simple_return inserted.  */
545 
546 static void
handle_simple_exit(edge e)547 handle_simple_exit (edge e)
548 {
549 
550   if (e->flags & EDGE_SIBCALL)
551     {
552       /* Tell function.cc to take no further action on this edge.  */
553       e->flags |= EDGE_IGNORE;
554 
555       e->flags &= ~EDGE_FALLTHRU;
556       emit_barrier_after_bb (e->src);
557       return;
558     }
559 
560   /* If the basic block the edge comes from has multiple successors,
561      split the edge.  */
562   if (EDGE_COUNT (e->src->succs) > 1)
563     {
564       basic_block old_bb = e->src;
565       rtx_insn *end = BB_END (old_bb);
566       rtx_note *note = emit_note_after (NOTE_INSN_DELETED, end);
567       basic_block new_bb = create_basic_block (note, note, old_bb);
568       BB_COPY_PARTITION (new_bb, old_bb);
569       BB_END (old_bb) = end;
570 
571       redirect_edge_succ (e, new_bb);
572       new_bb->count = e->count ();
573       e->flags |= EDGE_FALLTHRU;
574 
575       e = make_single_succ_edge (new_bb, EXIT_BLOCK_PTR_FOR_FN (cfun), 0);
576     }
577 
578   e->flags &= ~EDGE_FALLTHRU;
579   rtx_jump_insn *ret = emit_jump_insn_after (targetm.gen_simple_return (),
580                                                        BB_END (e->src));
581   JUMP_LABEL (ret) = simple_return_rtx;
582   emit_barrier_after_bb (e->src);
583 
584   if (dump_file)
585     fprintf (dump_file, "Made simple_return with UID %d in bb %d\n",
586                INSN_UID (ret), e->src->index);
587 }
588 
589 /* Try to perform a kind of shrink-wrapping, making sure the
590    prologue/epilogue is emitted only around those parts of the
591    function that require it.
592 
593    There will be exactly one prologue, and it will be executed either
594    zero or one time, on any path.  Depending on where the prologue is
595    placed, some of the basic blocks can be reached via both paths with
596    and without a prologue.  Such blocks will be duplicated here, and the
597    edges changed to match.
598 
599    Paths that go to the exit without going through the prologue will use
600    a simple_return instead of the epilogue.  We maximize the number of
601    those, making sure to only duplicate blocks that can be duplicated.
602    If the prologue can then still be placed in multiple locations, we
603    place it as early as possible.
604 
605    An example, where we duplicate blocks with control flow (legend:
606    _B_egin, _R_eturn and _S_imple_return; edges without arrowhead should
607    be taken to point down or to the right, to simplify the diagram; here,
608    block 3 needs a prologue, the rest does not):
609 
610 
611        B                 B
612        |                 |
613        2                 2
614        |\                |\
615        | 3    becomes    | 3
616        |/                |  \
617        4                 7   4
618        |\                |\  |\
619        | 5               | 8 | 5
620        |/                |/  |/
621        6                 9   6
622        |                 |   |
623        R                 S   R
624 
625 
626    (bb 4 is duplicated to 7, and so on; the prologue is inserted on the
627    edge 2->3).
628 
629    Another example, where part of a loop is duplicated (again, bb 3 is
630    the only block that needs a prologue):
631 
632 
633        B   3<--              B       ->3<--
634        |   |   |             |      |  |   |
635        |   v   |   becomes   |      |  v   |
636        2---4---              2---5--   4---
637            |                     |     |
638            R                     S     R
639 
640 
641    (bb 4 is duplicated to 5; the prologue is inserted on the edge 5->3).
642 
643    ENTRY_EDGE is the edge where the prologue will be placed, possibly
644    changed by this function.  PROLOGUE_SEQ is the prologue we will insert.  */
645 
646 void
try_shrink_wrapping(edge * entry_edge,rtx_insn * prologue_seq)647 try_shrink_wrapping (edge *entry_edge, rtx_insn *prologue_seq)
648 {
649   /* If we cannot shrink-wrap, are told not to shrink-wrap, or it makes
650      no sense to shrink-wrap: then do not shrink-wrap!  */
651 
652   if (!SHRINK_WRAPPING_ENABLED)
653     return;
654 
655   if (crtl->profile && !targetm.profile_before_prologue ())
656     return;
657 
658   if (crtl->calls_eh_return)
659     return;
660 
661   bool empty_prologue = true;
662   for (rtx_insn *insn = prologue_seq; insn; insn = NEXT_INSN (insn))
663     if (!(NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_PROLOGUE_END))
664       {
665           empty_prologue = false;
666           break;
667       }
668   if (empty_prologue)
669     return;
670 
671   /* Move some code down to expose more shrink-wrapping opportunities.  */
672 
673   basic_block entry = (*entry_edge)->dest;
674   prepare_shrink_wrap (entry);
675 
676   if (dump_file)
677     fprintf (dump_file, "Attempting shrink-wrapping optimization.\n");
678 
679   /* Compute the registers set and used in the prologue.  */
680 
681   HARD_REG_SET prologue_clobbered, prologue_used;
682   CLEAR_HARD_REG_SET (prologue_clobbered);
683   CLEAR_HARD_REG_SET (prologue_used);
684   for (rtx_insn *insn = prologue_seq; insn; insn = NEXT_INSN (insn))
685     if (NONDEBUG_INSN_P (insn))
686       {
687           HARD_REG_SET this_used;
688           CLEAR_HARD_REG_SET (this_used);
689           note_uses (&PATTERN (insn), record_hard_reg_uses, &this_used);
690           this_used &= ~prologue_clobbered;
691           prologue_used |= this_used;
692           note_stores (insn, record_hard_reg_sets, &prologue_clobbered);
693       }
694   CLEAR_HARD_REG_BIT (prologue_clobbered, STACK_POINTER_REGNUM);
695   if (frame_pointer_needed)
696     CLEAR_HARD_REG_BIT (prologue_clobbered, HARD_FRAME_POINTER_REGNUM);
697 
698   /* Find out what registers are set up by the prologue; any use of these
699      cannot happen before the prologue.  */
700 
701   struct hard_reg_set_container set_up_by_prologue;
702   CLEAR_HARD_REG_SET (set_up_by_prologue.set);
703   add_to_hard_reg_set (&set_up_by_prologue.set, Pmode, STACK_POINTER_REGNUM);
704   add_to_hard_reg_set (&set_up_by_prologue.set, Pmode, ARG_POINTER_REGNUM);
705   if (frame_pointer_needed)
706     add_to_hard_reg_set (&set_up_by_prologue.set, Pmode,
707                                HARD_FRAME_POINTER_REGNUM);
708   if (pic_offset_table_rtx
709       && (unsigned) PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM)
710     add_to_hard_reg_set (&set_up_by_prologue.set, Pmode,
711                                PIC_OFFSET_TABLE_REGNUM);
712   if (crtl->drap_reg)
713     add_to_hard_reg_set (&set_up_by_prologue.set,
714                                GET_MODE (crtl->drap_reg),
715                                REGNO (crtl->drap_reg));
716   if (targetm.set_up_by_prologue)
717     targetm.set_up_by_prologue (&set_up_by_prologue);
718 
719   /* We will insert the prologue before the basic block PRO.  PRO should
720      dominate all basic blocks that need the prologue to be executed
721      before them.  First, make PRO the "tightest wrap" possible.  */
722 
723   calculate_dominance_info (CDI_DOMINATORS);
724 
725   basic_block pro = 0;
726 
727   basic_block bb;
728   edge e;
729   edge_iterator ei;
730   FOR_EACH_BB_FN (bb, cfun)
731     {
732       rtx_insn *insn;
733       FOR_BB_INSNS (bb, insn)
734           if (NONDEBUG_INSN_P (insn)
735               && requires_stack_frame_p (insn, prologue_used,
736                                                set_up_by_prologue.set))
737             {
738               if (dump_file)
739                 {
740                     fprintf (dump_file, "Block %d needs prologue due to insn %d:\n",
741                                bb->index, INSN_UID (insn));
742                     print_rtl_single (dump_file, insn);
743                 }
744               pro = nearest_common_dominator (CDI_DOMINATORS, pro, bb);
745               break;
746             }
747     }
748 
749   /* If nothing needs a prologue, just put it at the start.  This really
750      shouldn't happen, but we cannot fix it here.  */
751 
752   if (pro == 0)
753     {
754       if (dump_file)
755           fprintf(dump_file, "Nothing needs a prologue, but it isn't empty; "
756                                  "putting it at the start.\n");
757       pro = entry;
758     }
759 
760   if (dump_file)
761     fprintf (dump_file, "After wrapping required blocks, PRO is now %d\n",
762                pro->index);
763 
764   /* Now see if we can put the prologue at the start of PRO.  Putting it
765      there might require duplicating a block that cannot be duplicated,
766      or in some cases we cannot insert the prologue there at all.  If PRO
767      wont't do, try again with the immediate dominator of PRO, and so on.
768 
769      The blocks that need duplicating are those reachable from PRO but
770      not dominated by it.  We keep in BB_WITH a bitmap of the blocks
771      reachable from PRO that we already found, and in VEC a stack of
772      those we still need to consider (to find successors).  */
773 
774   auto_bitmap bb_with;
775   bitmap_set_bit (bb_with, pro->index);
776 
777   vec<basic_block> vec;
778   vec.create (n_basic_blocks_for_fn (cfun));
779   vec.quick_push (pro);
780 
781   unsigned max_grow_size = get_uncond_jump_length ();
782   max_grow_size *= param_max_grow_copy_bb_insns;
783 
784   basic_block checked_pro = NULL;
785 
786   while (pro != entry)
787     {
788       if (pro != checked_pro)
789           {
790             while (pro != entry && !can_get_prologue (pro, prologue_clobbered))
791               {
792                 pro = get_immediate_dominator (CDI_DOMINATORS, pro);
793 
794                 if (bitmap_set_bit (bb_with, pro->index))
795                     vec.quick_push (pro);
796               }
797             checked_pro = pro;
798           }
799 
800       if (vec.is_empty ())
801           break;
802 
803       basic_block bb = vec.pop ();
804       if (!can_dup_for_shrink_wrapping (bb, pro, max_grow_size))
805           while (!dominated_by_p (CDI_DOMINATORS, bb, pro))
806             {
807               gcc_assert (pro != entry);
808 
809               pro = get_immediate_dominator (CDI_DOMINATORS, pro);
810 
811               if (bitmap_set_bit (bb_with, pro->index))
812                 vec.quick_push (pro);
813             }
814 
815       FOR_EACH_EDGE (e, ei, bb->succs)
816           if (e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun)
817               && bitmap_set_bit (bb_with, e->dest->index))
818             vec.quick_push (e->dest);
819     }
820 
821   if (dump_file)
822     fprintf (dump_file, "Avoiding non-duplicatable blocks, PRO is now %d\n",
823                pro->index);
824 
825   /* If we can move PRO back without having to duplicate more blocks, do so.
826      We do this because putting the prologue earlier is better for scheduling.
827 
828      We can move back to a block PRE if every path from PRE will eventually
829      need a prologue, that is, PRO is a post-dominator of PRE.  PRE needs
830      to dominate every block reachable from itself.  We keep in BB_TMP a
831      bitmap of the blocks reachable from PRE that we already found, and in
832      VEC a stack of those we still need to consider.
833 
834      Any block reachable from PRE is also reachable from all predecessors
835      of PRE, so if we find we need to move PRE back further we can leave
836      everything not considered so far on the stack.  Any block dominated
837      by PRE is also dominated by all other dominators of PRE, so anything
838      found good for some PRE does not need to be reconsidered later.
839 
840      We don't need to update BB_WITH because none of the new blocks found
841      can jump to a block that does not need the prologue.  */
842 
843   if (pro != entry)
844     {
845       calculate_dominance_info (CDI_POST_DOMINATORS);
846 
847       auto_bitmap bb_tmp;
848       bitmap_copy (bb_tmp, bb_with);
849       basic_block last_ok = pro;
850       vec.truncate (0);
851 
852       while (pro != entry)
853           {
854             basic_block pre = get_immediate_dominator (CDI_DOMINATORS, pro);
855             if (!dominated_by_p (CDI_POST_DOMINATORS, pre, pro))
856               break;
857 
858             if (bitmap_set_bit (bb_tmp, pre->index))
859               vec.quick_push (pre);
860 
861             bool ok = true;
862             while (!vec.is_empty ())
863               {
864                 if (!dominated_by_p (CDI_DOMINATORS, vec.last (), pre))
865                     {
866                       ok = false;
867                       break;
868                     }
869 
870                 basic_block bb = vec.pop ();
871                 FOR_EACH_EDGE (e, ei, bb->succs)
872                     if (bitmap_set_bit (bb_tmp, e->dest->index))
873                       vec.quick_push (e->dest);
874               }
875 
876             if (ok && can_get_prologue (pre, prologue_clobbered))
877               last_ok = pre;
878 
879             pro = pre;
880           }
881 
882       pro = last_ok;
883 
884       free_dominance_info (CDI_POST_DOMINATORS);
885     }
886 
887   vec.release ();
888 
889   if (dump_file)
890     fprintf (dump_file, "Bumping back to anticipatable blocks, PRO is now %d\n",
891                pro->index);
892 
893   if (pro == entry)
894     {
895       free_dominance_info (CDI_DOMINATORS);
896       return;
897     }
898 
899   /* Compute what fraction of the frequency and count of the blocks that run
900      both with and without prologue are for running with prologue.  This gives
901      the correct answer for reducible flow graphs; for irreducible flow graphs
902      our profile is messed up beyond repair anyway.  */
903 
904   profile_count num = profile_count::zero ();
905   profile_count den = profile_count::zero ();
906 
907   FOR_EACH_EDGE (e, ei, pro->preds)
908     if (!dominated_by_p (CDI_DOMINATORS, e->src, pro))
909       {
910           if (e->count ().initialized_p ())
911             num += e->count ();
912           if (e->src->count.initialized_p ())
913             den += e->src->count;
914       }
915 
916   /* All is okay, so do it.  */
917 
918   crtl->shrink_wrapped = true;
919   if (dump_file)
920     fprintf (dump_file, "Performing shrink-wrapping.\n");
921 
922   /* Copy the blocks that can run both with and without prologue.  The
923      originals run with prologue, the copies without.  Store a pointer to
924      the copy in the ->aux field of the original.  */
925 
926   FOR_EACH_BB_FN (bb, cfun)
927     if (bitmap_bit_p (bb_with, bb->index)
928           && !dominated_by_p (CDI_DOMINATORS, bb, pro))
929       {
930           basic_block dup = duplicate_block (bb, 0, 0);
931 
932           bb->aux = dup;
933 
934           if (JUMP_P (BB_END (dup)) && !any_condjump_p (BB_END (dup)))
935             emit_barrier_after_bb (dup);
936 
937           if (EDGE_COUNT (dup->succs) == 0)
938             emit_barrier_after_bb (dup);
939 
940           if (dump_file)
941             fprintf (dump_file, "Duplicated %d to %d\n", bb->index, dup->index);
942 
943           if (num == profile_count::zero () || den.nonzero_p ())
944             bb->count = bb->count.apply_scale (num, den);
945           dup->count -= bb->count;
946       }
947 
948   /* Now change the edges to point to the copies, where appropriate.  */
949 
950   FOR_EACH_BB_FN (bb, cfun)
951     if (!dominated_by_p (CDI_DOMINATORS, bb, pro))
952       {
953           basic_block src = bb;
954           if (bitmap_bit_p (bb_with, bb->index))
955             src = (basic_block) bb->aux;
956 
957           FOR_EACH_EDGE (e, ei, src->succs)
958             {
959               if (e->dest == EXIT_BLOCK_PTR_FOR_FN (cfun))
960                 continue;
961 
962               if (bitmap_bit_p (bb_with, e->dest->index)
963                     && !dominated_by_p (CDI_DOMINATORS, e->dest, pro))
964                 {
965                     if (dump_file)
966                       fprintf (dump_file, "Redirecting edge %d->%d to %d\n",
967                                  e->src->index, e->dest->index,
968                                  ((basic_block) e->dest->aux)->index);
969                     redirect_edge_and_branch_force (e, (basic_block) e->dest->aux);
970                 }
971               else if (e->flags & EDGE_FALLTHRU
972                          && bitmap_bit_p (bb_with, bb->index))
973                 force_nonfallthru (e);
974             }
975       }
976 
977   /* Also redirect the function entry edge if necessary.  */
978 
979   FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR_FOR_FN (cfun)->succs)
980     if (bitmap_bit_p (bb_with, e->dest->index)
981           && !dominated_by_p (CDI_DOMINATORS, e->dest, pro))
982       {
983           basic_block split_bb = split_edge (e);
984           e = single_succ_edge (split_bb);
985           redirect_edge_and_branch_force (e, (basic_block) e->dest->aux);
986       }
987 
988   /* Make a simple_return for those exits that run without prologue.  */
989 
990   FOR_EACH_BB_REVERSE_FN (bb, cfun)
991     if (!bitmap_bit_p (bb_with, bb->index))
992       FOR_EACH_EDGE (e, ei, bb->succs)
993           if (e->dest == EXIT_BLOCK_PTR_FOR_FN (cfun))
994             handle_simple_exit (e);
995 
996   /* Finally, we want a single edge to put the prologue on.  Make a new
997      block before the PRO block; the edge beteen them is the edge we want.
998      Then redirect those edges into PRO that come from blocks without the
999      prologue, to point to the new block instead.  The new prologue block
1000      is put at the end of the insn chain.  */
1001 
1002   basic_block new_bb = create_empty_bb (EXIT_BLOCK_PTR_FOR_FN (cfun)->prev_bb);
1003   BB_COPY_PARTITION (new_bb, pro);
1004   new_bb->count = profile_count::zero ();
1005   if (dump_file)
1006     fprintf (dump_file, "Made prologue block %d\n", new_bb->index);
1007 
1008   for (ei = ei_start (pro->preds); (e = ei_safe_edge (ei)); )
1009     {
1010       if (bitmap_bit_p (bb_with, e->src->index)
1011             || dominated_by_p (CDI_DOMINATORS, e->src, pro))
1012           {
1013             ei_next (&ei);
1014             continue;
1015           }
1016 
1017       new_bb->count += e->count ();
1018 
1019       redirect_edge_and_branch_force (e, new_bb);
1020       if (dump_file)
1021           fprintf (dump_file, "Redirected edge from %d\n", e->src->index);
1022     }
1023 
1024   *entry_edge = make_single_succ_edge (new_bb, pro, EDGE_FALLTHRU);
1025   force_nonfallthru (*entry_edge);
1026 
1027   free_dominance_info (CDI_DOMINATORS);
1028 }
1029 
1030 /* Separate shrink-wrapping
1031 
1032    Instead of putting all of the prologue and epilogue in one spot, we
1033    can put parts of it in places where those components are executed less
1034    frequently.  The following code does this, for prologue and epilogue
1035    components that can be put in more than one location, and where those
1036    components can be executed more than once (the epilogue component will
1037    always be executed before the prologue component is executed a second
1038    time).
1039 
1040    What exactly is a component is target-dependent.  The more usual
1041    components are simple saves/restores to/from the frame of callee-saved
1042    registers.  This code treats components abstractly (as an sbitmap),
1043    letting the target handle all details.
1044 
1045    Prologue components are placed in such a way that for every component
1046    the prologue is executed as infrequently as possible.  We do this by
1047    walking the dominator tree, comparing the cost of placing a prologue
1048    component before a block to the sum of costs determined for all subtrees
1049    of that block.
1050 
1051    From this placement, we then determine for each component all blocks
1052    where at least one of this block's dominators (including itself) will
1053    get a prologue inserted.  That then is how the components are placed.
1054    We could place the epilogue components a bit smarter (we can save a
1055    bit of code size sometimes); this is a possible future improvement.
1056 
1057    Prologues and epilogues are preferably placed into a block, either at
1058    the beginning or end of it, if it is needed for all predecessor resp.
1059    successor edges; or placed on the edge otherwise.
1060 
1061    If the placement of any prologue/epilogue leads to a situation we cannot
1062    handle (for example, an abnormal edge would need to be split, or some
1063    targets want to use some specific registers that may not be available
1064    where we want to put them), separate shrink-wrapping for the components
1065    in that prologue/epilogue is aborted.  */
1066 
1067 
1068 /* Print the sbitmap COMPONENTS to the DUMP_FILE if not empty, with the
1069    label LABEL.  */
1070 static void
dump_components(const char * label,sbitmap components)1071 dump_components (const char *label, sbitmap components)
1072 {
1073   if (bitmap_empty_p (components))
1074     return;
1075 
1076   fprintf (dump_file, " [%s", label);
1077 
1078   for (unsigned int j = 0; j < components->n_bits; j++)
1079     if (bitmap_bit_p (components, j))
1080       fprintf (dump_file, " %u", j);
1081 
1082   fprintf (dump_file, "]");
1083 }
1084 
1085 /* The data we collect for each bb.  */
1086 struct sw {
1087   /* What components does this BB need?  */
1088   sbitmap needs_components;
1089 
1090   /* What components does this BB have?  This is the main decision this
1091      pass makes.  */
1092   sbitmap has_components;
1093 
1094   /* The components for which we placed code at the start of the BB (instead
1095      of on all incoming edges).  */
1096   sbitmap head_components;
1097 
1098   /* The components for which we placed code at the end of the BB (instead
1099      of on all outgoing edges).  */
1100   sbitmap tail_components;
1101 
1102   /* The frequency of executing the prologue for this BB, if a prologue is
1103      placed on this BB.  This is a pessimistic estimate (no prologue is
1104      needed for edges from blocks that have the component under consideration
1105      active already).  */
1106   gcov_type own_cost;
1107 
1108   /* The frequency of executing the prologue for this BB and all BBs
1109      dominated by it.  */
1110   gcov_type total_cost;
1111 };
1112 
1113 /* A helper function for accessing the pass-specific info.  */
1114 static inline struct sw *
SW(basic_block bb)1115 SW (basic_block bb)
1116 {
1117   gcc_assert (bb->aux);
1118   return (struct sw *) bb->aux;
1119 }
1120 
1121 /* Create the pass-specific data structures for separately shrink-wrapping
1122    with components COMPONENTS.  */
1123 static void
init_separate_shrink_wrap(sbitmap components)1124 init_separate_shrink_wrap (sbitmap components)
1125 {
1126   basic_block bb;
1127   FOR_ALL_BB_FN (bb, cfun)
1128     {
1129       bb->aux = xcalloc (1, sizeof (struct sw));
1130 
1131       SW (bb)->needs_components = targetm.shrink_wrap.components_for_bb (bb);
1132 
1133       /* Mark all basic blocks without successor as needing all components.
1134            This avoids problems in at least cfgcleanup, sel-sched, and
1135            regrename (largely to do with all paths to such a block still
1136            needing the same dwarf CFI info).  */
1137       if (EDGE_COUNT (bb->succs) == 0)
1138           bitmap_copy (SW (bb)->needs_components, components);
1139 
1140       if (dump_file)
1141           {
1142             fprintf (dump_file, "bb %d components:", bb->index);
1143             dump_components ("has", SW (bb)->needs_components);
1144             fprintf (dump_file, "\n");
1145           }
1146 
1147       SW (bb)->has_components = sbitmap_alloc (SBITMAP_SIZE (components));
1148       SW (bb)->head_components = sbitmap_alloc (SBITMAP_SIZE (components));
1149       SW (bb)->tail_components = sbitmap_alloc (SBITMAP_SIZE (components));
1150       bitmap_clear (SW (bb)->has_components);
1151     }
1152 }
1153 
1154 /* Destroy the pass-specific data.  */
1155 static void
fini_separate_shrink_wrap(void)1156 fini_separate_shrink_wrap (void)
1157 {
1158   basic_block bb;
1159   FOR_ALL_BB_FN (bb, cfun)
1160     if (bb->aux)
1161       {
1162           sbitmap_free (SW (bb)->needs_components);
1163           sbitmap_free (SW (bb)->has_components);
1164           sbitmap_free (SW (bb)->head_components);
1165           sbitmap_free (SW (bb)->tail_components);
1166           free (bb->aux);
1167           bb->aux = 0;
1168       }
1169 }
1170 
1171 /* Place the prologue for component WHICH, in the basic blocks dominated
1172    by HEAD.  Do a DFS over the dominator tree, and set bit WHICH in the
1173    HAS_COMPONENTS of a block if either the block has that bit set in
1174    NEEDS_COMPONENTS, or it is cheaper to place the prologue here than in all
1175    dominator subtrees separately.  */
1176 static void
place_prologue_for_one_component(unsigned int which,basic_block head)1177 place_prologue_for_one_component (unsigned int which, basic_block head)
1178 {
1179   /* The block we are currently dealing with.  */
1180   basic_block bb = head;
1181   /* Is this the first time we visit this block, i.e. have we just gone
1182      down the tree.  */
1183   bool first_visit = true;
1184 
1185   /* Walk the dominator tree, visit one block per iteration of this loop.
1186      Each basic block is visited twice: once before visiting any children
1187      of the block, and once after visiting all of them (leaf nodes are
1188      visited only once).  As an optimization, we do not visit subtrees
1189      that can no longer influence the prologue placement.  */
1190   for (;;)
1191     {
1192       /* First visit of a block: set the (children) cost accumulator to zero;
1193            if the block does not have the component itself, walk down.  */
1194       if (first_visit)
1195           {
1196             /* Initialize the cost.  The cost is the block execution frequency
1197                that does not come from backedges.  Calculating this by simply
1198                adding the cost of all edges that aren't backedges does not
1199                work: this does not always add up to the block frequency at
1200                all, and even if it does, rounding error makes for bad
1201                decisions.  */
1202             SW (bb)->own_cost = bb->count.to_frequency (cfun);
1203 
1204             edge e;
1205             edge_iterator ei;
1206             FOR_EACH_EDGE (e, ei, bb->preds)
1207               if (dominated_by_p (CDI_DOMINATORS, e->src, bb))
1208                 {
1209                     if (SW (bb)->own_cost > EDGE_FREQUENCY (e))
1210                       SW (bb)->own_cost -= EDGE_FREQUENCY (e);
1211                     else
1212                       SW (bb)->own_cost = 0;
1213                 }
1214 
1215             SW (bb)->total_cost = 0;
1216 
1217             if (!bitmap_bit_p (SW (bb)->needs_components, which)
1218                 && first_dom_son (CDI_DOMINATORS, bb))
1219               {
1220                 bb = first_dom_son (CDI_DOMINATORS, bb);
1221                 continue;
1222               }
1223           }
1224 
1225       /* If this block does need the component itself, or it is cheaper to
1226            put the prologue here than in all the descendants that need it,
1227            mark it so.  If this block's immediate post-dominator is dominated
1228            by this block, and that needs the prologue, we can put it on this
1229            block as well (earlier is better).  */
1230       if (bitmap_bit_p (SW (bb)->needs_components, which)
1231             || SW (bb)->total_cost > SW (bb)->own_cost)
1232           {
1233             SW (bb)->total_cost = SW (bb)->own_cost;
1234             bitmap_set_bit (SW (bb)->has_components, which);
1235           }
1236       else
1237           {
1238             basic_block kid = get_immediate_dominator (CDI_POST_DOMINATORS, bb);
1239             if (dominated_by_p (CDI_DOMINATORS, kid, bb)
1240                 && bitmap_bit_p (SW (kid)->has_components, which))
1241               {
1242                 SW (bb)->total_cost = SW (bb)->own_cost;
1243                 bitmap_set_bit (SW (bb)->has_components, which);
1244               }
1245           }
1246 
1247       /* We are back where we started, so we are done now.  */
1248       if (bb == head)
1249           return;
1250 
1251       /* We now know the cost of the subtree rooted at the current block.
1252            Accumulate this cost in the parent.  */
1253       basic_block parent = get_immediate_dominator (CDI_DOMINATORS, bb);
1254       SW (parent)->total_cost += SW (bb)->total_cost;
1255 
1256       /* Don't walk the tree down unless necessary.  */
1257       if (next_dom_son (CDI_DOMINATORS, bb)
1258           && SW (parent)->total_cost <= SW (parent)->own_cost)
1259           {
1260             bb = next_dom_son (CDI_DOMINATORS, bb);
1261             first_visit = true;
1262           }
1263       else
1264           {
1265             bb = parent;
1266             first_visit = false;
1267           }
1268     }
1269 }
1270 
1271 /* Set HAS_COMPONENTS in every block to the maximum it can be set to without
1272    setting it on any path from entry to exit where it was not already set
1273    somewhere (or, for blocks that have no path to the exit, consider only
1274    paths from the entry to the block itself).  Return whether any changes
1275    were made to some HAS_COMPONENTS.  */
1276 static bool
spread_components(sbitmap components)1277 spread_components (sbitmap components)
1278 {
1279   basic_block entry_block = ENTRY_BLOCK_PTR_FOR_FN (cfun);
1280   basic_block exit_block = EXIT_BLOCK_PTR_FOR_FN (cfun);
1281 
1282   /* A stack of all blocks left to consider, and a bitmap of all blocks
1283      on that stack.  */
1284   vec<basic_block> todo;
1285   todo.create (n_basic_blocks_for_fn (cfun));
1286   auto_bitmap seen;
1287 
1288   auto_sbitmap old (SBITMAP_SIZE (components));
1289 
1290   /* Find for every block the components that are *not* needed on some path
1291      from the entry to that block.  Do this with a flood fill from the entry
1292      block.  Every block can be visited at most as often as the number of
1293      components (plus one), and usually much less often.  */
1294 
1295   if (dump_file)
1296     fprintf (dump_file, "Spreading down...\n");
1297 
1298   basic_block bb;
1299   FOR_ALL_BB_FN (bb, cfun)
1300     bitmap_clear (SW (bb)->head_components);
1301 
1302   bitmap_copy (SW (entry_block)->head_components, components);
1303 
1304   edge e;
1305   edge_iterator ei;
1306 
1307   todo.quick_push (single_succ (entry_block));
1308   bitmap_set_bit (seen, single_succ (entry_block)->index);
1309   while (!todo.is_empty ())
1310     {
1311       bb = todo.pop ();
1312 
1313       bitmap_copy (old, SW (bb)->head_components);
1314 
1315       FOR_EACH_EDGE (e, ei, bb->preds)
1316           bitmap_ior (SW (bb)->head_components, SW (bb)->head_components,
1317                         SW (e->src)->head_components);
1318 
1319       bitmap_and_compl (SW (bb)->head_components, SW (bb)->head_components,
1320                               SW (bb)->has_components);
1321 
1322       if (!bitmap_equal_p (old, SW (bb)->head_components))
1323           FOR_EACH_EDGE (e, ei, bb->succs)
1324             if (bitmap_set_bit (seen, e->dest->index))
1325               todo.quick_push (e->dest);
1326 
1327       bitmap_clear_bit (seen, bb->index);
1328     }
1329 
1330   /* Find for every block the components that are *not* needed on some reverse
1331      path from the exit to that block.  */
1332 
1333   if (dump_file)
1334     fprintf (dump_file, "Spreading up...\n");
1335 
1336   /* First, mark all blocks not reachable from the exit block as not needing
1337      any component on any path to the exit.  Mark everything, and then clear
1338      again by a flood fill.  */
1339 
1340   FOR_ALL_BB_FN (bb, cfun)
1341     bitmap_copy (SW (bb)->tail_components, components);
1342 
1343   FOR_EACH_EDGE (e, ei, exit_block->preds)
1344     {
1345       todo.quick_push (e->src);
1346       bitmap_set_bit (seen, e->src->index);
1347     }
1348 
1349   while (!todo.is_empty ())
1350     {
1351       bb = todo.pop ();
1352 
1353       if (!bitmap_empty_p (SW (bb)->tail_components))
1354           FOR_EACH_EDGE (e, ei, bb->preds)
1355             if (bitmap_set_bit (seen, e->src->index))
1356               todo.quick_push (e->src);
1357 
1358       bitmap_clear (SW (bb)->tail_components);
1359 
1360       bitmap_clear_bit (seen, bb->index);
1361     }
1362 
1363   /* And then, flood fill backwards to find for every block the components
1364      not needed on some path to the exit.  */
1365 
1366   bitmap_copy (SW (exit_block)->tail_components, components);
1367 
1368   FOR_EACH_EDGE (e, ei, exit_block->preds)
1369     {
1370       todo.quick_push (e->src);
1371       bitmap_set_bit (seen, e->src->index);
1372     }
1373 
1374   while (!todo.is_empty ())
1375     {
1376       bb = todo.pop ();
1377 
1378       bitmap_copy (old, SW (bb)->tail_components);
1379 
1380       FOR_EACH_EDGE (e, ei, bb->succs)
1381           bitmap_ior (SW (bb)->tail_components, SW (bb)->tail_components,
1382                         SW (e->dest)->tail_components);
1383 
1384       bitmap_and_compl (SW (bb)->tail_components, SW (bb)->tail_components,
1385                               SW (bb)->has_components);
1386 
1387       if (!bitmap_equal_p (old, SW (bb)->tail_components))
1388           FOR_EACH_EDGE (e, ei, bb->preds)
1389             if (bitmap_set_bit (seen, e->src->index))
1390               todo.quick_push (e->src);
1391 
1392       bitmap_clear_bit (seen, bb->index);
1393     }
1394 
1395   todo.release ();
1396 
1397   /* Finally, mark everything not needed both forwards and backwards.  */
1398 
1399   bool did_changes = false;
1400 
1401   FOR_EACH_BB_FN (bb, cfun)
1402     {
1403       bitmap_copy (old, SW (bb)->has_components);
1404 
1405       bitmap_and (SW (bb)->head_components, SW (bb)->head_components,
1406                       SW (bb)->tail_components);
1407       bitmap_and_compl (SW (bb)->has_components, components,
1408                               SW (bb)->head_components);
1409 
1410       if (!did_changes && !bitmap_equal_p (old, SW (bb)->has_components))
1411           did_changes = true;
1412     }
1413 
1414   FOR_ALL_BB_FN (bb, cfun)
1415     {
1416       if (dump_file)
1417           {
1418             fprintf (dump_file, "bb %d components:", bb->index);
1419             dump_components ("has", SW (bb)->has_components);
1420             fprintf (dump_file, "\n");
1421           }
1422     }
1423 
1424   return did_changes;
1425 }
1426 
1427 /* If we cannot handle placing some component's prologues or epilogues where
1428    we decided we should place them, unmark that component in COMPONENTS so
1429    that it is not wrapped separately.  */
1430 static void
disqualify_problematic_components(sbitmap components)1431 disqualify_problematic_components (sbitmap components)
1432 {
1433   auto_sbitmap pro (SBITMAP_SIZE (components));
1434   auto_sbitmap epi (SBITMAP_SIZE (components));
1435 
1436   basic_block bb;
1437   FOR_EACH_BB_FN (bb, cfun)
1438     {
1439       edge e;
1440       edge_iterator ei;
1441       FOR_EACH_EDGE (e, ei, bb->succs)
1442           {
1443             /* Find which components we want pro/epilogues for here.  */
1444             bitmap_and_compl (epi, SW (e->src)->has_components,
1445                                   SW (e->dest)->has_components);
1446             bitmap_and_compl (pro, SW (e->dest)->has_components,
1447                                   SW (e->src)->has_components);
1448 
1449             /* Ask the target what it thinks about things.  */
1450             if (!bitmap_empty_p (epi))
1451               targetm.shrink_wrap.disqualify_components (components, e, epi,
1452                                                                    false);
1453             if (!bitmap_empty_p (pro))
1454               targetm.shrink_wrap.disqualify_components (components, e, pro,
1455                                                                    true);
1456 
1457             /* If this edge doesn't need splitting, we're fine.  */
1458             if (single_pred_p (e->dest)
1459                 && e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun))
1460               continue;
1461 
1462             /* If the edge can be split, that is fine too.  */
1463             if ((e->flags & EDGE_ABNORMAL) == 0)
1464               continue;
1465 
1466             /* We also can handle sibcalls.  */
1467             if (e->dest == EXIT_BLOCK_PTR_FOR_FN (cfun))
1468               {
1469                 gcc_assert (e->flags & EDGE_SIBCALL);
1470                 continue;
1471               }
1472 
1473             /* Remove from consideration those components we would need
1474                pro/epilogues for on edges where we cannot insert them.  */
1475             bitmap_and_compl (components, components, epi);
1476             bitmap_and_compl (components, components, pro);
1477 
1478             if (dump_file && !bitmap_subset_p (epi, components))
1479               {
1480                 fprintf (dump_file, "  BAD epi %d->%d", e->src->index,
1481                            e->dest->index);
1482                 if (e->flags & EDGE_EH)
1483                     fprintf (dump_file, " for EH");
1484                 dump_components ("epi", epi);
1485                 fprintf (dump_file, "\n");
1486               }
1487 
1488             if (dump_file && !bitmap_subset_p (pro, components))
1489               {
1490                 fprintf (dump_file, "  BAD pro %d->%d", e->src->index,
1491                            e->dest->index);
1492                 if (e->flags & EDGE_EH)
1493                     fprintf (dump_file, " for EH");
1494                 dump_components ("pro", pro);
1495                 fprintf (dump_file, "\n");
1496               }
1497           }
1498     }
1499 }
1500 
1501 /* Place code for prologues and epilogues for COMPONENTS where we can put
1502    that code at the start of basic blocks.  */
1503 static void
emit_common_heads_for_components(sbitmap components)1504 emit_common_heads_for_components (sbitmap components)
1505 {
1506   auto_sbitmap pro (SBITMAP_SIZE (components));
1507   auto_sbitmap epi (SBITMAP_SIZE (components));
1508   auto_sbitmap tmp (SBITMAP_SIZE (components));
1509 
1510   basic_block bb;
1511   FOR_ALL_BB_FN (bb, cfun)
1512     bitmap_clear (SW (bb)->head_components);
1513 
1514   FOR_EACH_BB_FN (bb, cfun)
1515     {
1516       /* Find which prologue resp. epilogue components are needed for all
1517            predecessor edges to this block.  */
1518 
1519       /* First, select all possible components.  */
1520       bitmap_copy (epi, components);
1521       bitmap_copy (pro, components);
1522 
1523       edge e;
1524       edge_iterator ei;
1525       FOR_EACH_EDGE (e, ei, bb->preds)
1526           {
1527             if (e->flags & EDGE_ABNORMAL)
1528               {
1529                 bitmap_clear (epi);
1530                 bitmap_clear (pro);
1531                 break;
1532               }
1533 
1534             /* Deselect those epilogue components that should not be inserted
1535                for this edge.  */
1536             bitmap_and_compl (tmp, SW (e->src)->has_components,
1537                                   SW (e->dest)->has_components);
1538             bitmap_and (epi, epi, tmp);
1539 
1540             /* Similar, for the prologue.  */
1541             bitmap_and_compl (tmp, SW (e->dest)->has_components,
1542                                   SW (e->src)->has_components);
1543             bitmap_and (pro, pro, tmp);
1544           }
1545 
1546       if (dump_file && !(bitmap_empty_p (epi) && bitmap_empty_p (pro)))
1547           fprintf (dump_file, "  bb %d", bb->index);
1548 
1549       if (dump_file && !bitmap_empty_p (epi))
1550           dump_components ("epi", epi);
1551       if (dump_file && !bitmap_empty_p (pro))
1552           dump_components ("pro", pro);
1553 
1554       if (dump_file && !(bitmap_empty_p (epi) && bitmap_empty_p (pro)))
1555           fprintf (dump_file, "\n");
1556 
1557       /* Place code after the BB note.  */
1558       if (!bitmap_empty_p (pro))
1559           {
1560             start_sequence ();
1561             targetm.shrink_wrap.emit_prologue_components (pro);
1562             rtx_insn *seq = get_insns ();
1563             end_sequence ();
1564             record_prologue_seq (seq);
1565 
1566             emit_insn_after (seq, bb_note (bb));
1567 
1568             bitmap_ior (SW (bb)->head_components, SW (bb)->head_components, pro);
1569           }
1570 
1571       if (!bitmap_empty_p (epi))
1572           {
1573             start_sequence ();
1574             targetm.shrink_wrap.emit_epilogue_components (epi);
1575             rtx_insn *seq = get_insns ();
1576             end_sequence ();
1577             record_epilogue_seq (seq);
1578 
1579             emit_insn_after (seq, bb_note (bb));
1580 
1581             bitmap_ior (SW (bb)->head_components, SW (bb)->head_components, epi);
1582           }
1583     }
1584 }
1585 
1586 /* Place code for prologues and epilogues for COMPONENTS where we can put
1587    that code at the end of basic blocks.  */
1588 static void
emit_common_tails_for_components(sbitmap components)1589 emit_common_tails_for_components (sbitmap components)
1590 {
1591   auto_sbitmap pro (SBITMAP_SIZE (components));
1592   auto_sbitmap epi (SBITMAP_SIZE (components));
1593   auto_sbitmap tmp (SBITMAP_SIZE (components));
1594 
1595   basic_block bb;
1596   FOR_ALL_BB_FN (bb, cfun)
1597     bitmap_clear (SW (bb)->tail_components);
1598 
1599   FOR_EACH_BB_FN (bb, cfun)
1600     {
1601       /* Find which prologue resp. epilogue components are needed for all
1602            successor edges from this block.  */
1603       if (EDGE_COUNT (bb->succs) == 0)
1604           continue;
1605 
1606       /* First, select all possible components.  */
1607       bitmap_copy (epi, components);
1608       bitmap_copy (pro, components);
1609 
1610       edge e;
1611       edge_iterator ei;
1612       FOR_EACH_EDGE (e, ei, bb->succs)
1613           {
1614             if (e->flags & EDGE_ABNORMAL)
1615               {
1616                 bitmap_clear (epi);
1617                 bitmap_clear (pro);
1618                 break;
1619               }
1620 
1621             /* Deselect those epilogue components that should not be inserted
1622                for this edge, and also those that are already put at the head
1623                of the successor block.  */
1624             bitmap_and_compl (tmp, SW (e->src)->has_components,
1625                                   SW (e->dest)->has_components);
1626             bitmap_and_compl (tmp, tmp, SW (e->dest)->head_components);
1627             bitmap_and (epi, epi, tmp);
1628 
1629             /* Similarly, for the prologue.  */
1630             bitmap_and_compl (tmp, SW (e->dest)->has_components,
1631                                   SW (e->src)->has_components);
1632             bitmap_and_compl (tmp, tmp, SW (e->dest)->head_components);
1633             bitmap_and (pro, pro, tmp);
1634           }
1635 
1636       /* If the last insn of this block is a control flow insn we cannot
1637            put anything after it.  We can put our code before it instead,
1638            but only if that jump insn is a simple jump.  */
1639       rtx_insn *last_insn = BB_END (bb);
1640       if (control_flow_insn_p (last_insn) && !simplejump_p (last_insn))
1641           {
1642             bitmap_clear (epi);
1643             bitmap_clear (pro);
1644           }
1645 
1646       if (dump_file && !(bitmap_empty_p (epi) && bitmap_empty_p (pro)))
1647           fprintf (dump_file, "  bb %d", bb->index);
1648 
1649       if (dump_file && !bitmap_empty_p (epi))
1650           dump_components ("epi", epi);
1651       if (dump_file && !bitmap_empty_p (pro))
1652           dump_components ("pro", pro);
1653 
1654       if (dump_file && !(bitmap_empty_p (epi) && bitmap_empty_p (pro)))
1655           fprintf (dump_file, "\n");
1656 
1657       /* Put the code at the end of the BB, but before any final jump.  */
1658       if (!bitmap_empty_p (epi))
1659           {
1660             start_sequence ();
1661             targetm.shrink_wrap.emit_epilogue_components (epi);
1662             rtx_insn *seq = get_insns ();
1663             end_sequence ();
1664             record_epilogue_seq (seq);
1665 
1666             if (control_flow_insn_p (last_insn))
1667               emit_insn_before (seq, last_insn);
1668             else
1669               emit_insn_after (seq, last_insn);
1670 
1671             bitmap_ior (SW (bb)->tail_components, SW (bb)->tail_components, epi);
1672           }
1673 
1674       if (!bitmap_empty_p (pro))
1675           {
1676             start_sequence ();
1677             targetm.shrink_wrap.emit_prologue_components (pro);
1678             rtx_insn *seq = get_insns ();
1679             end_sequence ();
1680             record_prologue_seq (seq);
1681 
1682             if (control_flow_insn_p (last_insn))
1683               emit_insn_before (seq, last_insn);
1684             else
1685               emit_insn_after (seq, last_insn);
1686 
1687             bitmap_ior (SW (bb)->tail_components, SW (bb)->tail_components, pro);
1688           }
1689     }
1690 }
1691 
1692 /* Place prologues and epilogues for COMPONENTS on edges, if we haven't already
1693    placed them inside blocks directly.  */
1694 static void
insert_prologue_epilogue_for_components(sbitmap components)1695 insert_prologue_epilogue_for_components (sbitmap components)
1696 {
1697   auto_sbitmap pro (SBITMAP_SIZE (components));
1698   auto_sbitmap epi (SBITMAP_SIZE (components));
1699 
1700   basic_block bb;
1701   FOR_EACH_BB_FN (bb, cfun)
1702     {
1703       if (!bb->aux)
1704           continue;
1705 
1706       edge e;
1707       edge_iterator ei;
1708       FOR_EACH_EDGE (e, ei, bb->succs)
1709           {
1710             /* Find which pro/epilogue components are needed on this edge.  */
1711             bitmap_and_compl (epi, SW (e->src)->has_components,
1712                                   SW (e->dest)->has_components);
1713             bitmap_and_compl (pro, SW (e->dest)->has_components,
1714                                   SW (e->src)->has_components);
1715             bitmap_and (epi, epi, components);
1716             bitmap_and (pro, pro, components);
1717 
1718             /* Deselect those we already have put at the head or tail of the
1719                edge's dest resp. src.  */
1720             bitmap_and_compl (epi, epi, SW (e->dest)->head_components);
1721             bitmap_and_compl (pro, pro, SW (e->dest)->head_components);
1722             bitmap_and_compl (epi, epi, SW (e->src)->tail_components);
1723             bitmap_and_compl (pro, pro, SW (e->src)->tail_components);
1724 
1725             if (!bitmap_empty_p (epi) || !bitmap_empty_p (pro))
1726               {
1727                 if (dump_file)
1728                     {
1729                       fprintf (dump_file, "  %d->%d", e->src->index,
1730                                  e->dest->index);
1731                       dump_components ("epi", epi);
1732                       dump_components ("pro", pro);
1733                       if (e->flags & EDGE_SIBCALL)
1734                         fprintf (dump_file, "  (SIBCALL)");
1735                       else if (e->flags & EDGE_ABNORMAL)
1736                         fprintf (dump_file, "  (ABNORMAL)");
1737                       fprintf (dump_file, "\n");
1738                     }
1739 
1740                 /* Put the epilogue components in place.  */
1741                 start_sequence ();
1742                 targetm.shrink_wrap.emit_epilogue_components (epi);
1743                 rtx_insn *seq = get_insns ();
1744                 end_sequence ();
1745                 record_epilogue_seq (seq);
1746 
1747                 if (e->flags & EDGE_SIBCALL)
1748                     {
1749                       gcc_assert (e->dest == EXIT_BLOCK_PTR_FOR_FN (cfun));
1750 
1751                       rtx_insn *insn = BB_END (e->src);
1752                       gcc_assert (CALL_P (insn) && SIBLING_CALL_P (insn));
1753                       emit_insn_before (seq, insn);
1754                     }
1755                 else if (e->dest == EXIT_BLOCK_PTR_FOR_FN (cfun))
1756                     {
1757                       gcc_assert (e->flags & EDGE_FALLTHRU);
1758                       basic_block new_bb = split_edge (e);
1759                       emit_insn_after (seq, BB_END (new_bb));
1760                     }
1761                 else
1762                     insert_insn_on_edge (seq, e);
1763 
1764                 /* Put the prologue components in place.  */
1765                 start_sequence ();
1766                 targetm.shrink_wrap.emit_prologue_components (pro);
1767                 seq = get_insns ();
1768                 end_sequence ();
1769                 record_prologue_seq (seq);
1770 
1771                 insert_insn_on_edge (seq, e);
1772               }
1773           }
1774     }
1775 
1776   commit_edge_insertions ();
1777 }
1778 
1779 /* The main entry point to this subpass.  FIRST_BB is where the prologue
1780    would be normally put.  */
1781 void
try_shrink_wrapping_separate(basic_block first_bb)1782 try_shrink_wrapping_separate (basic_block first_bb)
1783 {
1784   if (!(SHRINK_WRAPPING_ENABLED
1785           && flag_shrink_wrap_separate
1786           && optimize_function_for_speed_p (cfun)
1787           && targetm.shrink_wrap.get_separate_components))
1788     return;
1789 
1790   /* We don't handle "strange" functions.  */
1791   if (cfun->calls_alloca
1792       || cfun->calls_setjmp
1793       || cfun->can_throw_non_call_exceptions
1794       || crtl->calls_eh_return
1795       || crtl->has_nonlocal_goto
1796       || crtl->saves_all_registers)
1797     return;
1798 
1799   /* Ask the target what components there are.  If it returns NULL, don't
1800      do anything.  */
1801   sbitmap components = targetm.shrink_wrap.get_separate_components ();
1802   if (!components)
1803     return;
1804 
1805   /* We need LIVE info, not defining anything in the entry block and not
1806      using anything in the exit block.  A block then needs a component if
1807      the register for that component is in the IN or GEN or KILL set for
1808      that block.  */
1809   df_scan->local_flags |= DF_SCAN_EMPTY_ENTRY_EXIT;
1810   df_update_entry_exit_and_calls ();
1811   df_live_add_problem ();
1812   df_live_set_all_dirty ();
1813   df_analyze ();
1814 
1815   calculate_dominance_info (CDI_DOMINATORS);
1816   calculate_dominance_info (CDI_POST_DOMINATORS);
1817 
1818   init_separate_shrink_wrap (components);
1819 
1820   sbitmap_iterator sbi;
1821   unsigned int j;
1822   EXECUTE_IF_SET_IN_BITMAP (components, 0, j, sbi)
1823     place_prologue_for_one_component (j, first_bb);
1824 
1825   /* Try to minimize the number of saves and restores.  Do this as long as
1826      it changes anything.  This does not iterate more than a few times.  */
1827   int spread_times = 0;
1828   while (spread_components (components))
1829     {
1830       spread_times++;
1831 
1832       if (dump_file)
1833           fprintf (dump_file, "Now spread %d times.\n", spread_times);
1834     }
1835 
1836   disqualify_problematic_components (components);
1837 
1838   /* Don't separately shrink-wrap anything where the "main" prologue will
1839      go; the target code can often optimize things if it is presented with
1840      all components together (say, if it generates store-multiple insns).  */
1841   bitmap_and_compl (components, components, SW (first_bb)->has_components);
1842 
1843   if (bitmap_empty_p (components))
1844     {
1845       if (dump_file)
1846           fprintf (dump_file, "Not wrapping anything separately.\n");
1847     }
1848   else
1849     {
1850       if (dump_file)
1851           {
1852             fprintf (dump_file, "The components we wrap separately are");
1853             dump_components ("sep", components);
1854             fprintf (dump_file, "\n");
1855 
1856             fprintf (dump_file, "... Inserting common heads...\n");
1857           }
1858 
1859       emit_common_heads_for_components (components);
1860 
1861       if (dump_file)
1862           fprintf (dump_file, "... Inserting common tails...\n");
1863 
1864       emit_common_tails_for_components (components);
1865 
1866       if (dump_file)
1867           fprintf (dump_file, "... Inserting the more difficult ones...\n");
1868 
1869       insert_prologue_epilogue_for_components (components);
1870 
1871       if (dump_file)
1872           fprintf (dump_file, "... Done.\n");
1873 
1874       targetm.shrink_wrap.set_handled_components (components);
1875 
1876       crtl->shrink_wrapped_separate = true;
1877     }
1878 
1879   fini_separate_shrink_wrap ();
1880 
1881   sbitmap_free (components);
1882   free_dominance_info (CDI_DOMINATORS);
1883   free_dominance_info (CDI_POST_DOMINATORS);
1884 
1885   /* All done.  */
1886   df_scan->local_flags &= ~DF_SCAN_EMPTY_ENTRY_EXIT;
1887   df_update_entry_exit_and_calls ();
1888   df_live_set_all_dirty ();
1889   df_analyze ();
1890 }
1891