From: Richard Biener Date: Thu, 30 Nov 2023 11:38:53 +0000 (+0100) Subject: tree-optimization/112767 - spurious diagnostic after sccp/loop-split swap X-Git-Tag: basepoints/gcc-15~4129 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2dde9f326ded84814a78c3044294b535c1f97b41;p=thirdparty%2Fgcc.git tree-optimization/112767 - spurious diagnostic after sccp/loop-split swap We are diagnosing an unreachable loop which we only manage to elide after the copyprop pass after sccp which leaves the code open for diagnosing by the intermittent ivcanon pass. The following makes sure to clean things up a bit earlier, propagating constant final values to uses immediately. PR tree-optimization/112767 * tree-scalar-evolution.cc (final_value_replacement_loop): Propagate constants to immediate uses immediately. * gcc.dg/tree-ssa/pr112767.c: New testcase. * gcc.dg/graphite/pr83255.c: Disable SCCP. --- diff --git a/gcc/testsuite/gcc.dg/graphite/pr83255.c b/gcc/testsuite/gcc.dg/graphite/pr83255.c index cb376fa61be4..075326327870 100644 --- a/gcc/testsuite/gcc.dg/graphite/pr83255.c +++ b/gcc/testsuite/gcc.dg/graphite/pr83255.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-O -floop-nest-optimize -fdump-tree-graphite-details" } */ +/* { dg-options "-O -floop-nest-optimize -fno-tree-scev-cprop -fdump-tree-graphite-details" } */ int rx, in; diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr112767.c b/gcc/testsuite/gcc.dg/tree-ssa/pr112767.c new file mode 100644 index 000000000000..3f9bc061ee1a --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr112767.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ + +double reg_dict[32]; + +void foo(int); + +void initialize() +{ + int i=8; + for (int phi=0; phi<8; ++phi) { + reg_dict[i]=0; /* { dg-bogus "undefined behavior" } */ + int sn = 0; + if (i < 16) sn = 20; + foo(sn); + ++i; + } +} diff --git a/gcc/tree-scalar-evolution.cc b/gcc/tree-scalar-evolution.cc index f61277c32df3..065bcd0743d7 100644 --- a/gcc/tree-scalar-evolution.cc +++ b/gcc/tree-scalar-evolution.cc @@ -3841,11 +3841,20 @@ final_value_replacement_loop (class loop *loop) print_gimple_stmt (dump_file, phi, 0); fprintf (dump_file, " with expr: "); print_generic_expr (dump_file, def); + fprintf (dump_file, "\n"); } any = true; def = unshare_expr (def); remove_phi_node (&psi, false); + /* Propagate constants immediately. */ + if (CONSTANT_CLASS_P (def)) + { + replace_uses_by (rslt, def); + release_ssa_name (rslt); + continue; + } + /* Create the replacement statements. */ gimple_seq stmts; def = force_gimple_operand (def, &stmts, false, NULL_TREE); @@ -3877,7 +3886,7 @@ final_value_replacement_loop (class loop *loop) gsi_insert_seq_before (&gsi, stmts, GSI_SAME_STMT); if (dump_file) { - fprintf (dump_file, "\n final stmt:\n "); + fprintf (dump_file, " final stmt:\n "); print_gimple_stmt (dump_file, SSA_NAME_DEF_STMT (rslt), 0); fprintf (dump_file, "\n"); }