Loop distribution does different analysis with -g0/-g due to counting
a debug stmt starting a BB against a limit which will everntually
lead to different IVOPTs choices. I've fixed a possible IVOPTs
issue on the way even though it doesn't make a difference here.
PR tree-optimization/116290
* tree-loop-distribution.cc (determine_reduction_stmt_1): PHIs
have no debug variants. Start with first non-debug real stmt.
* tree-ssa-loop-ivopts.cc (find_givs_in_bb): Do not analyze
debug stmts.
* gcc.dg/pr116290.c: New testcase.
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-g -O2 -fcompare-debug" } */
+
+char *camel_message_info_class_intern_init_part;
+void g_once_init_enter();
+void camel_message_info_class_intern_init() {
+ int ii;
+ char *label;
+ for (; camel_message_info_class_intern_init_part[ii]; ii++)
+ if (camel_message_info_class_intern_init_part) {
+ if (label && *label)
+ g_once_init_enter();
+ label = &camel_message_info_class_intern_init_part[ii + 1];
+ camel_message_info_class_intern_init_part[ii] = ' ';
+ }
+ if (label)
+ g_once_init_enter();
+}
basic_block bb = bbs[i];
for (gphi_iterator bsi = gsi_start_phis (bb); !gsi_end_p (bsi);
- gsi_next_nondebug (&bsi))
+ gsi_next (&bsi))
{
gphi *phi = bsi.phi ();
if (virtual_operand_p (gimple_phi_result (phi)))
}
}
- for (gimple_stmt_iterator bsi = gsi_start_bb (bb); !gsi_end_p (bsi);
- gsi_next_nondebug (&bsi), ++ninsns)
+ for (gimple_stmt_iterator bsi = gsi_start_nondebug_bb (bb);
+ !gsi_end_p (bsi); gsi_next_nondebug (&bsi), ++ninsns)
{
/* Bail out early for loops which are unlikely to match. */
if (ninsns > 16)
gimple_stmt_iterator bsi;
for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi); gsi_next (&bsi))
- find_givs_in_stmt (data, gsi_stmt (bsi));
+ if (!is_gimple_debug (gsi_stmt (bsi)))
+ find_givs_in_stmt (data, gsi_stmt (bsi));
}
/* Finds general ivs. */