arm.opt (print_tune_info): New option.
authorBin Cheng <bin.cheng@arm.com>
Wed, 25 Mar 2015 05:53:55 +0000 (05:53 +0000)
committerBin Cheng <amker@gcc.gnu.org>
Wed, 25 Mar 2015 05:53:55 +0000 (05:53 +0000)
* 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
gcc/config/arm/arm-protos.h
gcc/config/arm/arm.c
gcc/config/arm/arm.opt
gcc/doc/invoke.texi

index 80c1e407e210eee5e414d1bf1ebfb4f546f83a03..0f69aa2def8f62969fb585d62e45944a9d4e4a61 100644 (file)
@@ -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
index 28ffe52e8e7fab97d8c8e4243f8dc9fd7060b196..16eb85460555018c1d5286a7da3a71546fc4b006 100644 (file)
@@ -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);
index 8e484a20377c0c53fce5a1c04e8c46d13fc0859d..50bd3ebab83e2f23c9ba04dad56fcd8f42b174d1 100644 (file)
@@ -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";
index 6da49b8a77190bc709b55af5d509342cf2a4d1c7..d4ff164c7ef43a71a380c20ba431db659ee30761 100644 (file)
@@ -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
index 4bbd3fc188864e4718765c2869afaed9329498ee..9749727c13f23658c2bcbc6211cc502c50a65ac1 100644 (file)
@@ -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