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

            Bug ID: 114750
           Summary: converting load/store of simd fails compilation on ARM
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mkretz at gcc dot gnu.org
  Target Milestone: ---

https://compiler-explorer.com/z/jh5YeqzEe

Testcase:

#include <experimental/simd>

namespace stdx = std::experimental;

void f(long double* ptr, double* dptr, float* fptr)
{
  stdx::simd<int> x;
  //stdx::fixed_size_simd<int, 3> x;
  x.copy_from(ptr, stdx::element_aligned);
  x.copy_to(dptr, stdx::element_aligned);
  x.copy_from(dptr, stdx::element_aligned);
  x.copy_to(fptr, stdx::element_aligned);
  x.copy_from(fptr, stdx::element_aligned);
  x.copy_to(ptr, stdx::element_aligned);
}

This fails when using 'std::experimental::parallelism_v2::__intrinsic_type<long
double, 16, void>' in the load and store implementations. The same failure can
occur for '__intrinsic_type<double, 16, void>' and '__intrinsic_type<float, 16,
void>'.

A condition, checking whether the type is actually vectorizable for the target
is missing.

Reply via email to