Fix sreal::shift add to_double conversion

Richard Biener richard.guenther@gmail.com
Thu Dec 4 19:12:00 GMT 2014


On December 4, 2014 7:00:12 PM CET, Jan Hubicka <hubicka@ucw.cz> wrote:
>Hi,
>this patch fixes implementation of shift in sreal.h that ICEs on 0
>value.
>Also the comment is copied from shift_right and does not make sense for
>sreal.h.
>
>The to_double conversion is useful for debug output: Most of inliner
>data is
>now output as integer that does not make much sense.

Can't you use dump for this?

Richard.

>Bootstrapped/regtested x86_64-linux, OK?
>
>	* sreal.h (to_double): Declare.
>	(shift): Do not ICE on 0, update outdated comment.
>	* sreal.c: Include math.h
>	(sreal::to_double): New function.
>Index: sreal.h
>===================================================================
>--- sreal.h	(revision 218286)
>+++ sreal.h	(working copy)
>@@ -53,6 +53,7 @@
> 
>   void dump (FILE *) const;
>   int64_t to_int () const;
>+  double to_double () const;
>   sreal operator+ (const sreal &other) const;
>   sreal operator- (const sreal &other) const;
>   sreal operator* (const sreal &other) const;
>@@ -93,12 +94,14 @@
> 
>   sreal shift (int s) const
>   {
>+    /* Zero needs no shifting.  */
>+    if (!m_sig)
>+      return *this;
>     gcc_checking_assert (s <= SREAL_BITS);
>     gcc_checking_assert (s >= -SREAL_BITS);
> 
>-    /* Exponent should never be so large because shift_right is used
>only by
>-     sreal_add and sreal_sub ant thus the number cannot be shifted out
>from
>-     exponent range.  */
>+    /* Overflows/drop to 0 could be handled gracefully, but hopefully
>we do not
>+       need to do so.  */
>     gcc_checking_assert (m_exp + s <= SREAL_MAX_EXP);
>     gcc_checking_assert (m_exp + s >= -SREAL_MAX_EXP);
> 
>Index: sreal.c
>===================================================================
>--- sreal.c	(revision 218286)
>+++ sreal.c	(working copy)
>@@ -47,6 +47,7 @@
> 	sig == 0 && exp == -SREAL_MAX_EXP
> */
> 
>+#include <math.h>
> #include "config.h"
> #include "system.h"
> #include "coretypes.h"
>@@ -167,6 +168,19 @@
>   return sign * m_sig;
> }
> 
>+/* Return value of *this as double.  */
>+
>+double
>+sreal::to_double () const
>+{
>+  double val = m_sig;
>+  if (m_negative)
>+    val = -val;
>+  if (m_exp)
>+    val *= exp2 (m_exp);
>+  return val;
>+}
>+
> /* Return *this + other.  */
> 
> sreal




More information about the Gcc-patches mailing list