Richard Guenther wrote:

>       PR tree-optimization/52298
>       * tree-vect-stmts.c (vectorizable_store): Properly use
>       STMT_VINFO_DR_STEP instead of DR_STEP when vectorizing
>       outer loops.
>       (vectorizable_load): Likewise.
>       * tree-vect-data-refs.c (vect_analyze_data_ref_access):
>       Access DR_STEP after ensuring it is not NULL.

This causes a bunch of regressions on SPU:

FAIL: gcc.dg/vect/vect-outer-fir-big-array.c (internal compiler error)
FAIL: gcc.dg/vect/vect-outer-fir-big-array.c (test for excess errors)
WARNING: gcc.dg/vect/vect-outer-fir-big-array.c compilation failed to produce 
executable
FAIL: gcc.dg/vect/vect-outer-fir-big-array.c scan-tree-dump-times vect "OUTER 
LOOP VECTORIZED" 2
FAIL: gcc.dg/vect/vect-outer-fir-lb-big-array.c (internal compiler error)
FAIL: gcc.dg/vect/vect-outer-fir-lb-big-array.c (test for excess errors)
WARNING: gcc.dg/vect/vect-outer-fir-lb-big-array.c compilation failed to 
produce executable
FAIL: gcc.dg/vect/vect-outer-fir-lb-big-array.c scan-tree-dump-times vect 
"OUTER LOOP VECTORIZED" 2
FAIL: gcc.dg/vect/vect-outer-fir-lb.c (internal compiler error)
FAIL: gcc.dg/vect/vect-outer-fir-lb.c (test for excess errors)
WARNING: gcc.dg/vect/vect-outer-fir-lb.c compilation failed to produce 
executable
FAIL: gcc.dg/vect/vect-outer-fir-lb.c scan-tree-dump-times vect "OUTER LOOP 
VECTORIZED" 2
FAIL: gcc.dg/vect/vect-outer-fir.c (internal compiler error)
FAIL: gcc.dg/vect/vect-outer-fir.c (test for excess errors)
WARNING: gcc.dg/vect/vect-outer-fir.c compilation failed to produce executable
FAIL: gcc.dg/vect/vect-outer-fir.c scan-tree-dump-times vect "OUTER LOOP 
VECTORIZED" 2

all due to ICEs of the same type:

 internal compiler error: in vectorizable_load, at tree-vect-stmts.c:4665

The assert in question looks like:

  if (nested_in_vect_loop
      && (TREE_INT_CST_LOW (STMT_VINFO_DR_STEP (stmt_info))
          % GET_MODE_SIZE (TYPE_MODE (vectype)) != 0))
    { 
      gcc_assert (alignment_support_scheme != dr_explicit_realign_optimized);
      compute_in_loop = true;
    }

where your patch changed DR_STEP to STMT_VINFO_DR_STEP (reverting just this
one change makes the ICEs go away).

However, at the place where the decision to use the 
dr_explicit_realign_optimized 
strategy is made (tree-vect-data-refs.c:vect_supportable_dr_alignment), we still
have:

          if ((nested_in_vect_loop
               && (TREE_INT_CST_LOW (DR_STEP (dr))
                   != GET_MODE_SIZE (TYPE_MODE (vectype))))
              || !loop_vinfo)
            return dr_explicit_realign;
          else
            return dr_explicit_realign_optimized;

Should this now also use STMT_VINFO_DR_STEP?

Bye,
Ulrich

-- 
  Dr. Ulrich Weigand
  GNU Toolchain for Linux on System z and Cell BE
  ulrich.weig...@de.ibm.com

Reply via email to