Commit 321cf1f2 by Kazu Hirata Committed by Kazu Hirata

calls.c (emit_call_1): Don't use REG_ALWAYS_RETURN.

	* calls.c (emit_call_1): Don't use  REG_ALWAYS_RETURN.
	(emit_library_call_value_1): Don't use LCT_ALWAYS_RETURN and
	REG_ALWAYS_RETURN.
	* cfgrtl.c (need_fake_edge_p): Likewise.
	* combine.c (distribute_notes): Likewise.
	* emit-rtl.c (try_split): Likewise.
	* recog.c (peephole2_opimize): Likewise.
	* reg-notes.def (ALWAYS_RETURN): Remove.
	* rtl.h (LCT_ALWAYS_RETURN): Remove.
	* tree-cfg.c (need_fake_edge_p): Don't use ECF_ALWAYS_RETURN.
	* tree.h (ECF_ALWAYS_RETURN): Remove.

From-SVN: r95690
parent ac5205bd
2005-02-28 Kazu Hirata <kazu@cs.umass.edu>
* calls.c (emit_call_1): Don't use REG_ALWAYS_RETURN.
(emit_library_call_value_1): Don't use LCT_ALWAYS_RETURN and
REG_ALWAYS_RETURN.
* cfgrtl.c (need_fake_edge_p): Likewise.
* combine.c (distribute_notes): Likewise.
* emit-rtl.c (try_split): Likewise.
* recog.c (peephole2_opimize): Likewise.
* reg-notes.def (ALWAYS_RETURN): Remove.
* rtl.h (LCT_ALWAYS_RETURN): Remove.
* tree-cfg.c (need_fake_edge_p): Don't use ECF_ALWAYS_RETURN.
* tree.h (ECF_ALWAYS_RETURN): Remove.
2005-02-28 Roger Sayle <roger@eyesopen.com> 2005-02-28 Roger Sayle <roger@eyesopen.com>
PR middle-end/19874 PR middle-end/19874
......
...@@ -395,9 +395,6 @@ emit_call_1 (rtx funexp, tree fntree, tree fndecl ATTRIBUTE_UNUSED, ...@@ -395,9 +395,6 @@ emit_call_1 (rtx funexp, tree fntree, tree fndecl ATTRIBUTE_UNUSED,
if (ecf_flags & ECF_NORETURN) if (ecf_flags & ECF_NORETURN)
REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_NORETURN, const0_rtx, REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_NORETURN, const0_rtx,
REG_NOTES (call_insn)); REG_NOTES (call_insn));
if (ecf_flags & ECF_ALWAYS_RETURN)
REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_ALWAYS_RETURN, const0_rtx,
REG_NOTES (call_insn));
if (ecf_flags & ECF_RETURNS_TWICE) if (ecf_flags & ECF_RETURNS_TWICE)
{ {
...@@ -3234,9 +3231,6 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value, ...@@ -3234,9 +3231,6 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
case LCT_THROW: case LCT_THROW:
flags = ECF_NORETURN; flags = ECF_NORETURN;
break; break;
case LCT_ALWAYS_RETURN:
flags = ECF_ALWAYS_RETURN;
break;
case LCT_RETURNS_TWICE: case LCT_RETURNS_TWICE:
flags = ECF_RETURNS_TWICE; flags = ECF_RETURNS_TWICE;
break; break;
......
...@@ -2892,7 +2892,6 @@ need_fake_edge_p (rtx insn) ...@@ -2892,7 +2892,6 @@ need_fake_edge_p (rtx insn)
if ((CALL_P (insn) if ((CALL_P (insn)
&& !SIBLING_CALL_P (insn) && !SIBLING_CALL_P (insn)
&& !find_reg_note (insn, REG_NORETURN, NULL) && !find_reg_note (insn, REG_NORETURN, NULL)
&& !find_reg_note (insn, REG_ALWAYS_RETURN, NULL)
&& !CONST_OR_PURE_CALL_P (insn))) && !CONST_OR_PURE_CALL_P (insn)))
return true; return true;
......
...@@ -11886,7 +11886,6 @@ distribute_notes (rtx notes, rtx from_insn, rtx i3, rtx i2) ...@@ -11886,7 +11886,6 @@ distribute_notes (rtx notes, rtx from_insn, rtx i3, rtx i2)
} }
break; break;
case REG_ALWAYS_RETURN:
case REG_NORETURN: case REG_NORETURN:
case REG_SETJMP: case REG_SETJMP:
/* These notes must remain with the call. It should not be /* These notes must remain with the call. It should not be
......
...@@ -3206,7 +3206,6 @@ try_split (rtx pat, rtx trial, int last) ...@@ -3206,7 +3206,6 @@ try_split (rtx pat, rtx trial, int last)
case REG_NORETURN: case REG_NORETURN:
case REG_SETJMP: case REG_SETJMP:
case REG_ALWAYS_RETURN:
insn = insn_last; insn = insn_last;
while (insn != NULL_RTX) while (insn != NULL_RTX)
{ {
......
...@@ -3070,7 +3070,6 @@ peephole2_optimize (FILE *dump_file ATTRIBUTE_UNUSED) ...@@ -3070,7 +3070,6 @@ peephole2_optimize (FILE *dump_file ATTRIBUTE_UNUSED)
{ {
case REG_NORETURN: case REG_NORETURN:
case REG_SETJMP: case REG_SETJMP:
case REG_ALWAYS_RETURN:
REG_NOTES (new_insn) REG_NOTES (new_insn)
= gen_rtx_EXPR_LIST (REG_NOTE_KIND (note), = gen_rtx_EXPR_LIST (REG_NOTE_KIND (note),
XEXP (note, 0), XEXP (note, 0),
......
...@@ -167,6 +167,3 @@ REG_NOTE (CROSSING_JUMP) ...@@ -167,6 +167,3 @@ REG_NOTE (CROSSING_JUMP)
/* This kind of note is generated at each to `setjmp', and similar /* This kind of note is generated at each to `setjmp', and similar
functions that can return twice. */ functions that can return twice. */
REG_NOTE (SETJMP) REG_NOTE (SETJMP)
/* Indicate calls that always returns. */
REG_NOTE (ALWAYS_RETURN)
...@@ -2099,8 +2099,7 @@ enum libcall_type ...@@ -2099,8 +2099,7 @@ enum libcall_type
LCT_PURE_MAKE_BLOCK = 4, LCT_PURE_MAKE_BLOCK = 4,
LCT_NORETURN = 5, LCT_NORETURN = 5,
LCT_THROW = 6, LCT_THROW = 6,
LCT_ALWAYS_RETURN = 7, LCT_RETURNS_TWICE = 7
LCT_RETURNS_TWICE = 8
}; };
extern void emit_library_call (rtx, enum libcall_type, enum machine_mode, int, extern void emit_library_call (rtx, enum libcall_type, enum machine_mode, int,
......
...@@ -5327,7 +5327,7 @@ need_fake_edge_p (tree t) ...@@ -5327,7 +5327,7 @@ need_fake_edge_p (tree t)
tree call; tree call;
/* NORETURN and LONGJMP calls already have an edge to exit. /* NORETURN and LONGJMP calls already have an edge to exit.
CONST, PURE and ALWAYS_RETURN calls do not need one. CONST and PURE calls do not need one.
We don't currently check for CONST and PURE here, although We don't currently check for CONST and PURE here, although
it would be a good idea, because those attributes are it would be a good idea, because those attributes are
figured out from the RTL in mark_constant_function, and figured out from the RTL in mark_constant_function, and
...@@ -5335,7 +5335,7 @@ need_fake_edge_p (tree t) ...@@ -5335,7 +5335,7 @@ need_fake_edge_p (tree t)
leads to different results from -fbranch-probabilities. */ leads to different results from -fbranch-probabilities. */
call = get_call_expr_in (t); call = get_call_expr_in (t);
if (call if (call
&& !(call_expr_flags (call) & (ECF_NORETURN | ECF_ALWAYS_RETURN))) && !(call_expr_flags (call) & ECF_NORETURN))
return true; return true;
if (TREE_CODE (t) == ASM_EXPR if (TREE_CODE (t) == ASM_EXPR
......
...@@ -3688,10 +3688,8 @@ extern rtx emit_line_note (location_t); ...@@ -3688,10 +3688,8 @@ extern rtx emit_line_note (location_t);
/* Nonzero if this is a call to a function that returns with the stack /* Nonzero if this is a call to a function that returns with the stack
pointer depressed. */ pointer depressed. */
#define ECF_SP_DEPRESSED 256 #define ECF_SP_DEPRESSED 256
/* Nonzero if this call is known to always return. */
#define ECF_ALWAYS_RETURN 512
/* Create libcall block around the call. */ /* Create libcall block around the call. */
#define ECF_LIBCALL_BLOCK 1024 #define ECF_LIBCALL_BLOCK 512
extern int flags_from_decl_or_type (tree); extern int flags_from_decl_or_type (tree);
extern int call_expr_flags (tree); extern int call_expr_flags (tree);
......
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