From c5f349196898d411b9e815e4b1550f8bc670422c Mon Sep 17 00:00:00 2001 From: mattijs <mattijs> Date: Thu, 4 Jan 2024 08:33:39 +0000 Subject: [PATCH] COMP: g++11: suppress optimisation. See #3024 --- src/OpenFOAM/primitives/Tensor/TensorI.H | 32 ++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/OpenFOAM/primitives/Tensor/TensorI.H b/src/OpenFOAM/primitives/Tensor/TensorI.H index 94957e2e080..840e458b027 100644 --- a/src/OpenFOAM/primitives/Tensor/TensorI.H +++ b/src/OpenFOAM/primitives/Tensor/TensorI.H @@ -513,6 +513,10 @@ inline Foam::Tensor<Cmpt> Foam::Tensor<Cmpt>::T() const template<class Cmpt> +#if defined(__GNUC__) && !defined(__clang__) +// Workaround for gcc (11+) that fails to handle tensor dot vector +__attribute__((optimize("no-tree-vectorize"))) +#endif inline Foam::Tensor<Cmpt> Foam::Tensor<Cmpt>::inner(const Tensor<Cmpt>& t2) const { @@ -536,6 +540,10 @@ Foam::Tensor<Cmpt>::inner(const Tensor<Cmpt>& t2) const template<class Cmpt> +#if defined(__GNUC__) && !defined(__clang__) +// Workaround for gcc (11+) that fails to handle tensor dot vector +__attribute__((optimize("no-tree-vectorize"))) +#endif inline Foam::Tensor<Cmpt> Foam::Tensor<Cmpt>::schur(const Tensor<Cmpt>& t2) const { @@ -971,6 +979,10 @@ operator&(const Tensor<Cmpt>& t1, const Tensor<Cmpt>& t2) //- Inner-product of a SphericalTensor and a Tensor template<class Cmpt> +#if defined(__GNUC__) && !defined(__clang__) +// Workaround for gcc (11+) that fails to handle tensor dot vector +__attribute__((optimize("no-tree-vectorize"))) +#endif inline Tensor<Cmpt> operator&(const SphericalTensor<Cmpt>& st1, const Tensor<Cmpt>& t2) { @@ -985,6 +997,10 @@ operator&(const SphericalTensor<Cmpt>& st1, const Tensor<Cmpt>& t2) //- Inner-product of a Tensor and a SphericalTensor template<class Cmpt> +#if defined(__GNUC__) && !defined(__clang__) +// Workaround for gcc (11+) that fails to handle tensor dot vector +__attribute__((optimize("no-tree-vectorize"))) +#endif inline Tensor<Cmpt> operator&(const Tensor<Cmpt>& t1, const SphericalTensor<Cmpt>& st2) { @@ -999,6 +1015,10 @@ operator&(const Tensor<Cmpt>& t1, const SphericalTensor<Cmpt>& st2) //- Inner-product of a SymmTensor and a Tensor template<class Cmpt> +#if defined(__GNUC__) && !defined(__clang__) +// Workaround for gcc (11+) that fails to handle tensor dot vector +__attribute__((optimize("no-tree-vectorize"))) +#endif inline Tensor<Cmpt> operator&(const SymmTensor<Cmpt>& st1, const Tensor<Cmpt>& t2) { @@ -1021,6 +1041,10 @@ operator&(const SymmTensor<Cmpt>& st1, const Tensor<Cmpt>& t2) //- Inner-product of a Tensor and a SymmTensor template<class Cmpt> +#if defined(__GNUC__) && !defined(__clang__) +// Workaround for gcc (11+) that fails to handle tensor dot vector +__attribute__((optimize("no-tree-vectorize"))) +#endif inline Tensor<Cmpt> operator&(const Tensor<Cmpt>& t1, const SymmTensor<Cmpt>& st2) { @@ -1047,7 +1071,7 @@ template<class Cmpt> // Workaround for gcc (11+) that fails to handle tensor dot vector __attribute__((optimize("no-tree-vectorize"))) #endif -inline typename innerProduct<Tensor<Cmpt>, Vector<Cmpt>>::type +inline Vector<Cmpt> operator&(const Tensor<Cmpt>& t, const Vector<Cmpt>& v) { return Vector<Cmpt> @@ -1061,7 +1085,11 @@ operator&(const Tensor<Cmpt>& t, const Vector<Cmpt>& v) //- Inner-product of a Vector and a Tensor template<class Cmpt> -inline typename innerProduct<Vector<Cmpt>, Tensor<Cmpt>>::type +#if defined(__GNUC__) && !defined(__clang__) +// Workaround for gcc (11+) that fails to handle tensor dot vector +__attribute__((optimize("no-tree-vectorize"))) +#endif +inline Vector<Cmpt> operator&(const Vector<Cmpt>& v, const Tensor<Cmpt>& t) { return Vector<Cmpt> -- GitLab