Commit d0e82870 by Jakub Jelinek Committed by Jakub Jelinek

ia64.md (prologue_use): New.

	* config/ia64/ia64.md (prologue_use): New.
	* config/ia64/ia64.c (ia64_expand_prologue): Use
	gen_prologue_use instead of gen_rtx_USE.
	(group_barrier_needed_p): Handle CODE_FOR_prologue_use the same way
	as CODE_FOR_pred_rel_mutex.
	(ia64_sched_reorder2): Likewise.

	* gcc.c-torture/compile/20020116-1.c: New test.

From-SVN: r48946
parent 02c361a4
2002-01-17 Jakub Jelinek <jakub@redhat.com>
* config/ia64/ia64.md (prologue_use): New.
* config/ia64/ia64.c (ia64_expand_prologue): Use
gen_prologue_use instead of gen_rtx_USE.
(group_barrier_needed_p): Handle CODE_FOR_prologue_use the same way
as CODE_FOR_pred_rel_mutex.
(ia64_sched_reorder2): Likewise.
2002-01-16 Eric Christopher <echristo@redhat.com>
* config/mips/r3900.h: Reformat.
......
......@@ -2137,7 +2137,7 @@ ia64_expand_prologue ()
/* Even if we're not going to generate an epilogue, we still
need to save the register so that EH works. */
if (! epilogue_p && current_frame_info.reg_save_ar_unat)
emit_insn (gen_rtx_USE (VOIDmode, ar_unat_save_reg));
emit_insn (gen_prologue_use (ar_unat_save_reg));
}
else
ar_unat_save_reg = NULL_RTX;
......@@ -2178,7 +2178,7 @@ ia64_expand_prologue ()
/* Even if we're not going to generate an epilogue, we still
need to save the register so that EH works. */
if (! epilogue_p)
emit_insn (gen_rtx_USE (VOIDmode, alt_reg));
emit_insn (gen_prologue_use (alt_reg));
}
else
{
......@@ -2222,7 +2222,7 @@ ia64_expand_prologue ()
/* Even if we're not going to generate an epilogue, we still
need to save the register so that EH works. */
if (! epilogue_p)
emit_insn (gen_rtx_USE (VOIDmode, alt_reg));
emit_insn (gen_prologue_use (alt_reg));
}
else
{
......@@ -2262,7 +2262,7 @@ ia64_expand_prologue ()
/* Even if we're not going to generate an epilogue, we still
need to save the register so that EH works. */
if (! epilogue_p)
emit_insn (gen_rtx_USE (VOIDmode, alt_reg));
emit_insn (gen_prologue_use (alt_reg));
}
else
{
......@@ -4776,6 +4776,7 @@ group_barrier_needed_p (insn)
/* Doesn't generate code. */
case CODE_FOR_pred_rel_mutex:
case CODE_FOR_prologue_use:
return 0;
default:
......@@ -6393,7 +6394,8 @@ ia64_sched_reorder2 (dump, sched_verbose, ready, pn_ready, clock_var)
/* Ignore cycle displays and .pred.rel.mutex. */
if (insn_code == CODE_FOR_cycle_display
|| insn_code == CODE_FOR_pred_rel_mutex)
|| insn_code == CODE_FOR_pred_rel_mutex
|| insn_code == CODE_FOR_prologue_use)
continue;
if (insn_code == CODE_FOR_insn_group_barrier)
......
......@@ -67,6 +67,7 @@
;; 22 bundle selector
;; 23 cycle display
;; 24 addp4
;; 25 prologue_use
;;
;; unspec_volatile:
;; 0 alloc
......@@ -5302,3 +5303,12 @@
"addp4 %0 = 0,%1"
[(set_attr "itanium_class" "ialu")])
;;
;; As USE insns aren't meaningful after reload, this is used instead
;; to prevent deleting instructions setting registers for EH handling
(define_insn "prologue_use"
[(unspec:DI [(match_operand:DI 0 "register_operand" "")] 25)]
""
"// %0 needed for EH"
[(set_attr "itanium_class" "ignore")
(set_attr "predicable" "no")])
2002-01-17 Jakub Jelinek <jakub@redhat.com>
* gcc.c-torture/compile/20020116-1.c: New test.
2002-01-16 Jakub Jelinek <jakub@redhat.com>
* gcc.dg/20020116-2.c: New test.
......
void noret (void) __attribute__ ((noreturn));
int foo (int, char **);
char *a, *b;
int d;
int
main (int argc, char **argv)
{
register int c;
d = 1;
while ((c = foo (argc, argv)) != -1)
switch (c) {
case 's':
case 'c':
case 'f':
a = b;
break;
case 'v':
d = 1;
break;
case 'V':
d = 0;
break;
}
noret ();
return 0;
}
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