From 523ba7389abc5dd3f73cb10557edba876b3e1d1f Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Fri, 21 Aug 2015 17:23:10 +0000 Subject: [PATCH] gencodes.c (gencodes): Print the comma for the preceding enum value rather than the current one. gcc/ * gencodes.c (gencodes): Print the comma for the preceding enum value rather than the current one. Use aliased enum values rather than #defines for compiled-out patterns. (main): Update accordingly. Replace LAST_INSN_CODE with NUM_INSN_CODES. * lra.c (insn_code_data): Update accordingly. (finish_insn_code_data_once, get_static_insn_data): Likewise. * recog.h (target_recog): Likewise. (preprocess_insn_constraints): Change parameter to unsigned int. * recog.c (preprocess_insn_constraints): Likewise. (recog_init): Replace LAST_INSN_CODE with NUM_INSN_CODES. * tree-vect-stmts.c (vectorizable_operation): Simplify. From-SVN: r227076 --- gcc/ChangeLog | 15 +++++++++++++++ gcc/gencodes.c | 14 +++++++------- gcc/lra.c | 8 +++----- gcc/recog.c | 6 +++--- gcc/recog.h | 6 +++--- gcc/tree-vect-stmts.c | 14 +++++--------- 6 files changed, 36 insertions(+), 27 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 806ea55043c..2c074a0ab1a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,18 @@ +2015-08-21 Richard Sandiford + + * gencodes.c (gencodes): Print the comma for the preceding + enum value rather than the current one. Use aliased enum values + rather than #defines for compiled-out patterns. + (main): Update accordingly. Replace LAST_INSN_CODE with + NUM_INSN_CODES. + * lra.c (insn_code_data): Update accordingly. + (finish_insn_code_data_once, get_static_insn_data): Likewise. + * recog.h (target_recog): Likewise. + (preprocess_insn_constraints): Change parameter to unsigned int. + * recog.c (preprocess_insn_constraints): Likewise. + (recog_init): Replace LAST_INSN_CODE with NUM_INSN_CODES. + * tree-vect-stmts.c (vectorizable_operation): Simplify. + 2015-08-21 Markus Trippelsdorf PR rtl-optimization/61657 diff --git a/gcc/gencodes.c b/gcc/gencodes.c index c7478912e9b..d4560b4abf4 100644 --- a/gcc/gencodes.c +++ b/gcc/gencodes.c @@ -40,9 +40,9 @@ gen_insn (md_rtx_info *info) if (name[0] != 0 && name[0] != '*') { if (truth == 0) - printf ("#define CODE_FOR_%s CODE_FOR_nothing\n", name); + printf (",\n CODE_FOR_%s = CODE_FOR_nothing", name); else - printf (" CODE_FOR_%s = %d,\n", name, info->index); + printf (",\n CODE_FOR_%s = %d", name, info->index); } } @@ -58,7 +58,7 @@ main (int argc, char **argv) if (!init_rtx_reader_args (argc, argv)) return (FATAL_EXIT_CODE); - puts ("\ + printf ("\ /* Generated automatically by the program `gencodes'\n\ from the machine description file `md'. */\n\ \n\ @@ -66,7 +66,7 @@ main (int argc, char **argv) #define GCC_INSN_CODES_H\n\ \n\ enum insn_code {\n\ - CODE_FOR_nothing = 0,\n"); + CODE_FOR_nothing = 0"); /* Read the machine description. */ @@ -83,10 +83,10 @@ enum insn_code {\n\ break; } - printf (" LAST_INSN_CODE = %d\n\ -};\n\ + printf ("\n};\n\ \n\ -#endif /* GCC_INSN_CODES_H */\n", get_num_insn_codes () - 1); +const unsigned int NUM_INSN_CODES = %d;\n\ +#endif /* GCC_INSN_CODES_H */\n", get_num_insn_codes ()); if (ferror (stdout) || fflush (stdout) || fclose (stdout)) return FATAL_EXIT_CODE; diff --git a/gcc/lra.c b/gcc/lra.c index 8ced164f646..a836cab630f 100644 --- a/gcc/lra.c +++ b/gcc/lra.c @@ -585,7 +585,7 @@ finish_insn_regs (void) /* Map INSN_CODE -> the static insn data. This info is valid during all translation unit. */ -struct lra_static_insn_data *insn_code_data[LAST_INSN_CODE]; +struct lra_static_insn_data *insn_code_data[NUM_INSN_CODES]; /* Debug insns are represented as a special insn with one input operand which is RTL expression in var_location. */ @@ -631,9 +631,7 @@ init_insn_code_data_once (void) static void finish_insn_code_data_once (void) { - int i; - - for (i = 0; i < LAST_INSN_CODE; i++) + for (unsigned int i = 0; i < NUM_INSN_CODES; i++) { if (insn_code_data[i] != NULL) free (insn_code_data[i]); @@ -650,7 +648,7 @@ get_static_insn_data (int icode, int nop, int ndup, int nalt) struct lra_static_insn_data *data; size_t n_bytes; - lra_assert (icode < LAST_INSN_CODE); + lra_assert (icode < (int) NUM_INSN_CODES); if (icode >= 0 && (data = insn_code_data[icode]) != NULL) return data; lra_assert (nop >= 0 && ndup >= 0 && nalt >= 0); diff --git a/gcc/recog.c b/gcc/recog.c index 352aec2047a..c032424e06b 100644 --- a/gcc/recog.c +++ b/gcc/recog.c @@ -2441,9 +2441,9 @@ preprocess_constraints (int n_operands, int n_alternatives, instruction ICODE. */ const operand_alternative * -preprocess_insn_constraints (int icode) +preprocess_insn_constraints (unsigned int icode) { - gcc_checking_assert (IN_RANGE (icode, 0, LAST_INSN_CODE)); + gcc_checking_assert (IN_RANGE (icode, 0, NUM_INSN_CODES - 1)); if (this_target_recog->x_op_alt[icode]) return this_target_recog->x_op_alt[icode]; @@ -4118,7 +4118,7 @@ recog_init () } memset (this_target_recog->x_bool_attr_masks, 0, sizeof (this_target_recog->x_bool_attr_masks)); - for (int i = 0; i < LAST_INSN_CODE; ++i) + for (unsigned int i = 0; i < NUM_INSN_CODES; ++i) if (this_target_recog->x_op_alt[i]) { free (this_target_recog->x_op_alt[i]); diff --git a/gcc/recog.h b/gcc/recog.h index ce931ebdf5a..327d6c07494 100644 --- a/gcc/recog.h +++ b/gcc/recog.h @@ -137,7 +137,7 @@ extern void extract_constrain_insn_cached (rtx_insn *); extern void extract_insn_cached (rtx_insn *); extern void preprocess_constraints (int, int, const char **, operand_alternative *); -extern const operand_alternative *preprocess_insn_constraints (int); +extern const operand_alternative *preprocess_insn_constraints (unsigned int); extern void preprocess_constraints (rtx_insn *); extern rtx_insn *peep2_next_insn (int); extern int peep2_regno_dead_p (int, int); @@ -393,8 +393,8 @@ enum bool_attr { /* Target-dependent globals. */ struct target_recog { bool x_initialized; - alternative_mask x_bool_attr_masks[LAST_INSN_CODE][BA_LAST + 1]; - operand_alternative *x_op_alt[LAST_INSN_CODE]; + alternative_mask x_bool_attr_masks[NUM_INSN_CODES][BA_LAST + 1]; + operand_alternative *x_op_alt[NUM_INSN_CODES]; }; extern struct target_recog default_target_recog; diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 2ddd4343a2a..f87c0664e5b 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -4719,7 +4719,7 @@ vectorizable_operation (gimple stmt, gimple_stmt_iterator *gsi, tree new_temp; int op_type; optab optab; - int icode; + bool target_support_p; tree def; gimple def_stmt; enum vect_def_type dt[3] @@ -4870,12 +4870,7 @@ vectorizable_operation (gimple stmt, gimple_stmt_iterator *gsi, vec_mode = TYPE_MODE (vectype); if (code == MULT_HIGHPART_EXPR) - { - if (can_mult_highpart_p (vec_mode, TYPE_UNSIGNED (vectype))) - icode = LAST_INSN_CODE; - else - icode = CODE_FOR_nothing; - } + target_support_p = can_mult_highpart_p (vec_mode, TYPE_UNSIGNED (vectype)); else { optab = optab_for_tree_code (code, vectype, optab_default); @@ -4886,10 +4881,11 @@ vectorizable_operation (gimple stmt, gimple_stmt_iterator *gsi, "no optab.\n"); return false; } - icode = (int) optab_handler (optab, vec_mode); + target_support_p = (optab_handler (optab, vec_mode) + != CODE_FOR_nothing); } - if (icode == CODE_FOR_nothing) + if (!target_support_p) { if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, -- 2.30.2