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