diff options
Diffstat (limited to 'gcc/config')
37 files changed, 287 insertions, 250 deletions
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index cba9370f629..cad90e1adce 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -1260,13 +1260,14 @@ alpha_legitimize_reload_address (rtx x, scanned. In either case, *TOTAL contains the cost result. */ static bool -alpha_rtx_costs (rtx x, int code, int outer_code, int *total) +alpha_rtx_costs (rtx x, int code, int outer_code, int *total, + bool speed) { enum machine_mode mode = GET_MODE (x); bool float_mode_p = FLOAT_MODE_P (mode); const struct alpha_rtx_cost_data *cost_data; - if (optimize_size) + if (!speed) cost_data = &alpha_rtx_cost_size; else cost_data = &alpha_rtx_cost_data[alpha_tune]; @@ -1311,7 +1312,7 @@ alpha_rtx_costs (rtx x, int code, int outer_code, int *total) *total = COSTS_N_INSNS (15); else /* Otherwise we do a load from the GOT. */ - *total = COSTS_N_INSNS (optimize_size ? 1 : alpha_memory_latency); + *total = COSTS_N_INSNS (!speed ? 1 : alpha_memory_latency); return true; case HIGH: @@ -1326,8 +1327,8 @@ alpha_rtx_costs (rtx x, int code, int outer_code, int *total) else if (GET_CODE (XEXP (x, 0)) == MULT && const48_operand (XEXP (XEXP (x, 0), 1), VOIDmode)) { - *total = (rtx_cost (XEXP (XEXP (x, 0), 0), outer_code) - + rtx_cost (XEXP (x, 1), outer_code) + COSTS_N_INSNS (1)); + *total = (rtx_cost (XEXP (XEXP (x, 0), 0), outer_code, speed) + + rtx_cost (XEXP (x, 1), outer_code, speed) + COSTS_N_INSNS (1)); return true; } return false; @@ -1375,7 +1376,7 @@ alpha_rtx_costs (rtx x, int code, int outer_code, int *total) return false; case MEM: - *total = COSTS_N_INSNS (optimize_size ? 1 : alpha_memory_latency); + *total = COSTS_N_INSNS (!speed ? 1 : alpha_memory_latency); return true; case NEG: @@ -10657,7 +10658,7 @@ alpha_init_libfuncs (void) #undef TARGET_RTX_COSTS #define TARGET_RTX_COSTS alpha_rtx_costs #undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST hook_int_rtx_0 +#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 #undef TARGET_MACHINE_DEPENDENT_REORG #define TARGET_MACHINE_DEPENDENT_REORG alpha_reorg diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c index 067d9f7ec79..891b8efefba 100644 --- a/gcc/config/arc/arc.c +++ b/gcc/config/arc/arc.c @@ -92,8 +92,8 @@ static void arc_internal_label (FILE *, const char *, unsigned long); static void arc_va_start (tree, rtx); static void arc_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode, tree, int *, int); -static bool arc_rtx_costs (rtx, int, int, int *); -static int arc_address_cost (rtx); +static bool arc_rtx_costs (rtx, int, int, int *, bool); +static int arc_address_cost (rtx, bool); static void arc_external_libcall (rtx); static bool arc_return_in_memory (const_tree, const_tree); static bool arc_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode, @@ -830,7 +830,8 @@ arc_setup_incoming_varargs (CUMULATIVE_ARGS *cum, scanned. In either case, *TOTAL contains the cost result. */ static bool -arc_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) +arc_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total, + bool speed ATTRIBUTE_UNUSED) { switch (code) { @@ -884,7 +885,7 @@ arc_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) If ADDR is not a valid address, its cost is irrelevant. */ static int -arc_address_cost (rtx addr) +arc_address_cost (rtx addr, bool speed ATTRIBUTE_UNUSED) { switch (GET_CODE (addr)) { diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 4de60bb67f1..6a4b3ef11cd 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -131,7 +131,8 @@ static bool arm_slowmul_rtx_costs (rtx, int, int, int *); static bool arm_fastmul_rtx_costs (rtx, int, int, int *); static bool arm_xscale_rtx_costs (rtx, int, int, int *); static bool arm_9e_rtx_costs (rtx, int, int, int *); -static int arm_address_cost (rtx); +static bool arm_rtx_costs (rtx, int, int, int *, bool); +static int arm_address_cost (rtx, bool); static bool arm_memory_load_p (rtx); static bool arm_cirrus_insn_p (rtx); static void cirrus_reorg (rtx); @@ -256,9 +257,8 @@ static bool arm_allocate_stack_slots_for_args (void); #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK #define TARGET_ASM_CAN_OUTPUT_MI_THUNK default_can_output_mi_thunk_no_vcall -/* This will be overridden in arm_override_options. */ #undef TARGET_RTX_COSTS -#define TARGET_RTX_COSTS arm_slowmul_rtx_costs +#define TARGET_RTX_COSTS arm_rtx_costs #undef TARGET_ADDRESS_COST #define TARGET_ADDRESS_COST arm_address_cost @@ -1185,10 +1185,6 @@ arm_override_options (void) gcc_assert (arm_tune != arm_none); tune_flags = all_cores[(int)arm_tune].flags; - if (optimize_size) - targetm.rtx_costs = arm_size_rtx_costs; - else - targetm.rtx_costs = all_cores[(int)arm_tune].rtx_costs; /* Make sure that the processor choice does not conflict with any of the other command line choices. */ @@ -4920,7 +4916,7 @@ arm_rtx_costs_1 (rtx x, enum rtx_code code, enum rtx_code outer) case MINUS: if (GET_CODE (XEXP (x, 1)) == MULT && mode == SImode && arm_arch_thumb2) { - extra_cost = rtx_cost (XEXP (x, 1), code); + extra_cost = rtx_cost (XEXP (x, 1), code, true); if (!REG_OR_SUBREG_REG (XEXP (x, 0))) extra_cost += 4 * ARM_NUM_REGS (mode); return extra_cost; @@ -4969,7 +4965,7 @@ arm_rtx_costs_1 (rtx x, enum rtx_code code, enum rtx_code outer) if (GET_CODE (XEXP (x, 0)) == MULT) { - extra_cost = rtx_cost (XEXP (x, 0), code); + extra_cost = rtx_cost (XEXP (x, 0), code, true); if (!REG_OR_SUBREG_REG (XEXP (x, 1))) extra_cost += 4 * ARM_NUM_REGS (mode); return extra_cost; @@ -5168,7 +5164,7 @@ arm_size_rtx_costs (rtx x, int code, int outer_code, int *total) case ROTATE: if (mode == SImode && GET_CODE (XEXP (x, 1)) == REG) { - *total = COSTS_N_INSNS (2) + rtx_cost (XEXP (x, 0), code); + *total = COSTS_N_INSNS (2) + rtx_cost (XEXP (x, 0), code, false); return true; } /* Fall through */ @@ -5178,15 +5174,15 @@ arm_size_rtx_costs (rtx x, int code, int outer_code, int *total) case ASHIFTRT: if (mode == DImode && GET_CODE (XEXP (x, 1)) == CONST_INT) { - *total = COSTS_N_INSNS (3) + rtx_cost (XEXP (x, 0), code); + *total = COSTS_N_INSNS (3) + rtx_cost (XEXP (x, 0), code, false); return true; } else if (mode == SImode) { - *total = COSTS_N_INSNS (1) + rtx_cost (XEXP (x, 0), code); + *total = COSTS_N_INSNS (1) + rtx_cost (XEXP (x, 0), code, false); /* Slightly disparage register shifts, but not by much. */ if (GET_CODE (XEXP (x, 1)) != CONST_INT) - *total += 1 + rtx_cost (XEXP (x, 1), code); + *total += 1 + rtx_cost (XEXP (x, 1), code, false); return true; } @@ -5354,6 +5350,16 @@ arm_size_rtx_costs (rtx x, int code, int outer_code, int *total) } } +/* RTX costs when optimizing for size. */ +static bool +arm_rtx_costs (rtx x, int code, int outer_code, int *total, bool speed) +{ + if (!speed) + return arm_size_rtx_costs (x, code, outer_code, total); + else + return all_cores[(int)arm_tune].rtx_costs; +} + /* RTX costs for cores with a slow MUL implementation. Thumb-2 is not supported on any "slowmul" cores, so it can be ignored. */ @@ -5546,7 +5552,7 @@ arm_xscale_rtx_costs (rtx x, int code, int outer_code, int *total) /* A COMPARE of a MULT is slow on XScale; the muls instruction will stall until the multiplication is complete. */ if (GET_CODE (XEXP (x, 0)) == MULT) - *total = 4 + rtx_cost (XEXP (x, 0), code); + *total = 4 + rtx_cost (XEXP (x, 0), code, true); else *total = arm_rtx_costs_1 (x, code, outer_code); return true; @@ -5666,7 +5672,7 @@ arm_thumb_address_cost (rtx x) } static int -arm_address_cost (rtx x) +arm_address_cost (rtx x, bool speed ATTRIBUTE_UNUSED) { return TARGET_32BIT ? arm_arm_address_cost (x) : arm_thumb_address_cost (x); } diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c index dba224db886..ed8c97729a4 100644 --- a/gcc/config/avr/avr.c +++ b/gcc/config/avr/avr.c @@ -81,8 +81,8 @@ static void avr_reorg (void); static void avr_asm_out_ctor (rtx, int); static void avr_asm_out_dtor (rtx, int); static int avr_operand_rtx_cost (rtx, enum machine_mode, enum rtx_code); -static bool avr_rtx_costs (rtx, int, int, int *); -static int avr_address_cost (rtx); +static bool avr_rtx_costs (rtx, int, int, int *, bool); +static int avr_address_cost (rtx, bool); static bool avr_return_in_memory (const_tree, const_tree); static struct machine_function * avr_init_machine_status (void); static rtx avr_builtin_setjmp_frame_value (void); @@ -1562,7 +1562,7 @@ final_prescan_insn (rtx insn, rtx *operand ATTRIBUTE_UNUSED, fprintf (asm_out_file, "/*DEBUG: 0x%x\t\t%d\t%d */\n", INSN_ADDRESSES (uid), INSN_ADDRESSES (uid) - last_insn_address, - rtx_cost (PATTERN (insn), INSN)); + rtx_cost (PATTERN (insn), INSN, !optimize_size)); } last_insn_address = INSN_ADDRESSES (uid); } @@ -4991,7 +4991,8 @@ order_regs_for_local_alloc (void) operand's parent operator. */ static int -avr_operand_rtx_cost (rtx x, enum machine_mode mode, enum rtx_code outer) +avr_operand_rtx_cost (rtx x, enum machine_mode mode, enum rtx_code outer, + bool speed ATTRIBUTE_UNUSED) { enum rtx_code code = GET_CODE (x); int total; @@ -5021,7 +5022,8 @@ avr_operand_rtx_cost (rtx x, enum machine_mode mode, enum rtx_code outer) case, *TOTAL contains the cost result. */ static bool -avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) +avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total, + bool speed) { enum machine_mode mode = GET_MODE (x); HOST_WIDE_INT val; @@ -5153,8 +5155,8 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) { case QImode: if (AVR_HAVE_MUL) - *total = COSTS_N_INSNS (optimize_size ? 3 : 4); - else if (optimize_size) + *total = COSTS_N_INSNS (!speed ? 3 : 4); + else if (!speed) *total = COSTS_N_INSNS (AVR_HAVE_JMP_CALL ? 2 : 1); else return false; @@ -5162,8 +5164,8 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) case HImode: if (AVR_HAVE_MUL) - *total = COSTS_N_INSNS (optimize_size ? 7 : 10); - else if (optimize_size) + *total = COSTS_N_INSNS (!speed ? 7 : 10); + else if (!speed) *total = COSTS_N_INSNS (AVR_HAVE_JMP_CALL ? 2 : 1); else return false; @@ -5180,7 +5182,7 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) case MOD: case UDIV: case UMOD: - if (optimize_size) + if (!speed) *total = COSTS_N_INSNS (AVR_HAVE_JMP_CALL ? 2 : 1); else return false; @@ -5194,7 +5196,7 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) case QImode: if (GET_CODE (XEXP (x, 1)) != CONST_INT) { - *total = COSTS_N_INSNS (optimize_size ? 4 : 17); + *total = COSTS_N_INSNS (!speed ? 4 : 17); *total += avr_operand_rtx_cost (XEXP (x, 1), mode, code); } else @@ -5212,7 +5214,7 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) case HImode: if (GET_CODE (XEXP (x, 1)) != CONST_INT) { - *total = COSTS_N_INSNS (optimize_size ? 5 : 41); + *total = COSTS_N_INSNS (!speed ? 5 : 41); *total += avr_operand_rtx_cost (XEXP (x, 1), mode, code); } else @@ -5240,16 +5242,16 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) *total = COSTS_N_INSNS (5); break; case 4: - *total = COSTS_N_INSNS (optimize_size ? 5 : 8); + *total = COSTS_N_INSNS (!speed ? 5 : 8); break; case 6: - *total = COSTS_N_INSNS (optimize_size ? 5 : 9); + *total = COSTS_N_INSNS (ptimize_size ? 5 : 9); break; case 5: - *total = COSTS_N_INSNS (optimize_size ? 5 : 10); + *total = COSTS_N_INSNS (!speed ? 5 : 10); break; default: - *total = COSTS_N_INSNS (optimize_size ? 5 : 41); + *total = COSTS_N_INSNS (!speed ? 5 : 41); *total += avr_operand_rtx_cost (XEXP (x, 1), mode, code); } break; @@ -5257,7 +5259,7 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) case SImode: if (GET_CODE (XEXP (x, 1)) != CONST_INT) { - *total = COSTS_N_INSNS (optimize_size ? 7 : 113); + *total = COSTS_N_INSNS (!speed ? 7 : 113); *total += avr_operand_rtx_cost (XEXP (x, 1), mode, code); } else @@ -5278,10 +5280,10 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) *total = COSTS_N_INSNS (6); break; case 2: - *total = COSTS_N_INSNS (optimize_size ? 7 : 8); + *total = COSTS_N_INSNS (!speed ? 7 : 8); break; default: - *total = COSTS_N_INSNS (optimize_size ? 7 : 113); + *total = COSTS_N_INSNS (!speed ? 7 : 113); *total += avr_operand_rtx_cost (XEXP (x, 1), mode, code); } break; @@ -5298,7 +5300,7 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) case QImode: if (GET_CODE (XEXP (x, 1)) != CONST_INT) { - *total = COSTS_N_INSNS (optimize_size ? 4 : 17); + *total = COSTS_N_INSNS (!speed ? 4 : 17); *total += avr_operand_rtx_cost (XEXP (x, 1), mode, code); } else @@ -5318,7 +5320,7 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) case HImode: if (GET_CODE (XEXP (x, 1)) != CONST_INT) { - *total = COSTS_N_INSNS (optimize_size ? 5 : 41); + *total = COSTS_N_INSNS (!speed ? 5 : 41); *total += avr_operand_rtx_cost (XEXP (x, 1), mode, code); } else @@ -5344,17 +5346,17 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) *total = COSTS_N_INSNS (5); break; case 11: - *total = COSTS_N_INSNS (optimize_size ? 5 : 6); + *total = COSTS_N_INSNS (!speed ? 5 : 6); break; case 12: - *total = COSTS_N_INSNS (optimize_size ? 5 : 7); + *total = COSTS_N_INSNS (!speed ? 5 : 7); break; case 6: case 13: - *total = COSTS_N_INSNS (optimize_size ? 5 : 8); + *total = COSTS_N_INSNS (!speed ? 5 : 8); break; default: - *total = COSTS_N_INSNS (optimize_size ? 5 : 41); + *total = COSTS_N_INSNS (!speed ? 5 : 41); *total += avr_operand_rtx_cost (XEXP (x, 1), mode, code); } break; @@ -5362,7 +5364,7 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) case SImode: if (GET_CODE (XEXP (x, 1)) != CONST_INT) { - *total = COSTS_N_INSNS (optimize_size ? 7 : 113); + *total = COSTS_N_INSNS (!speed ? 7 : 113); *total += avr_operand_rtx_cost (XEXP (x, 1), mode, code); } else @@ -5380,13 +5382,13 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) *total = COSTS_N_INSNS (6); break; case 2: - *total = COSTS_N_INSNS (optimize_size ? 7 : 8); + *total = COSTS_N_INSNS (!speed ? 7 : 8); break; case 31: *total = COSTS_N_INSNS (AVR_HAVE_MOVW ? 4 : 5); break; default: - *total = COSTS_N_INSNS (optimize_size ? 7 : 113); + *total = COSTS_N_INSNS (!speed ? 7 : 113); *total += avr_operand_rtx_cost (XEXP (x, 1), mode, code); } break; @@ -5403,7 +5405,7 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) case QImode: if (GET_CODE (XEXP (x, 1)) != CONST_INT) { - *total = COSTS_N_INSNS (optimize_size ? 4 : 17); + *total = COSTS_N_INSNS (!speed ? 4 : 17); *total += avr_operand_rtx_cost (XEXP (x, 1), mode, code); } else @@ -5421,7 +5423,7 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) case HImode: if (GET_CODE (XEXP (x, 1)) != CONST_INT) { - *total = COSTS_N_INSNS (optimize_size ? 5 : 41); + *total = COSTS_N_INSNS (!speed ? 5 : 41); *total += avr_operand_rtx_cost (XEXP (x, 1), mode, code); } else @@ -5450,17 +5452,17 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) case 12: case 13: case 14: - *total = COSTS_N_INSNS (optimize_size ? 5 : 6); + *total = COSTS_N_INSNS (!speed ? 5 : 6); break; case 4: - *total = COSTS_N_INSNS (optimize_size ? 5 : 7); + *total = COSTS_N_INSNS (!speed ? 5 : 7); break; case 5: case 6: - *total = COSTS_N_INSNS (optimize_size ? 5 : 9); + *total = COSTS_N_INSNS (!speed ? 5 : 9); break; default: - *total = COSTS_N_INSNS (optimize_size ? 5 : 41); + *total = COSTS_N_INSNS (!speed ? 5 : 41); *total += avr_operand_rtx_cost (XEXP (x, 1), mode, code); } break; @@ -5468,7 +5470,7 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) case SImode: if (GET_CODE (XEXP (x, 1)) != CONST_INT) { - *total = COSTS_N_INSNS (optimize_size ? 7 : 113); + *total = COSTS_N_INSNS (!speed ? 7 : 113); *total += avr_operand_rtx_cost (XEXP (x, 1), mode, code); } else @@ -5481,7 +5483,7 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) *total = COSTS_N_INSNS (4); break; case 2: - *total = COSTS_N_INSNS (optimize_size ? 7 : 8); + *total = COSTS_N_INSNS (!speed ? 7 : 8); break; case 8: case 16: @@ -5492,7 +5494,7 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) *total = COSTS_N_INSNS (6); break; default: - *total = COSTS_N_INSNS (optimize_size ? 7 : 113); + *total = COSTS_N_INSNS (!speed ? 7 : 113); *total += avr_operand_rtx_cost (XEXP (x, 1), mode, code); } break; @@ -5543,7 +5545,7 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) /* Calculate the cost of a memory address. */ static int -avr_address_cost (rtx x) +avr_address_cost (rtx x, bool speed ATTRIBUTE_UNUSED) { if (GET_CODE (x) == PLUS && GET_CODE (XEXP (x,1)) == CONST_INT diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c index 8fda5c01d8e..6ff1093de8c 100644 --- a/gcc/config/bfin/bfin.c +++ b/gcc/config/bfin/bfin.c @@ -1378,7 +1378,7 @@ bfin_dsp_memref_p (rtx x) All addressing modes are equally cheap on the Blackfin. */ static int -bfin_address_cost (rtx addr ATTRIBUTE_UNUSED) +bfin_address_cost (rtx addr ATTRIBUTE_UNUSED, bool speed ATTRIBUTE_UNUSED) { return 1; } @@ -2871,7 +2871,7 @@ bfin_legitimate_constant_p (rtx x) } static bool -bfin_rtx_costs (rtx x, int code, int outer_code, int *total) +bfin_rtx_costs (rtx x, int code, int outer_code, int *total, bool speed) { int cost2 = COSTS_N_INSNS (1); rtx op0, op1; @@ -2919,19 +2919,19 @@ bfin_rtx_costs (rtx x, int code, int outer_code, int *total) if (val == 2 || val == 4) { *total = cost2; - *total += rtx_cost (XEXP (op0, 0), outer_code); - *total += rtx_cost (op1, outer_code); + *total += rtx_cost (XEXP (op0, 0), outer_code, speed); + *total += rtx_cost (op1, outer_code, speed); return true; } } *total = cost2; if (GET_CODE (op0) != REG && (GET_CODE (op0) != SUBREG || GET_CODE (SUBREG_REG (op0)) != REG)) - *total += rtx_cost (op0, SET); + *total += rtx_cost (op0, SET, speed); #if 0 /* We'd like to do this for accuracy, but it biases the loop optimizer towards creating too many induction variables. */ if (!reg_or_7bit_operand (op1, SImode)) - *total += rtx_cost (op1, SET); + *total += rtx_cost (op1, SET, speed); #endif } else if (GET_MODE (x) == DImode) @@ -2939,10 +2939,10 @@ bfin_rtx_costs (rtx x, int code, int outer_code, int *total) *total = 6 * cost2; if (GET_CODE (op1) != CONST_INT || !satisfies_constraint_Ks7 (op1)) - *total += rtx_cost (op1, PLUS); + *total += rtx_cost (op1, PLUS, speed); if (GET_CODE (op0) != REG && (GET_CODE (op0) != SUBREG || GET_CODE (SUBREG_REG (op0)) != REG)) - *total += rtx_cost (op0, PLUS); + *total += rtx_cost (op0, PLUS, speed); } return true; @@ -2965,7 +2965,7 @@ bfin_rtx_costs (rtx x, int code, int outer_code, int *total) op1 = XEXP (x, 1); if (GET_CODE (op0) != REG && (GET_CODE (op0) != SUBREG || GET_CODE (SUBREG_REG (op0)) != REG)) - *total += rtx_cost (op0, code); + *total += rtx_cost (op0, code, speed); return true; @@ -2990,7 +2990,7 @@ bfin_rtx_costs (rtx x, int code, int outer_code, int *total) if (GET_CODE (op0) != REG && (GET_CODE (op0) != SUBREG || GET_CODE (SUBREG_REG (op0)) != REG)) - *total += rtx_cost (op0, code); + *total += rtx_cost (op0, code, speed); if (GET_MODE (x) == DImode) { @@ -3004,12 +3004,12 @@ bfin_rtx_costs (rtx x, int code, int outer_code, int *total) if (code == AND) { if (! rhs_andsi3_operand (XEXP (x, 1), SImode)) - *total += rtx_cost (XEXP (x, 1), code); + *total += rtx_cost (XEXP (x, 1), code, speed); } else { if (! regorlog2_operand (XEXP (x, 1), SImode)) - *total += rtx_cost (XEXP (x, 1), code); + *total += rtx_cost (XEXP (x, 1), code, speed); } return true; @@ -3042,17 +3042,17 @@ bfin_rtx_costs (rtx x, int code, int outer_code, int *total) op0 = XEXP (op0, 0); op1 = XEXP (op1, 0); } - else if (optimize_size) + else if (!speed) *total = COSTS_N_INSNS (1); else *total = COSTS_N_INSNS (3); if (GET_CODE (op0) != REG && (GET_CODE (op0) != SUBREG || GET_CODE (SUBREG_REG (op0)) != REG)) - *total += rtx_cost (op0, MULT); + *total += rtx_cost (op0, MULT, speed); if (GET_CODE (op1) != REG && (GET_CODE (op1) != SUBREG || GET_CODE (SUBREG_REG (op1)) != REG)) - *total += rtx_cost (op1, MULT); + *total += rtx_cost (op1, MULT, speed); } return true; diff --git a/gcc/config/cris/cris.c b/gcc/config/cris/cris.c index a77f200d7ca..ff177f41f04 100644 --- a/gcc/config/cris/cris.c +++ b/gcc/config/cris/cris.c @@ -112,8 +112,8 @@ static void cris_asm_output_mi_thunk static void cris_file_start (void); static void cris_init_libfuncs (void); -static bool cris_rtx_costs (rtx, int, int, int *); -static int cris_address_cost (rtx); +static bool cris_rtx_costs (rtx, int, int, int *, bool); +static int cris_address_cost (rtx, bool); static bool cris_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool); static int cris_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode, @@ -1756,7 +1756,8 @@ cris_expand_return (bool on_stack) scanned. In either case, *TOTAL contains the cost result. */ static bool -cris_rtx_costs (rtx x, int code, int outer_code, int *total) +cris_rtx_costs (rtx x, int code, int outer_code, int *total, + bool speed) { switch (code) { @@ -1840,7 +1841,7 @@ cris_rtx_costs (rtx x, int code, int outer_code, int *total) return false; case ZERO_EXTEND: case SIGN_EXTEND: - *total = rtx_cost (XEXP (x, 0), outer_code); + *total = rtx_cost (XEXP (x, 0), outer_code, speed); return true; default: @@ -1851,7 +1852,7 @@ cris_rtx_costs (rtx x, int code, int outer_code, int *total) /* The ADDRESS_COST worker. */ static int -cris_address_cost (rtx x) +cris_address_cost (rtx x, bool speed ATTRIBUTE_UNUSED) { /* The metric to use for the cost-macros is unclear. The metric used here is (the number of cycles needed) / 2, diff --git a/gcc/config/crx/crx.c b/gcc/config/crx/crx.c index 2f4aa6f176b..1ae1bcfcd46 100644 --- a/gcc/config/crx/crx.c +++ b/gcc/config/crx/crx.c @@ -136,7 +136,7 @@ static bool crx_fixed_condition_code_regs (unsigned int *, unsigned int *); static rtx crx_struct_value_rtx (tree fntype ATTRIBUTE_UNUSED, int incoming ATTRIBUTE_UNUSED); static bool crx_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED); -static int crx_address_cost (rtx); +static int crx_address_cost (rtx, bool); /*****************************************************************************/ /* STACK LAYOUT AND CALLING CONVENTIONS */ @@ -800,7 +800,7 @@ crx_legitimate_address_p (enum machine_mode mode ATTRIBUTE_UNUSED, /* Return cost of the memory address x. */ static int -crx_address_cost (rtx addr) +crx_address_cost (rtx addr, bool speed ATTRIBUTE_UNUSED) { enum crx_addrtype addrtype; struct crx_address address; diff --git a/gcc/config/frv/frv.c b/gcc/config/frv/frv.c index 7fa2e22f094..4a57486a566 100644 --- a/gcc/config/frv/frv.c +++ b/gcc/config/frv/frv.c @@ -9471,7 +9471,8 @@ static bool frv_rtx_costs (rtx x, int code ATTRIBUTE_UNUSED, int outer_code ATTRIBUTE_UNUSED, - int *total) + int *total, + bool speed ATTRIBUTE_UNUSED) { if (outer_code == MEM) { diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c index 3d9c0fb7efb..992c73a4c1b 100644 --- a/gcc/config/h8300/h8300.c +++ b/gcc/config/h8300/h8300.c @@ -1152,7 +1152,7 @@ h8300_shift_costs (rtx x) /* Worker function for TARGET_RTX_COSTS. */ static bool -h8300_rtx_costs (rtx x, int code, int outer_code, int *total) +h8300_rtx_costs (rtx x, int code, int outer_code, int *total, bool speed) { if (TARGET_H8300SX && outer_code == MEM) { @@ -1178,7 +1178,7 @@ h8300_rtx_costs (rtx x, int code, int outer_code, int *total) { /* Constant operands need the same number of processor states as register operands. Although we could try to - use a size-based cost for optimize_size, the lack of + use a size-based cost for !speed, the lack of of a mode makes the results very unpredictable. */ *total = 0; return true; @@ -1243,11 +1243,11 @@ h8300_rtx_costs (rtx x, int code, int outer_code, int *total) { case QImode: case HImode: - *total = COSTS_N_INSNS (optimize_size ? 4 : 10); + *total = COSTS_N_INSNS (!speed ? 4 : 10); return false; case SImode: - *total = COSTS_N_INSNS (optimize_size ? 4 : 18); + *total = COSTS_N_INSNS (!speed ? 4 : 18); return false; default: diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index b240b7d6b86..025eee6a99c 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -8491,7 +8491,7 @@ ix86_decompose_address (rtx addr, struct ix86_address *out) requires to two regs - that would mean more pseudos with longer lifetimes. */ static int -ix86_address_cost (rtx x) +ix86_address_cost (rtx x, bool speed ATTRIBUTE_UNUSED) { struct ix86_address parts; int cost = 1; @@ -25244,10 +25244,11 @@ ix86_modes_tieable_p (enum machine_mode mode1, enum machine_mode mode2) scanned. In either case, *TOTAL contains the cost result. */ static bool -ix86_rtx_costs (rtx x, int code, int outer_code_i, int *total) +ix86_rtx_costs (rtx x, int code, int outer_code_i, int *total, bool speed) { enum rtx_code outer_code = (enum rtx_code) outer_code_i; enum machine_mode mode = GET_MODE (x); + const struct processor_costs *cost = speed ? ix86_cost : &ix86_size_cost; switch (code) { @@ -25299,13 +25300,13 @@ ix86_rtx_costs (rtx x, int code, int outer_code_i, int *total) && GET_MODE (XEXP (x, 0)) == SImode) *total = 1; else if (TARGET_ZERO_EXTEND_WITH_AND) - *total = ix86_cost->add; + *total = cost->add; else - *total = ix86_cost->movzx; + *total = cost->movzx; return false; case SIGN_EXTEND: - *total = ix86_cost->movsx; + *total = cost->movsx; return false; case ASHIFT: @@ -25315,13 +25316,13 @@ ix86_rtx_costs (rtx x, int code, int outer_code_i, int *total) HOST_WIDE_INT value = INTVAL (XEXP (x, 1)); if (value == 1) { - *total = ix86_cost->add; + *total = cost->add; return false; } if ((value == 2 || value == 3) - && ix86_cost->lea <= ix86_cost->shift_const) + && cost->lea <= cost->shift_const) { - *total = ix86_cost->lea; + *total = cost->lea; return false; } } @@ -25336,24 +25337,24 @@ ix86_rtx_costs (rtx x, int code, int outer_code_i, int *total) if (CONST_INT_P (XEXP (x, 1))) { if (INTVAL (XEXP (x, 1)) > 32) - *total = ix86_cost->shift_const + COSTS_N_INSNS (2); + *total = cost->shift_const + COSTS_N_INSNS (2); else - *total = ix86_cost->shift_const * 2; + *total = cost->shift_const * 2; } else { if (GET_CODE (XEXP (x, 1)) == AND) - *total = ix86_cost->shift_var * 2; + *total = cost->shift_var * 2; else - *total = ix86_cost->shift_var * 6 + COSTS_N_INSNS (2); + *total = cost->shift_var * 6 + COSTS_N_INSNS (2); } } else { if (CONST_INT_P (XEXP (x, 1))) - *total = ix86_cost->shift_const; + *total = cost->shift_const; else - *total = ix86_cost->shift_var; + *total = cost->shift_var; } return false; @@ -25361,18 +25362,18 @@ ix86_rtx_costs (rtx x, int code, int outer_code_i, int *total) if (SSE_FLOAT_MODE_P (mode) && TARGET_SSE_MATH) { /* ??? SSE scalar cost should be used here. */ - *total = ix86_cost->fmul; + *total = cost->fmul; return false; } else if (X87_FLOAT_MODE_P (mode)) { - *total = ix86_cost->fmul; + *total = cost->fmul; return false; } else if (FLOAT_MODE_P (mode)) { /* ??? SSE vector cost should be used here. */ - *total = ix86_cost->fmul; + *total = cost->fmul; return false; } else @@ -25413,9 +25414,9 @@ ix86_rtx_costs (rtx x, int code, int outer_code_i, int *total) op0 = XEXP (op0, 0), mode = GET_MODE (op0); } - *total = (ix86_cost->mult_init[MODE_INDEX (mode)] - + nbits * ix86_cost->mult_bit - + rtx_cost (op0, outer_code) + rtx_cost (op1, outer_code)); + *total = (cost->mult_init[MODE_INDEX (mode)] + + nbits * cost->mult_bit + + rtx_cost (op0, outer_code, speed) + rtx_cost (op1, outer_code, speed)); return true; } @@ -25426,14 +25427,14 @@ ix86_rtx_costs (rtx x, int code, int outer_code_i, int *total) case UMOD: if (SSE_FLOAT_MODE_P (mode) && TARGET_SSE_MATH) /* ??? SSE cost should be used here. */ - *total = ix86_cost->fdiv; + *total = cost->fdiv; else if (X87_FLOAT_MODE_P (mode)) - *total = ix86_cost->fdiv; + *total = cost->fdiv; else if (FLOAT_MODE_P (mode)) /* ??? SSE vector cost should be used here. */ - *total = ix86_cost->fdiv; + *total = cost->fdiv; else - *total = ix86_cost->divide[MODE_INDEX (mode)]; + *total = cost->divide[MODE_INDEX (mode)]; return false; case PLUS: @@ -25448,11 +25449,11 @@ ix86_rtx_costs (rtx x, int code, int outer_code_i, int *total) HOST_WIDE_INT val = INTVAL (XEXP (XEXP (XEXP (x, 0), 0), 1)); if (val == 2 || val == 4 || val == 8) { - *total = ix86_cost->lea; - *total += rtx_cost (XEXP (XEXP (x, 0), 1), outer_code); + *total = cost->lea; + *total += rtx_cost (XEXP (XEXP (x, 0), 1), outer_code, speed); *total += rtx_cost (XEXP (XEXP (XEXP (x, 0), 0), 0), - outer_code); - *total += rtx_cost (XEXP (x, 1), outer_code); + outer_code, speed); + *total += rtx_cost (XEXP (x, 1), outer_code, speed); return true; } } @@ -25462,18 +25463,18 @@ ix86_rtx_costs (rtx x, int code, int outer_code_i, int *total) HOST_WIDE_INT val = INTVAL (XEXP (XEXP (x, 0), 1)); if (val == 2 || val == 4 || val == 8) { - *total = ix86_cost->lea; - *total += rtx_cost (XEXP (XEXP (x, 0), 0), outer_code); - *total += rtx_cost (XEXP (x, 1), outer_code); + *total = cost->lea; + *total += rtx_cost (XEXP (XEXP (x, 0), 0), outer_code, speed); + *total += rtx_cost (XEXP (x, 1), outer_code, speed); return true; } } else if (GET_CODE (XEXP (x, 0)) == PLUS) { - *total = ix86_cost->lea; - *total += rtx_cost (XEXP (XEXP (x, 0), 0), outer_code); - *total += rtx_cost (XEXP (XEXP (x, 0), 1), outer_code); - *total += rtx_cost (XEXP (x, 1), outer_code); + *total = cost->lea; + *total += rtx_cost (XEXP (XEXP (x, 0), 0), outer_code, speed); + *total += rtx_cost (XEXP (XEXP (x, 0), 1), outer_code, speed); + *total += rtx_cost (XEXP (x, 1), outer_code, speed); return true; } } @@ -25483,18 +25484,18 @@ ix86_rtx_costs (rtx x, int code, int outer_code_i, int *total) if (SSE_FLOAT_MODE_P (mode) && TARGET_SSE_MATH) { /* ??? SSE cost should be used here. */ - *total = ix86_cost->fadd; + *total = cost->fadd; return false; } else if (X87_FLOAT_MODE_P (mode)) { - *total = ix86_cost->fadd; + *total = cost->fadd; return false; } else if (FLOAT_MODE_P (mode)) { /* ??? SSE vector cost should be used here. */ - *total = ix86_cost->fadd; + *total = cost->fadd; return false; } /* FALLTHRU */ @@ -25504,10 +25505,10 @@ ix86_rtx_costs (rtx x, int code, int outer_code_i, int *total) case XOR: if (!TARGET_64BIT && mode == DImode) { - *total = (ix86_cost->add * 2 - + (rtx_cost (XEXP (x, 0), outer_code) + *total = (cost->add * 2 + + (rtx_cost (XEXP (x, 0), outer_code, speed) << (GET_MODE (XEXP (x, 0)) != DImode)) - + (rtx_cost (XEXP (x, 1), outer_code) + + (rtx_cost (XEXP (x, 1), outer_code, speed) << (GET_MODE (XEXP (x, 1)) != DImode))); return true; } @@ -25517,27 +25518,27 @@ ix86_rtx_costs (rtx x, int code, int outer_code_i, int *total) if (SSE_FLOAT_MODE_P (mode) && TARGET_SSE_MATH) { /* ??? SSE cost should be used here. */ - *total = ix86_cost->fchs; + *total = cost->fchs; return false; } else if (X87_FLOAT_MODE_P (mode)) { - *total = ix86_cost->fchs; + *total = cost->fchs; return false; } else if (FLOAT_MODE_P (mode)) { /* ??? SSE vector cost should be used here. */ - *total = ix86_cost->fchs; + *total = cost->fchs; return false; } /* FALLTHRU */ case NOT: if (!TARGET_64BIT && mode == DImode) - *total = ix86_cost->add * 2; + *total = cost->add * 2; else - *total = ix86_cost->add; + *total = cost->add; return false; case COMPARE: @@ -25548,9 +25549,9 @@ ix86_rtx_costs (rtx x, int code, int outer_code_i, int *total) { /* This kind of construct is implemented using test[bwl]. Treat it as if we had an AND. */ - *total = (ix86_cost->add - + rtx_cost (XEXP (XEXP (x, 0), 0), outer_code) - + rtx_cost (const1_rtx, outer_code)); + *total = (cost->add + + rtx_cost (XEXP (XEXP (x, 0), 0), outer_code, speed) + + rtx_cost (const1_rtx, outer_code, speed)); return true; } return false; @@ -25563,23 +25564,23 @@ ix86_rtx_costs (rtx x, int code, int outer_code_i, int *total) case ABS: if (SSE_FLOAT_MODE_P (mode) && TARGET_SSE_MATH) /* ??? SSE cost should be used here. */ - *total = ix86_cost->fabs; + *total = cost->fabs; else if (X87_FLOAT_MODE_P (mode)) - *total = ix86_cost->fabs; + *total = cost->fabs; else if (FLOAT_MODE_P (mode)) /* ??? SSE vector cost should be used here. */ - *total = ix86_cost->fabs; + *total = cost->fabs; return false; case SQRT: if (SSE_FLOAT_MODE_P (mode) && TARGET_SSE_MATH) /* ??? SSE cost should be used here. */ - *total = ix86_cost->fsqrt; + *total = cost->fsqrt; else if (X87_FLOAT_MODE_P (mode)) - *total = ix86_cost->fsqrt; + *total = cost->fsqrt; else if (FLOAT_MODE_P (mode)) /* ??? SSE vector cost should be used here. */ - *total = ix86_cost->fsqrt; + *total = cost->fsqrt; return false; case UNSPEC: diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index d9100e8d40b..c16ecc7e3c3 100644 --- a/gcc/config/ia64/ia64.c +++ b/gcc/config/ia64/ia64.c @@ -202,7 +202,7 @@ static int ia64_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode, tree, bool); static bool ia64_function_ok_for_sibcall (tree, tree); static bool ia64_return_in_memory (const_tree, const_tree); -static bool ia64_rtx_costs (rtx, int, int, int *); +static bool ia64_rtx_costs (rtx, int, int, int *, bool); static int ia64_unspec_may_trap_p (const_rtx, unsigned); static void fix_range (const char *); static bool ia64_handle_option (size_t, const char *, int); @@ -4810,7 +4810,8 @@ ia64_print_operand (FILE * file, rtx x, int code) /* ??? This is incomplete. */ static bool -ia64_rtx_costs (rtx x, int code, int outer_code, int *total) +ia64_rtx_costs (rtx x, int code, int outer_code, int *total, + bool speed ATTRIBUTE_UNUSED) { switch (code) { diff --git a/gcc/config/iq2000/iq2000.c b/gcc/config/iq2000/iq2000.c index 06c187bc451..a716e729532 100644 --- a/gcc/config/iq2000/iq2000.c +++ b/gcc/config/iq2000/iq2000.c @@ -161,8 +161,8 @@ static bool iq2000_return_in_memory (const_tree, const_tree); static void iq2000_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode, tree, int *, int); -static bool iq2000_rtx_costs (rtx, int, int, int *); -static int iq2000_address_cost (rtx); +static bool iq2000_rtx_costs (rtx, int, int, int *, bool); +static int iq2000_address_cost (rtx, bool); static section *iq2000_select_section (tree, int, unsigned HOST_WIDE_INT); static bool iq2000_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool); @@ -744,7 +744,7 @@ iq2000_move_1word (rtx operands[], rtx insn, int unsignedp) /* Provide the costs of an addressing mode that contains ADDR. */ static int -iq2000_address_cost (rtx addr) +iq2000_address_cost (rtx addr, bool speec ATTRIBUTE_UNUSED) { switch (GET_CODE (addr)) { @@ -3203,7 +3203,7 @@ print_operand (FILE *file, rtx op, int letter) } static bool -iq2000_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int * total) +iq2000_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int * total, bool speed) { enum machine_mode mode = GET_MODE (x); diff --git a/gcc/config/m32c/m32c.c b/gcc/config/m32c/m32c.c index dcd5b374f93..3fda87bcf0f 100644 --- a/gcc/config/m32c/m32c.c +++ b/gcc/config/m32c/m32c.c @@ -2119,7 +2119,8 @@ m32c_memory_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED, #undef TARGET_RTX_COSTS #define TARGET_RTX_COSTS m32c_rtx_costs static bool -m32c_rtx_costs (rtx x, int code, int outer_code, int *total) +m32c_rtx_costs (rtx x, int code, int outer_code, int *total, + bool speed ATTRIBUTE_UNUSED) { switch (code) { @@ -2198,7 +2199,7 @@ m32c_rtx_costs (rtx x, int code, int outer_code, int *total) #undef TARGET_ADDRESS_COST #define TARGET_ADDRESS_COST m32c_address_cost static int -m32c_address_cost (rtx addr) +m32c_address_cost (rtx addr, bool speed ATTRIBUTE_UNUSED) { int i; /* fprintf(stderr, "\naddress_cost\n"); diff --git a/gcc/config/m32r/m32r.c b/gcc/config/m32r/m32r.c index 23e7851b160..790eeef1232 100644 --- a/gcc/config/m32r/m32r.c +++ b/gcc/config/m32r/m32r.c @@ -85,7 +85,7 @@ static bool m32r_return_in_memory (const_tree, const_tree); static void m32r_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode, tree, int *, int); static void init_idents (void); -static bool m32r_rtx_costs (rtx, int, int, int *); +static bool m32r_rtx_costs (rtx, int, int, int *, bool speed); static bool m32r_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool); static int m32r_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode, @@ -126,7 +126,7 @@ static int m32r_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode, #undef TARGET_RTX_COSTS #define TARGET_RTX_COSTS m32r_rtx_costs #undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST hook_int_rtx_0 +#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 #undef TARGET_PROMOTE_PROTOTYPES #define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_true @@ -1092,7 +1092,8 @@ m32r_issue_rate (void) /* Cost functions. */ static bool -m32r_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) +m32r_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total, + bool speed ATTRIBUTE_UNUSED) { switch (code) { diff --git a/gcc/config/m68hc11/m68hc11.c b/gcc/config/m68hc11/m68hc11.c index a52739be67e..b19f1e7c4b8 100644 --- a/gcc/config/m68hc11/m68hc11.c +++ b/gcc/config/m68hc11/m68hc11.c @@ -67,10 +67,10 @@ static void m68hc11_reorg (void); static int go_if_legitimate_address_internal (rtx, enum machine_mode, int); static rtx m68hc11_expand_compare (enum rtx_code, rtx, rtx); static int must_parenthesize (rtx); -static int m68hc11_address_cost (rtx); +static int m68hc11_address_cost (rtx, bool); static int m68hc11_shift_cost (enum machine_mode, rtx, int); static int m68hc11_rtx_costs_1 (rtx, enum rtx_code, enum rtx_code); -static bool m68hc11_rtx_costs (rtx, int, int, int *); +static bool m68hc11_rtx_costs (rtx, int, int, int *, bool); static tree m68hc11_handle_fntype_attribute (tree *, tree, tree, int, bool *); const struct attribute_spec m68hc11_attribute_table[]; @@ -5145,7 +5145,7 @@ m68hc11_register_move_cost (enum machine_mode mode, enum reg_class from, If ADDR is not a valid address, its cost is irrelevant. */ static int -m68hc11_address_cost (rtx addr) +m68hc11_address_cost (rtx addr, bool speed ATTRIBUTE_UNUSED) { int cost = 4; @@ -5230,7 +5230,7 @@ m68hc11_shift_cost (enum machine_mode mode, rtx x, int shift) { int total; - total = rtx_cost (x, SET); + total = rtx_cost (x, SET, !optimize_size); if (mode == QImode) total += m68hc11_cost->shiftQI_const[shift % 8]; else if (mode == HImode) @@ -5274,14 +5274,14 @@ m68hc11_rtx_costs_1 (rtx x, enum rtx_code code, return m68hc11_shift_cost (mode, XEXP (x, 0), INTVAL (XEXP (x, 1))); } - total = rtx_cost (XEXP (x, 0), code) + rtx_cost (XEXP (x, 1), code); + total = rtx_cost (XEXP (x, 0), code, !optimize_size) + rtx_cost (XEXP (x, 1), code, !optimize_size); total += m68hc11_cost->shift_var; return total; case AND: case XOR: case IOR: - total = rtx_cost (XEXP (x, 0), code) + rtx_cost (XEXP (x, 1), code); + total = rtx_cost (XEXP (x, 0), code, !optimize_size) + rtx_cost (XEXP (x, 1), code, !optimize_size); total += m68hc11_cost->logical; /* Logical instructions are byte instructions only. */ @@ -5290,7 +5290,7 @@ m68hc11_rtx_costs_1 (rtx x, enum rtx_code code, case MINUS: case PLUS: - total = rtx_cost (XEXP (x, 0), code) + rtx_cost (XEXP (x, 1), code); + total = rtx_cost (XEXP (x, 0), code, !optimize_size) + rtx_cost (XEXP (x, 1), code, !optimize_size); total += m68hc11_cost->add; if (GET_MODE_SIZE (mode) > 2) { @@ -5301,7 +5301,7 @@ m68hc11_rtx_costs_1 (rtx x, enum rtx_code code, case UDIV: case DIV: case MOD: - total = rtx_cost (XEXP (x, 0), code) + rtx_cost (XEXP (x, 1), code); + total = rtx_cost (XEXP (x, 0), code, !optimize_size) + rtx_cost (XEXP (x, 1), code, !optimize_size); switch (mode) { case QImode: @@ -5324,16 +5324,16 @@ m68hc11_rtx_costs_1 (rtx x, enum rtx_code code, if (mode == HImode && GET_CODE (XEXP (x, 0)) == ZERO_EXTEND && GET_CODE (XEXP (x, 1)) == ZERO_EXTEND) return m68hc11_cost->multQI - + rtx_cost (XEXP (XEXP (x, 0), 0), code) - + rtx_cost (XEXP (XEXP (x, 1), 0), code); + + rtx_cost (XEXP (XEXP (x, 0), 0), code, !optimize_size) + + rtx_cost (XEXP (XEXP (x, 1), 0), code, !optimize_size); /* emul instruction produces 32-bit result for 68HC12. */ if (TARGET_M6812 && mode == SImode && GET_CODE (XEXP (x, 0)) == ZERO_EXTEND && GET_CODE (XEXP (x, 1)) == ZERO_EXTEND) return m68hc11_cost->multHI - + rtx_cost (XEXP (XEXP (x, 0), 0), code) - + rtx_cost (XEXP (XEXP (x, 1), 0), code); + + rtx_cost (XEXP (XEXP (x, 0), 0), code, !optimize_size) + + rtx_cost (XEXP (XEXP (x, 1), 0), code, !optimize_size); total = rtx_cost (XEXP (x, 0), code) + rtx_cost (XEXP (x, 1), code); switch (mode) @@ -5362,7 +5362,7 @@ m68hc11_rtx_costs_1 (rtx x, enum rtx_code code, case COMPARE: case ABS: case ZERO_EXTEND: - total = extra_cost + rtx_cost (XEXP (x, 0), code); + total = extra_cost + rtx_cost (XEXP (x, 0), code, !optimize_size); if (mode == QImode) { return total + COSTS_N_INSNS (1); @@ -5389,7 +5389,8 @@ m68hc11_rtx_costs_1 (rtx x, enum rtx_code code, } static bool -m68hc11_rtx_costs (rtx x, int code, int outer_code, int *total) +m68hc11_rtx_costs (rtx x, int code, int outer_code, int *total, + bool speed ATTRIBUTE_UNUSED) { switch (code) { diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c index 1853073af81..46647ea9b97 100644 --- a/gcc/config/m68k/m68k.c +++ b/gcc/config/m68k/m68k.c @@ -146,7 +146,7 @@ static tree m68k_handle_fndecl_attribute (tree *node, tree name, static void m68k_compute_frame_layout (void); static bool m68k_save_reg (unsigned int regno, bool interrupt_handler); static bool m68k_ok_for_sibcall_p (tree, tree); -static bool m68k_rtx_costs (rtx, int, int, int *); +static bool m68k_rtx_costs (rtx, int, int, int *, bool); #if M68K_HONOR_TARGET_STRICT_ALIGNMENT static bool m68k_return_in_memory (const_tree, const_tree); #endif @@ -2205,7 +2205,8 @@ const_int_cost (HOST_WIDE_INT i) } static bool -m68k_rtx_costs (rtx x, int code, int outer_code, int *total) +m68k_rtx_costs (rtx x, int code, int outer_code, int *total, + bool speed ATTRIBUTE_UNUSED) { switch (code) { diff --git a/gcc/config/mcore/mcore.c b/gcc/config/mcore/mcore.c index b80f59f476c..229b32eab6d 100644 --- a/gcc/config/mcore/mcore.c +++ b/gcc/config/mcore/mcore.c @@ -182,7 +182,7 @@ static int mcore_arg_partial_bytes (CUMULATIVE_ARGS *, #undef TARGET_RTX_COSTS #define TARGET_RTX_COSTS mcore_rtx_costs #undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST hook_int_rtx_0 +#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 #undef TARGET_MACHINE_DEPENDENT_REORG #define TARGET_MACHINE_DEPENDENT_REORG mcore_reorg @@ -479,7 +479,8 @@ mcore_ior_cost (rtx x) } static bool -mcore_rtx_costs (rtx x, int code, int outer_code, int * total) +mcore_rtx_costs (rtx x, int code, int outer_code, int * total, + bool speed ATTRIBUTE_UNUSED) { switch (code) { diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 8a2ba16c452..dea7ffe57fa 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -3225,8 +3225,8 @@ mips_binary_cost (rtx x, int single_cost, int double_cost) else cost = single_cost; return (cost - + rtx_cost (XEXP (x, 0), 0) - + rtx_cost (XEXP (x, 1), GET_CODE (x))); + + rtx_cost (XEXP (x, 0), 0, !optimize_size) + + rtx_cost (XEXP (x, 1), GET_CODE (x), !optimize_size)); } /* Return the cost of floating-point multiplications of mode MODE. */ @@ -3296,7 +3296,8 @@ mips_zero_extend_cost (enum machine_mode mode, rtx op) /* Implement TARGET_RTX_COSTS. */ static bool -mips_rtx_costs (rtx x, int code, int outer_code, int *total) +mips_rtx_costs (rtx x, int code, int outer_code, int *total, + bool speed) { enum machine_mode mode = GET_MODE (x); bool float_mode_p = FLOAT_MODE_P (mode); @@ -3443,7 +3444,7 @@ mips_rtx_costs (rtx x, int code, int outer_code, int *total) && UINTVAL (XEXP (x, 1)) == 0xffffffff) { *total = (mips_zero_extend_cost (mode, XEXP (x, 0)) - + rtx_cost (XEXP (x, 0), 0)); + + rtx_cost (XEXP (x, 0), 0, speed)); return true; } /* Fall through. */ @@ -3475,7 +3476,7 @@ mips_rtx_costs (rtx x, int code, int outer_code, int *total) case LO_SUM: /* Low-part immediates need an extended MIPS16 instruction. */ *total = (COSTS_N_INSNS (TARGET_MIPS16 ? 2 : 1) - + rtx_cost (XEXP (x, 0), 0)); + + rtx_cost (XEXP (x, 0), 0, speed)); return true; case LT: @@ -3515,17 +3516,17 @@ mips_rtx_costs (rtx x, int code, int outer_code, int *total) if (GET_CODE (op0) == MULT && GET_CODE (XEXP (op0, 0)) == NEG) { *total = (mips_fp_mult_cost (mode) - + rtx_cost (XEXP (XEXP (op0, 0), 0), 0) - + rtx_cost (XEXP (op0, 1), 0) - + rtx_cost (op1, 0)); + + rtx_cost (XEXP (XEXP (op0, 0), 0), 0, speed) + + rtx_cost (XEXP (op0, 1), 0, speed) + + rtx_cost (op1, 0, speed)); return true; } if (GET_CODE (op1) == MULT) { *total = (mips_fp_mult_cost (mode) - + rtx_cost (op0, 0) - + rtx_cost (XEXP (op1, 0), 0) - + rtx_cost (XEXP (op1, 1), 0)); + + rtx_cost (op0, 0, speed) + + rtx_cost (XEXP (op1, 0), 0, speed) + + rtx_cost (XEXP (op1, 1), 0, speed)); return true; } } @@ -3566,9 +3567,9 @@ mips_rtx_costs (rtx x, int code, int outer_code, int *total) && GET_CODE (XEXP (op, 0)) == MULT) { *total = (mips_fp_mult_cost (mode) - + rtx_cost (XEXP (XEXP (op, 0), 0), 0) - + rtx_cost (XEXP (XEXP (op, 0), 1), 0) - + rtx_cost (XEXP (op, 1), 0)); + + rtx_cost (XEXP (XEXP (op, 0), 0), 0, speed) + + rtx_cost (XEXP (XEXP (op, 0), 1), 0, speed) + + rtx_cost (XEXP (op, 1), 0, speed)); return true; } } @@ -3606,9 +3607,9 @@ mips_rtx_costs (rtx x, int code, int outer_code, int *total) if (outer_code == SQRT || GET_CODE (XEXP (x, 1)) == SQRT) /* An rsqrt<mode>a or rsqrt<mode>b pattern. Count the division as being free. */ - *total = rtx_cost (XEXP (x, 1), 0); + *total = rtx_cost (XEXP (x, 1), 0, speed); else - *total = mips_fp_div_cost (mode) + rtx_cost (XEXP (x, 1), 0); + *total = mips_fp_div_cost (mode) + rtx_cost (XEXP (x, 1), 0, speed); return true; } /* Fall through. */ @@ -3636,7 +3637,7 @@ mips_rtx_costs (rtx x, int code, int outer_code, int *total) && CONST_INT_P (XEXP (x, 1)) && exact_log2 (INTVAL (XEXP (x, 1))) >= 0) { - *total = COSTS_N_INSNS (2) + rtx_cost (XEXP (x, 0), 0); + *total = COSTS_N_INSNS (2) + rtx_cost (XEXP (x, 0), 0, speed); return true; } *total = COSTS_N_INSNS (mips_idiv_insns ()); @@ -3671,7 +3672,7 @@ mips_rtx_costs (rtx x, int code, int outer_code, int *total) /* Implement TARGET_ADDRESS_COST. */ static int -mips_address_cost (rtx addr) +mips_address_cost (rtx addr, bool speed ATTRIBUTE_UNUSED) { return mips_address_insns (addr, SImode, false); } diff --git a/gcc/config/mmix/mmix.c b/gcc/config/mmix/mmix.c index e57f52dd796..53cb8f6007f 100644 --- a/gcc/config/mmix/mmix.c +++ b/gcc/config/mmix/mmix.c @@ -132,7 +132,7 @@ static void mmix_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode, tree, int *, int); static void mmix_file_start (void); static void mmix_file_end (void); -static bool mmix_rtx_costs (rtx, int, int, int *); +static bool mmix_rtx_costs (rtx, int, int, int *, bool); static rtx mmix_struct_value_rtx (tree, int); static bool mmix_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool); @@ -181,7 +181,7 @@ static bool mmix_pass_by_reference (CUMULATIVE_ARGS *, #undef TARGET_RTX_COSTS #define TARGET_RTX_COSTS mmix_rtx_costs #undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST hook_int_rtx_0 +#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 #undef TARGET_MACHINE_DEPENDENT_REORG #define TARGET_MACHINE_DEPENDENT_REORG mmix_reorg @@ -1106,7 +1106,8 @@ static bool mmix_rtx_costs (rtx x ATTRIBUTE_UNUSED, int code ATTRIBUTE_UNUSED, int outer_code ATTRIBUTE_UNUSED, - int *total ATTRIBUTE_UNUSED) + int *total ATTRIBUTE_UNUSED, + bool speed ATTRIBUTE_UNUSED) { /* For the time being, this is just a stub and we'll accept the generic calculations, until we can do measurements, at least. diff --git a/gcc/config/mn10300/mn10300.c b/gcc/config/mn10300/mn10300.c index 13c0ff72f2e..277497075b1 100644 --- a/gcc/config/mn10300/mn10300.c +++ b/gcc/config/mn10300/mn10300.c @@ -70,8 +70,8 @@ enum processor_type mn10300_processor = PROCESSOR_DEFAULT; static bool mn10300_handle_option (size_t, const char *, int); static int mn10300_address_cost_1 (rtx, int *); -static int mn10300_address_cost (rtx); -static bool mn10300_rtx_costs (rtx, int, int, int *); +static int mn10300_address_cost (rtx, bool); +static bool mn10300_rtx_costs (rtx, int, int, int *, bool); static void mn10300_file_start (void); static bool mn10300_return_in_memory (const_tree, const_tree); static rtx mn10300_builtin_saveregs (void); @@ -1942,7 +1942,7 @@ legitimate_address_p (enum machine_mode mode, rtx x, int strict) } static int -mn10300_address_cost_1 (rtx x, int *unsig) +mn10300_address_cost_1 (rtx x, int *unsig, bool speed ATTRIBUTE_UNUSED) { switch (GET_CODE (x)) { @@ -2008,14 +2008,14 @@ mn10300_address_cost_1 (rtx x, int *unsig) } static int -mn10300_address_cost (rtx x) +mn10300_address_cost (rtx x, bool speed ATTRIBUTE_UNUSED) { int s = 0; return mn10300_address_cost_1 (x, &s); } static bool -mn10300_rtx_costs (rtx x, int code, int outer_code, int *total) +mn10300_rtx_costs (rtx x, int code, int outer_code, int *total, bool speed ATTRIBUTE_UNUSED) { switch (code) { diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 9ff778b5b47..c9c6525c91d 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -86,8 +86,8 @@ hppa_fpstore_bypass_p (rtx out_insn, rtx in_insn) static void copy_reg_pointer (rtx, rtx); static void fix_range (const char *); static bool pa_handle_option (size_t, const char *, int); -static int hppa_address_cost (rtx); -static bool hppa_rtx_costs (rtx, int, int, int *); +static int hppa_address_cost (rtx, bool); +static bool hppa_rtx_costs (rtx, int, int, int *, bool); static inline rtx force_mode (enum machine_mode, rtx); static void pa_reorg (void); static void pa_combine_instructions (void); @@ -1279,7 +1279,8 @@ hppa_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED, as GO_IF_LEGITIMATE_ADDRESS. */ static int -hppa_address_cost (rtx X) +hppa_address_cost (rtx X, + bool speed ATTRIBUTE_UNUSED) { switch (GET_CODE (X)) { @@ -1299,7 +1300,8 @@ hppa_address_cost (rtx X) scanned. In either case, *TOTAL contains the cost result. */ static bool -hppa_rtx_costs (rtx x, int code, int outer_code, int *total) +hppa_rtx_costs (rtx x, int code, int outer_code, int *total, + bool speed ATTRIBUTE_UNUSED) { switch (code) { diff --git a/gcc/config/pdp11/pdp11.c b/gcc/config/pdp11/pdp11.c index 661980fd13e..52167974c81 100644 --- a/gcc/config/pdp11/pdp11.c +++ b/gcc/config/pdp11/pdp11.c @@ -149,7 +149,7 @@ static const char *singlemove_string (rtx *); static bool pdp11_assemble_integer (rtx, unsigned int, int); static void pdp11_output_function_prologue (FILE *, HOST_WIDE_INT); static void pdp11_output_function_epilogue (FILE *, HOST_WIDE_INT); -static bool pdp11_rtx_costs (rtx, int, int, int *); +static bool pdp11_rtx_costs (rtx, int, int, int *, bool); static bool pdp11_return_in_memory (const_tree, const_tree); /* Initialize the GCC target structure. */ @@ -1094,7 +1094,8 @@ register_move_cost(enum reg_class c1, enum reg_class c2) } static bool -pdp11_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) +pdp11_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total, + bool speed ATTRIBUTE_UNUSED) { switch (code) { diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 2124ea3c50d..e2743edce29 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -829,7 +829,7 @@ static void rs6000_xcoff_file_start (void); static void rs6000_xcoff_file_end (void); #endif static int rs6000_variable_issue (FILE *, int, rtx, int); -static bool rs6000_rtx_costs (rtx, int, int, int *); +static bool rs6000_rtx_costs (rtx, int, int, int *, bool); static int rs6000_adjust_cost (rtx, rtx, rtx, int); static void rs6000_sched_init (FILE *, int, int); static bool is_microcoded_insn (rtx); @@ -1180,7 +1180,7 @@ static const char alt_reg_names[][8] = #undef TARGET_RTX_COSTS #define TARGET_RTX_COSTS rs6000_rtx_costs #undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST hook_int_rtx_0 +#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 #undef TARGET_VECTOR_OPAQUE_P #define TARGET_VECTOR_OPAQUE_P rs6000_is_opaque_type @@ -21456,7 +21456,8 @@ rs6000_xcoff_file_end (void) scanned. In either case, *TOTAL contains the cost result. */ static bool -rs6000_rtx_costs (rtx x, int code, int outer_code, int *total) +rs6000_rtx_costs (rtx x, int code, int outer_code, int *total, + bool speed) { enum machine_mode mode = GET_MODE (x); @@ -21555,7 +21556,7 @@ rs6000_rtx_costs (rtx x, int code, int outer_code, int *total) /* When optimizing for size, MEM should be slightly more expensive than generating address, e.g., (plus (reg) (const)). L1 cache latency is about two instructions. */ - *total = optimize_size ? COSTS_N_INSNS (1) + 1 : COSTS_N_INSNS (2); + *total = !speed ? COSTS_N_INSNS (1) + 1 : COSTS_N_INSNS (2); return true; case LABEL_REF: @@ -21766,7 +21767,7 @@ rs6000_rtx_costs (rtx x, int code, int outer_code, int *total) case CALL: case IF_THEN_ELSE: - if (optimize_size) + if (!speed) { *total = COSTS_N_INSNS (1); return true; diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 957707b8607..d15ed2af14e 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -2298,7 +2298,8 @@ s390_float_const_zero_p (rtx value) of the superexpression of x. */ static bool -s390_rtx_costs (rtx x, int code, int outer_code, int *total) +s390_rtx_costs (rtx x, int code, int outer_code, int *total, + bool speed ATTRIBUTE_UNUSED) { switch (code) { @@ -2336,9 +2337,9 @@ s390_rtx_costs (rtx x, int code, int outer_code, int *total) *total = s390_cost->madbr; else *total = s390_cost->maebr; - *total += rtx_cost (XEXP (XEXP (x, 0), 0), MULT) - + rtx_cost (XEXP (XEXP (x, 0), 1), MULT) - + rtx_cost (XEXP (x, 1), code); + *total += rtx_cost (XEXP (XEXP (x, 0), 0), MULT, speed) + + rtx_cost (XEXP (XEXP (x, 0), 1), MULT, speed) + + rtx_cost (XEXP (x, 1), code, speed); return true; /* Do not do an additional recursive descent. */ } *total = COSTS_N_INSNS (1); @@ -2492,7 +2493,7 @@ s390_rtx_costs (rtx x, int code, int outer_code, int *total) /* Return the cost of an address rtx ADDR. */ static int -s390_address_cost (rtx addr) +s390_address_cost (rtx addr, bool speed ATTRIBUTE_UNUSED) { struct s390_address ad; if (!s390_decompose_address (addr, &ad)) diff --git a/gcc/config/score/score-protos.h b/gcc/config/score/score-protos.h index 5f444abdf73..4c7963ffb2f 100644 --- a/gcc/config/score/score-protos.h +++ b/gcc/config/score/score-protos.h @@ -85,7 +85,7 @@ extern const char * score_select (rtx *ops, const char *inst_pre, bool commu, extern const char * score_output_casesi (rtx *operands); extern const char * score_rpush (rtx *ops); extern const char * score_rpop (rtx *ops); -extern bool score_rtx_costs (rtx x, int code, int outer_code, int *total); +extern bool score_rtx_costs (rtx x, int code, int outer_code, int *total, bool speed); #ifdef RTX_CODE extern enum machine_mode score_select_cc_mode (enum rtx_code op, rtx x, rtx y); diff --git a/gcc/config/score/score.c b/gcc/config/score/score.c index c2e4176e382..861e5ba37c4 100644 --- a/gcc/config/score/score.c +++ b/gcc/config/score/score.c @@ -569,7 +569,8 @@ score_register_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED, /* Implement TARGET_RTX_COSTS macro. */ bool -score_rtx_costs (rtx x, int code, int outer_code, int *total) +score_rtx_costs (rtx x, int code, int outer_code, int *total, + bool speed ATTRIBUTE_UNUSED) { if (TARGET_SCORE5 || TARGET_SCORE5U || TARGET_SCORE7 || TARGET_SCORE7D) return score7_rtx_costs (x, code, outer_code, total); @@ -581,7 +582,8 @@ score_rtx_costs (rtx x, int code, int outer_code, int *total) /* Implement TARGET_ADDRESS_COST macro. */ int -score_address_cost (rtx addr) +score_address_cost (rtx addr, + bool speed ATTRIBUTE_UNUSED) { if (TARGET_SCORE5 || TARGET_SCORE5U || TARGET_SCORE7 || TARGET_SCORE7D) return score7_address_cost (addr); diff --git a/gcc/config/score/score3.c b/gcc/config/score/score3.c index c976f38c005..3392c417c5c 100644 --- a/gcc/config/score/score3.c +++ b/gcc/config/score/score3.c @@ -1000,7 +1000,8 @@ score3_address_insns (rtx x, enum machine_mode mode) /* Implement TARGET_RTX_COSTS macro. */ bool -score3_rtx_costs (rtx x, int code, int outer_code, int *total) +score3_rtx_costs (rtx x, int code, int outer_code, int *total, + bool speed ATTRIBUTE_UNUSED) { enum machine_mode mode = GET_MODE (x); @@ -1154,7 +1155,7 @@ score3_rtx_costs (rtx x, int code, int outer_code, int *total) /* Implement TARGET_ADDRESS_COST macro. */ int -score3_address_cost (rtx addr) +score3_address_cost (rtx addr, bool speed ATTRIBUTE_UNUSED) { return score3_address_insns (addr, SImode); } diff --git a/gcc/config/score/score3.h b/gcc/config/score/score3.h index 79677702d47..2585df9cfa2 100644 --- a/gcc/config/score/score3.h +++ b/gcc/config/score/score3.h @@ -126,7 +126,7 @@ extern int score3_address_p (enum machine_mode mode, rtx x, int strict); extern int score3_register_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED, enum reg_class from, enum reg_class to); -extern bool score3_rtx_costs (rtx x, int code, int outer_code, int *total); +extern bool score3_rtx_costs (rtx x, int code, int outer_code, int *total, bool speed); extern int score3_address_cost (rtx addr); extern int score3_output_external (FILE *file ATTRIBUTE_UNUSED, tree decl, diff --git a/gcc/config/score/score7.c b/gcc/config/score/score7.c index 03c47042ed5..52234fd270c 100644 --- a/gcc/config/score/score7.c +++ b/gcc/config/score/score7.c @@ -991,7 +991,8 @@ score7_address_insns (rtx x, enum machine_mode mode) /* Implement TARGET_RTX_COSTS macro. */ bool -score7_rtx_costs (rtx x, int code, int outer_code, int *total) +score7_rtx_costs (rtx x, int code, int outer_code, int *total, + bool speed ATTRIBUTE_UNUSED) { enum machine_mode mode = GET_MODE (x); @@ -1145,7 +1146,8 @@ score7_rtx_costs (rtx x, int code, int outer_code, int *total) /* Implement TARGET_ADDRESS_COST macro. */ int -score7_address_cost (rtx addr) +score7_address_cost (rtx addr, + bool speed ATTRIBUTE_UNUSED) { return score7_address_insns (addr, SImode); } diff --git a/gcc/config/score/score7.h b/gcc/config/score/score7.h index 1797e472279..ab2c7b0af88 100644 --- a/gcc/config/score/score7.h +++ b/gcc/config/score/score7.h @@ -126,7 +126,7 @@ extern int score7_address_p (enum machine_mode mode, rtx x, int strict); extern int score7_register_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED, enum reg_class from, enum reg_class to); -extern bool score7_rtx_costs (rtx x, int code, int outer_code, int *total); +extern bool score7_rtx_costs (rtx x, int code, int outer_code, int *total, bool speed); extern int score7_address_cost (rtx addr); extern int score7_output_external (FILE *file ATTRIBUTE_UNUSED, tree decl, diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 74060738ee9..fdd98937f8c 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -241,8 +241,8 @@ static int addsubcosts (rtx); static int multcosts (rtx); static bool unspec_caller_rtx_p (rtx); static bool sh_cannot_copy_insn_p (rtx); -static bool sh_rtx_costs (rtx, int, int, int *); -static int sh_address_cost (rtx); +static bool sh_rtx_costs (rtx, int, int, int *, bool); +static int sh_address_cost (rtx, bool); static int sh_pr_n_sets (void); static rtx sh_allocate_initial_value (rtx); static int shmedia_target_regs_stack_space (HARD_REG_SET *); @@ -2361,7 +2361,7 @@ andcosts (rtx x) || satisfies_constraint_J16 (XEXP (x, 1))) return 1; else - return 1 + rtx_cost (XEXP (x, 1), AND); + return 1 + rtx_cost (XEXP (x, 1), AND, !optimize_size); } /* These constants are single cycle extu.[bw] instructions. */ @@ -2461,7 +2461,8 @@ multcosts (rtx x ATTRIBUTE_UNUSED) scanned. In either case, *TOTAL contains the cost result. */ static bool -sh_rtx_costs (rtx x, int code, int outer_code, int *total) +sh_rtx_costs (rtx x, int code, int outer_code, int *total, + bool speed ATTRIBUTE_UNUSED) { switch (code) { @@ -2587,7 +2588,8 @@ sh_rtx_costs (rtx x, int code, int outer_code, int *total) since it increases pressure on r0. */ static int -sh_address_cost (rtx X) +sh_address_cost (rtx X, + bool speed ATTRIBUTE_UNUSED) { return (GET_CODE (X) == PLUS && ! CONSTANT_P (XEXP (X, 1)) diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c index b74e81e9558..0852cd94e79 100644 --- a/gcc/config/sparc/sparc.c +++ b/gcc/config/sparc/sparc.c @@ -404,7 +404,7 @@ static rtx sparc_tls_get_addr (void); static rtx sparc_tls_got (void); static const char *get_some_local_dynamic_name (void); static int get_some_local_dynamic_name_1 (rtx *, void *); -static bool sparc_rtx_costs (rtx, int, int, int *); +static bool sparc_rtx_costs (rtx, int, int, int *, bool); static bool sparc_promote_prototypes (const_tree); static rtx sparc_struct_value_rtx (tree, int); static bool sparc_return_in_memory (const_tree, const_tree); @@ -513,7 +513,7 @@ static bool fpu_option_set = false; #undef TARGET_RTX_COSTS #define TARGET_RTX_COSTS sparc_rtx_costs #undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST hook_int_rtx_0 +#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 /* This is only needed for TARGET_ARCH64, but since PROMOTE_FUNCTION_MODE is a no-op for TARGET_ARCH32 this is ok. Otherwise we'd need to add a runtime @@ -8401,7 +8401,8 @@ sparc_extra_constraint_check (rtx op, int c, int strict) ??? the latencies and then CSE will just use that. */ static bool -sparc_rtx_costs (rtx x, int code, int outer_code, int *total) +sparc_rtx_costs (rtx x, int code, int outer_code, int *total, + bool speed ATTRIBUTE_UNUSED) { enum machine_mode mode = GET_MODE (x); bool float_mode_p = FLOAT_MODE_P (mode); diff --git a/gcc/config/spu/spu.c b/gcc/config/spu/spu.c index da99d3f108a..e22513ffd8a 100644 --- a/gcc/config/spu/spu.c +++ b/gcc/config/spu/spu.c @@ -208,7 +208,7 @@ tree spu_builtin_types[SPU_BTI_MAX]; #define TARGET_RTX_COSTS spu_rtx_costs #undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST hook_int_rtx_0 +#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 #undef TARGET_SCHED_ISSUE_RATE #define TARGET_SCHED_ISSUE_RATE spu_sched_issue_rate @@ -4209,7 +4209,8 @@ spu_asm_globalize_label (FILE * file, const char *name) } static bool -spu_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total) +spu_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total, + bool speed ATTRIBUTE_UNUSED) { enum machine_mode mode = GET_MODE (x); int cost = COSTS_N_INSNS (2); diff --git a/gcc/config/stormy16/stormy16.c b/gcc/config/stormy16/stormy16.c index 77aedd6e01e..dd42fc833d0 100644 --- a/gcc/config/stormy16/stormy16.c +++ b/gcc/config/stormy16/stormy16.c @@ -57,8 +57,8 @@ static void xstormy16_asm_output_mi_thunk (FILE *, tree, HOST_WIDE_INT, static void xstormy16_init_builtins (void); static rtx xstormy16_expand_builtin (tree, rtx, rtx, enum machine_mode, int); -static bool xstormy16_rtx_costs (rtx, int, int, int *); -static int xstormy16_address_cost (rtx); +static bool xstormy16_rtx_costs (rtx, int, int, int *, bool); +static int xstormy16_address_cost (rtx, bool); static bool xstormy16_return_in_memory (const_tree, const_tree); /* Define the information needed to generate branch and scc insns. This is @@ -74,7 +74,7 @@ static GTY(()) section *bss100_section; static bool xstormy16_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, - int *total) + int *total, bool speed ATTRIBUTE_UNUSED) { switch (code) { @@ -107,7 +107,7 @@ xstormy16_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, } static int -xstormy16_address_cost (rtx x) +xstormy16_address_cost (rtx x, bool speed ATTRIBUTE_UNUSED) { return (GET_CODE (x) == CONST_INT ? 2 : GET_CODE (x) == PLUS ? 7 diff --git a/gcc/config/v850/v850.c b/gcc/config/v850/v850.c index b9f11b1583f..d4619797696 100644 --- a/gcc/config/v850/v850.c +++ b/gcc/config/v850/v850.c @@ -137,7 +137,7 @@ static GTY(()) section *zbss_section; #define TARGET_RTX_COSTS v850_rtx_costs #undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST hook_int_rtx_0 +#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 #undef TARGET_MACHINE_DEPENDENT_REORG #define TARGET_MACHINE_DEPENDENT_REORG v850_reorg @@ -422,7 +422,7 @@ static bool v850_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, - int * total) + int * total, bool speed) { switch (code) { @@ -438,7 +438,7 @@ v850_rtx_costs (rtx x, case DIV: case UMOD: case UDIV: - if (TARGET_V850E && optimize_size) + if (TARGET_V850E && !speed) *total = 6; else *total = 60; diff --git a/gcc/config/vax/vax.c b/gcc/config/vax/vax.c index 6cfd7e0d1dc..173799ebc65 100644 --- a/gcc/config/vax/vax.c +++ b/gcc/config/vax/vax.c @@ -49,8 +49,8 @@ static void vax_init_libfuncs (void); static void vax_output_mi_thunk (FILE *, tree, HOST_WIDE_INT, HOST_WIDE_INT, tree); static int vax_address_cost_1 (rtx); -static int vax_address_cost (rtx); -static bool vax_rtx_costs (rtx, int, int, int *); +static int vax_address_cost (rtx, bool); +static bool vax_rtx_costs (rtx, int, int, int *, bool); static rtx vax_struct_value_rtx (tree, int); /* Initialize the GCC target structure. */ @@ -520,7 +520,7 @@ vax_address_cost_1 (rtx addr) } static int -vax_address_cost (rtx x) +vax_address_cost (rtx x, bool speed ATTRIBUTE_UNUSED) { return (1 + (REG_P (x) ? 0 : vax_address_cost_1 (x))); } @@ -534,7 +534,8 @@ vax_address_cost (rtx x) costs on a per cpu basis. */ static bool -vax_rtx_costs (rtx x, int code, int outer_code, int *total) +vax_rtx_costs (rtx x, int code, int outer_code, int *total, + bool speed ATTRIBUTE_UNUSED) { enum machine_mode mode = GET_MODE (x); int i = 0; /* may be modified in switch */ diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c index f9979e61934..3bb71eb5c13 100644 --- a/gcc/config/xtensa/xtensa.c +++ b/gcc/config/xtensa/xtensa.c @@ -139,7 +139,7 @@ static unsigned int xtensa_multibss_section_type_flags (tree, const char *, int) ATTRIBUTE_UNUSED; static section *xtensa_select_rtx_section (enum machine_mode, rtx, unsigned HOST_WIDE_INT); -static bool xtensa_rtx_costs (rtx, int, int, int *); +static bool xtensa_rtx_costs (rtx, int, int, int *, bool); static tree xtensa_build_builtin_va_list (void); static bool xtensa_return_in_memory (const_tree, const_tree); static tree xtensa_gimplify_va_arg_expr (tree, tree, gimple_seq *, @@ -177,7 +177,7 @@ static const int reg_nonleaf_alloc_order[FIRST_PSEUDO_REGISTER] = #undef TARGET_RTX_COSTS #define TARGET_RTX_COSTS xtensa_rtx_costs #undef TARGET_ADDRESS_COST -#define TARGET_ADDRESS_COST hook_int_rtx_0 +#define TARGET_ADDRESS_COST hook_int_rtx_bool_0 #undef TARGET_BUILD_BUILTIN_VA_LIST #define TARGET_BUILD_BUILTIN_VA_LIST xtensa_build_builtin_va_list @@ -2947,7 +2947,8 @@ xtensa_select_rtx_section (enum machine_mode mode ATTRIBUTE_UNUSED, scanned. In either case, *TOTAL contains the cost result. */ static bool -xtensa_rtx_costs (rtx x, int code, int outer_code, int *total) +xtensa_rtx_costs (rtx x, int code, int outer_code, int *total, + bool speed ATTRIBUTE_UNUSED) { switch (code) { |