Partially revert:
authorUros Bizjak <ubizjak@gmail.com>
Mon, 2 Apr 2012 10:04:10 +0000 (12:04 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Mon, 2 Apr 2012 10:04:10 +0000 (12:04 +0200)
2012-03-29  Richard Guenther  <rguenther@suse.de>

* rtl.h (extended_count): Remove.
* combine.c (extended_count): Remove.

From-SVN: r186077

gcc/ChangeLog
gcc/combine.c
gcc/rtl.h

index ea1bd80..e5abe45 100644 (file)
@@ -1,3 +1,11 @@
+2012-04-02  Uros Bizjak  <ubizjak@gmail.com>
+
+       Partially revert:
+       2012-03-29  Richard Guenther  <rguenther@suse.de>
+
+       * rtl.h (extended_count): Remove.
+       * combine.c (extended_count): Remove.
+
 2012-04-02  Dodji Seketeli  <dodji@redhat.com>
 
        PR c++/40942
index de3afcc..7eaaf47 100644 (file)
@@ -9674,6 +9674,31 @@ reg_num_sign_bit_copies_for_combine (const_rtx x, enum machine_mode mode,
   return NULL;
 }
 \f
+/* Return the number of "extended" bits there are in X, when interpreted
+   as a quantity in MODE whose signedness is indicated by UNSIGNEDP.  For
+   unsigned quantities, this is the number of high-order zero bits.
+   For signed quantities, this is the number of copies of the sign bit
+   minus 1.  In both case, this function returns the number of "spare"
+   bits.  For example, if two quantities for which this function returns
+   at least 1 are added, the addition is known not to overflow.
+
+   This function will always return 0 unless called during combine, which
+   implies that it must be called from a define_split.  */
+
+unsigned int
+extended_count (const_rtx x, enum machine_mode mode, int unsignedp)
+{
+  if (nonzero_sign_valid == 0)
+    return 0;
+
+  return (unsignedp
+         ? (HWI_COMPUTABLE_MODE_P (mode)
+            ? (unsigned int) (GET_MODE_PRECISION (mode) - 1
+                              - floor_log2 (nonzero_bits (x, mode)))
+            : 0)
+         : num_sign_bit_copies (x, mode) - 1);
+}
+
 /* This function is called from `simplify_shift_const' to merge two
    outer operations.  Specifically, we have already found that we need
    to perform operation *POP0 with constant *PCONST0 at the outermost
index bfb0cf9..30931b7 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -2455,6 +2455,7 @@ extern bool validate_subreg (enum machine_mode, enum machine_mode,
                             const_rtx, unsigned int);
 
 /* In combine.c  */
+extern unsigned int extended_count (const_rtx, enum machine_mode, int);
 extern rtx remove_death (unsigned int, rtx);
 extern void dump_combine_stats (FILE *);
 extern void dump_combine_total_stats (FILE *);