mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-06-04 18:54:00 +08:00
Don't use generic sign function for sign(complex) unless it is vectorizable
This commit is contained in:
parent
c0d6a72611
commit
462758e8a3
@ -1146,7 +1146,8 @@ struct psign_impl<Packet, std::enable_if_t<!NumTraits<typename unpacket_traits<P
|
|||||||
|
|
||||||
// \internal \returns the the sign of a complex number z, defined as z / abs(z).
|
// \internal \returns the the sign of a complex number z, defined as z / abs(z).
|
||||||
template <typename Packet>
|
template <typename Packet>
|
||||||
struct psign_impl<Packet, std::enable_if_t<NumTraits<typename unpacket_traits<Packet>::type>::IsComplex>> {
|
struct psign_impl<Packet, std::enable_if_t<NumTraits<typename unpacket_traits<Packet>::type>::IsComplex &&
|
||||||
|
unpacket_traits<Packet>::vectorizable>> {
|
||||||
static EIGEN_DEVICE_FUNC inline Packet run(const Packet& a) {
|
static EIGEN_DEVICE_FUNC inline Packet run(const Packet& a) {
|
||||||
typedef typename unpacket_traits<Packet>::type Scalar;
|
typedef typename unpacket_traits<Packet>::type Scalar;
|
||||||
typedef typename Scalar::value_type RealScalar;
|
typedef typename Scalar::value_type RealScalar;
|
||||||
|
@ -930,7 +930,7 @@ struct functor_traits<scalar_sign_op<Scalar> >
|
|||||||
NumTraits<Scalar>::IsComplex
|
NumTraits<Scalar>::IsComplex
|
||||||
? ( 8*NumTraits<Scalar>::MulCost ) // roughly
|
? ( 8*NumTraits<Scalar>::MulCost ) // roughly
|
||||||
: ( 3*NumTraits<Scalar>::AddCost),
|
: ( 3*NumTraits<Scalar>::AddCost),
|
||||||
PacketAccess = packet_traits<Scalar>::HasSign
|
PacketAccess = packet_traits<Scalar>::HasSign && packet_traits<Scalar>::Vectorizable
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user