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

            Bug ID: 82317
           Summary: error "'__builtin_s390_vec_min' matching variant
                    requires z14 or higher" for __vector(2) double when it
                    should work on -march=z13 as well
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: markos at freevec dot org
  Target Milestone: ---
              Host: s390x-ibm-linux-gnu
            Target: s390x-ibm-linux-gnu
             Build: s390x-ibm-linux-gnu

While trying to extend SIMD code that worked on z13 to z14, I ran into this
error (using latest gcc snapshot:

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/lib64/gcc/s390x-ibm-linux-gnu/8.0.0/lto-wrapper
Target: s390x-ibm-linux-gnu
Configured with: ../configure --prefix=/usr/local --libdir=/usr/local/lib64
--libexecdir=/usr/local/lib64 --enable-languages=c,c++
--enable-checking=release --enable-ssp --disable-libssp --disable-libvtv
--disable-plugin --disable-libgcj --with-system-zlib --enable-__cxa_atexit
--enable-linker-build-id --enable-linux-futex --without-system-libunwind
--with-tune=z13 --with-arch=z13 --with-long-double-128 --enable-decimal-float
Thread model: posix
gcc version 8.0.0 20170924 (experimental) (GCC)

$ /usr/local/bin/g++    -pedantic -Wall -Wextra -Wundef -Wcast-align
-Wchar-subscripts -Wnon-virtual-dtor -Wunused-local-typedefs -Wpointer-arith
-Wwrite-strings -Wformat-security -Wlogical-op -Wdouble-promotion -Wno-psabi
-Wno-variadic-macros -Wno-long-long -fno-check-new -fno-common
-fstrict-aliasing -ansi -march=z13 -mzvector -std=c++11 -g
-I/srv/data/eigen.mine/build/test -I/srv/data/eigen.mine/test
-I/srv/data/eigen.mine -I/srv/data/eigen.mine/build    
-DEIGEN_TEST_MAX_SIZE=320 -DEIGEN_TEST_FUNC=packetmath -DEIGEN_FAST_MATH=1
-DEIGEN_TEST_PART_1=1 -o CMakeFiles/packetmath_1.dir/packetmath.cpp.o -c
/srv/data/eigen.mine/test/packetmath.cpp
In file included from /srv/data/eigen.mine/Eigen/Core:426:0,
                 from /srv/data/eigen.mine/Eigen/QR:11,
                 from /srv/data/eigen.mine/test/main.h:259,
                 from /srv/data/eigen.mine/test/packetmath.cpp:11:
/srv/data/eigen.mine/Eigen/src/Core/arch/ZVector/PacketMath.h: In function
'Packet Eigen::internal::pmin(const Packet&, const Packet&) [with Packet =
__vector(2) double]':
/srv/data/eigen.mine/Eigen/src/Core/arch/ZVector/PacketMath.h:425:115: error:
'__builtin_s390_vec_min' matching variant requires z14 or higher
 template<> EIGEN_STRONG_INLINE Packet2d pmin<Packet2d>(const Packet2d& a,
const Packet2d& b) { return vec_min(a, b); }

Packet2d is a typedef of __vector double.

This code is compiled with both -march=z13 and z14 options as I need to keep
compatibility with existing z13 systems and it compiles fine with an older
compiler (gcc 6), meaning vec_min() is available on z13 for double vectors. So
either the intrinsic name has changed in latest version (gcc 8 snapshot) or
this is a bug?

Thanks

Reply via email to