diff options
-rw-r--r-- | gcc/ChangeLog | 23 | ||||
-rw-r--r-- | gcc/config/alpha/alpha.h | 2 | ||||
-rw-r--r-- | gcc/config/arm/arm.h | 2 | ||||
-rw-r--r-- | gcc/config/bfin/bfin.h | 2 | ||||
-rw-r--r-- | gcc/config/cris/cris.h | 2 | ||||
-rw-r--r-- | gcc/config/h8300/h8300.h | 4 | ||||
-rw-r--r-- | gcc/config/i386/i386.h | 4 | ||||
-rw-r--r-- | gcc/config/m68hc11/m68hc11.h | 2 | ||||
-rw-r--r-- | gcc/config/mips/mips.h | 12 | ||||
-rw-r--r-- | gcc/config/mn10300/mn10300.h | 2 | ||||
-rw-r--r-- | gcc/config/pa/pa.h | 2 | ||||
-rw-r--r-- | gcc/config/pa/pa.md | 8 | ||||
-rw-r--r-- | gcc/config/s390/s390.h | 2 | ||||
-rw-r--r-- | gcc/config/sparc/sparc.h | 2 | ||||
-rw-r--r-- | gcc/config/spu/spu.h | 2 | ||||
-rw-r--r-- | gcc/config/v850/v850.h | 2 | ||||
-rw-r--r-- | gcc/expr.c | 8 | ||||
-rw-r--r-- | gcc/expr.h | 10 | ||||
-rw-r--r-- | gcc/gimplify.c | 3 | ||||
-rw-r--r-- | gcc/tree-inline.c | 2 | ||||
-rw-r--r-- | gcc/tree-sra.c | 4 |
21 files changed, 61 insertions, 39 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 768b2967a81..b2bbce1a0b7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,26 @@ +2008-00-01 Jan Hubicka <jh@suse.cz> + + * expr.c (MOVE_BY_PIECES_P, CLEAR_BY_PIECES_P, SET_BY_PIECES_P): Pass speed operand. + * expr.h (MOVE_RATIO, CLEAR_RATIO, SET_RATIO): Update. + * gimplify.c (gimplify_init_constructor): Add speed operand. + * tree-sra.c (decide_block_copy): Likewise. + * tree-inline.c (estimate_move_cost): Likewise. + * config/alpha/alpha.h (MOVE_RATIO): Update. + * config/frv/frv.c (MOVE_RATIO): Update. + * config/spu/spu.h (MOVE_RATIO): Update. + * config/sparc/sparc.h (MOVE_RATIO): Update. + * config/i386/i386.h (MOVE_RATIO, CLEAR_RATIO): Update. + * config/m68hc11/m68hc11.h (MOVE_RATIO): Update. + * config/cris/cris.h (MOVE_RATIO): Update. + * config/mn10300/mn10300.h (MOVE_RATIO): Update. + * config/arm/arm.h (MOVE_RATIO): Update. + * config/pa/pa.md: Update uses of MOVE_RATIO + * config/pa/pa.h (MOVE_RATIO): Update. + * config/mips/mips.h (MOVE_RATIO, MOVE_BY_PIECES, CLEAR_RATIO, SET_RATIO): Update. + * config/h8300/h8300.h (MOVE_RATIO): Update. + * config/v850/v850.h (MOVE_RATIO): Update. + * config/bfin/bfin.h (MOVE_RATIO): Update. + 2008-08-31 Andrey Belevantsev <abel@ispras.ru> Dmitry Melnik <dm@ispras.ru> Dmitry Zhurikhin <zhur@ispras.ru> diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h index 8e022d6a5f8..c462f71fb1d 100644 --- a/gcc/config/alpha/alpha.h +++ b/gcc/config/alpha/alpha.h @@ -1079,7 +1079,7 @@ do { \ Without byte/word accesses, we want no more than four instructions; with, several single byte accesses are better. */ -#define MOVE_RATIO (TARGET_BWX ? 7 : 2) +#define MOVE_RATIO(speed) (TARGET_BWX ? 7 : 2) /* Largest number of bytes of an object that can be placed in a register. On the Alpha we have plenty of registers, so use TImode. */ diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h index 4132b06b024..a8820cbdcb3 100644 --- a/gcc/config/arm/arm.h +++ b/gcc/config/arm/arm.h @@ -2244,7 +2244,7 @@ do { \ #define MOVE_MAX 4 #undef MOVE_RATIO -#define MOVE_RATIO (arm_tune_xscale ? 4 : 2) +#define MOVE_RATIO(speed) (arm_tune_xscale ? 4 : 2) /* Define if operations between registers always perform the operation on the full register even if a narrower mode is specified. */ diff --git a/gcc/config/bfin/bfin.h b/gcc/config/bfin/bfin.h index 826e60b9e02..4ac369f10ba 100644 --- a/gcc/config/bfin/bfin.h +++ b/gcc/config/bfin/bfin.h @@ -998,7 +998,7 @@ do { \ /* If a memory-to-memory move would take MOVE_RATIO or more simple move-instruction pairs, we will do a movmem or libcall instead. */ -#define MOVE_RATIO 5 +#define MOVE_RATIO(speed) 5 /* STORAGE LAYOUT: target machine storage layout Define this macro as a C expression which is nonzero if accessing diff --git a/gcc/config/cris/cris.h b/gcc/config/cris/cris.h index b8a66e96a4b..ed1ec3deb06 100644 --- a/gcc/config/cris/cris.h +++ b/gcc/config/cris/cris.h @@ -1242,7 +1242,7 @@ struct cum_args {int regs;}; word-length sizes will be emitted. The "9" will translate to (9 - 1) * 4 = 32 bytes maximum moved, but using 16 instructions (8 instruction sequences) or less. */ -#define MOVE_RATIO 9 +#define MOVE_RATIO(speed) 9 /* Node: Sections */ diff --git a/gcc/config/h8300/h8300.h b/gcc/config/h8300/h8300.h index 7305fc32f85..4edbb2f6ba2 100644 --- a/gcc/config/h8300/h8300.h +++ b/gcc/config/h8300/h8300.h @@ -1189,10 +1189,8 @@ struct cum_arg #define FINAL_PRESCAN_INSN(insn, operand, nop) \ final_prescan_insn (insn, operand, nop) -#define MOVE_RATIO 3 extern int h8300_move_ratio; -#undef MOVE_RATIO -#define MOVE_RATIO h8300_move_ratio +#define MOVE_RATIO(speed) h8300_move_ratio /* Machine-specific symbol_ref flags. */ #define SYMBOL_FLAG_FUNCVEC_FUNCTION (SYMBOL_FLAG_MACH_DEP << 0) diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index d933c5e2389..cb1dca7354b 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -1906,12 +1906,12 @@ do { \ If you don't define this, a reasonable default is used. */ -#define MOVE_RATIO (optimize_size ? 3 : ix86_cost->move_ratio) +#define MOVE_RATIO(speed) ((speed) ? ix86_cost->move_ratio : 3) /* If a clear memory operation would take CLEAR_RATIO or more simple move-instruction sequences, we will do a clrmem or libcall instead. */ -#define CLEAR_RATIO (optimize_size ? 2 : MIN (6, ix86_cost->move_ratio)) +#define CLEAR_RATIO(speed) ((speed) ? MIN (6, ix86_cost->move_ratio) : 2) /* Define if shifts truncate the shift count which implies one can omit a sign-extension or zero-extension diff --git a/gcc/config/m68hc11/m68hc11.h b/gcc/config/m68hc11/m68hc11.h index cb789e1a54f..302c414bb5c 100644 --- a/gcc/config/m68hc11/m68hc11.h +++ b/gcc/config/m68hc11/m68hc11.h @@ -1505,7 +1505,7 @@ do { \ /* MOVE_RATIO is the number of move instructions that is better than a block move. Make this small on 6811, since the code size grows very large with each move. */ -#define MOVE_RATIO 3 +#define MOVE_RATIO(speed) 3 /* Define if shifts truncate the shift count which implies one can omit a sign-extension or zero-extension of a shift count. */ diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index e008e804781..86b886a373f 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -2940,7 +2940,7 @@ while (0) we'll have to generate a load/store pair for each, halve the value of MIPS_CALL_RATIO to take that into account. */ -#define MOVE_RATIO \ +#define MOVE_RATIO(speed) \ (HAVE_movmemsi \ ? MIPS_MAX_MOVE_BYTES_STRAIGHT / MOVE_MAX \ : MIPS_CALL_RATIO / 2) @@ -2961,20 +2961,20 @@ while (0) ? (SIZE) < UNITS_PER_WORD \ : (SIZE) <= MIPS_MAX_MOVE_BYTES_STRAIGHT)) \ : (move_by_pieces_ninsns (SIZE, ALIGN, MOVE_MAX_PIECES + 1) \ - < (unsigned int) MOVE_RATIO)) + < (unsigned int) MOVE_RATIO (false))) /* For CLEAR_RATIO, when optimizing for size, give a better estimate of the length of a memset call, but use the default otherwise. */ -#define CLEAR_RATIO \ - (optimize_size ? MIPS_CALL_RATIO : 15) +#define CLEAR_RATIO(speed)\ + ((speed) ? 15 : MIPS_CALL_RATIO) /* This is similar to CLEAR_RATIO, but for a non-zero constant, so when optimizing for size adjust the ratio to account for the overhead of loading the constant and replicating it across the word. */ -#define SET_RATIO \ - (optimize_size ? MIPS_CALL_RATIO - 2 : 15) +#define SET_RATIO(speed) \ + ((speed) ? 15 : MIPS_CALL_RATIO - 2) /* STORE_BY_PIECES_P can be used when copying a constant string, but in that case each word takes 3 insns (lui, ori, sw), or more in diff --git a/gcc/config/mn10300/mn10300.h b/gcc/config/mn10300/mn10300.h index 07035fbb06b..c1c80579427 100644 --- a/gcc/config/mn10300/mn10300.h +++ b/gcc/config/mn10300/mn10300.h @@ -814,7 +814,7 @@ while (0) /* According expr.c, a value of around 6 should minimize code size, and for the MN10300 series, that's our primary concern. */ -#define MOVE_RATIO 6 +#define MOVE_RATIO(speed) 6 #define TEXT_SECTION_ASM_OP "\t.section .text" #define DATA_SECTION_ASM_OP "\t.section .data" diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h index 5e272a2f346..2966a42ddb2 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -1506,7 +1506,7 @@ do { \ arguments passed in registers to avoid infinite recursion during argument setup for a function call. Why? Consider how we copy the stack slots reserved for parameters when they may be trashed by a call. */ -#define MOVE_RATIO (TARGET_64BIT ? 8 : 4) +#define MOVE_RATIO(speed) (TARGET_64BIT ? 8 : 4) /* Define if operations between registers always perform the operation on the full register even if a narrower mode is specified. */ diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md index c3d686db5c4..b50ab4cb6e3 100644 --- a/gcc/config/pa/pa.md +++ b/gcc/config/pa/pa.md @@ -3487,7 +3487,7 @@ FAIL; /* This does happen, but not often enough to worry much about. */ - if (size / align < MOVE_RATIO) + if (size / align < MOVE_RATIO (optimize_insn_for_speed_p ())) FAIL; /* Fall through means we're going to use our block move pattern. */ @@ -3675,7 +3675,7 @@ FAIL; /* This does happen, but not often enough to worry much about. */ - if (size / align < MOVE_RATIO) + if (size / align < MOVE_RATIO (optimize_insn_for_speed_p ())) FAIL; /* Fall through means we're going to use our block move pattern. */ @@ -3842,7 +3842,7 @@ FAIL; /* This does happen, but not often enough to worry much about. */ - if (size / align < MOVE_RATIO) + if (size / align < MOVE_RATIO (optimize_insn_for_speed_p ())) FAIL; /* Fall through means we're going to use our block clear pattern. */ @@ -3956,7 +3956,7 @@ FAIL; /* This does happen, but not often enough to worry much about. */ - if (size / align < MOVE_RATIO) + if (size / align < MOVE_RATIO (optimize_insn_for_speed_p ())) FAIL; /* Fall through means we're going to use our block clear pattern. */ diff --git a/gcc/config/s390/s390.h b/gcc/config/s390/s390.h index a31efd24a23..32ec03624bb 100644 --- a/gcc/config/s390/s390.h +++ b/gcc/config/s390/s390.h @@ -872,7 +872,7 @@ extern struct rtx_def *s390_compare_op0, *s390_compare_op1, *s390_compare_emitte in tree-sra with UNITS_PER_WORD to make a decision so we adjust it here to compensate for that factor since mvc costs exactly the same on 31 and 64 bit. */ -#define MOVE_RATIO (TARGET_64BIT? 2 : 4) +#define MOVE_RATIO(speed) (TARGET_64BIT? 2 : 4) /* Sections. */ diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index c4910a20a31..2e39082e1f6 100644 --- a/gcc/config/sparc/sparc.h +++ b/gcc/config/sparc/sparc.h @@ -2099,7 +2099,7 @@ do { \ /* If a memory-to-memory move would take MOVE_RATIO or more simple move-instruction pairs, we will do a movmem or libcall instead. */ -#define MOVE_RATIO (optimize_size ? 3 : 8) +#define MOVE_RATIO(speed) ((speed) ? 8 : 3) /* Define if operations between registers always perform the operation on the full register even if a narrower mode is specified. */ diff --git a/gcc/config/spu/spu.h b/gcc/config/spu/spu.h index f78eb73c429..9839822885e 100644 --- a/gcc/config/spu/spu.h +++ b/gcc/config/spu/spu.h @@ -438,7 +438,7 @@ targetm.resolve_overloaded_builtin = spu_resolve_overloaded_builtin; \ #define SLOW_BYTE_ACCESS 0 -#define MOVE_RATIO 32 +#define MOVE_RATIO(speed) 32 #define NO_FUNCTION_CSE diff --git a/gcc/config/v850/v850.h b/gcc/config/v850/v850.h index c897b121380..65e731fef79 100644 --- a/gcc/config/v850/v850.h +++ b/gcc/config/v850/v850.h @@ -865,7 +865,7 @@ do { \ /* According expr.c, a value of around 6 should minimize code size, and for the V850 series, that's our primary concern. */ -#define MOVE_RATIO 6 +#define MOVE_RATIO(speed) 6 /* Indirect calls are expensive, never turn a direct call into an indirect call. */ diff --git a/gcc/expr.c b/gcc/expr.c index 07685b22899..69b40d8af7a 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -175,7 +175,7 @@ static bool float_extend_from_mem[NUM_MACHINE_MODES][NUM_MACHINE_MODES]; #ifndef MOVE_BY_PIECES_P #define MOVE_BY_PIECES_P(SIZE, ALIGN) \ (move_by_pieces_ninsns (SIZE, ALIGN, MOVE_MAX_PIECES + 1) \ - < (unsigned int) MOVE_RATIO) + < (unsigned int) MOVE_RATIO (optimize_insn_for_speed_p ())) #endif /* This macro is used to determine whether clear_by_pieces should be @@ -183,7 +183,7 @@ static bool float_extend_from_mem[NUM_MACHINE_MODES][NUM_MACHINE_MODES]; #ifndef CLEAR_BY_PIECES_P #define CLEAR_BY_PIECES_P(SIZE, ALIGN) \ (move_by_pieces_ninsns (SIZE, ALIGN, STORE_MAX_PIECES + 1) \ - < (unsigned int) CLEAR_RATIO) + < (unsigned int) CLEAR_RATIO (optimize_insn_for_speed_p ())) #endif /* This macro is used to determine whether store_by_pieces should be @@ -191,7 +191,7 @@ static bool float_extend_from_mem[NUM_MACHINE_MODES][NUM_MACHINE_MODES]; #ifndef SET_BY_PIECES_P #define SET_BY_PIECES_P(SIZE, ALIGN) \ (move_by_pieces_ninsns (SIZE, ALIGN, STORE_MAX_PIECES + 1) \ - < (unsigned int) SET_RATIO) + < (unsigned int) SET_RATIO (optimize_insn_for_speed_p ())) #endif /* This macro is used to determine whether store_by_pieces should be @@ -199,7 +199,7 @@ static bool float_extend_from_mem[NUM_MACHINE_MODES][NUM_MACHINE_MODES]; #ifndef STORE_BY_PIECES_P #define STORE_BY_PIECES_P(SIZE, ALIGN) \ (move_by_pieces_ninsns (SIZE, ALIGN, STORE_MAX_PIECES + 1) \ - < (unsigned int) MOVE_RATIO) + < (unsigned int) MOVE_RATIO (optimize_insn_for_speed_p ())) #endif /* This array records the insn_code of insns to perform block moves. */ diff --git a/gcc/expr.h b/gcc/expr.h index 30dbaef1037..48e0e2d6dcd 100644 --- a/gcc/expr.h +++ b/gcc/expr.h @@ -66,10 +66,10 @@ enum expand_modifier {EXPAND_NORMAL = 0, EXPAND_STACK_PARM, EXPAND_SUM, #ifndef MOVE_RATIO #if defined (HAVE_movmemqi) || defined (HAVE_movmemhi) || defined (HAVE_movmemsi) || defined (HAVE_movmemdi) || defined (HAVE_movmemti) -#define MOVE_RATIO 2 +#define MOVE_RATIO(speed) 2 #else /* If we are optimizing for space (-Os), cut down the default move ratio. */ -#define MOVE_RATIO (optimize_size ? 3 : 15) +#define MOVE_RATIO(speed) ((speed) ? 15 : 3) #endif #endif @@ -78,10 +78,10 @@ enum expand_modifier {EXPAND_NORMAL = 0, EXPAND_STACK_PARM, EXPAND_SUM, #ifndef CLEAR_RATIO #if defined (HAVE_setmemqi) || defined (HAVE_setmemhi) || defined (HAVE_setmemsi) || defined (HAVE_setmemdi) || defined (HAVE_setmemti) -#define CLEAR_RATIO 2 +#define CLEAR_RATIO(speed) 2 #else /* If we are optimizing for space, cut down the default clear ratio. */ -#define CLEAR_RATIO (optimize_size ? 3 : 15) +#define CLEAR_RATIO(speed) ((speed) ? 15 :3) #endif #endif @@ -89,7 +89,7 @@ enum expand_modifier {EXPAND_NORMAL = 0, EXPAND_STACK_PARM, EXPAND_SUM, SET_RATIO or more simple move-instruction sequences, we will do a movmem or libcall instead. */ #ifndef SET_RATIO -#define SET_RATIO MOVE_RATIO +#define SET_RATIO(speed) MOVE_RATIO(speed) #endif enum direction {none, upward, downward}; diff --git a/gcc/gimplify.c b/gcc/gimplify.c index b0b5e78968d..0515aac6198 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -3595,7 +3595,8 @@ gimplify_init_constructor (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p, if (num_type_elements < 0 && int_size_in_bytes (type) >= 0) cleared = true; /* If there are "lots" of zeros, then block clear the object first. */ - else if (num_type_elements - num_nonzero_elements > CLEAR_RATIO + else if (num_type_elements - num_nonzero_elements + > CLEAR_RATIO (optimize_function_for_speed_p (cfun)) && num_nonzero_elements < num_type_elements/4) cleared = true; /* ??? This bit ought not be needed. For any element not present diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index e38ef3a8d4e..5919b2be0c2 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -2614,7 +2614,7 @@ estimate_move_cost (tree type) size = int_size_in_bytes (type); - if (size < 0 || size > MOVE_MAX_PIECES * MOVE_RATIO) + if (size < 0 || size > MOVE_MAX_PIECES * MOVE_RATIO (!optimize_size)) /* Cost of a memcpy call, 3 arguments and the call. */ return 4; else diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index abe0c9f530d..ea351ea9766 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -1902,10 +1902,10 @@ decide_block_copy (struct sra_elt *elt) sensible default. */ max_size = SRA_MAX_STRUCTURE_SIZE ? SRA_MAX_STRUCTURE_SIZE - : MOVE_RATIO * UNITS_PER_WORD; + : MOVE_RATIO (optimize_function_for_speed_p (cfun)) * UNITS_PER_WORD; max_count = SRA_MAX_STRUCTURE_COUNT ? SRA_MAX_STRUCTURE_COUNT - : MOVE_RATIO; + : MOVE_RATIO (optimize_function_for_speed_p (cfun)); full_size = tree_low_cst (size_tree, 1); full_count = count_type_elements (elt->type, false); |