From patchwork Fri Aug 21 11:14:47 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Sandiford X-Patchwork-Id: 509459 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 65E711402AC for ; Fri, 21 Aug 2015 21:15:10 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=MK+gM+BL; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:references:date:in-reply-to:message-id :mime-version:content-type:content-transfer-encoding; q=dns; s= default; b=m/8LGbZuRDEi+UDaxVqMIE3x0e7lOeO+VD+vMnsoFzwL5uWym9vJZ OPa4+ntAQq/YFjB0SWknLnG7Zz/sbL98SRIPzOU8uQ+1dXOTu0+vh57VqODAjaGw C5g2Mt2sAsTr/Ok2fxpUujsiFeLtiBoE1rS6GHXRaISBMGJAPiKHZg= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:references:date:in-reply-to:message-id :mime-version:content-type:content-transfer-encoding; s=default; bh=z2qQPG3fL3Mtj9ZRZN7QP3IUiJs=; b=MK+gM+BLDO/J1otBKt/yq+T9YoaH momZEnQKJVku7EvgB6w94BTZ7oAfrkI34UjmgMWkLVLT1r0/7FJDWihe6MjSU6fi Mhduj2Mw+M0lS58j4aaMCWd/clScV6DrvsRpdpK/RGzndDpzGrcOzE63Xmgna9kY iWSKoS/mOnaXIko= Received: (qmail 127007 invoked by alias); 21 Aug 2015 11:15:01 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 126952 invoked by uid 89); 21 Aug 2015 11:15:00 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.4 required=5.0 tests=AWL, BAYES_00, SPF_PASS autolearn=ham version=3.3.2 X-HELO: eu-smtp-delivery-143.mimecast.com Received: from eu-smtp-delivery-143.mimecast.com (HELO eu-smtp-delivery-143.mimecast.com) (146.101.78.143) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 21 Aug 2015 11:14:54 +0000 Received: from cam-owa2.Emea.Arm.com (fw-tnat.cambridge.arm.com [217.140.96.140]) by eu-smtp-1.mimecast.com with ESMTP id uk-mta-23-MoV6GNPhTfKd975eeYS9Og-1; Fri, 21 Aug 2015 12:14:48 +0100 Received: from localhost ([10.1.2.79]) by cam-owa2.Emea.Arm.com with Microsoft SMTPSVC(6.0.3790.3959); Fri, 21 Aug 2015 12:14:48 +0100 From: Richard Sandiford To: gcc-patches@gcc.gnu.org Mail-Followup-To: gcc-patches@gcc.gnu.org, Claudiu Zissulescu , Claudiu Zissulescu , Francois Bedard , Jeff Law , richard.sandiford@arm.com Cc: Claudiu Zissulescu , Claudiu Zissulescu , Francois Bedard , Jeff Law Subject: RFA: Replace LAST_INSN_CODE with NUM_INSN_CODES References: <098ECE41A0A6114BB2A07F1EC238DE8965C6756D@de02wembxa.internal.synopsys.com> <55D6064F.40505@redhat.com> <55D60EA3.6040708@redhat.com> Date: Fri, 21 Aug 2015 12:14:47 +0100 In-Reply-To: <55D60EA3.6040708@redhat.com> (Jeff Law's message of "Thu, 20 Aug 2015 18:30:11 +0100") Message-ID: <87mvxk99lk.fsf_-_@e105548-lin.cambridge.arm.com> User-Agent: Gnus/5.130012 (Ma Gnus v0.12) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 X-MC-Unique: MoV6GNPhTfKd975eeYS9Og-1 Claudiu reported that I'd botched the definition of LAST_INSN_CODE in my recent patches to reduce the size of insn_data. I'd defined it as the last valid insn code, whereas it's supposed to be the last valid code +1. This patch replaces LAST_INSN_CODE with a separate NUM_INSN_CODES count, outside the enum. Tested on x86_64-linux-gnu and aarch64-linux-gnu. OK to install? Thanks, Richard gcc/ * gencodes.c (main): 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. diff --git a/gcc/gencodes.c b/gcc/gencodes.c index c747891..0635507 100644 --- a/gcc/gencodes.c +++ b/gcc/gencodes.c @@ -83,10 +83,10 @@ enum insn_code {\n\ break; } - printf (" LAST_INSN_CODE = %d\n\ -};\n\ + printf ("};\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 8ced164..a836cab 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 352aec2..c032424 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 ce931eb..327d6c0 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 2ddd434..f87c066 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,