mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-01-30 17:40:05 +08:00
Fixed a few compilation warnings triggered by clang
This commit is contained in:
parent
099597406f
commit
0570594f2c
@ -54,10 +54,15 @@ namespace {
|
||||
#endif
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
struct UnsignedTraits {
|
||||
typedef typename conditional<sizeof(T) == 8, uint64_t, uint32_t>::type type;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct DividerTraits {
|
||||
#if defined(__SIZEOF_INT128__) && !defined(__CUDACC__)
|
||||
typedef typename conditional<sizeof(T) == 8, uint64_t, uint32_t>::type type;
|
||||
typedef typename UnsignedTraits<T>::type type;
|
||||
static const int N = sizeof(T) * 8;
|
||||
#else
|
||||
typedef uint32_t type;
|
||||
@ -125,14 +130,14 @@ struct TensorIntDivisor {
|
||||
// the __uint128_t type.
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorIntDivisor(const T divider) {
|
||||
const int N = DividerTraits<T>::N;
|
||||
eigen_assert(divider < NumTraits<UnsignedType>::highest()/2);
|
||||
eigen_assert(static_cast<typename UnsignedTraits<T>::type>(divider) < NumTraits<UnsignedType>::highest()/2);
|
||||
eigen_assert(divider > 0);
|
||||
|
||||
// fast ln2
|
||||
const int leading_zeros = count_leading_zeros(static_cast<UnsignedType>(divider));
|
||||
int log_div = N - leading_zeros;
|
||||
// if divider is a power of two then log_div is 1 more than it should be.
|
||||
if ((1ull << (log_div-1)) == divider)
|
||||
if ((static_cast<typename UnsignedTraits<T>::type>(1) << (log_div-1)) == static_cast<typename UnsignedTraits<T>::type>(divider))
|
||||
log_div--;
|
||||
|
||||
multiplier = DividerHelper<N, T>::computeMultiplier(log_div, divider);
|
||||
@ -143,7 +148,7 @@ struct TensorIntDivisor {
|
||||
// Must have 0 <= numerator. On platforms that dont support the __uint128_t
|
||||
// type numerator should also be less than 2^32-1.
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T divide(const T numerator) const {
|
||||
eigen_assert(numerator < NumTraits<UnsignedType>::highest()/2);
|
||||
eigen_assert(static_cast<typename UnsignedTraits<T>::type>(numerator) < NumTraits<UnsignedType>::highest()/2);
|
||||
eigen_assert(numerator >= 0);
|
||||
|
||||
UnsignedType t1 = muluh(multiplier, numerator);
|
||||
|
@ -69,13 +69,13 @@ void test_unsigned_64bit()
|
||||
|
||||
void test_powers_32bit() {
|
||||
for (int expon = 1; expon < 31; expon++) {
|
||||
int32_t div = (1ull << expon);
|
||||
int32_t div = (1 << expon);
|
||||
for (int num_expon = 0; num_expon < 32; num_expon++) {
|
||||
int32_t start_num = (1ull << num_expon) - 100;
|
||||
int32_t end_num = (1ull << num_expon) + 100;
|
||||
int32_t start_num = (1 << num_expon) - 100;
|
||||
int32_t end_num = (1 << num_expon) + 100;
|
||||
if (start_num < 0)
|
||||
start_num = 0;
|
||||
for (int64_t num = start_num; num < end_num; num++) {
|
||||
for (int32_t num = start_num; num < end_num; num++) {
|
||||
Eigen::internal::TensorIntDivisor<int32_t> divider =
|
||||
Eigen::internal::TensorIntDivisor<int32_t>(div);
|
||||
int32_t result = num/div;
|
||||
|
Loading…
Reference in New Issue
Block a user