[libc-commits] [libc] 25a2aeb - Revert "[libc] Add explicit constructor calls to fix compilation when using UInt<T>"

Mikhail R. Gadelha via libc-commits libc-commits at lists.llvm.org
Tue May 16 09:07:50 PDT 2023


Author: Mikhail R. Gadelha
Date: 2023-05-16T13:06:37-03:00
New Revision: 25a2aeb1908fd8a5fbd0fedcf53006bde92c1ae3

URL: https://github.com/llvm/llvm-project/commit/25a2aeb1908fd8a5fbd0fedcf53006bde92c1ae3
DIFF: https://github.com/llvm/llvm-project/commit/25a2aeb1908fd8a5fbd0fedcf53006bde92c1ae3.diff

LOG: Revert "[libc] Add explicit constructor calls to fix compilation when using UInt<T>"

This reverts commit b663993067ffb5800632ad41ea7f2f92caab1093.

This caused a regression on aarch64:
https://lab.llvm.org/buildbot#builders/138/builds/43983

Added: 
    

Modified: 
    libc/src/__support/FPUtil/generic/sqrt.h
    libc/src/__support/UInt.h
    libc/src/__support/float_to_string.h
    libc/src/__support/str_to_float.h
    libc/src/stdio/printf_core/char_converter.h
    libc/src/stdio/printf_core/float_dec_converter.h
    libc/src/stdio/printf_core/float_hex_converter.h
    libc/src/stdio/printf_core/float_inf_nan_converter.h
    libc/src/stdio/printf_core/int_converter.h

Removed: 
    


################################################################################
diff  --git a/libc/src/__support/FPUtil/generic/sqrt.h b/libc/src/__support/FPUtil/generic/sqrt.h
index 529f5283f89a3..1464056417d06 100644
--- a/libc/src/__support/FPUtil/generic/sqrt.h
+++ b/libc/src/__support/FPUtil/generic/sqrt.h
@@ -136,7 +136,7 @@ LIBC_INLINE cpp::enable_if_t<cpp::is_floating_point_v<T>, T> sqrt(T x) {
       }
 
       // We compute one more iteration in order to round correctly.
-      bool lsb = static_cast<bool>(y & 1); // Least significant bit
+      bool lsb = y & 1; // Least significant bit
       bool rb = false;  // Round bit
       r <<= 2;
       UIntType tmp = (y << 2) + 1;

diff  --git a/libc/src/__support/UInt.h b/libc/src/__support/UInt.h
index 1ac7534e1be68..a702aaad827b2 100644
--- a/libc/src/__support/UInt.h
+++ b/libc/src/__support/UInt.h
@@ -468,11 +468,6 @@ template <size_t Bits> struct UInt {
     return result;
   }
 
-  constexpr UInt<Bits> operator/=(const UInt<Bits> &other) {
-    *this = *this / other;
-    return *this;
-  }
-
   constexpr UInt<Bits> operator%(const UInt<Bits> &other) const {
     UInt<Bits> result(*this);
     return *result.div(other);
@@ -719,12 +714,8 @@ template <size_t Bits> struct UInt {
   }
 
   constexpr UInt<Bits> &operator++() {
-    *this = *this + 1;
-    return *this;
-  }
-
-  constexpr UInt<Bits> &operator--() {
-    *this = *this - 1;
+    UInt<Bits> one(1);
+    add(one);
     return *this;
   }
 

diff  --git a/libc/src/__support/float_to_string.h b/libc/src/__support/float_to_string.h
index 43f49036156a0..09370148d803a 100644
--- a/libc/src/__support/float_to_string.h
+++ b/libc/src/__support/float_to_string.h
@@ -202,8 +202,8 @@ LIBC_INLINE uint32_t mul_shift_mod_1e9(const MantissaInt mantissa,
   cpp::UInt<MID_INT_SIZE + MANT_INT_SIZE> val(large);
   // TODO: Find a better way to force __uint128_t to be UInt<128>
   cpp::UInt<MANT_INT_SIZE> wide_mant(0);
-  wide_mant[0] = static_cast<uint64_t>(mantissa & (uint64_t(-1)));
-  wide_mant[1] = static_cast<uint64_t>(mantissa >> 64);
+  wide_mant[0] = mantissa & (uint64_t(-1));
+  wide_mant[1] = mantissa >> 64;
   val = (val * wide_mant) >> shift_amount;
   return fast_uint_mod_1e9(val);
 }

diff  --git a/libc/src/__support/str_to_float.h b/libc/src/__support/str_to_float.h
index 33c394e389a8a..0697cf0a68c32 100644
--- a/libc/src/__support/str_to_float.h
+++ b/libc/src/__support/str_to_float.h
@@ -298,11 +298,9 @@ eisel_lemire<long double>(ExpandedFloat<long double> init_num,
   BitsType msb = final_approx_upper >> (BITS_IN_MANTISSA - 1);
   BitsType final_mantissa =
       final_approx_upper >>
-      static_cast<uint64_t>(
-          msb + BITS_IN_MANTISSA -
-          (fputil::FloatProperties<long double>::MANTISSA_WIDTH + 3));
-  exp2 -=
-      static_cast<uint32_t>(1ULL ^ static_cast<uint64_t>(msb)); // same as !msb
+      (msb + BITS_IN_MANTISSA -
+       (fputil::FloatProperties<long double>::MANTISSA_WIDTH + 3));
+  exp2 -= static_cast<uint32_t>(1 ^ msb); // same as !msb
 
   if (round == RoundDirection::Nearest) {
     // Half-way ambiguity
@@ -567,7 +565,7 @@ clinger_fast_path(ExpandedFloat<T> init_num,
   }
 
   fputil::FPBits<T> result;
-  T float_mantissa = static_cast<T>(static_cast<uint64_t>(mantissa));
+  T float_mantissa = static_cast<T>(mantissa);
 
   if (exp10 == 0) {
     result = fputil::FPBits<T>(float_mantissa);
@@ -802,7 +800,7 @@ LIBC_INLINE FloatConvertReturn<T> binary_exp_to_float(ExpandedFloat<T> init_num,
 
   BitsType round_bit_mask = BitsType(1) << (amount_to_shift_right - 1);
   BitsType sticky_mask = round_bit_mask - 1;
-  bool round_bit = static_cast<bool>(mantissa & round_bit_mask);
+  bool round_bit = mantissa & round_bit_mask;
   bool sticky_bit = static_cast<bool>(mantissa & sticky_mask) || truncated;
 
   if (amount_to_shift_right < NUMBITS) {
@@ -812,7 +810,7 @@ LIBC_INLINE FloatConvertReturn<T> binary_exp_to_float(ExpandedFloat<T> init_num,
   } else {
     mantissa = 0;
   }
-  bool least_significant_bit = static_cast<bool>(mantissa & BitsType(1));
+  bool least_significant_bit = mantissa & BitsType(1);
 
   // TODO: check that this rounding behavior is correct.
 

diff  --git a/libc/src/stdio/printf_core/char_converter.h b/libc/src/stdio/printf_core/char_converter.h
index 93d2111548fa0..23a85eb572883 100644
--- a/libc/src/stdio/printf_core/char_converter.h
+++ b/libc/src/stdio/printf_core/char_converter.h
@@ -19,7 +19,7 @@ namespace __llvm_libc {
 namespace printf_core {
 
 LIBC_INLINE int convert_char(Writer *writer, const FormatSection &to_conv) {
-  char c = static_cast<uint8_t>(to_conv.conv_val_raw);
+  char c = to_conv.conv_val_raw;
 
   constexpr int string_len = 1;
 

diff  --git a/libc/src/stdio/printf_core/float_dec_converter.h b/libc/src/stdio/printf_core/float_dec_converter.h
index dabeb9173dc85..8d220ceeebb02 100644
--- a/libc/src/stdio/printf_core/float_dec_converter.h
+++ b/libc/src/stdio/printf_core/float_dec_converter.h
@@ -598,9 +598,8 @@ LIBC_INLINE int convert_float_decimal_typed(Writer *writer,
         const bool trailingZeros =
             requiredTwos <= 0 ||
             (requiredTwos < 60 &&
-             multiple_of_power_of_2(
-                 static_cast<uint64_t>(float_bits.get_explicit_mantissa()),
-                 static_cast<uint32_t>(requiredTwos)));
+             multiple_of_power_of_2(float_bits.get_explicit_mantissa(),
+                                    static_cast<uint32_t>(requiredTwos)));
         switch (fputil::get_round()) {
         case FE_TONEAREST:
           // Round to nearest, if it's exactly halfway then round to even.
@@ -773,9 +772,8 @@ LIBC_INLINE int convert_float_dec_exp_typed(Writer *writer,
   const bool trailingZeros =
       requiredTwos <= 0 ||
       (requiredTwos < 60 &&
-       multiple_of_power_of_2(
-           static_cast<uint64_t>(float_bits.get_explicit_mantissa()),
-           static_cast<uint32_t>(requiredTwos)));
+       multiple_of_power_of_2(float_bits.get_explicit_mantissa(),
+                              static_cast<uint32_t>(requiredTwos)));
   switch (fputil::get_round()) {
   case FE_TONEAREST:
     // Round to nearest, if it's exactly halfway then round to even.
@@ -1022,9 +1020,8 @@ LIBC_INLINE int convert_float_dec_auto_typed(Writer *writer,
   const bool trailingZeros =
       requiredTwos <= 0 ||
       (requiredTwos < 60 &&
-       multiple_of_power_of_2(
-           static_cast<uint64_t>(float_bits.get_explicit_mantissa()),
-           static_cast<uint32_t>(requiredTwos)));
+       multiple_of_power_of_2(float_bits.get_explicit_mantissa(),
+                              static_cast<uint32_t>(requiredTwos)));
   switch (fputil::get_round()) {
   case FE_TONEAREST:
     // Round to nearest, if it's exactly halfway then round to even.
@@ -1150,8 +1147,7 @@ LIBC_INLINE int convert_float_decimal(Writer *writer,
                                                       float_bits);
     }
   } else {
-    fputil::FPBits<double>::UIntType float_raw =
-        static_cast<uint64_t>(to_conv.conv_val_raw);
+    fputil::FPBits<double>::UIntType float_raw = to_conv.conv_val_raw;
     fputil::FPBits<double> float_bits(float_raw);
     if (!float_bits.is_inf_or_nan()) {
       return convert_float_decimal_typed<double>(writer, to_conv, float_bits);
@@ -1171,8 +1167,7 @@ LIBC_INLINE int convert_float_dec_exp(Writer *writer,
                                                       float_bits);
     }
   } else {
-    fputil::FPBits<double>::UIntType float_raw =
-        static_cast<uint64_t>(to_conv.conv_val_raw);
+    fputil::FPBits<double>::UIntType float_raw = to_conv.conv_val_raw;
     fputil::FPBits<double> float_bits(float_raw);
     if (!float_bits.is_inf_or_nan()) {
       return convert_float_dec_exp_typed<double>(writer, to_conv, float_bits);
@@ -1192,8 +1187,7 @@ LIBC_INLINE int convert_float_dec_auto(Writer *writer,
                                                        float_bits);
     }
   } else {
-    fputil::FPBits<double>::UIntType float_raw =
-        static_cast<uint64_t>(to_conv.conv_val_raw);
+    fputil::FPBits<double>::UIntType float_raw = to_conv.conv_val_raw;
     fputil::FPBits<double> float_bits(float_raw);
     if (!float_bits.is_inf_or_nan()) {
       return convert_float_dec_auto_typed<double>(writer, to_conv, float_bits);

diff  --git a/libc/src/stdio/printf_core/float_hex_converter.h b/libc/src/stdio/printf_core/float_hex_converter.h
index b3d7b22aace77..a26a3e796e4df 100644
--- a/libc/src/stdio/printf_core/float_hex_converter.h
+++ b/libc/src/stdio/printf_core/float_hex_converter.h
@@ -51,8 +51,7 @@ LIBC_INLINE int convert_float_hex_exp(Writer *writer,
   } else {
     mantissa_width = fputil::MantissaWidth<double>::VALUE;
     exponent_bias = fputil::FPBits<double>::EXPONENT_BIAS;
-    fputil::FPBits<double>::UIntType float_raw =
-        static_cast<uint64_t>(to_conv.conv_val_raw);
+    fputil::FPBits<double>::UIntType float_raw = to_conv.conv_val_raw;
     fputil::FPBits<double> float_bits(float_raw);
     is_negative = float_bits.get_sign();
     exponent = float_bits.get_exponent();
@@ -147,9 +146,8 @@ LIBC_INLINE int convert_float_hex_exp(Writer *writer,
   size_t mant_cur = mant_len;
   size_t first_non_zero = 1;
   for (; mant_cur > 0; --mant_cur, mantissa /= 16) {
-    char new_digit =
-        static_cast<uint8_t>(((mantissa % 16) > 9) ? ((mantissa % 16) - 10 + a)
-                                                   : ((mantissa % 16) + '0'));
+    char new_digit = ((mantissa % 16) > 9) ? ((mantissa % 16) - 10 + a)
+                                           : ((mantissa % 16) + '0');
     mant_buffer[mant_cur - 1] = new_digit;
     if (new_digit != '0' && first_non_zero < mant_cur)
       first_non_zero = mant_cur;

diff  --git a/libc/src/stdio/printf_core/float_inf_nan_converter.h b/libc/src/stdio/printf_core/float_inf_nan_converter.h
index 1883b47ed99b0..b7dcf8692e975 100644
--- a/libc/src/stdio/printf_core/float_inf_nan_converter.h
+++ b/libc/src/stdio/printf_core/float_inf_nan_converter.h
@@ -36,8 +36,7 @@ LIBC_INLINE int convert_inf_nan(Writer *writer, const FormatSection &to_conv) {
     is_negative = float_bits.get_sign();
     mantissa = float_bits.get_explicit_mantissa();
   } else {
-    fputil::FPBits<double>::UIntType float_raw =
-        static_cast<uint64_t>(to_conv.conv_val_raw);
+    fputil::FPBits<double>::UIntType float_raw = to_conv.conv_val_raw;
     fputil::FPBits<double> float_bits(float_raw);
     is_negative = float_bits.get_sign();
     mantissa = float_bits.get_explicit_mantissa();

diff  --git a/libc/src/stdio/printf_core/int_converter.h b/libc/src/stdio/printf_core/int_converter.h
index b4775a6861a44..f5c849c4ef929 100644
--- a/libc/src/stdio/printf_core/int_converter.h
+++ b/libc/src/stdio/printf_core/int_converter.h
@@ -43,7 +43,7 @@ LIBC_INLINE int convert_int(Writer *writer, const FormatSection &to_conv) {
   static constexpr size_t BITS_IN_BYTE = 8;
   static constexpr size_t BITS_IN_NUM = sizeof(uintmax_t) * BITS_IN_BYTE;
 
-  uintmax_t num = static_cast<uint64_t>(to_conv.conv_val_raw);
+  uintmax_t num = to_conv.conv_val_raw;
   bool is_negative = false;
   FormatFlags flags = to_conv.flags;
 


        


More information about the libc-commits mailing list