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