From patchwork Mon Dec 12 08:50:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Biener X-Patchwork-Id: 32266 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp2123194wrr; Mon, 12 Dec 2022 00:51:16 -0800 (PST) X-Google-Smtp-Source: AA0mqf4Oi6dgbZliy4K/5gtfJpxL3my5AUrDv9+NXPi9oNdf6qkrMspH5ott1euGgptNzJCWrzgn X-Received: by 2002:a05:6402:205c:b0:46d:c48c:50eb with SMTP id bc28-20020a056402205c00b0046dc48c50ebmr17440537edb.13.1670835076609; Mon, 12 Dec 2022 00:51:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670835076; cv=none; d=google.com; s=arc-20160816; b=pkmCApWjnJlOXtn0HD2b8pvRrZd3vy/upTgkHPS0w+Ng4k5dRrT8xHGNCPCY7ERAgj VzLZsGqosh1wABTbMoPUlK29kbjwwcvT0Ucy8a+A9U3lwig/P8Tfn/xDFJCxBkq4Pj6A PBEqtsATntcnTCLvL6n22AliX4ib+gE9EWSgDKMWU+0H8I8JE5m1A3zrO8v+eaDKneio CPROf0bqHk/ElNeGGlU8NKItFg2Y3aLXntlq8vZjQU9QQrTLdfK6z27gJXX2CBhxVvdZ eADuhb4RLPBAqqMymeV1iiG8tu/Jfo+uFbC1jc32O6j1TzlzZtk3r5sVuh2N4G/t856x UivA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:message-id :mime-version:subject:to:date:dmarc-filter:delivered-to :dkim-signature:dkim-filter; bh=InehgIE3hBJ3KmlKgfUlkFU+nc4D+1VeAYIk4GY6MDA=; b=rUPOJdRZ/nGSqroDmJrIHJSqkBVb8dkkGFqT7U6H22vI5RM5qt/MnMZ2eViK7hbCVe Bqv2d+oBLpJpqtzZx3eilmlddcOdQEq2O2NgngAuyCAUsia1gNDwCTbxgVJG2+ILiZfY qUU18PxQQf76zXmVR/0H+lY9ny39Sh0jT2Uvc2AbxV4k2o6AzACouE/JiHNAGXX3IX+s TgOclvg3vnQO8Y4iT32nn6xUc4BVBRkfEQkSvabSDvA4fDqwhANQGlU7h0Z26qQPGrhV FbsmZsyaIEOiEDK/FwveK/0ok2S1UkDwchurtqe9EdjfkAbURdgAyOo+Rr7k+tGFQ+vt fKVw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=JYW7orWI; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id u9-20020a50eac9000000b004636ec90769si6665523edp.33.2022.12.12.00.51.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Dec 2022 00:51:16 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=JYW7orWI; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C45A9387721A for ; Mon, 12 Dec 2022 08:51:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C45A9387721A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1670835070; bh=InehgIE3hBJ3KmlKgfUlkFU+nc4D+1VeAYIk4GY6MDA=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=JYW7orWIK9v/zzSCNAVs6IbLrQpoDieofPKelkTgUhqOB9qm3LXXjn/TSTjJi4uAX 0uLfaLWS5BpOPQaBxirHhPJlbnHe/sImG9CeIIv32+AsA9pgBxG2eRc4s3nqEGcF0m qsQhniKCeSsZ+wQIITGgr8z49hzBJAAD861CUzNY= 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 7AC823831E76 for ; Mon, 12 Dec 2022 08:50:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7AC823831E76 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 540EF1FE80 for ; Mon, 12 Dec 2022 08:50:20 +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 40B6813456 for ; Mon, 12 Dec 2022 08:50:20 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id XaDXDkzrlmOKFwAAMHmgww (envelope-from ) for ; Mon, 12 Dec 2022 08:50:20 +0000 Date: Mon, 12 Dec 2022 09:50:19 +0100 (CET) To: gcc-patches@gcc.gnu.org Subject: [PATCH] Revert parts of ADDR_EXPR/CONSTRUCTOR treatment change in match.pd MIME-Version: 1.0 Message-Id: <20221212085020.40B6813456@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+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1751997560773592085?= X-GMAIL-MSGID: =?utf-8?q?1751997560773592085?= This reverts the part that substitutes from the definition of an SSA name to the capture, thus ADDR_EXPR@0 eventually yielding &y_1->a[i_2] instead of _3. That's because I didn't think of how to deal with substituting @0 in the result pattern. So the following re-instantiates the SSA def CONSTRUCTOR handling and in the ADDR_EXPR helpers used by match.pd handles SSA names defined to ADDR_EXPRs transparently. Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed. * genmatch.cc (dt_simplify::gen): Revert last change. * match.pd: Revert simplification of CONSTUCTOR leaf handling. (&x cmp SSA_NAME): Handle ADDR_EXPR in SSA defs. * fold-const.cc (split_address_to_core_and_offset): Handle ADDR_EXPRs in SSA defs. (address_compare): Likewise. --- gcc/fold-const.cc | 9 +++++++++ gcc/genmatch.cc | 20 ++++---------------- gcc/match.pd | 22 +++++++++++++++------- 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc index b72cc0a1d51..d81289ec9ae 100644 --- a/gcc/fold-const.cc +++ b/gcc/fold-const.cc @@ -16317,6 +16317,11 @@ split_address_to_core_and_offset (tree exp, poly_int64 bitsize; location_t loc = EXPR_LOCATION (exp); + if (TREE_CODE (exp) == SSA_NAME) + if (gassign *def = dyn_cast (SSA_NAME_DEF_STMT (exp))) + if (gimple_assign_rhs_code (def) == ADDR_EXPR) + exp = gimple_assign_rhs1 (def); + if (TREE_CODE (exp) == ADDR_EXPR) { core = get_inner_reference (TREE_OPERAND (exp, 0), &bitsize, pbitpos, @@ -16601,6 +16606,10 @@ address_compare (tree_code code, tree type, tree op0, tree op1, tree &base0, tree &base1, poly_int64 &off0, poly_int64 &off1, bool generic) { + if (TREE_CODE (op0) == SSA_NAME) + op0 = gimple_assign_rhs1 (SSA_NAME_DEF_STMT (op0)); + if (TREE_CODE (op1) == SSA_NAME) + op1 = gimple_assign_rhs1 (SSA_NAME_DEF_STMT (op1)); gcc_checking_assert (TREE_CODE (op0) == ADDR_EXPR); gcc_checking_assert (TREE_CODE (op1) == ADDR_EXPR); base0 = get_addr_base_and_unit_offset (TREE_OPERAND (op0, 0), &off0); diff --git a/gcc/genmatch.cc b/gcc/genmatch.cc index f53e61a4a8d..b56c17711e0 100644 --- a/gcc/genmatch.cc +++ b/gcc/genmatch.cc @@ -3607,26 +3607,14 @@ dt_simplify::gen (FILE *f, int indent, bool gimple, int depth ATTRIBUTE_UNUSED) if (s->capture_max >= 0) { char opname[20]; - fprintf_indent (f, indent, "tree captures[%u] ATTRIBUTE_UNUSED = {", - s->capture_max + 1); + fprintf_indent (f, indent, "tree captures[%u] ATTRIBUTE_UNUSED = { %s", + s->capture_max + 1, indexes[0]->get_name (opname)); - for (int i = 0; i <= s->capture_max; ++i) + for (int i = 1; i <= s->capture_max; ++i) { if (!indexes[i]) break; - const char *opstr = indexes[i]->get_name (opname); - expr *e = dyn_cast (indexes[i]->op); - fputs (i == 0 ? " " : ", ", f); - if (e && gimple - /* Transparently handle picking up CONSTRUCTOR and ADDR_EXPR - leafs if they appear in a separate definition. */ - && (*e->operation == CONSTRUCTOR - || *e->operation == ADDR_EXPR)) - fprintf (f, "(TREE_CODE (%s) == SSA_NAME " - "? gimple_assign_rhs1 (SSA_NAME_DEF_STMT (%s)) : %s)", - opstr, opstr, opstr); - else - fprintf (f, "%s", opstr); + fprintf (f, ", %s", indexes[i]->get_name (opname)); } fprintf (f, " };\n"); } diff --git a/gcc/match.pd b/gcc/match.pd index 3517605c04d..fdba5833beb 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -3936,7 +3936,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (simplify (view_convert CONSTRUCTOR@0) (with - { tree ctor = @0; } + { tree ctor = (TREE_CODE (@0) == SSA_NAME + ? gimple_assign_rhs1 (SSA_NAME_DEF_STMT (@0)) : @0); } (switch (if (CONSTRUCTOR_NELTS (ctor) == 0) { build_zero_cst (type); }) @@ -5735,19 +5736,23 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) /* SSA names are canonicalized to 2nd place. */ (cmp addr@0 SSA_NAME@1) (with - { poly_int64 off; tree base; } + { + poly_int64 off; tree base; + tree addr = (TREE_CODE (@0) == SSA_NAME + ? gimple_assign_rhs1 (SSA_NAME_DEF_STMT (@0)) : @0); + } /* A local variable can never be pointed to by the default SSA name of an incoming parameter. */ (if (SSA_NAME_IS_DEFAULT_DEF (@1) && TREE_CODE (SSA_NAME_VAR (@1)) == PARM_DECL - && (base = get_base_address (TREE_OPERAND (@0, 0))) + && (base = get_base_address (TREE_OPERAND (addr, 0))) && TREE_CODE (base) == VAR_DECL && auto_var_in_fn_p (base, current_function_decl)) (if (cmp == NE_EXPR) { constant_boolean_node (true, type); } { constant_boolean_node (false, type); }) /* If the address is based on @1 decide using the offset. */ - (if ((base = get_addr_base_and_unit_offset (TREE_OPERAND (@0, 0), &off)) + (if ((base = get_addr_base_and_unit_offset (TREE_OPERAND (addr, 0), &off)) && TREE_CODE (base) == MEM_REF && TREE_OPERAND (base, 0) == @1) (with { off += mem_ref_offset (base).force_shwi (); } @@ -7302,7 +7307,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) == tree_to_uhwi (TYPE_SIZE (TREE_TYPE (TREE_TYPE (@0)))))))) (with { - tree ctor = @0; + tree ctor = (TREE_CODE (@0) == SSA_NAME + ? gimple_assign_rhs1 (SSA_NAME_DEF_STMT (@0)) : @0); tree eltype = TREE_TYPE (TREE_TYPE (ctor)); unsigned HOST_WIDE_INT width = tree_to_uhwi (TYPE_SIZE (eltype)); unsigned HOST_WIDE_INT n = tree_to_uhwi (@1); @@ -7950,7 +7956,8 @@ and, /* Fold reduction of a single nonzero element constructor. */ (for reduc (IFN_REDUC_PLUS IFN_REDUC_IOR IFN_REDUC_XOR) (simplify (reduc (CONSTRUCTOR@0)) - (with { tree ctor = @0; + (with { tree ctor = (TREE_CODE (@0) == SSA_NAME + ? gimple_assign_rhs1 (SSA_NAME_DEF_STMT (@0)) : @0); tree elt = ctor_single_nonzero_element (ctor); } (if (elt && !HONOR_SNANS (type) @@ -8169,7 +8176,8 @@ and, (match vec_same_elem_p CONSTRUCTOR@0 - (if (uniform_vector_p (@0)))) + (if (TREE_CODE (@0) == SSA_NAME + && uniform_vector_p (gimple_assign_rhs1 (SSA_NAME_DEF_STMT (@0)))))) (match vec_same_elem_p @0