diff options
author | Bin Cheng <bin.cheng@arm.com> | 2015-03-25 05:53:55 +0000 |
---|---|---|
committer | Bin Cheng <amker@gcc.gnu.org> | 2015-03-25 05:53:55 +0000 |
commit | 2301ca745e4332fce8abcd7bc790d69fabf1a423 (patch) | |
tree | 890b1f19d6797fd18a2243142c334c9af40d66d3 /gcc | |
parent | fae00b3eee74b6bcad636a2a67bec4a48faa8f7f (diff) | |
download | gcc-2301ca745e4332fce8abcd7bc790d69fabf1a423.zip gcc-2301ca745e4332fce8abcd7bc790d69fabf1a423.tar.gz gcc-2301ca745e4332fce8abcd7bc790d69fabf1a423.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/arm/arm-protos.h | 3 | ||||
-rw-r--r-- | gcc/config/arm/arm.c | 56 | ||||
-rw-r--r-- | gcc/config/arm/arm.opt | 6 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 8 |
5 files changed, 82 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 80c1e40..0f69aa2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2015-03-25 Bin Cheng <bin.cheng@arm.com> + + * 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 <dj@redhat.com> * 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 28ffe52..16eb854 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 8e484a2..50bd3eb 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 6da49b8..d4ff164 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 4bbd3fc..9749727 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 |