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

--- Comment #2 from Richard Sandiford <rsandifo at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #1)
> was this also fixed by r14-6416-gf5fc001a84a7db ?
No, it's still unfixed due to:

  /* We currently do not support generating simdclones where vector arguments
     do not fit into a single vector register, i.e. vector types that are more
     than 128-bits large.  This is because of how we currently represent such
     types in ACLE, where we use a struct to allow us to pass them as arguments
     and return.
     Hence why we have to check whether the simdlens available for this
     simdclone would cause a vector type to be larger than 128-bits, and reject
     such a clone.  */
  unsigned j = 0;
  while (j < simdlens.length ())
    {
      bool remove_simdlen = false;
      for (auto elt : vec_elts)
        if (known_gt (simdlens[j] * elt.second, 128U))
          {
            /* Don't issue a warning for every simdclone when there is no
               specific simdlen clause.  */
            if (explicit_p && maybe_ne (clonei->simdlen, 0U))
              warning_at (DECL_SOURCE_LOCATION (node->decl), 0,
                          "GCC does not currently support simdlen %wd for "
                          "type %qT",
                          constant_lower_bound (simdlens[j]), elt.first);
            remove_simdlen = true;
            break;
          }
      if (remove_simdlen)
        simdlens.ordered_remove (j);
      else
        j++;
    }

Reply via email to