From 180720a5619f319261b28871eb6228063c3b1164 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 19 Jun 2018 21:31:44 +0000 Subject: [PATCH] tree-cfgcleanup.c (tree_forwarder_block_p): Do not return false at -O0 if the locus represent UNKNOWN_LOCATION but have... * tree-cfgcleanup.c (tree_forwarder_block_p): Do not return false at -O0 if the locus represent UNKNOWN_LOCATION but have different values. From-SVN: r261770 --- gcc/ChangeLog | 5 +++++ gcc/tree-cfgcleanup.c | 12 +++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cc607eb9700..8698635eaa4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2018-06-19 Eric Botcazou + + * tree-cfgcleanup.c (tree_forwarder_block_p): Do not return false at + -O0 if the locus represent UNKNOWN_LOCATION but have different values. + 2018-06-19 Aaron Sawdey * config/rs6000/rs6000-string.c (select_block_compare_mode): Check diff --git a/gcc/tree-cfgcleanup.c b/gcc/tree-cfgcleanup.c index d5464fdc4e4..b27ba8a7333 100644 --- a/gcc/tree-cfgcleanup.c +++ b/gcc/tree-cfgcleanup.c @@ -346,8 +346,11 @@ tree_forwarder_block_p (basic_block bb, bool phi_wanted) if (e->src == ENTRY_BLOCK_PTR_FOR_FN (cfun) || (e->flags & EDGE_EH)) return false; /* If goto_locus of any of the edges differs, prevent removing - the forwarder block for -O0. */ - else if (optimize == 0 && e->goto_locus != locus) + the forwarder block when not optimizing. */ + else if (!optimize + && (LOCATION_LOCUS (e->goto_locus) != UNKNOWN_LOCATION + || LOCATION_LOCUS (locus) != UNKNOWN_LOCATION) + && e->goto_locus != locus) return false; } @@ -362,7 +365,10 @@ tree_forwarder_block_p (basic_block bb, bool phi_wanted) case GIMPLE_LABEL: if (DECL_NONLOCAL (gimple_label_label (as_a (stmt)))) return false; - if (optimize == 0 && gimple_location (stmt) != locus) + if (!optimize + && (gimple_has_location (stmt) + || LOCATION_LOCUS (locus) != UNKNOWN_LOCATION) + && gimple_location (stmt) != locus) return false; break; -- 2.30.2