From 2301ca745e4332fce8abcd7bc790d69fabf1a423 Mon Sep 17 00:00:00 2001 From: Bin Cheng Date: Wed, 25 Mar 2015 05:53:55 +0000 Subject: [PATCH] arm.opt (print_tune_info): New option. * config/arm/arm.opt (print_tune_info): New option. * config/arm/arm.c (arm_print_tune_info): New function. (arm_file_start): Call arm_print_tune_info. * config/arm/arm-protos.h (struct tune_params): Add comment. * doc/invoke.texi (@item -mprint-tune-info): New item. (-mtune): mention it in ARM Option Summary. From-SVN: r221650 --- gcc/ChangeLog | 9 ++++++ gcc/config/arm/arm-protos.h | 3 ++ gcc/config/arm/arm.c | 56 +++++++++++++++++++++++++++++++++++++ gcc/config/arm/arm.opt | 6 ++++ gcc/doc/invoke.texi | 8 ++++++ 5 files changed, 82 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 80c1e407e21..0f69aa2def8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2015-03-25 Bin Cheng + + * config/arm/arm.opt (print_tune_info): New option. + * config/arm/arm.c (arm_print_tune_info): New function. + (arm_file_start): Call arm_print_tune_info. + * config/arm/arm-protos.h (struct tune_params): Add comment. + * doc/invoke.texi (@item -mprint-tune-info): New item. + (-mtune): mention it in ARM Option Summary. + 2015-03-25 DJ Delorie * config/rl78/rl78.c (rl78_print_operand_1): Move 'p' test to diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h index 28ffe52e8e7..16eb8546055 100644 --- a/gcc/config/arm/arm-protos.h +++ b/gcc/config/arm/arm-protos.h @@ -264,6 +264,9 @@ enum arm_sched_autopref ARM_SCHED_AUTOPREF_FULL }; +/* Dump function ARM_PRINT_TUNE_INFO should be updated whenever this + structure is modified. */ + struct tune_params { bool (*rtx_costs) (rtx, RTX_CODE, RTX_CODE, int *, bool); diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 8e484a20377..50bd3ebab83 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -25633,6 +25633,59 @@ arm_emit_eabi_attribute (const char *name, int num, int val) asm_fprintf (asm_out_file, "\n"); } +/* This function is used to print CPU tuning information as comment + in assembler file. Pointers are not printed for now. */ + +void +arm_print_tune_info (void) +{ + asm_fprintf (asm_out_file, "\t@.tune parameters\n"); + asm_fprintf (asm_out_file, "\t\t@constant_limit:\t%d\n", + current_tune->constant_limit); + asm_fprintf (asm_out_file, "\t\t@max_insns_skipped:\t%d\n", + current_tune->max_insns_skipped); + asm_fprintf (asm_out_file, "\t\t@num_prefetch_slots:\t%d\n", + current_tune->num_prefetch_slots); + asm_fprintf (asm_out_file, "\t\t@l1_cache_size:\t%d\n", + current_tune->l1_cache_size); + asm_fprintf (asm_out_file, "\t\t@l1_cache_line_size:\t%d\n", + current_tune->l1_cache_line_size); + asm_fprintf (asm_out_file, "\t\t@prefer_constant_pool:\t%d\n", + (int) current_tune->prefer_constant_pool); + asm_fprintf (asm_out_file, "\t\t@branch_cost:\t(s:speed, p:predictable)\n"); + asm_fprintf (asm_out_file, "\t\t\t\ts&p\tcost\n"); + asm_fprintf (asm_out_file, "\t\t\t\t00\t%d\n", + current_tune->branch_cost (false, false)); + asm_fprintf (asm_out_file, "\t\t\t\t01\t%d\n", + current_tune->branch_cost (false, true)); + asm_fprintf (asm_out_file, "\t\t\t\t10\t%d\n", + current_tune->branch_cost (true, false)); + asm_fprintf (asm_out_file, "\t\t\t\t11\t%d\n", + current_tune->branch_cost (true, true)); + asm_fprintf (asm_out_file, "\t\t@prefer_ldrd_strd:\t%d\n", + (int) current_tune->prefer_ldrd_strd); + asm_fprintf (asm_out_file, "\t\t@logical_op_non_short_circuit:\t[%d,%d]\n", + (int) current_tune->logical_op_non_short_circuit[0], + (int) current_tune->logical_op_non_short_circuit[1]); + asm_fprintf (asm_out_file, "\t\t@prefer_neon_for_64bits:\t%d\n", + (int) current_tune->prefer_neon_for_64bits); + asm_fprintf (asm_out_file, + "\t\t@disparage_flag_setting_t16_encodings:\t%d\n", + (int) current_tune->disparage_flag_setting_t16_encodings); + asm_fprintf (asm_out_file, + "\t\t@disparage_partial_flag_setting_t16_encodings:\t%d\n", + (int) current_tune + ->disparage_partial_flag_setting_t16_encodings); + asm_fprintf (asm_out_file, "\t\t@string_ops_prefer_neon:\t%d\n", + (int) current_tune->string_ops_prefer_neon); + asm_fprintf (asm_out_file, "\t\t@max_insns_inline_memset:\t%d\n", + current_tune->max_insns_inline_memset); + asm_fprintf (asm_out_file, "\t\t@fuseable_ops:\t%u\n", + current_tune->fuseable_ops); + asm_fprintf (asm_out_file, "\t\t@sched_autopref:\t%d\n", + (int) current_tune->sched_autopref); +} + static void arm_file_start (void) { @@ -25684,6 +25737,9 @@ arm_file_start (void) asm_fprintf (asm_out_file, "\t.cpu %s\n", truncated_name); } + if (print_tune_info) + arm_print_tune_info (); + if (TARGET_SOFT_FLOAT) { fpu_name = "softvfp"; diff --git a/gcc/config/arm/arm.opt b/gcc/config/arm/arm.opt index 6da49b8a771..d4ff164c7ef 100644 --- a/gcc/config/arm/arm.opt +++ b/gcc/config/arm/arm.opt @@ -222,6 +222,12 @@ mtune= Target RejectNegative ToLower Joined Enum(processor_type) Var(arm_tune_option) Init(arm_none) Tune code for the given processor +mprint-tune-info +Target Report RejectNegative Var(print_tune_info) Init(0) +Print CPU tuning information as comment in assembler file. This is +an option used only for regression testing of the compiler and not +intended for ordinary use in compiling code. + ; Other processor_type values are loaded from arm-tables.opt ; but that is a generated file and this is an odd-one-out. EnumValue diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 4bbd3fc1888..9749727c13f 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -550,6 +550,7 @@ Objective-C and Objective-C++ Dialects}. -mfp16-format=@var{name} -mthumb-interwork -mno-thumb-interwork @gol -mcpu=@var{name} -march=@var{name} -mfpu=@var{name} @gol +-mtune=@var{name} -mprint-tune-info @gol -mstructure-size-boundary=@var{n} @gol -mabort-on-noreturn @gol -mlong-calls -mno-long-calls @gol @@ -13474,6 +13475,13 @@ should be considered deprecated. Restricts generation of IT blocks to conform to the rules of ARMv8. IT blocks can only contain a single 16-bit instruction from a select set of instructions. This option is on by default for ARMv8 Thumb mode. + +@item -mprint-tune-info +@opindex mprint-tune-info +Print CPU tuning information as comment in assembler file. This is +an option used only for regression testing of the compiler and not +intended for ordinary use in compiling code. This option is disabled +by default. @end table @node AVR Options -- 2.30.2