https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82436

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Doesn't reproduce with

struct reflection_type
{
  int h;
  int k;
  int l;
  double f_exp;
  double f_sigma;
  _Complex double f_calc;
  double f_pred;
  double i_exp;
  double i_sigma;
  double i_pred;
};

struct { void *data; int offset; int stride; int span; } ext_refs;

double y, w;
void foo (struct reflection_type *r, int n, unsigned s)
{
  y = 0;
  w = 0;
  for (int i = 1; i < n; ++i)
    {
      struct reflection_type *x = (struct reflection_type *)(ext_refs.data +
(ext_refs.offset + ext_refs.stride * i) * ext_refs.span);
      double fpred = x->f_pred;
      double fexp = x->f_exp;
      double tem = (fpred - fexp);
      y += __builtin_fabs (tem / x->f_sigma);
      w += __builtin_fabs (tem / fexp);
    }
}

and -Ofast -march=core-avx2 -m32 -fno-vect-cost-model --param
vect-max-peeling-for-alignment=0.

Somehow the original case gets

crystal.fppized.f90:3643:0: note: === vect_make_slp_decision ===
crystal.fppized.f90:3643:0: note: Decided to SLP 1 instances. Unrolling factor
2
crystal.fppized.f90:3643:0: note: === vect_detect_hybrid_slp ===
crystal.fppized.f90:3643:0: note: === vect_update_vf_for_slp ===
crystal.fppized.f90:3643:0: note: Loop contains SLP and non-SLP stmts
crystal.fppized.f90:3643:0: note: Updating vectorization factor to 8

while I get only SLP stmts in the C case.

Reply via email to