This patch adds more debugging via -mdebug=reg to the compiler, and it is the main way I verified that all of the options were set correctly. If you do not use -mdebug=reg, this patch has no effect. When I emailed this patch, I had bootstraped the compiler, and I was beginning to do make check. Assuming there are no regressions, is it ok to check in?
2012-10-09 Michael Meissner <meiss...@linux.vnet.ibm.com> * config/rs6000/rs6000.c (DEBUG_FMT_ID): Move "-32s" to a separate define and change DEBUG_FMT_<x> to use it. (DEBUG_FMT_D): Likewise. (DEBUG_FMT_S): Likewise. (DEBUG_FMT_X): Delete, no longer used. (DEBUG_FMT_W): Likewise. (DEBUG_FMT_WX): New debug format for printing options in a friendly fashion. (rs6000_debug_reg_global): If -mdebug=reg, print all of the options in target_flags and target_flags_explicit. Print the default options for -mcpu=<xxx>, -mtune=<xxx>, and the default options. Adjust printing out the builtin options. (rs6000_option_override_internal): Change printing the builtin options to use rs6000_print_builtin_options. (rs6000_function_specific_print): Change to use rs6000_print_isa_options to print ISA flags. (rs6000_print_options_internal): New function for expanded -mdebug=reg option printing to print both the ISA options, and the builtins that are enabled. (rs6000_print_isa_options): New function to print the ISA options. (rs6000_print_builtin_options): New function to print the builtin functions enabled. -- Michael Meissner, IBM 5 Technology Place Drive, M/S 2757, Westford, MA 01886-3141, USA meiss...@linux.vnet.ibm.com fax +1 (978) 399-6899
--- gcc/config/rs6000/rs6000.c.~3~ 2012-10-09 18:03:14.461726078 -0400 +++ gcc/config/rs6000/rs6000.c 2012-10-09 18:43:10.627789006 -0400 @@ -1016,6 +1016,11 @@ bool (*rs6000_cannot_change_mode_class_p const int INSN_NOT_AVAILABLE = -1; +static void rs6000_print_isa_options (FILE *, int, const char *, + HOST_WIDE_INT); +static void rs6000_print_builtin_options (FILE *, int, const char *, + HOST_WIDE_INT); + /* Hash table stuff for keeping track of TOC entries. */ struct GTY(()) toc_hash_struct @@ -1716,10 +1721,10 @@ rs6000_debug_reg_print (int first_regno, } } -#define DEBUG_FMT_D "%-32s= %d\n" -#define DEBUG_FMT_X "%-32s= 0x%x\n" -#define DEBUG_FMT_S "%-32s= %s\n" -#define DEBUG_FMT_W "%-32s= " HOST_WIDEST_INT_PRINT_HEX "\n" +#define DEBUG_FMT_ID "%-32s= " +#define DEBUG_FMT_D DEBUG_FMT_ID "%d\n" +#define DEBUG_FMT_WX DEBUG_FMT_ID "%#.12" HOST_WIDE_INT_PRINT "x: " +#define DEBUG_FMT_S DEBUG_FMT_ID "%s\n" /* Print various interesting information with -mdebug=reg. */ static void @@ -1730,11 +1735,13 @@ rs6000_debug_reg_global (void) int m; char costly_num[20]; char nop_num[20]; + char flags_buffer[40]; const char *costly_str; const char *nop_str; const char *trace_str; const char *abi_str; const char *cmodel_str; + struct cl_target_option cl_opts; /* Map enum rs6000_vector to string. */ static const char *rs6000_debug_vector_unit[] = { @@ -1814,12 +1821,42 @@ rs6000_debug_reg_global (void) } if (rs6000_cpu_index >= 0) - fprintf (stderr, DEBUG_FMT_S, "cpu", - processor_target_table[rs6000_cpu_index].name); + { + const char *name = processor_target_table[rs6000_cpu_index].name; + HOST_WIDE_INT flags + = processor_target_table[rs6000_cpu_index].target_enable; + + sprintf (flags_buffer, "-mcpu=%s flags", name); + rs6000_print_isa_options (stderr, 0, flags_buffer, flags); + } + else + fprintf (stderr, DEBUG_FMT_S, "cpu", "<none>"); if (rs6000_tune_index >= 0) - fprintf (stderr, DEBUG_FMT_S, "tune", - processor_target_table[rs6000_tune_index].name); + { + const char *name = processor_target_table[rs6000_tune_index].name; + HOST_WIDE_INT flags + = processor_target_table[rs6000_tune_index].target_enable; + + sprintf (flags_buffer, "-mtune=%s flags", name); + rs6000_print_isa_options (stderr, 0, flags_buffer, flags); + } + else + fprintf (stderr, DEBUG_FMT_S, "tune", "<none>"); + + cl_target_option_save (&cl_opts, &global_options); + rs6000_print_isa_options (stderr, 0, "target_flags", target_flags); + + rs6000_print_isa_options (stderr, 0, "target_flags_explicit", + target_flags_explicit); + + rs6000_print_builtin_options (stderr, 0, "rs6000_builtin_mask", + rs6000_builtin_mask); + + rs6000_print_isa_options (stderr, 0, "TARGET_DEFAULT", TARGET_DEFAULT); + + fprintf (stderr, DEBUG_FMT_S, "--with-cpu default", + OPTION_TARGET_CPU_DEFAULT ? OPTION_TARGET_CPU_DEFAULT : "<none>"); switch (rs6000_sched_costly_dep) { @@ -1937,7 +1974,15 @@ rs6000_debug_reg_global (void) if (rs6000_float_gprs) fprintf (stderr, DEBUG_FMT_S, "float_gprs", "true"); + if (TARGET_LINK_STACK) + fprintf (stderr, DEBUG_FMT_S, "link_stack", "true"); + + fprintf (stderr, DEBUG_FMT_S, "plt-format", + TARGET_SECURE_PLT ? "secure" : "bss"); + fprintf (stderr, DEBUG_FMT_S, "struct-return", + aix_struct_return ? "aix" : "sysv"); fprintf (stderr, DEBUG_FMT_S, "always_hint", tf[!!rs6000_always_hint]); + fprintf (stderr, DEBUG_FMT_S, "sched_groups", tf[!!rs6000_sched_groups]); fprintf (stderr, DEBUG_FMT_S, "align_branch", tf[!!rs6000_align_branch_targets]); fprintf (stderr, DEBUG_FMT_D, "tls_size", rs6000_tls_size); @@ -1949,7 +1994,6 @@ rs6000_debug_reg_global (void) (int)END_BUILTINS); fprintf (stderr, DEBUG_FMT_D, "Number of rs6000 builtins", (int)RS6000_BUILTIN_COUNT); - fprintf (stderr, DEBUG_FMT_W, "Builtin mask", rs6000_builtin_mask); } /* Initialize the various global tables that are based on register size. */ @@ -3177,13 +3221,12 @@ rs6000_option_override_internal (bool gl target_flags. */ rs6000_builtin_mask = rs6000_builtin_mask_calculate (); if (TARGET_DEBUG_BUILTIN || TARGET_DEBUG_TARGET) - fprintf (stderr, - "new builtin mask = " HOST_WIDE_INT_PRINT_HEX "%s%s%s%s\n", - rs6000_builtin_mask, - (rs6000_builtin_mask & RS6000_BTM_ALTIVEC) ? ", altivec" : "", - (rs6000_builtin_mask & RS6000_BTM_VSX) ? ", vsx" : "", - (rs6000_builtin_mask & RS6000_BTM_PAIRED) ? ", paired" : "", - (rs6000_builtin_mask & RS6000_BTM_SPE) ? ", spe" : ""); + { + fprintf (stderr, + "new builtin mask = " HOST_WIDE_INT_PRINT_HEX ", ", + rs6000_builtin_mask); + rs6000_print_builtin_options (stderr, 0, NULL, rs6000_builtin_mask); + } /* Initialize all of the registers. */ rs6000_init_hard_regno_mode_ok (global_init_p); @@ -27937,38 +27980,91 @@ static void rs6000_function_specific_print (FILE *file, int indent, struct cl_target_option *ptr) { + rs6000_print_isa_options (file, indent, "Isa options set", + ptr->x_target_flags); + + rs6000_print_isa_options (file, indent, "Isa options explicit", + ptr->rs6000_target_flags_explicit); +} + +/* Helper function to print the current isa or misc options on a line. */ + +static void +rs6000_print_options_internal (FILE *file, + int indent, + const char *string, + HOST_WIDE_INT flags, + const char *prefix, + const struct rs6000_opt_mask *opts, + size_t num_elements) +{ size_t i; - int flags = ptr->x_target_flags; - HOST_WIDE_INT bu_mask = ptr->x_rs6000_builtin_mask; + size_t start_column = 0; + size_t cur_column; + size_t max_column = 76; + const char *comma = ""; + const char *nl = "\n"; - /* Print the various mask options. */ - for (i = 0; i < ARRAY_SIZE (rs6000_opt_masks); i++) - if ((flags & rs6000_opt_masks[i].mask) != 0) - { - flags &= ~ rs6000_opt_masks[i].mask; - fprintf (file, "%*s-m%s%s\n", indent, "", - rs6000_opt_masks[i].invert ? "no-" : "", - rs6000_opt_masks[i].name); - } + if (indent) + start_column += fprintf (file, "%*s", indent, ""); - /* Print the various options that are variables. */ - for (i = 0; i < ARRAY_SIZE (rs6000_opt_vars); i++) + if (!flags) { - size_t j = rs6000_opt_vars[i].target_offset; - if (((signed char *) ptr)[j]) - fprintf (file, "%*s-m%s\n", indent, "", - rs6000_opt_vars[i].name); + fprintf (stderr, DEBUG_FMT_S, string, "<none>"); + return; } - /* Print the various builtin flags. */ - fprintf (file, "%*sbuiltin mask = " HOST_WIDE_INT_PRINT_HEX "\n", - indent, "", bu_mask); - for (i = 0; i < ARRAY_SIZE (rs6000_builtin_mask_names); i++) - if ((bu_mask & rs6000_builtin_mask_names[i].mask) != 0) - { - fprintf (file, "%*s%s builtins supported\n", indent, "", - rs6000_builtin_mask_names[i].name); - } + start_column += fprintf (stderr, DEBUG_FMT_WX, string, flags); + + /* Print the various mask options. */ + cur_column = start_column; + for (i = 0; i < num_elements; i++) + { + if ((flags & opts[i].mask) != 0) + { + const char *no_str = rs6000_opt_masks[i].invert ? "no-" : ""; + size_t len = (strlen (comma) + + strlen (prefix) + + strlen (no_str) + + strlen (rs6000_opt_masks[i].name)); + + cur_column += len; + if (cur_column > max_column) + { + fprintf (stderr, ", \\\n%*s", (int)start_column, ""); + cur_column = start_column + len; + comma = ""; + nl = "\n\n"; + } + + fprintf (file, "%s%s%s%s", comma, prefix, no_str, + rs6000_opt_masks[i].name); + flags &= ~ opts[i].mask; + comma = ", "; + } + } + + fputs (nl, file); +} + +/* Helper function to print the current isa options on a line. */ + +static void +rs6000_print_isa_options (FILE *file, int indent, const char *string, + HOST_WIDE_INT flags) +{ + rs6000_print_options_internal (file, indent, string, flags, "-m", + &rs6000_opt_masks[0], + ARRAY_SIZE (rs6000_opt_masks)); +} + +static void +rs6000_print_builtin_options (FILE *file, int indent, const char *string, + HOST_WIDE_INT flags) +{ + rs6000_print_options_internal (file, indent, string, flags, "", + &rs6000_builtin_mask_names[0], + ARRAY_SIZE (rs6000_builtin_mask_names)); }