From patchwork Mon Nov 14 13:34:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Biener X-Patchwork-Id: 60582 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 068DF3858C62 for ; Mon, 14 Nov 2022 13:35:29 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 068DF3858C62 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1668432929; bh=tR4gBZpDKDjbKDDlsVjedqcwZQGQWVEc+Sf2Q+/IgGs=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=L/hAPRPO1MqIDWji4MkiQJ2nE0NvlbU40YTFUvJjrSSxntj1uS+ijsZDm9OAMh17u IH2SdqmRMEbMgy2EjqQ8Mioe9NZlSKHTmTIThURoXFhEDCTtUcxaR6NybQbVT+QBxP o7bv5X0/Nuq+KhfV27/PgQRQG/CEoExYR6zHqm9A= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtp-out2.suse.de (smtp-out2.suse.de [IPv6:2001:67c:2178:6::1d]) by sourceware.org (Postfix) with ESMTPS id 59D783858D1E for ; Mon, 14 Nov 2022 13:34:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 59D783858D1E Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 9276C1FFC2 for ; Mon, 14 Nov 2022 13:34:58 +0000 (UTC) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 7A9F413A8C for ; Mon, 14 Nov 2022 13:34:58 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id +ceVHAJEcmNiTAAAMHmgww (envelope-from ) for ; Mon, 14 Nov 2022 13:34:58 +0000 Date: Mon, 14 Nov 2022 14:34:57 +0100 (CET) To: gcc-patches@gcc.gnu.org Subject: [PATCH] remove duplicate match.pd patterns MIME-Version: 1.0 Message-Id: <20221114133458.7A9F413A8C@imap2.suse-dmz.suse.de> X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Richard Biener via Gcc-patches From: Richard Biener Reply-To: Richard Biener Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" The following merges match.pd patterns that cause genmatch complaints about duplicates when in-order isn't enforced (you have to edit genmatch.cc to do a full duplicate check). Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed. * match.pd: Remove duplicates. --- gcc/match.pd | 63 +++++++++++++++++++++++++--------------------------- 1 file changed, 30 insertions(+), 33 deletions(-) diff --git a/gcc/match.pd b/gcc/match.pd index 194ba8f5188..4d0898ccdcb 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -1285,8 +1285,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) /* ~x | x -> -1 */ /* ~x ^ x -> -1 */ -/* ~x + x -> -1 */ -(for op (bit_ior bit_xor plus) +(for op (bit_ior bit_xor) (simplify (op:c (convert? @0) (convert? (bit_not @0))) (convert { build_all_ones_cst (TREE_TYPE (@0)); }))) @@ -2939,9 +2938,9 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) /* ~A + A -> -1 */ (simplify - (plus:c (bit_not @0) @0) + (plus:c (convert? (bit_not @0)) (convert? @0)) (if (!TYPE_OVERFLOW_TRAPS (type)) - { build_all_ones_cst (type); })) + (convert { build_all_ones_cst (TREE_TYPE (@0)); }))) /* ~A + 1 -> -A */ (simplify @@ -5103,34 +5102,6 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (scmp @0 (bit_not @1))))) (for cmp (simple_comparison) - /* Fold (double)float1 CMP (double)float2 into float1 CMP float2. */ - (simplify - (cmp (convert@2 @0) (convert? @1)) - (if (FLOAT_TYPE_P (TREE_TYPE (@0)) - && (DECIMAL_FLOAT_TYPE_P (TREE_TYPE (@2)) - == DECIMAL_FLOAT_TYPE_P (TREE_TYPE (@0))) - && (DECIMAL_FLOAT_TYPE_P (TREE_TYPE (@2)) - == DECIMAL_FLOAT_TYPE_P (TREE_TYPE (@1)))) - (with - { - tree type1 = TREE_TYPE (@1); - if (TREE_CODE (@1) == REAL_CST && !DECIMAL_FLOAT_TYPE_P (type1)) - { - REAL_VALUE_TYPE orig = TREE_REAL_CST (@1); - if (TYPE_PRECISION (type1) > TYPE_PRECISION (float_type_node) - && exact_real_truncate (TYPE_MODE (float_type_node), &orig)) - type1 = float_type_node; - if (TYPE_PRECISION (type1) > TYPE_PRECISION (double_type_node) - && exact_real_truncate (TYPE_MODE (double_type_node), &orig)) - type1 = double_type_node; - } - tree newtype - = (TYPE_PRECISION (TREE_TYPE (@0)) > TYPE_PRECISION (type1) - ? TREE_TYPE (@0) : type1); - } - (if (TYPE_PRECISION (TREE_TYPE (@2)) > TYPE_PRECISION (newtype)) - (cmp (convert:newtype @0) (convert:newtype @1)))))) - (simplify (cmp @0 REAL_CST@1) /* IEEE doesn't distinguish +0 and -0 in comparisons. */ @@ -5683,7 +5654,33 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (if (cmp == LT_EXPR || cmp == LE_EXPR) { constant_boolean_node (above ? true : false, type); } (if (cmp == GT_EXPR || cmp == GE_EXPR) - { constant_boolean_node (above ? false : true, type); })))))))))))) + { constant_boolean_node (above ? false : true, type); }))))))))) + /* Fold (double)float1 CMP (double)float2 into float1 CMP float2. */ + (if (FLOAT_TYPE_P (TREE_TYPE (@00)) + && (DECIMAL_FLOAT_TYPE_P (TREE_TYPE (@0)) + == DECIMAL_FLOAT_TYPE_P (TREE_TYPE (@00))) + && (DECIMAL_FLOAT_TYPE_P (TREE_TYPE (@0)) + == DECIMAL_FLOAT_TYPE_P (TREE_TYPE (@10)))) + (with + { + tree type1 = TREE_TYPE (@10); + if (TREE_CODE (@10) == REAL_CST && !DECIMAL_FLOAT_TYPE_P (type1)) + { + REAL_VALUE_TYPE orig = TREE_REAL_CST (@10); + if (TYPE_PRECISION (type1) > TYPE_PRECISION (float_type_node) + && exact_real_truncate (TYPE_MODE (float_type_node), &orig)) + type1 = float_type_node; + if (TYPE_PRECISION (type1) > TYPE_PRECISION (double_type_node) + && exact_real_truncate (TYPE_MODE (double_type_node), &orig)) + type1 = double_type_node; + } + tree newtype + = (TYPE_PRECISION (TREE_TYPE (@00)) > TYPE_PRECISION (type1) + ? TREE_TYPE (@00) : type1); + } + (if (TYPE_PRECISION (TREE_TYPE (@0)) > TYPE_PRECISION (newtype)) + (cmp (convert:newtype @00) (convert:newtype @10)))))))) + (for cmp (eq ne) (simplify