Hi!

vectorizable_{store,load} does roughly
      tree offvar;
      tree running_off;
      if (!costing_p)
        {
          ... initialize offvar ...
        }
      running_off = offvar;
      for (...)
        {
          if (costing_p)
            {
              ...
              continue;
            }
          ... use running_off ...
        }
so, it copies unconditionally sometimes uninitialized variable (but then
uses the copied variable only if it was set to something initialized).
Still, I think it is better to avoid copying around maybe uninitialized
vars.

Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for
trunk?

2025-01-23  Jakub Jelinek  <ja...@redhat.com>

        PR tree-optimization/118628
        * tree-vect-stmts.cc (vectorizable_store, vectorizable_load):
        Initialize offvar to NULL_TREE.

--- gcc/tree-vect-stmts.cc.jj   2025-01-23 11:10:48.357722650 +0100
+++ gcc/tree-vect-stmts.cc      2025-01-23 13:24:23.200875907 +0100
@@ -8645,7 +8645,7 @@ vectorizable_store (vec_info *vinfo,
       gimple_stmt_iterator incr_gsi;
       bool insert_after;
       gimple *incr;
-      tree offvar;
+      tree offvar = NULL_TREE;
       tree ivstep;
       tree running_off;
       tree stride_base, stride_step, alias_off;
@@ -10603,7 +10603,7 @@ vectorizable_load (vec_info *vinfo,
     {
       gimple_stmt_iterator incr_gsi;
       bool insert_after;
-      tree offvar;
+      tree offvar = NULL_TREE;
       tree ivstep;
       tree running_off;
       vec<constructor_elt, va_gc> *v = NULL;

        Jakub

Reply via email to