Compile-time errors on s390x architecture (Z14)
Submitted by Geert Janssen
Assigned to Nobody
Link to original bugzilla bug (#1743)
Version: 3.4 (development)
Operating system: Linux
Description
Compiling Eigen 3.3.90 as part of TensorFlow Lite on an IBM Z machine gives errors when Z SIMD vectorization is enabled.
g++ flags see below.
I have a fix for this. I made the following changes:
In eigen/Eigen/src/Core/arch/ZVector/PacketMath.h:
470 │
471 │ template<> EIGEN_STRONG_INLINE Packet2d pround<Packet2d>(const Packet2d& a) { \
return /*vec_round(a);*/ __builtin_s390_vfidb(a, 4, 4); } //GJ19
472 │ template<> EIGEN_STRONG_INLINE Packet2d pceil<Packet2d>(const Packet2d& a) { \
return /*vec_ceil(a);*/ __builtin_s390_vfidb(a, 4, 6); } //GJ19
473 │ template<> EIGEN_STRONG_INLINE Packet2d pfloor<Packet2d>(const Packet2d& a) { \
return /*vec_floor(a);*/ __builtin_s390_vfidb(a, 4, 7); } //GJ19
474 │
1073 │ template<> EIGEN_STRONG_INLINE Packet4f pmadd<Packet4f> (const Packet4f& a, c\
onst Packet4f& b, const Packet4f& c) { return /*vec_madd(a, b, c);*/ __builtin\
_s390_vfmasb(a, b, c); } //GJ19
1083 │ template<> EIGEN_STRONG_INLINE Packet4f pround<Packet4f> (const Packet4f& a) {\
return /*vec_round(a);*/ __builtin_s390_vfisb(a, 4, 4); } //GJ19
1084 │ template<> EIGEN_STRONG_INLINE Packet4f pceil<Packet4f> (const Packet4f& a) {\
return /*vec_ceil(a);*/ __builtin_s390_vfisb(a, 4, 6); } //GJ19
1085 │ template<> EIGEN_STRONG_INLINE Packet4f pfloor<Packet4f> (const Packet4f& a) {\
return /*vec_floor(a);*/ __builtin_s390_vfisb(a, 4, 7); } //GJ19
In eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h:
100 │
101 │ fx = /vec_floor(fx);/ __builtin_s390_vfidb(fx, 4, 7); //GJ19
102 │
Here are the error messages:
Mon Aug 26 09:58:13 EDT 2019
geert@8e08LP30:~/src/tensorflow-lite$ uname -a
Linux 8e08LP30 4.15.0-45-generic #48 (closed)-Ubuntu SMP Tue Jan 29 16:26:33 UTC 2019 s390x s390x s390x GNU/Linux
geert@8e08LP30:~/src/tensorflow-lite$ gcc --version
gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Eigen version:
eigen/Eigen/src/Core/util/Macros.h
#define EIGEN_WORLD_VERSION 3
#define EIGEN_MAJOR_VERSION 3
#define EIGEN_MINOR_VERSION 90
g++ -O3 -DNDEBUG -fPIC -mvx -march=z14 -mzvector -Wno-attributes --std=c++11 -fPIC -DGEMMLOWP_ALLOW_SLOW_SCALAR_FALLBACK -pthread -I. -I/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/../../../../../ -I/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/../../../../../../ -I/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/ -I/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen -I/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/absl -I/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/gemmlowp -I/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/neon_2_sse -I/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/farmhash/src -I/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/flatbuffers/include -I -I/usr/local/include -c tensorflow/lite/kernels/activations.cc -o /home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/gen/linux_s390x/obj/tensorflow/lite/kernels/activations.o
In file included from /home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/util/ConfigureVectorization.h:355:0,
from /home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/Core:22,
from ./third_party/eigen3/Eigen/Core:1,
from ./tensorflow/lite/kernels/internal/optimized/optimized_ops.h:33,
from tensorflow/lite/kernels/activations.cc:25:
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h: In function ‘Packet Eigen::internal::pround(const Packet&) [with Packet = __vector(2) double]’:
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h:471:86: error: ‘__builtin_s390_vfi’ was not declared in this scope
RONG_INLINE Packet2d pround<Packet2d>(const Packet2d& a) { return vec_round(a); }
^
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h:471:86: note: suggested alternative: ‘__builtin_s390_vfidb’
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h: In function ‘Packet Eigen::internal::pceil(const Packet&) [with Packet = __vector(2) double]’:
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h:472:86: error: ‘__builtin_s390_vfi’ was not declared in this scope
RONG_INLINE Packet2d pceil<Packet2d>(const Packet2d& a) { return vec_ceil(a); }
^
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h:472:86: note: suggested alternative: ‘__builtin_s390_vfidb’
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h: In function ‘Packet Eigen::internal::pfloor(const Packet&) [with Packet = __vector(2) double]’:
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h:473:86: error: ‘__builtin_s390_vfi’ was not declared in this scope
RONG_INLINE Packet2d pfloor<Packet2d>(const Packet2d& a) { return vec_floor(a); }
^
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h:473:86: note: suggested alternative: ‘__builtin_s390_vfidb’
In file included from /home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/Core:191:0,
from ./third_party/eigen3/Eigen/Core:1,
from ./tensorflow/lite/kernels/internal/optimized/optimized_ops.h:33,
from tensorflow/lite/kernels/activations.cc:25:
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h: In function ‘Packet Eigen::internal::pmadd(const Packet&, const Packet&, const Packet&) [with Packet = __vector(4) float]’:
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h:1073:141: error: cannot convert ‘const Packet4f {aka const __vector(4) float}’ to ‘__vector(2) double’ for argument ‘1’ to ‘__vector(2) double __builtin_s390_vfmadb(__vector(2) double, __vector(2) double, __vector(2) double)’
ket4f& a, const Packet4f& b, const Packet4f& c) { return vec_madd(a, b, c); }
^
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h: In function ‘Packet Eigen::internal::pxor(const Packet&, const Packet&) [with Packet = __vector(4) float]’:
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h:1078:118: error: invalid parameter combination for intrinsic ‘__builtin_s390_vec_xor’
<Packet4f> (const Packet4f& a, const Packet4f& b) { return vec_xor(a, b); }
^
In file included from /home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/util/ConfigureVectorization.h:355:0,
from /home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/Core:22,
from ./third_party/eigen3/Eigen/Core:1,
from ./tensorflow/lite/kernels/internal/optimized/optimized_ops.h:33,
from tensorflow/lite/kernels/activations.cc:25:
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h: In function ‘Packet Eigen::internal::pround(const Packet&) [with Packet = __vector(4) float]’:
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h:1080:87: error: ‘__builtin_s390_vfi’ was not declared in this scope
ONG_INLINE Packet4f pround<Packet4f> (const Packet4f& a) { return vec_round(a); }
^
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h:1080:87: note: suggested alternative: ‘__builtin_s390_vfidb’
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h: In function ‘Packet Eigen::internal::pceil(const Packet&) [with Packet = __vector(4) float]’:
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h:1081:87: error: ‘__builtin_s390_vfi’ was not declared in this scope
ONG_INLINE Packet4f pceil<Packet4f> (const Packet4f& a) { return vec_ceil(a); }
^
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h:1081:87: note: suggested alternative: ‘__builtin_s390_vfidb’
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h: In function ‘Packet Eigen::internal::pfloor(const Packet&) [with Packet = __vector(4) float]’:
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h:1082:87: error: ‘__builtin_s390_vfi’ was not declared in this scope
ONG_INLINE Packet4f pfloor<Packet4f> (const Packet4f& a) { return vec_floor(a); }
^
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h:1082:87: note: suggested alternative: ‘__builtin_s390_vfidb’
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h: In function ‘Packet Eigen::internal::pexp(const Packet&) [with Packet = __vector(2) double]’:
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h:101:8: error: ‘__builtin_s390_vfi’ was not declared in this scope
fx = vec_floor(fx);
^
/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/downloads/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h:101:8: note: suggested alternative: ‘__builtin_s390_vfidb’
tensorflow/lite/tools/make/Makefile:208: recipe for target '/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/gen/linux_s390x/obj/tensorflow/lite/kernels/activations.o' failed
make: *** [/home3/geert/src/tensorflow-lite/tensorflow/lite/tools/make/gen/linux_s390x/obj/tensorflow/lite/kernels/activations.o] Error 1
geert@8e08LP30:~/src/tensorflow-lite$