From: Richard Biener Date: Tue, 21 Apr 2026 08:21:34 +0000 (+0200) Subject: tree-optimization/124947 - IVOPTs emits uninit use X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d84a91bbd60bfabc1cd2dac6aae10a427a770627;p=thirdparty%2Fgcc.git tree-optimization/124947 - IVOPTs emits uninit use The following prevents IVOPTs from rewriting a compare using an IV that involves undefined SSA vars. PR tree-optimization/124947 * tree-ssa-loop-ivopts.cc (may_eliminate_iv): Do not use a candidate that involves undefs. * gcc.dg/pr124947.c: New testcase. --- diff --git a/gcc/testsuite/gcc.dg/pr124947.c b/gcc/testsuite/gcc.dg/pr124947.c new file mode 100644 index 00000000000..5e64d29a943 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr124947.c @@ -0,0 +1,19 @@ +/* { dg-options "-O -fdump-tree-ivopts" } */ + +long *BN_uadd_ap; + +void +BN_uadd (int dif, long t1) +{ + volatile long *rp; + while (dif) + { + dif--; + t1 = *BN_uadd_ap; + *rp++ = t1; + if (t1) + break; + } +} + +/* { dg-final { scan-tree-dump-times "rp_\[0-9\]+\\\(D\\\)" 1 "ivopts" } } */ diff --git a/gcc/tree-ssa-loop-ivopts.cc b/gcc/tree-ssa-loop-ivopts.cc index 6ecf5bef7b4..dfec607fd2e 100644 --- a/gcc/tree-ssa-loop-ivopts.cc +++ b/gcc/tree-ssa-loop-ivopts.cc @@ -5382,6 +5382,11 @@ may_eliminate_iv (struct ivopts_data *data, aff_tree bnd; class tree_niter_desc *desc = NULL; + /* If the IV candidate involves undefs do not attempt to use it to + express a condition. */ + if (cand->involves_undefs) + return false; + if (TREE_CODE (cand->iv->step) != INTEGER_CST) return false;