aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorBin Cheng <bin.cheng@arm.com>2015-03-25 05:53:55 +0000
committerBin Cheng <amker@gcc.gnu.org>2015-03-25 05:53:55 +0000
commit2301ca745e4332fce8abcd7bc790d69fabf1a423 (patch)
tree890b1f19d6797fd18a2243142c334c9af40d66d3 /gcc
parentfae00b3eee74b6bcad636a2a67bec4a48faa8f7f (diff)
downloadgcc-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/ChangeLog9
-rw-r--r--gcc/config/arm/arm-protos.h3
-rw-r--r--gcc/config/arm/arm.c56
-rw-r--r--gcc/config/arm/arm.opt6
-rw-r--r--gcc/doc/invoke.texi8
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