Commit 28b21ebb by Richard Henderson

rs6000.c (rs6000_output_function_prologue): Don't try to insert an rtl prologue here.

	* config/rs6000/rs6000.c (rs6000_output_function_prologue): Don't
	try to insert an rtl prologue here.
	(rs6000_output_function_epilogue): Similarly.
	* config/rs6000/rs6000.md (prologue): Emit a barrier to
	satisfy !TARGET_SCHED_PROLOG.
	(epilogue, sibcall_epilogue): Likewise.

From-SVN: r176081
parent 41de45c6
2011-07-09 Richard Henderson <rth@redhat.com>
* config/rs6000/rs6000.c (rs6000_output_function_prologue): Don't
try to insert an rtl prologue here.
(rs6000_output_function_epilogue): Similarly.
* config/rs6000/rs6000.md (prologue): Emit a barrier to
satisfy !TARGET_SCHED_PROLOG.
(epilogue, sibcall_epilogue): Likewise.
2011-07-09 Eric Botcazou <ebotcazou@adacore.com> 2011-07-09 Eric Botcazou <ebotcazou@adacore.com>
* config/sparc/sparc.h (STACK_SAVEAREA_MODE): Move around. * config/sparc/sparc.h (STACK_SAVEAREA_MODE): Move around.
...@@ -864,10 +873,10 @@ ...@@ -864,10 +873,10 @@
PR tree-optimization/49580 PR tree-optimization/49580
* tree-cfg.c (gimple_duplicate_sese_tail): Remove handling of * tree-cfg.c (gimple_duplicate_sese_tail): Remove handling of
the loop's number of iterations. the loop's number of iterations.
* tree-parloops.c (transform_to_exit_first_loop): Add the * tree-parloops.c (transform_to_exit_first_loop): Add the
handling of the loop's number of iterations before the call handling of the loop's number of iterations before the call
to gimple_duplicate_sese_tail. to gimple_duplicate_sese_tail.
Insert the stmt caclculating the new rhs of the loop's Insert the stmt caclculating the new rhs of the loop's
condition stmt to the preheader instead of iters_bb. condition stmt to the preheader instead of iters_bb.
2011-07-05 H.J. Lu <hongjiu.lu@intel.com> 2011-07-05 H.J. Lu <hongjiu.lu@intel.com>
......
...@@ -20570,39 +20570,6 @@ rs6000_output_function_prologue (FILE *file, ...@@ -20570,39 +20570,6 @@ rs6000_output_function_prologue (FILE *file,
common_mode_defined = 1; common_mode_defined = 1;
} }
if (! HAVE_prologue)
{
rtx prologue;
start_sequence ();
/* A NOTE_INSN_DELETED is supposed to be at the start and end of
the "toplevel" insn chain. */
emit_note (NOTE_INSN_DELETED);
rs6000_emit_prologue ();
emit_note (NOTE_INSN_DELETED);
/* Expand INSN_ADDRESSES so final() doesn't crash. */
{
rtx insn;
unsigned addr = 0;
for (insn = get_insns (); insn != 0; insn = NEXT_INSN (insn))
{
INSN_ADDRESSES_NEW (insn, addr);
addr += 4;
}
}
prologue = get_insns ();
end_sequence ();
if (TARGET_DEBUG_STACK)
debug_rtx_list (prologue, 100);
emit_insn_before_noloc (prologue, BB_HEAD (ENTRY_BLOCK_PTR->next_bb),
ENTRY_BLOCK_PTR);
}
rs6000_pic_labelno++; rs6000_pic_labelno++;
} }
...@@ -21413,43 +21380,6 @@ static void ...@@ -21413,43 +21380,6 @@ static void
rs6000_output_function_epilogue (FILE *file, rs6000_output_function_epilogue (FILE *file,
HOST_WIDE_INT size ATTRIBUTE_UNUSED) HOST_WIDE_INT size ATTRIBUTE_UNUSED)
{ {
if (! HAVE_epilogue)
{
rtx insn = get_last_insn ();
/* If the last insn was a BARRIER, we don't have to write anything except
the trace table. */
if (GET_CODE (insn) == NOTE)
insn = prev_nonnote_insn (insn);
if (insn == 0 || GET_CODE (insn) != BARRIER)
{
/* This is slightly ugly, but at least we don't have two
copies of the epilogue-emitting code. */
start_sequence ();
/* A NOTE_INSN_DELETED is supposed to be at the start
and end of the "toplevel" insn chain. */
emit_note (NOTE_INSN_DELETED);
rs6000_emit_epilogue (FALSE);
emit_note (NOTE_INSN_DELETED);
/* Expand INSN_ADDRESSES so final() doesn't crash. */
{
rtx insn;
unsigned addr = 0;
for (insn = get_insns (); insn != 0; insn = NEXT_INSN (insn))
{
INSN_ADDRESSES_NEW (insn, addr);
addr += 4;
}
}
if (TARGET_DEBUG_STACK)
debug_rtx_list (get_insns (), 100);
final (get_insns (), file, FALSE);
end_sequence ();
}
}
#if TARGET_MACHO #if TARGET_MACHO
macho_branch_islands (); macho_branch_islands ();
/* Mach-O doesn't support labels at the end of objects, so if /* Mach-O doesn't support labels at the end of objects, so if
......
...@@ -13025,12 +13025,13 @@ ...@@ -13025,12 +13025,13 @@
(define_expand "sibcall_epilogue" (define_expand "sibcall_epilogue"
[(use (const_int 0))] [(use (const_int 0))]
"TARGET_SCHED_PROLOG" ""
"
{ {
rs6000_emit_epilogue (TRUE); if (!TARGET_SCHED_PROLOG)
DONE; emit_insn (gen_blockage ());
}") rs6000_emit_epilogue (TRUE);
DONE;
})
;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and ;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and
;; all of memory. This blocks insns from being moved across this point. ;; all of memory. This blocks insns from being moved across this point.
...@@ -15791,12 +15792,13 @@ ...@@ -15791,12 +15792,13 @@
(define_expand "prologue" (define_expand "prologue"
[(use (const_int 0))] [(use (const_int 0))]
"TARGET_SCHED_PROLOG" ""
"
{ {
rs6000_emit_prologue (); rs6000_emit_prologue ();
DONE; if (!TARGET_SCHED_PROLOG)
}") emit_insn (gen_blockage ());
DONE;
})
(define_insn "*movesi_from_cr_one" (define_insn "*movesi_from_cr_one"
[(match_parallel 0 "mfcr_operation" [(match_parallel 0 "mfcr_operation"
...@@ -15946,12 +15948,13 @@ ...@@ -15946,12 +15948,13 @@
(define_expand "epilogue" (define_expand "epilogue"
[(use (const_int 0))] [(use (const_int 0))]
"TARGET_SCHED_PROLOG" ""
"
{ {
rs6000_emit_epilogue (FALSE); if (!TARGET_SCHED_PROLOG)
DONE; emit_insn (gen_blockage ());
}") rs6000_emit_epilogue (FALSE);
DONE;
})
; On some processors, doing the mtcrf one CC register at a time is ; On some processors, doing the mtcrf one CC register at a time is
; faster (like on the 604e). On others, doing them all at once is ; faster (like on the 604e). On others, doing them all at once is
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment