diff options
Diffstat (limited to 'gcc/unroll.c')
-rw-r--r-- | gcc/unroll.c | 50 |
1 files changed, 3 insertions, 47 deletions
diff --git a/gcc/unroll.c b/gcc/unroll.c index ceec66ee0d3..26fcaf7223f 100644 --- a/gcc/unroll.c +++ b/gcc/unroll.c @@ -268,53 +268,6 @@ unroll_loop (loop, insn_count, strength_reduce_p) return; } - /* When emitting debugger info, we can't unroll loops with unequal numbers - of block_beg and block_end notes, because that would unbalance the block - structure of the function. This can happen as a result of the - "if (foo) bar; else break;" optimization in jump.c. */ - /* ??? Gcc has a general policy that -g is never supposed to change the code - that the compiler emits, so we must disable this optimization always, - even if debug info is not being output. This is rare, so this should - not be a significant performance problem. */ - - if (1 /* write_symbols != NO_DEBUG */) - { - int block_begins = 0; - int block_ends = 0; - - for (insn = loop_start; insn != loop_end; insn = NEXT_INSN (insn)) - { - if (GET_CODE (insn) == NOTE) - { - if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_BLOCK_BEG) - block_begins++; - else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_BLOCK_END) - block_ends++; - if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_EH_REGION_BEG - || NOTE_LINE_NUMBER (insn) == NOTE_INSN_EH_REGION_END) - { - /* Note, would be nice to add code to unroll EH - regions, but until that time, we punt (don't - unroll). For the proper way of doing it, see - expand_inline_function. */ - - if (loop_dump_stream) - fprintf (loop_dump_stream, - "Unrolling failure: cannot unroll EH regions.\n"); - return; - } - } - } - - if (block_begins != block_ends) - { - if (loop_dump_stream) - fprintf (loop_dump_stream, - "Unrolling failure: Unbalanced block notes.\n"); - return; - } - } - /* Determine type of unroll to perform. Depends on the number of iterations and the size of the loop. */ @@ -2046,6 +1999,7 @@ copy_loop_body (loop, copy_start, copy_end, map, exit_label, last_iteration, copy = emit_insn (pattern); } REG_NOTES (copy) = initial_reg_note_copy (REG_NOTES (insn), map); + INSN_SCOPE (copy) = INSN_SCOPE (insn); #ifdef HAVE_cc0 /* If this insn is setting CC0, it may need to look at @@ -2092,6 +2046,7 @@ copy_loop_body (loop, copy_start, copy_end, map, exit_label, last_iteration, pattern = copy_rtx_and_substitute (PATTERN (insn), map, 0); copy = emit_jump_insn (pattern); REG_NOTES (copy) = initial_reg_note_copy (REG_NOTES (insn), map); + INSN_SCOPE (copy) = INSN_SCOPE (insn); if (JUMP_LABEL (insn)) { @@ -2215,6 +2170,7 @@ copy_loop_body (loop, copy_start, copy_end, map, exit_label, last_iteration, pattern = copy_rtx_and_substitute (PATTERN (insn), map, 0); copy = emit_call_insn (pattern); REG_NOTES (copy) = initial_reg_note_copy (REG_NOTES (insn), map); + INSN_SCOPE (copy) = INSN_SCOPE (insn); SIBLING_CALL_P (copy) = SIBLING_CALL_P (insn); /* Because the USAGE information potentially contains objects other |