[lldb/Utility] Remove m_ieee_quad from Scalar
authorPavel Labath <pavel@labath.sk>
Wed, 10 Jun 2020 13:04:31 +0000 (15:04 +0200)
committerPavel Labath <pavel@labath.sk>
Wed, 10 Jun 2020 13:15:01 +0000 (15:15 +0200)
This field is unused (the only way to change its value is via a
constructor which is never called), and as far as I can tell it has been
unused since it was introduced in D12100. It also has some soundness
issues -- e.g.  operator= does not reinitialize it, but uses the old
value from the overwritten object.

It sounds like this class should be able to support different floating
point semantics, but if that is needed, it would be better to start
afresh -- probably by passing in an APFloat::fltSemantics object instead
of a bool flag.

lldb/include/lldb/Utility/Scalar.h
lldb/source/Utility/Scalar.cpp

index 69c948e..0c8f745 100644 (file)
@@ -83,20 +83,11 @@ public:
   Scalar(double v) : m_type(e_double), m_float(v) {
     m_float = llvm::APFloat(v);
   }
-  Scalar(long double v, bool ieee_quad)
-      : m_type(e_long_double), m_float(static_cast<float>(0)),
-        m_ieee_quad(ieee_quad) {
-    if (ieee_quad)
-      m_float =
-          llvm::APFloat(llvm::APFloat::IEEEquad(),
-                        llvm::APInt(BITWIDTH_INT128, NUM_OF_WORDS_INT128,
-                                    (reinterpret_cast<type128 *>(&v))->x));
-    else
-      m_float =
-          llvm::APFloat(llvm::APFloat::x87DoubleExtended(),
-                        llvm::APInt(BITWIDTH_INT128, NUM_OF_WORDS_INT128,
-                                    (reinterpret_cast<type128 *>(&v))->x));
-  }
+  Scalar(long double v)
+      : m_type(e_long_double),
+        m_float(llvm::APFloat::x87DoubleExtended(),
+                llvm::APInt(BITWIDTH_INT128, NUM_OF_WORDS_INT128,
+                            (reinterpret_cast<type128 *>(&v))->x)) {}
   Scalar(llvm::APInt v) : m_type(), m_float(static_cast<float>(0)) {
     m_integer = llvm::APInt(v);
     m_type = GetBestTypeForBitSize(m_integer.getBitWidth(), true);
@@ -282,7 +273,6 @@ protected:
   Scalar::Type m_type;
   llvm::APInt m_integer;
   llvm::APFloat m_float;
-  bool m_ieee_quad = false;
 
 private:
   friend const Scalar operator+(const Scalar &lhs, const Scalar &rhs);
index e55aa2d..827a3f6 100644 (file)
@@ -355,14 +355,9 @@ Scalar &Scalar::operator=(double v) {
 
 Scalar &Scalar::operator=(long double v) {
   m_type = e_long_double;
-  if (m_ieee_quad)
-    m_float = llvm::APFloat(llvm::APFloat::IEEEquad(),
-                            llvm::APInt(BITWIDTH_INT128, NUM_OF_WORDS_INT128,
-                                        (reinterpret_cast<type128 *>(&v))->x));
-  else
-    m_float = llvm::APFloat(llvm::APFloat::x87DoubleExtended(),
-                            llvm::APInt(BITWIDTH_INT128, NUM_OF_WORDS_INT128,
-                                        (reinterpret_cast<type128 *>(&v))->x));
+  m_float = llvm::APFloat(llvm::APFloat::x87DoubleExtended(),
+                          llvm::APInt(BITWIDTH_INT128, NUM_OF_WORDS_INT128,
+                                      (reinterpret_cast<type128 *>(&v))->x));
   return *this;
 }
 
@@ -523,8 +518,7 @@ bool Scalar::Promote(Scalar::Type type) {
       break;
 
     case e_long_double:
-      m_float = llvm::APFloat(m_ieee_quad ? llvm::APFloat::IEEEquad()
-                                          : llvm::APFloat::x87DoubleExtended());
+      m_float = llvm::APFloat(llvm::APFloat::x87DoubleExtended());
       m_float.convertFromAPInt(m_integer, true,
                                llvm::APFloat::rmNearestTiesToEven);
       success = true;
@@ -593,8 +587,7 @@ bool Scalar::Promote(Scalar::Type type) {
       break;
 
     case e_long_double:
-      m_float = llvm::APFloat(m_ieee_quad ? llvm::APFloat::IEEEquad()
-                                          : llvm::APFloat::x87DoubleExtended());
+      m_float = llvm::APFloat(llvm::APFloat::x87DoubleExtended());
       m_float.convertFromAPInt(m_integer, false,
                                llvm::APFloat::rmNearestTiesToEven);
       success = true;
@@ -659,8 +652,7 @@ bool Scalar::Promote(Scalar::Type type) {
       break;
 
     case e_long_double:
-      m_float = llvm::APFloat(m_ieee_quad ? llvm::APFloat::IEEEquad()
-                                          : llvm::APFloat::x87DoubleExtended());
+      m_float = llvm::APFloat(llvm::APFloat::x87DoubleExtended());
       m_float.convertFromAPInt(m_integer, true,
                                llvm::APFloat::rmNearestTiesToEven);
       success = true;
@@ -721,8 +713,7 @@ bool Scalar::Promote(Scalar::Type type) {
       break;
 
     case e_long_double:
-      m_float = llvm::APFloat(m_ieee_quad ? llvm::APFloat::IEEEquad()
-                                          : llvm::APFloat::x87DoubleExtended());
+      m_float = llvm::APFloat(llvm::APFloat::x87DoubleExtended());
       m_float.convertFromAPInt(m_integer, false,
                                llvm::APFloat::rmNearestTiesToEven);
       success = true;
@@ -779,8 +770,7 @@ bool Scalar::Promote(Scalar::Type type) {
       break;
 
     case e_long_double:
-      m_float = llvm::APFloat(m_ieee_quad ? llvm::APFloat::IEEEquad()
-                                          : llvm::APFloat::x87DoubleExtended());
+      m_float = llvm::APFloat(llvm::APFloat::x87DoubleExtended());
       m_float.convertFromAPInt(m_integer, true,
                                llvm::APFloat::rmNearestTiesToEven);
       success = true;
@@ -833,8 +823,7 @@ bool Scalar::Promote(Scalar::Type type) {
       break;
 
     case e_long_double:
-      m_float = llvm::APFloat(m_ieee_quad ? llvm::APFloat::IEEEquad()
-                                          : llvm::APFloat::x87DoubleExtended());
+      m_float = llvm::APFloat(llvm::APFloat::x87DoubleExtended());
       m_float.convertFromAPInt(m_integer, false,
                                llvm::APFloat::rmNearestTiesToEven);
       success = true;
@@ -887,8 +876,7 @@ bool Scalar::Promote(Scalar::Type type) {
       break;
 
     case e_long_double:
-      m_float = llvm::APFloat(m_ieee_quad ? llvm::APFloat::IEEEquad()
-                                          : llvm::APFloat::x87DoubleExtended());
+      m_float = llvm::APFloat(llvm::APFloat::x87DoubleExtended());
       m_float.convertFromAPInt(m_integer, true,
                                llvm::APFloat::rmNearestTiesToEven);
       success = true;
@@ -937,8 +925,7 @@ bool Scalar::Promote(Scalar::Type type) {
       break;
 
     case e_long_double:
-      m_float = llvm::APFloat(m_ieee_quad ? llvm::APFloat::IEEEquad()
-                                          : llvm::APFloat::x87DoubleExtended());
+      m_float = llvm::APFloat(llvm::APFloat::x87DoubleExtended());
       m_float.convertFromAPInt(m_integer, false,
                                llvm::APFloat::rmNearestTiesToEven);
       success = true;
@@ -987,8 +974,7 @@ bool Scalar::Promote(Scalar::Type type) {
       break;
 
     case e_long_double:
-      m_float = llvm::APFloat(m_ieee_quad ? llvm::APFloat::IEEEquad()
-                                          : llvm::APFloat::x87DoubleExtended());
+      m_float = llvm::APFloat(llvm::APFloat::x87DoubleExtended());
       m_float.convertFromAPInt(m_integer, true,
                                llvm::APFloat::rmNearestTiesToEven);
       success = true;
@@ -1034,8 +1020,7 @@ bool Scalar::Promote(Scalar::Type type) {
       break;
 
     case e_long_double:
-      m_float = llvm::APFloat(m_ieee_quad ? llvm::APFloat::IEEEquad()
-                                          : llvm::APFloat::x87DoubleExtended());
+      m_float = llvm::APFloat(llvm::APFloat::x87DoubleExtended());
       m_float.convertFromAPInt(m_integer, false,
                                llvm::APFloat::rmNearestTiesToEven);
       success = true;
@@ -1074,8 +1059,7 @@ bool Scalar::Promote(Scalar::Type type) {
 
     case e_long_double: {
       bool ignore;
-      m_float.convert(m_ieee_quad ? llvm::APFloat::IEEEquad()
-                                  : llvm::APFloat::x87DoubleExtended(),
+      m_float.convert(llvm::APFloat::x87DoubleExtended(),
                       llvm::APFloat::rmNearestTiesToEven, &ignore);
       success = true;
       break;
@@ -1105,8 +1089,7 @@ bool Scalar::Promote(Scalar::Type type) {
       break;
     case e_long_double: {
       bool ignore;
-      m_float.convert(m_ieee_quad ? llvm::APFloat::IEEEquad()
-                                  : llvm::APFloat::x87DoubleExtended(),
+      m_float.convert(llvm::APFloat::x87DoubleExtended(),
                       llvm::APFloat::rmNearestTiesToEven, &ignore);
       success = true;
       break;