From 92e5932309c2cb3ec3bd4aad5719139a2bf53daf Mon Sep 17 00:00:00 2001 From: marxin Date: Wed, 10 Dec 2014 14:07:47 +0000 Subject: PR ipa/63909 * gimple-iterator.h (gsi_start_bb_nondebug): New function. * ipa-icf-gimple.c (func_checker::compare_bb): Correct iteration replaces loop based on precomputed number of non-debug statements. * gcc.dg/ipa/pr63909.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@218578 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ipa-icf-gimple.c | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) (limited to 'gcc/ipa-icf-gimple.c') diff --git a/gcc/ipa-icf-gimple.c b/gcc/ipa-icf-gimple.c index 8f2a438abc9..ec0290a4013 100644 --- a/gcc/ipa-icf-gimple.c +++ b/gcc/ipa-icf-gimple.c @@ -559,24 +559,16 @@ func_checker::parse_labels (sem_bb *bb) bool func_checker::compare_bb (sem_bb *bb1, sem_bb *bb2) { - unsigned i; gimple_stmt_iterator gsi1, gsi2; gimple s1, s2; - if (bb1->nondbg_stmt_count != bb2->nondbg_stmt_count - || bb1->edge_count != bb2->edge_count) - return return_false (); - - gsi1 = gsi_start_bb (bb1->bb); - gsi2 = gsi_start_bb (bb2->bb); + gsi1 = gsi_start_bb_nondebug (bb1->bb); + gsi2 = gsi_start_bb_nondebug (bb2->bb); - for (i = 0; i < bb1->nondbg_stmt_count; i++) + while (!gsi_end_p (gsi1)) { - if (is_gimple_debug (gsi_stmt (gsi1))) - gsi_next_nondebug (&gsi1); - - if (is_gimple_debug (gsi_stmt (gsi2))) - gsi_next_nondebug (&gsi2); + if (gsi_end_p (gsi2)) + return return_false (); s1 = gsi_stmt (gsi1); s2 = gsi_stmt (gsi2); @@ -646,10 +638,13 @@ func_checker::compare_bb (sem_bb *bb1, sem_bb *bb2) return return_false_with_msg ("Unknown GIMPLE code reached"); } - gsi_next (&gsi1); - gsi_next (&gsi2); + gsi_next_nondebug (&gsi1); + gsi_next_nondebug (&gsi2); } + if (!gsi_end_p (gsi2)) + return return_false (); + return true; } -- cgit v1.2.1