From: Richard Biener Date: Wed, 21 Aug 2024 11:56:40 +0000 (+0200) Subject: tree-optimization/116380 - bogus SSA update with loop distribution X-Git-Tag: basepoints/gcc-16~6484 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=af0d2d95a5f767d92bd64f959679fb4612247b0b;p=thirdparty%2Fgcc.git tree-optimization/116380 - bogus SSA update with loop distribution When updating LC PHIs after copying loops we have to handle defs defined outside of the loop appropriately (by not setting them to NULL ...). This mimics how we handle this in the SSA updating code of the vectorizer. PR tree-optimization/116380 * tree-loop-distribution.cc (copy_loop_before): Handle out-of-loop defs appropriately. * gcc.dg/torture/pr116380.c: New testcase. --- diff --git a/gcc/testsuite/gcc.dg/torture/pr116380.c b/gcc/testsuite/gcc.dg/torture/pr116380.c new file mode 100644 index 00000000000..5ffd99459d2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr116380.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-fno-tree-scev-cprop" } */ + +int a[3], d[3], c; +int f(int e, int b) +{ + for (; e < 3; e++) + { + a[0] = 0; + if (b) + c = b; + d[e] = 0; + a[e] = 0; + } + return e; +} diff --git a/gcc/tree-loop-distribution.cc b/gcc/tree-loop-distribution.cc index f87393ee94d..10f261a8769 100644 --- a/gcc/tree-loop-distribution.cc +++ b/gcc/tree-loop-distribution.cc @@ -980,6 +980,9 @@ copy_loop_before (class loop *loop, bool redirect_lc_phi_defs) if (TREE_CODE (USE_FROM_PTR (use_p)) == SSA_NAME) { tree new_def = get_current_def (USE_FROM_PTR (use_p)); + if (!new_def) + /* Something defined outside of the loop. */ + continue; SET_USE (use_p, new_def); } }