]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
lang.c (java_estimate_num_insns_1): Fix bug in MODIFY_EXPR cost estimation.
authorJan Hubicka <jh@suse.cz>
Tue, 13 Jan 2004 23:14:04 +0000 (00:14 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Tue, 13 Jan 2004 23:14:04 +0000 (23:14 +0000)
* lang.c (java_estimate_num_insns_1): Fix bug in MODIFY_EXPR cost
estimation.
* c-common.c (c_estimate_num_insns_1):  Fix bug in MODIFY_EXPR
cost estimation.
* expr.c (MOVE_RATIO, CLEAR_RATIO): Move to ...
* expr.h (MOVE_RATIO, CLEAR_RATIO): ... here.

From-SVN: r75821

gcc/ChangeLog
gcc/c-common.c
gcc/expr.c
gcc/expr.h
gcc/java/ChangeLog
gcc/java/lang.c

index 75cafb55e16af457f340a722391b2500c2c58acd..2bcbf160355f25ef1353a3baab84cdd58ebd503d 100644 (file)
@@ -1,3 +1,10 @@
+2004-01-14  Jan Hubicka  <jh@suse.cz>
+
+       * c-common.c (c_estimate_num_insns_1):  Fix bug in MODIFY_EXPR
+       cost estimation.
+       * expr.c (MOVE_RATIO, CLEAR_RATIO): Move to ...
+       * expr.h (MOVE_RATIO, CLEAR_RATIO): ... here.
+
 2004-01-13  Bernardo Innocenti  <bernie@develer.com>
 
        * config/m68k/netbsd-elf.h (REGISTER_NAMES): Add missing "argptr"
index 644511318c70709b5ff91fecdec8cf3461ce4e8b..dcd540b1d8539e8e11e794944ef97b63b4ee1650 100644 (file)
@@ -5770,13 +5770,14 @@ c_estimate_num_insns_1 (tree *tp, int *walk_subtrees, void *data)
     case MODIFY_EXPR:
     case CONSTRUCTOR:
       {
-       int size = int_size_in_bytes (TREE_TYPE (x));
+       HOST_WIDE_INT size;
 
-       if (!size || size > MOVE_MAX_PIECES)
+       size = int_size_in_bytes (TREE_TYPE (x));
+
+       if (size < 0 || size > MOVE_MAX_PIECES * MOVE_RATIO)
          *count += 10;
        else
-         *count += 2 * (size + MOVE_MAX - 1) / MOVE_MAX;
-       return NULL;
+         *count += ((size + MOVE_MAX_PIECES - 1) / MOVE_MAX_PIECES);
       }
       break;
     /* Few special cases of expensive operations.  This is usefull
index 73fb9655c1c2e29562fbd433ebe0e5ab282ab5c4..b5af15893f10190ee9b3cbaf119c0a157901de5a 100644 (file)
@@ -185,18 +185,6 @@ static char direct_store[NUM_MACHINE_MODES];
 
 static bool float_extend_from_mem[NUM_MACHINE_MODES][NUM_MACHINE_MODES];
 
-/* If a memory-to-memory move would take MOVE_RATIO or more simple
-   move-instruction sequences, we will do a movstr or libcall instead.  */
-
-#ifndef MOVE_RATIO
-#if defined (HAVE_movstrqi) || defined (HAVE_movstrhi) || defined (HAVE_movstrsi) || defined (HAVE_movstrdi) || defined (HAVE_movstrti)
-#define MOVE_RATIO 2
-#else
-/* If we are optimizing for space (-Os), cut down the default move ratio.  */
-#define MOVE_RATIO (optimize_size ? 3 : 15)
-#endif
-#endif
-
 /* This macro is used to determine whether move_by_pieces should be called
    to perform a structure copy.  */
 #ifndef MOVE_BY_PIECES_P
@@ -204,18 +192,6 @@ static bool float_extend_from_mem[NUM_MACHINE_MODES][NUM_MACHINE_MODES];
   (move_by_pieces_ninsns (SIZE, ALIGN) < (unsigned int) MOVE_RATIO)
 #endif
 
-/* If a clear memory operation would take CLEAR_RATIO or more simple
-   move-instruction sequences, we will do a clrstr or libcall instead.  */
-
-#ifndef CLEAR_RATIO
-#if defined (HAVE_clrstrqi) || defined (HAVE_clrstrhi) || defined (HAVE_clrstrsi) || defined (HAVE_clrstrdi) || defined (HAVE_clrstrti)
-#define CLEAR_RATIO 2
-#else
-/* If we are optimizing for space, cut down the default clear ratio.  */
-#define CLEAR_RATIO (optimize_size ? 3 : 15)
-#endif
-#endif
-
 /* This macro is used to determine whether clear_by_pieces should be
    called to clear storage.  */
 #ifndef CLEAR_BY_PIECES_P
index bdfd4902f924ada974f37f8ffe76787efe2499b2..000011340e58e6a63a98f67865f3f23a8dbf60d1 100644 (file)
@@ -66,6 +66,30 @@ enum expand_modifier {EXPAND_NORMAL = 0, EXPAND_STACK_PARM = 2, EXPAND_SUM,
    more information.  */
 #define OK_DEFER_POP (inhibit_defer_pop -= 1)
 \f
+/* If a memory-to-memory move would take MOVE_RATIO or more simple
+   move-instruction sequences, we will do a movstr or libcall instead.  */
+
+#ifndef MOVE_RATIO
+#if defined (HAVE_movstrqi) || defined (HAVE_movstrhi) || defined (HAVE_movstrsi) || defined (HAVE_movstrdi) || defined (HAVE_movstrti)
+#define MOVE_RATIO 2
+#else
+/* If we are optimizing for space (-Os), cut down the default move ratio.  */
+#define MOVE_RATIO (optimize_size ? 3 : 15)
+#endif
+#endif
+
+/* If a clear memory operation would take CLEAR_RATIO or more simple
+   move-instruction sequences, we will do a clrstr or libcall instead.  */
+
+#ifndef CLEAR_RATIO
+#if defined (HAVE_clrstrqi) || defined (HAVE_clrstrhi) || defined (HAVE_clrstrsi) || defined (HAVE_clrstrdi) || defined (HAVE_clrstrti)
+#define CLEAR_RATIO 2
+#else
+/* If we are optimizing for space, cut down the default clear ratio.  */
+#define CLEAR_RATIO (optimize_size ? 3 : 15)
+#endif
+#endif
+\f
 enum direction {none, upward, downward};
 
 /* Structure to record the size of a sequence of arguments
index 2a8bd6ef696f87aa15d65824d3355b20fdab9cb5..fd6e32181bde664ce57ee898bce69b1e79c4ef99 100644 (file)
@@ -1,3 +1,8 @@
+2004-01-14  Jan Hubicka  <jh@suse.cz>
+
+       * lang.c (java_estimate_num_insns_1): Fix bug in MODIFY_EXPR cost
+       estimation.
+
 2004-01-09  Mark Mitchell  <mark@codesourcery.com>
 
        * java-tree.h (java_expand_expr): Change prototype.
index 2f68f7c04532a3da61e5ec34f1b610731c4b719a..0fe68def937ede453a09f124c0d23e4c93a3f27a 100644 (file)
@@ -1134,13 +1134,14 @@ java_estimate_num_insns_1 (tree *tp, int *walk_subtrees, void *data)
     case MODIFY_EXPR:
     case CONSTRUCTOR:
       {
-       int size = int_size_in_bytes (TREE_TYPE (x));
+       HOST_WIDE_INT size;
 
-       if (!size || size > MOVE_MAX_PIECES)
+       size = int_size_in_bytes (TREE_TYPE (x));
+
+       if (size < 0 || size > MOVE_MAX_PIECES * MOVE_RATIO)
          *count += 10;
        else
-         *count += 2 * (size + MOVE_MAX - 1) / MOVE_MAX;
-       return NULL;
+         *count += ((size + MOVE_MAX_PIECES - 1) / MOVE_MAX_PIECES);
       }
       break;
     /* Few special cases of expensive operations.  This is usefull