1 /* Shrink-wrapping related optimizations.
2 Copyright (C) 1987-2015 Free Software Foundation, Inc.
4 This file is part of GCC.
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
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
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/>. */
20 /* This file handles shrink-wrapping related optimizations. */
24 #include "coretypes.h"
26 #include "rtl-error.h"
30 #include "double-int.h"
37 #include "fold-const.h"
38 #include "stor-layout.h"
40 #include "stringpool.h"
43 #include "hard-reg-set.h"
47 #include "statistics.h"
49 #include "fixed-value.h"
50 #include "insn-config.h"
58 #include "insn-codes.h"
65 #include "langhooks.h"
67 #include "common/common-target.h"
68 #include "gimple-expr.h"
70 #include "tree-pass.h"
72 #include "dominance.h"
75 #include "basic-block.h"
78 #include "bb-reorder.h"
79 #include "shrink-wrap.h"
83 #ifdef HAVE_simple_return
85 /* Return true if INSN requires the stack frame to be set up.
86 PROLOGUE_USED contains the hard registers used in the function
87 prologue. SET_UP_BY_PROLOGUE is the set of registers we expect the
88 prologue to set up for the function. */
90 requires_stack_frame_p (rtx_insn
*insn
, HARD_REG_SET prologue_used
,
91 HARD_REG_SET set_up_by_prologue
)
94 HARD_REG_SET hardregs
;
98 return !SIBLING_CALL_P (insn
);
100 /* We need a frame to get the unique CFA expected by the unwinder. */
101 if (cfun
->can_throw_non_call_exceptions
&& can_throw_internal (insn
))
104 CLEAR_HARD_REG_SET (hardregs
);
105 FOR_EACH_INSN_DEF (def
, insn
)
107 rtx dreg
= DF_REF_REG (def
);
112 add_to_hard_reg_set (&hardregs
, GET_MODE (dreg
),
115 if (hard_reg_set_intersect_p (hardregs
, prologue_used
))
117 AND_COMPL_HARD_REG_SET (hardregs
, call_used_reg_set
);
118 for (regno
= 0; regno
< FIRST_PSEUDO_REGISTER
; regno
++)
119 if (TEST_HARD_REG_BIT (hardregs
, regno
)
120 && df_regs_ever_live_p (regno
))
123 FOR_EACH_INSN_USE (use
, insn
)
125 rtx reg
= DF_REF_REG (use
);
130 add_to_hard_reg_set (&hardregs
, GET_MODE (reg
),
133 if (hard_reg_set_intersect_p (hardregs
, set_up_by_prologue
))
139 /* See whether there has a single live edge from BB, which dest uses
140 [REGNO, END_REGNO). Return the live edge if its dest bb has
141 one or two predecessors. Otherwise return NULL. */
144 live_edge_for_reg (basic_block bb
, int regno
, int end_regno
)
152 FOR_EACH_EDGE (e
, ei
, bb
->succs
)
154 live
= df_get_live_in (e
->dest
);
155 for (i
= regno
; i
< end_regno
; i
++)
156 if (REGNO_REG_SET_P (live
, i
))
158 if (live_edge
&& live_edge
!= e
)
164 /* We can sometimes encounter dead code. Don't try to move it
165 into the exit block. */
166 if (!live_edge
|| live_edge
->dest
== EXIT_BLOCK_PTR_FOR_FN (cfun
))
169 /* Reject targets of abnormal edges. This is needed for correctness
170 on ports like Alpha and MIPS, whose pic_offset_table_rtx can die on
171 exception edges even though it is generally treated as call-saved
172 for the majority of the compilation. Moving across abnormal edges
173 isn't going to be interesting for shrink-wrap usage anyway. */
174 if (live_edge
->flags
& EDGE_ABNORMAL
)
177 /* When live_edge->dest->preds == 2, we can create a new block on
178 the edge to make it meet the requirement. */
179 if (EDGE_COUNT (live_edge
->dest
->preds
) > 2)
185 /* Try to move INSN from BB to a successor. Return true on success.
186 USES and DEFS are the set of registers that are used and defined
187 after INSN in BB. SPLIT_P indicates whether a live edge from BB
188 is splitted or not. */
191 move_insn_for_shrink_wrap (basic_block bb
, rtx_insn
*insn
,
192 const HARD_REG_SET uses
,
193 const HARD_REG_SET defs
,
197 bitmap live_out
, live_in
, bb_uses
, bb_defs
;
198 unsigned int i
, dregno
, end_dregno
;
199 unsigned int sregno
= FIRST_PSEUDO_REGISTER
;
200 unsigned int end_sregno
= FIRST_PSEUDO_REGISTER
;
201 basic_block next_block
;
204 /* Look for a simple register assignment. We don't use single_set here
205 because we can't deal with any CLOBBERs, USEs, or REG_UNUSED secondary
209 set
= PATTERN (insn
);
210 if (GET_CODE (set
) != SET
)
213 dest
= SET_DEST (set
);
215 /* For the destination, we want only a register. Also disallow STACK
216 or FRAME related adjustments. They are likely part of the prologue,
217 so keep them in the entry block. */
219 || dest
== stack_pointer_rtx
220 || dest
== frame_pointer_rtx
221 || dest
== hard_frame_pointer_rtx
)
224 /* For the source, we want one of:
225 (1) A (non-overlapping) register
227 (3) An expression involving no more than one register.
229 That last point comes from the code following, which was originally
230 written to handle only register move operations, and still only handles
231 a single source register when checking for overlaps. Happily, the
232 same checks can be applied to expressions like (plus reg const). */
234 if (CONSTANT_P (src
))
236 else if (!REG_P (src
))
238 rtx src_inner
= NULL_RTX
;
240 if (can_throw_internal (insn
))
243 subrtx_var_iterator::array_type array
;
244 FOR_EACH_SUBRTX_VAR (iter
, array
, src
, ALL
)
247 switch (GET_RTX_CLASS (GET_CODE (x
)))
251 case RTX_COMM_COMPARE
:
256 /* Constant or expression. Continue. */
261 switch (GET_CODE (x
))
265 case STRICT_LOW_PART
:
272 /* Fail if we see a second inner register. */
273 if (src_inner
!= NULL
)
288 if (src_inner
!= NULL
)
292 /* Make sure that the source register isn't defined later in BB. */
295 sregno
= REGNO (src
);
296 end_sregno
= END_REGNO (src
);
297 if (overlaps_hard_reg_set_p (defs
, GET_MODE (src
), sregno
))
301 /* Make sure that the destination register isn't referenced later in BB. */
302 dregno
= REGNO (dest
);
303 end_dregno
= END_REGNO (dest
);
304 if (overlaps_hard_reg_set_p (uses
, GET_MODE (dest
), dregno
)
305 || overlaps_hard_reg_set_p (defs
, GET_MODE (dest
), dregno
))
308 /* See whether there is a successor block to which we could move INSN. */
309 live_edge
= live_edge_for_reg (bb
, dregno
, end_dregno
);
313 next_block
= live_edge
->dest
;
314 /* Create a new basic block on the edge. */
315 if (EDGE_COUNT (next_block
->preds
) == 2)
317 /* split_edge for a block with only one successor is meaningless. */
318 if (EDGE_COUNT (bb
->succs
) == 1)
321 /* If DF_LIVE doesn't exist, i.e. at -O1, just give up. */
325 basic_block old_dest
= live_edge
->dest
;
326 next_block
= split_edge (live_edge
);
328 /* We create a new basic block. Call df_grow_bb_info to make sure
329 all data structures are allocated. */
330 df_grow_bb_info (df_live
);
332 bitmap_and (df_get_live_in (next_block
), df_get_live_out (bb
),
333 df_get_live_in (old_dest
));
334 df_set_bb_dirty (next_block
);
336 /* We should not split more than once for a function. */
343 /* At this point we are committed to moving INSN, but let's try to
344 move it as far as we can. */
347 live_out
= df_get_live_out (bb
);
348 live_in
= df_get_live_in (next_block
);
351 /* Check whether BB uses DEST or clobbers DEST. We need to add
352 INSN to BB if so. Either way, DEST is no longer live on entry,
353 except for any part that overlaps SRC (next loop). */
354 bb_uses
= &DF_LR_BB_INFO (bb
)->use
;
355 bb_defs
= &DF_LR_BB_INFO (bb
)->def
;
358 for (i
= dregno
; i
< end_dregno
; i
++)
361 || REGNO_REG_SET_P (bb_uses
, i
)
362 || REGNO_REG_SET_P (bb_defs
, i
)
363 || REGNO_REG_SET_P (&DF_LIVE_BB_INFO (bb
)->gen
, i
))
365 CLEAR_REGNO_REG_SET (live_out
, i
);
366 CLEAR_REGNO_REG_SET (live_in
, i
);
369 /* Check whether BB clobbers SRC. We need to add INSN to BB if so.
370 Either way, SRC is now live on entry. */
371 for (i
= sregno
; i
< end_sregno
; i
++)
374 || REGNO_REG_SET_P (bb_defs
, i
)
375 || REGNO_REG_SET_P (&DF_LIVE_BB_INFO (bb
)->gen
, i
))
377 SET_REGNO_REG_SET (live_out
, i
);
378 SET_REGNO_REG_SET (live_in
, i
);
383 /* DF_LR_BB_INFO (bb)->def does not comprise the DF_REF_PARTIAL and
384 DF_REF_CONDITIONAL defs. So if DF_LIVE doesn't exist, i.e.
385 at -O1, just give up searching NEXT_BLOCK. */
387 for (i
= dregno
; i
< end_dregno
; i
++)
389 CLEAR_REGNO_REG_SET (live_out
, i
);
390 CLEAR_REGNO_REG_SET (live_in
, i
);
393 for (i
= sregno
; i
< end_sregno
; i
++)
395 SET_REGNO_REG_SET (live_out
, i
);
396 SET_REGNO_REG_SET (live_in
, i
);
400 /* If we don't need to add the move to BB, look for a single
404 live_edge
= live_edge_for_reg (next_block
, dregno
, end_dregno
);
405 if (!live_edge
|| EDGE_COUNT (live_edge
->dest
->preds
) > 1)
407 next_block
= live_edge
->dest
;
412 /* For the new created basic block, there is no dataflow info at all.
413 So skip the following dataflow update and check. */
416 /* BB now defines DEST. It only uses the parts of DEST that overlap SRC
418 for (i
= dregno
; i
< end_dregno
; i
++)
420 CLEAR_REGNO_REG_SET (bb_uses
, i
);
421 SET_REGNO_REG_SET (bb_defs
, i
);
424 /* BB now uses SRC. */
425 for (i
= sregno
; i
< end_sregno
; i
++)
426 SET_REGNO_REG_SET (bb_uses
, i
);
429 emit_insn_after (PATTERN (insn
), bb_note (bb
));
434 /* Look for register copies in the first block of the function, and move
435 them down into successor blocks if the register is used only on one
436 path. This exposes more opportunities for shrink-wrapping. These
437 kinds of sets often occur when incoming argument registers are moved
438 to call-saved registers because their values are live across one or
439 more calls during the function. */
442 prepare_shrink_wrap (basic_block entry_block
)
444 rtx_insn
*insn
, *curr
;
446 HARD_REG_SET uses
, defs
;
448 bool split_p
= false;
450 if (JUMP_P (BB_END (entry_block
)))
452 /* To have more shrink-wrapping opportunities, prepare_shrink_wrap tries
453 to sink the copies from parameter to callee saved register out of
454 entry block. copyprop_hardreg_forward_bb_without_debug_insn is called
455 to release some dependences. */
456 copyprop_hardreg_forward_bb_without_debug_insn (entry_block
);
459 CLEAR_HARD_REG_SET (uses
);
460 CLEAR_HARD_REG_SET (defs
);
461 FOR_BB_INSNS_REVERSE_SAFE (entry_block
, insn
, curr
)
462 if (NONDEBUG_INSN_P (insn
)
463 && !move_insn_for_shrink_wrap (entry_block
, insn
, uses
, defs
,
466 /* Add all defined registers to DEFs. */
467 FOR_EACH_INSN_DEF (def
, insn
)
469 x
= DF_REF_REG (def
);
470 if (REG_P (x
) && HARD_REGISTER_P (x
))
471 SET_HARD_REG_BIT (defs
, REGNO (x
));
474 /* Add all used registers to USESs. */
475 FOR_EACH_INSN_USE (use
, insn
)
477 x
= DF_REF_REG (use
);
478 if (REG_P (x
) && HARD_REGISTER_P (x
))
479 SET_HARD_REG_BIT (uses
, REGNO (x
));
484 /* Create a copy of BB instructions and insert at BEFORE. Redirect
485 preds of BB to COPY_BB if they don't appear in NEED_PROLOGUE. */
487 dup_block_and_redirect (basic_block bb
, basic_block copy_bb
, rtx_insn
*before
,
488 bitmap_head
*need_prologue
)
492 rtx_insn
*insn
= BB_END (bb
);
494 /* We know BB has a single successor, so there is no need to copy a
495 simple jump at the end of BB. */
496 if (simplejump_p (insn
))
497 insn
= PREV_INSN (insn
);
500 duplicate_insn_chain (BB_HEAD (bb
), insn
);
504 for (insn
= get_insns (); insn
; insn
= NEXT_INSN (insn
))
505 if (active_insn_p (insn
))
507 fprintf (dump_file
, "Duplicating bb %d to bb %d, %u active insns.\n",
508 bb
->index
, copy_bb
->index
, count
);
512 emit_insn_before (insn
, before
);
514 /* Redirect all the paths that need no prologue into copy_bb. */
515 for (ei
= ei_start (bb
->preds
); (e
= ei_safe_edge (ei
));)
516 if (!bitmap_bit_p (need_prologue
, e
->src
->index
))
518 int freq
= EDGE_FREQUENCY (e
);
519 copy_bb
->count
+= e
->count
;
520 copy_bb
->frequency
+= EDGE_FREQUENCY (e
);
521 e
->dest
->count
-= e
->count
;
522 if (e
->dest
->count
< 0)
524 e
->dest
->frequency
-= freq
;
525 if (e
->dest
->frequency
< 0)
526 e
->dest
->frequency
= 0;
527 redirect_edge_and_branch_force (e
, copy_bb
);
535 /* Try to perform a kind of shrink-wrapping, making sure the
536 prologue/epilogue is emitted only around those parts of the
537 function that require it. */
540 try_shrink_wrapping (edge
*entry_edge
, edge orig_entry_edge
,
541 bitmap_head
*bb_flags
, rtx_insn
*prologue_seq
)
545 bool nonempty_prologue
= false;
546 unsigned max_grow_size
;
549 for (seq
= prologue_seq
; seq
; seq
= NEXT_INSN (seq
))
550 if (!NOTE_P (seq
) || NOTE_KIND (seq
) != NOTE_INSN_PROLOGUE_END
)
552 nonempty_prologue
= true;
556 if (flag_shrink_wrap
&& HAVE_simple_return
557 && (targetm
.profile_before_prologue () || !crtl
->profile
)
558 && nonempty_prologue
&& !crtl
->calls_eh_return
)
560 HARD_REG_SET prologue_clobbered
, prologue_used
, live_on_edge
;
561 struct hard_reg_set_container set_up_by_prologue
;
563 vec
<basic_block
> vec
;
565 bitmap_head bb_antic_flags
;
566 bitmap_head bb_on_list
;
570 fprintf (dump_file
, "Attempting shrink-wrapping optimization.\n");
572 /* Compute the registers set and used in the prologue. */
573 CLEAR_HARD_REG_SET (prologue_clobbered
);
574 CLEAR_HARD_REG_SET (prologue_used
);
575 for (p_insn
= prologue_seq
; p_insn
; p_insn
= NEXT_INSN (p_insn
))
577 HARD_REG_SET this_used
;
578 if (!NONDEBUG_INSN_P (p_insn
))
581 CLEAR_HARD_REG_SET (this_used
);
582 note_uses (&PATTERN (p_insn
), record_hard_reg_uses
,
584 AND_COMPL_HARD_REG_SET (this_used
, prologue_clobbered
);
585 IOR_HARD_REG_SET (prologue_used
, this_used
);
586 note_stores (PATTERN (p_insn
), record_hard_reg_sets
,
587 &prologue_clobbered
);
590 prepare_shrink_wrap ((*entry_edge
)->dest
);
592 bitmap_initialize (&bb_antic_flags
, &bitmap_default_obstack
);
593 bitmap_initialize (&bb_on_list
, &bitmap_default_obstack
);
594 bitmap_initialize (&bb_tail
, &bitmap_default_obstack
);
596 /* Find the set of basic blocks that require a stack frame,
597 and blocks that are too big to be duplicated. */
599 vec
.create (n_basic_blocks_for_fn (cfun
));
601 CLEAR_HARD_REG_SET (set_up_by_prologue
.set
);
602 add_to_hard_reg_set (&set_up_by_prologue
.set
, Pmode
,
603 STACK_POINTER_REGNUM
);
604 add_to_hard_reg_set (&set_up_by_prologue
.set
, Pmode
, ARG_POINTER_REGNUM
);
605 if (frame_pointer_needed
)
606 add_to_hard_reg_set (&set_up_by_prologue
.set
, Pmode
,
607 HARD_FRAME_POINTER_REGNUM
);
608 if (pic_offset_table_rtx
609 && (unsigned) PIC_OFFSET_TABLE_REGNUM
!= INVALID_REGNUM
)
610 add_to_hard_reg_set (&set_up_by_prologue
.set
, Pmode
,
611 PIC_OFFSET_TABLE_REGNUM
);
613 add_to_hard_reg_set (&set_up_by_prologue
.set
,
614 GET_MODE (crtl
->drap_reg
),
615 REGNO (crtl
->drap_reg
));
616 if (targetm
.set_up_by_prologue
)
617 targetm
.set_up_by_prologue (&set_up_by_prologue
);
619 /* We don't use a different max size depending on
620 optimize_bb_for_speed_p because increasing shrink-wrapping
621 opportunities by duplicating tail blocks can actually result
622 in an overall decrease in code size. */
623 max_grow_size
= get_uncond_jump_length ();
624 max_grow_size
*= PARAM_VALUE (PARAM_MAX_GROW_COPY_BB_INSNS
);
626 FOR_EACH_BB_FN (bb
, cfun
)
631 FOR_BB_INSNS (bb
, insn
)
632 if (NONDEBUG_INSN_P (insn
))
634 if (requires_stack_frame_p (insn
, prologue_used
,
635 set_up_by_prologue
.set
))
637 if (bb
== (*entry_edge
)->dest
)
638 goto fail_shrinkwrap
;
639 bitmap_set_bit (bb_flags
, bb
->index
);
643 else if (size
<= max_grow_size
)
645 size
+= get_attr_min_length (insn
);
646 if (size
> max_grow_size
)
647 bitmap_set_bit (&bb_on_list
, bb
->index
);
652 /* Blocks that really need a prologue, or are too big for tails. */
653 bitmap_ior_into (&bb_on_list
, bb_flags
);
655 /* For every basic block that needs a prologue, mark all blocks
656 reachable from it, so as to ensure they are also seen as
657 requiring a prologue. */
658 while (!vec
.is_empty ())
660 basic_block tmp_bb
= vec
.pop ();
662 FOR_EACH_EDGE (e
, ei
, tmp_bb
->succs
)
663 if (e
->dest
!= EXIT_BLOCK_PTR_FOR_FN (cfun
)
664 && bitmap_set_bit (bb_flags
, e
->dest
->index
))
665 vec
.quick_push (e
->dest
);
668 /* Find the set of basic blocks that need no prologue, have a
669 single successor, can be duplicated, meet a max size
670 requirement, and go to the exit via like blocks. */
671 vec
.quick_push (EXIT_BLOCK_PTR_FOR_FN (cfun
));
672 while (!vec
.is_empty ())
674 basic_block tmp_bb
= vec
.pop ();
676 FOR_EACH_EDGE (e
, ei
, tmp_bb
->preds
)
677 if (single_succ_p (e
->src
)
678 && !bitmap_bit_p (&bb_on_list
, e
->src
->index
)
679 && can_duplicate_block_p (e
->src
))
684 /* If there is predecessor of e->src which doesn't
685 need prologue and the edge is complex,
686 we might not be able to redirect the branch
687 to a copy of e->src. */
688 FOR_EACH_EDGE (pe
, pei
, e
->src
->preds
)
689 if ((pe
->flags
& EDGE_COMPLEX
) != 0
690 && !bitmap_bit_p (bb_flags
, pe
->src
->index
))
692 if (pe
== NULL
&& bitmap_set_bit (&bb_tail
, e
->src
->index
))
693 vec
.quick_push (e
->src
);
697 /* Now walk backwards from every block that is marked as needing
698 a prologue to compute the bb_antic_flags bitmap. Exclude
699 tail blocks; They can be duplicated to be used on paths not
700 needing a prologue. */
701 bitmap_clear (&bb_on_list
);
702 bitmap_and_compl (&bb_antic_flags
, bb_flags
, &bb_tail
);
703 FOR_EACH_BB_FN (bb
, cfun
)
705 if (!bitmap_bit_p (&bb_antic_flags
, bb
->index
))
707 FOR_EACH_EDGE (e
, ei
, bb
->preds
)
708 if (!bitmap_bit_p (&bb_antic_flags
, e
->src
->index
)
709 && bitmap_set_bit (&bb_on_list
, e
->src
->index
))
710 vec
.quick_push (e
->src
);
712 while (!vec
.is_empty ())
714 basic_block tmp_bb
= vec
.pop ();
717 bitmap_clear_bit (&bb_on_list
, tmp_bb
->index
);
718 FOR_EACH_EDGE (e
, ei
, tmp_bb
->succs
)
719 if (!bitmap_bit_p (&bb_antic_flags
, e
->dest
->index
))
727 bitmap_set_bit (&bb_antic_flags
, tmp_bb
->index
);
728 FOR_EACH_EDGE (e
, ei
, tmp_bb
->preds
)
729 if (!bitmap_bit_p (&bb_antic_flags
, e
->src
->index
)
730 && bitmap_set_bit (&bb_on_list
, e
->src
->index
))
731 vec
.quick_push (e
->src
);
734 /* Find exactly one edge that leads to a block in ANTIC from
735 a block that isn't. */
736 if (!bitmap_bit_p (&bb_antic_flags
, (*entry_edge
)->dest
->index
))
737 FOR_EACH_BB_FN (bb
, cfun
)
739 if (!bitmap_bit_p (&bb_antic_flags
, bb
->index
))
741 FOR_EACH_EDGE (e
, ei
, bb
->preds
)
742 if (!bitmap_bit_p (&bb_antic_flags
, e
->src
->index
))
744 if (*entry_edge
!= orig_entry_edge
)
746 *entry_edge
= orig_entry_edge
;
748 fprintf (dump_file
, "More than one candidate edge.\n");
749 goto fail_shrinkwrap
;
752 fprintf (dump_file
, "Found candidate edge for "
753 "shrink-wrapping, %d->%d.\n", e
->src
->index
,
759 if (*entry_edge
!= orig_entry_edge
)
761 /* Test whether the prologue is known to clobber any register
762 (other than FP or SP) which are live on the edge. */
763 CLEAR_HARD_REG_BIT (prologue_clobbered
, STACK_POINTER_REGNUM
);
764 if (frame_pointer_needed
)
765 CLEAR_HARD_REG_BIT (prologue_clobbered
, HARD_FRAME_POINTER_REGNUM
);
766 REG_SET_TO_HARD_REG_SET (live_on_edge
,
767 df_get_live_in ((*entry_edge
)->dest
));
768 if (hard_reg_set_intersect_p (live_on_edge
, prologue_clobbered
))
770 *entry_edge
= orig_entry_edge
;
773 "Shrink-wrapping aborted due to clobber.\n");
776 if (*entry_edge
!= orig_entry_edge
)
778 crtl
->shrink_wrapped
= true;
780 fprintf (dump_file
, "Performing shrink-wrapping.\n");
782 /* Find tail blocks reachable from both blocks needing a
783 prologue and blocks not needing a prologue. */
784 if (!bitmap_empty_p (&bb_tail
))
785 FOR_EACH_BB_FN (bb
, cfun
)
787 bool some_pro
, some_no_pro
;
788 if (!bitmap_bit_p (&bb_tail
, bb
->index
))
790 some_pro
= some_no_pro
= false;
791 FOR_EACH_EDGE (e
, ei
, bb
->preds
)
793 if (bitmap_bit_p (bb_flags
, e
->src
->index
))
798 if (some_pro
&& some_no_pro
)
801 bitmap_clear_bit (&bb_tail
, bb
->index
);
803 /* Find the head of each tail. */
804 while (!vec
.is_empty ())
806 basic_block tbb
= vec
.pop ();
808 if (!bitmap_bit_p (&bb_tail
, tbb
->index
))
811 while (single_succ_p (tbb
))
813 tbb
= single_succ (tbb
);
814 bitmap_clear_bit (&bb_tail
, tbb
->index
);
817 /* Now duplicate the tails. */
818 if (!bitmap_empty_p (&bb_tail
))
819 FOR_EACH_BB_REVERSE_FN (bb
, cfun
)
821 basic_block copy_bb
, tbb
;
822 rtx_insn
*insert_point
;
825 if (!bitmap_clear_bit (&bb_tail
, bb
->index
))
828 /* Create a copy of BB, instructions and all, for
829 use on paths that don't need a prologue.
830 Ideal placement of the copy is on a fall-thru edge
831 or after a block that would jump to the copy. */
832 FOR_EACH_EDGE (e
, ei
, bb
->preds
)
833 if (!bitmap_bit_p (bb_flags
, e
->src
->index
)
834 && single_succ_p (e
->src
))
838 /* Make sure we insert after any barriers. */
839 rtx_insn
*end
= get_last_bb_insn (e
->src
);
840 copy_bb
= create_basic_block (NEXT_INSN (end
),
842 BB_COPY_PARTITION (copy_bb
, e
->src
);
846 /* Otherwise put the copy at the end of the function. */
847 copy_bb
= create_basic_block (NULL_RTX
, NULL_RTX
,
848 EXIT_BLOCK_PTR_FOR_FN (cfun
)->prev_bb
);
849 BB_COPY_PARTITION (copy_bb
, bb
);
852 insert_point
= emit_note_after (NOTE_INSN_DELETED
,
854 emit_barrier_after (BB_END (copy_bb
));
859 dup_block_and_redirect (tbb
, copy_bb
, insert_point
,
861 tbb
= single_succ (tbb
);
862 if (tbb
== EXIT_BLOCK_PTR_FOR_FN (cfun
))
864 e
= split_block (copy_bb
, PREV_INSN (insert_point
));
868 /* Quiet verify_flow_info by (ab)using EDGE_FAKE.
869 We have yet to add a simple_return to the tails,
870 as we'd like to first convert_jumps_to_returns in
871 case the block is no longer used after that. */
873 if (CALL_P (PREV_INSN (insert_point
))
874 && SIBLING_CALL_P (PREV_INSN (insert_point
)))
875 eflags
= EDGE_SIBCALL
| EDGE_ABNORMAL
;
876 make_single_succ_edge (copy_bb
, EXIT_BLOCK_PTR_FOR_FN (cfun
),
879 /* verify_flow_info doesn't like a note after a
881 delete_insn (insert_point
);
882 if (bitmap_empty_p (&bb_tail
))
888 bitmap_clear (&bb_tail
);
889 bitmap_clear (&bb_antic_flags
);
890 bitmap_clear (&bb_on_list
);
895 /* If we're allowed to generate a simple return instruction, then by
896 definition we don't need a full epilogue. If the last basic
897 block before the exit block does not contain active instructions,
898 examine its predecessors and try to emit (conditional) return
902 get_unconverted_simple_return (edge exit_fallthru_edge
, bitmap_head bb_flags
,
903 vec
<edge
> *unconverted_simple_returns
,
904 rtx_insn
**returnjump
)
910 /* convert_jumps_to_returns may add to preds of the exit block
911 (but won't remove). Stop at end of current preds. */
912 last
= EDGE_COUNT (EXIT_BLOCK_PTR_FOR_FN (cfun
)->preds
);
913 for (i
= 0; i
< last
; i
++)
915 edge e
= EDGE_I (EXIT_BLOCK_PTR_FOR_FN (cfun
)->preds
, i
);
916 if (LABEL_P (BB_HEAD (e
->src
))
917 && !bitmap_bit_p (&bb_flags
, e
->src
->index
)
918 && !active_insn_between (BB_HEAD (e
->src
), BB_END (e
->src
)))
919 *unconverted_simple_returns
920 = convert_jumps_to_returns (e
->src
, true,
921 *unconverted_simple_returns
);
925 if (exit_fallthru_edge
!= NULL
926 && EDGE_COUNT (exit_fallthru_edge
->src
->preds
) != 0
927 && !bitmap_bit_p (&bb_flags
, exit_fallthru_edge
->src
->index
))
931 last_bb
= emit_return_for_exit (exit_fallthru_edge
, true);
932 *returnjump
= BB_END (last_bb
);
933 exit_fallthru_edge
= NULL
;
935 return exit_fallthru_edge
;
938 /* If there were branches to an empty LAST_BB which we tried to
939 convert to conditional simple_returns, but couldn't for some
940 reason, create a block to hold a simple_return insn and redirect
941 those remaining edges. */
944 convert_to_simple_return (edge entry_edge
, edge orig_entry_edge
,
945 bitmap_head bb_flags
, rtx_insn
*returnjump
,
946 vec
<edge
> unconverted_simple_returns
)
951 if (!unconverted_simple_returns
.is_empty ())
953 basic_block simple_return_block_hot
= NULL
;
954 basic_block simple_return_block_cold
= NULL
;
955 edge pending_edge_hot
= NULL
;
956 edge pending_edge_cold
= NULL
;
957 basic_block exit_pred
;
960 gcc_assert (entry_edge
!= orig_entry_edge
);
962 /* See if we can reuse the last insn that was emitted for the
964 if (returnjump
!= NULL_RTX
965 && JUMP_LABEL (returnjump
) == simple_return_rtx
)
967 e
= split_block (BLOCK_FOR_INSN (returnjump
), PREV_INSN (returnjump
));
968 if (BB_PARTITION (e
->src
) == BB_HOT_PARTITION
)
969 simple_return_block_hot
= e
->dest
;
971 simple_return_block_cold
= e
->dest
;
974 /* Also check returns we might need to add to tail blocks. */
975 FOR_EACH_EDGE (e
, ei
, EXIT_BLOCK_PTR_FOR_FN (cfun
)->preds
)
976 if (EDGE_COUNT (e
->src
->preds
) != 0
977 && (e
->flags
& EDGE_FAKE
) != 0
978 && !bitmap_bit_p (&bb_flags
, e
->src
->index
))
980 if (BB_PARTITION (e
->src
) == BB_HOT_PARTITION
)
981 pending_edge_hot
= e
;
983 pending_edge_cold
= e
;
986 /* Save a pointer to the exit's predecessor BB for use in
987 inserting new BBs at the end of the function. Do this
988 after the call to split_block above which may split
989 the original exit pred. */
990 exit_pred
= EXIT_BLOCK_PTR_FOR_FN (cfun
)->prev_bb
;
992 FOR_EACH_VEC_ELT (unconverted_simple_returns
, i
, e
)
994 basic_block
*pdest_bb
;
997 if (BB_PARTITION (e
->src
) == BB_HOT_PARTITION
)
999 pdest_bb
= &simple_return_block_hot
;
1000 pending
= pending_edge_hot
;
1004 pdest_bb
= &simple_return_block_cold
;
1005 pending
= pending_edge_cold
;
1008 if (*pdest_bb
== NULL
&& pending
!= NULL
)
1010 emit_return_into_block (true, pending
->src
);
1011 pending
->flags
&= ~(EDGE_FALLTHRU
| EDGE_FAKE
);
1012 *pdest_bb
= pending
->src
;
1014 else if (*pdest_bb
== NULL
)
1019 bb
= create_basic_block (NULL
, NULL
, exit_pred
);
1020 BB_COPY_PARTITION (bb
, e
->src
);
1021 start
= emit_jump_insn_after (gen_simple_return (),
1023 JUMP_LABEL (start
) = simple_return_rtx
;
1024 emit_barrier_after (start
);
1027 make_edge (bb
, EXIT_BLOCK_PTR_FOR_FN (cfun
), 0);
1029 redirect_edge_and_branch_force (e
, *pdest_bb
);
1031 unconverted_simple_returns
.release ();
1034 if (entry_edge
!= orig_entry_edge
)
1036 FOR_EACH_EDGE (e
, ei
, EXIT_BLOCK_PTR_FOR_FN (cfun
)->preds
)
1037 if (EDGE_COUNT (e
->src
->preds
) != 0
1038 && (e
->flags
& EDGE_FAKE
) != 0
1039 && !bitmap_bit_p (&bb_flags
, e
->src
->index
))
1041 emit_return_into_block (true, e
->src
);
1042 e
->flags
&= ~(EDGE_FALLTHRU
| EDGE_FAKE
);