aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2017-12-19 17:50:31 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2017-12-19 17:50:31 +0000
commitafa7c9039c69e4bd5da6caab4df35ea32fd51db5 (patch)
tree792a16dead90049a61aa96e6fdfe303225646435
parent1e6bc14517c48daf008200f3f5616822e9e60bcd (diff)
downloadgcc-afa7c9039c69e4bd5da6caab4df35ea32fd51db5.zip
gcc-afa7c9039c69e4bd5da6caab4df35ea32fd51db5.tar.gz
gcc-afa7c9039c69e4bd5da6caab4df35ea32fd51db5.tar.bz2
[SFN] start rtl block with label, then markers
Emitting markers before labels turned out to not be worth the trouble. The markers outside BBs confuse the ebb scheduler, and they don't add any useful information. I'll arrange for markers to be moved past labels, even in gimple, but for now this will fix the two remaining known problems on ia64. for gcc/ChangeLog PR bootstrap/83396 * cfgexpand.c (expand_gimple_basic_block): Expand label first, even if there are markers before it. * cfgrtl.c (rtl_verify_bb_layout): Reject DEBUG_INSNs outside BBs. From-SVN: r255833
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/cfgexpand.c12
-rw-r--r--gcc/cfgrtl.c1
3 files changed, 11 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c5146d7..0552a93 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2017-12-19 Alexandre Oliva <aoliva@redhat.com>
+
+ PR bootstrap/83396
+ * cfgexpand.c (expand_gimple_basic_block): Expand label first,
+ even if there are markers before it.
+ * cfgrtl.c (rtl_verify_bb_layout): Reject DEBUG_INSNs outside BBs.
+
2017-12-19 Jakub Jelinek <jakub@redhat.com>
* read-rtl.c (parse_reg_note_name): Replace Yoda conditions with
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 85374d3..d1616e1 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -5515,20 +5515,16 @@ expand_gimple_basic_block (basic_block bb, bool disable_tail_calls)
gimple *label_stmt = stmt;
rtx_code_label **elt = lab_rtx_for_bb->get (bb);
- if (stmt)
- /* We'll get to it in the loop below, and get back to
- emit_label_and_note then. */
- ;
- else if (stmt || elt)
+ if (stmt || elt)
{
- emit_label_and_note:
gcc_checking_assert (!note);
last = get_last_insn ();
if (stmt)
{
expand_gimple_stmt (stmt);
- gsi_next (&gsi);
+ if (gsi_stmt (gsi) == stmt)
+ gsi_next (&gsi);
}
if (elt)
@@ -5555,7 +5551,7 @@ expand_gimple_basic_block (basic_block bb, bool disable_tail_calls)
stmt = gsi_stmt (gsi);
if (stmt == label_stmt)
- goto emit_label_and_note;
+ continue;
/* If this statement is a non-debug one, and we generate debug
insns, then this one might be the last real use of a TERed
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
index fda9f5d..45cccba 100644
--- a/gcc/cfgrtl.c
+++ b/gcc/cfgrtl.c
@@ -2954,7 +2954,6 @@ rtl_verify_bb_layout (void)
{
case BARRIER:
case NOTE:
- case DEBUG_INSN:
break;
case CODE_LABEL: