summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog14
-rw-r--r--gcc/calls.c6
-rw-r--r--gcc/cfgrtl.c1
-rw-r--r--gcc/combine.c1
-rw-r--r--gcc/emit-rtl.c1
-rw-r--r--gcc/recog.c1
-rw-r--r--gcc/reg-notes.def3
-rw-r--r--gcc/rtl.h3
-rw-r--r--gcc/tree-cfg.c4
-rw-r--r--gcc/tree.h4
10 files changed, 18 insertions, 20 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a0b92190d2b..3df549439f8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,17 @@
+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>
PR middle-end/19874
diff --git a/gcc/calls.c b/gcc/calls.c
index 291f88cb835..c84c903c332 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -395,9 +395,6 @@ emit_call_1 (rtx funexp, tree fntree, tree fndecl ATTRIBUTE_UNUSED,
if (ecf_flags & ECF_NORETURN)
REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_NORETURN, const0_rtx,
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)
{
@@ -3234,9 +3231,6 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
case LCT_THROW:
flags = ECF_NORETURN;
break;
- case LCT_ALWAYS_RETURN:
- flags = ECF_ALWAYS_RETURN;
- break;
case LCT_RETURNS_TWICE:
flags = ECF_RETURNS_TWICE;
break;
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
index 8de76449941..1b4eb45417f 100644
--- a/gcc/cfgrtl.c
+++ b/gcc/cfgrtl.c
@@ -2892,7 +2892,6 @@ need_fake_edge_p (rtx insn)
if ((CALL_P (insn)
&& !SIBLING_CALL_P (insn)
&& !find_reg_note (insn, REG_NORETURN, NULL)
- && !find_reg_note (insn, REG_ALWAYS_RETURN, NULL)
&& !CONST_OR_PURE_CALL_P (insn)))
return true;
diff --git a/gcc/combine.c b/gcc/combine.c
index 73b12bb4f0c..5d34dfa83f5 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -11886,7 +11886,6 @@ distribute_notes (rtx notes, rtx from_insn, rtx i3, rtx i2)
}
break;
- case REG_ALWAYS_RETURN:
case REG_NORETURN:
case REG_SETJMP:
/* These notes must remain with the call. It should not be
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 37bd66587d8..137f0b7d383 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -3206,7 +3206,6 @@ try_split (rtx pat, rtx trial, int last)
case REG_NORETURN:
case REG_SETJMP:
- case REG_ALWAYS_RETURN:
insn = insn_last;
while (insn != NULL_RTX)
{
diff --git a/gcc/recog.c b/gcc/recog.c
index 28b241075ab..1c0e27e27b3 100644
--- a/gcc/recog.c
+++ b/gcc/recog.c
@@ -3070,7 +3070,6 @@ peephole2_optimize (FILE *dump_file ATTRIBUTE_UNUSED)
{
case REG_NORETURN:
case REG_SETJMP:
- case REG_ALWAYS_RETURN:
REG_NOTES (new_insn)
= gen_rtx_EXPR_LIST (REG_NOTE_KIND (note),
XEXP (note, 0),
diff --git a/gcc/reg-notes.def b/gcc/reg-notes.def
index 85a122f6532..16124be7795 100644
--- a/gcc/reg-notes.def
+++ b/gcc/reg-notes.def
@@ -167,6 +167,3 @@ REG_NOTE (CROSSING_JUMP)
/* This kind of note is generated at each to `setjmp', and similar
functions that can return twice. */
REG_NOTE (SETJMP)
-
-/* Indicate calls that always returns. */
-REG_NOTE (ALWAYS_RETURN)
diff --git a/gcc/rtl.h b/gcc/rtl.h
index 689e13fb07e..9042e03729f 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -2099,8 +2099,7 @@ enum libcall_type
LCT_PURE_MAKE_BLOCK = 4,
LCT_NORETURN = 5,
LCT_THROW = 6,
- LCT_ALWAYS_RETURN = 7,
- LCT_RETURNS_TWICE = 8
+ LCT_RETURNS_TWICE = 7
};
extern void emit_library_call (rtx, enum libcall_type, enum machine_mode, int,
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 9e87dbfccb0..2ebc595624e 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -5327,7 +5327,7 @@ need_fake_edge_p (tree t)
tree call;
/* 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
it would be a good idea, because those attributes are
figured out from the RTL in mark_constant_function, and
@@ -5335,7 +5335,7 @@ need_fake_edge_p (tree t)
leads to different results from -fbranch-probabilities. */
call = get_call_expr_in (t);
if (call
- && !(call_expr_flags (call) & (ECF_NORETURN | ECF_ALWAYS_RETURN)))
+ && !(call_expr_flags (call) & ECF_NORETURN))
return true;
if (TREE_CODE (t) == ASM_EXPR
diff --git a/gcc/tree.h b/gcc/tree.h
index 81992f904bd..cb807eba4be 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -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
pointer depressed. */
#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. */
-#define ECF_LIBCALL_BLOCK 1024
+#define ECF_LIBCALL_BLOCK 512
extern int flags_from_decl_or_type (tree);
extern int call_expr_flags (tree);