From patchwork Mon Aug 7 11:31:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Manolis Tsamis X-Patchwork-Id: 131849 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:c44e:0:b0:3f2:4152:657d with SMTP id w14csp1391065vqr; Mon, 7 Aug 2023 04:52:58 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEgI0rzccRekgxTG9W60qs2hT4q7SVUX5SCiHqDjFuxy9WVMm6+OrZWNNLNTPKFBtKmDNV4 X-Received: by 2002:a17:906:2cf:b0:99c:1b9a:b09e with SMTP id 15-20020a17090602cf00b0099c1b9ab09emr9987052ejk.75.1691409178091; Mon, 07 Aug 2023 04:52:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691409178; cv=none; d=google.com; s=arc-20160816; b=mPhsW1WncyzSV2XnPnhvDAmgXETdpBFPM048QmFBt/5fNKzQnZbpsttwMHlVU2JpqT MXpf0O70q4bMGQZ1e3aAczNB2hTAbidPbfgdGVj3xkgKMFW74FhyO3C7WnDaSg0wQrqP 56VmldRsr5SQSYYsDLt341a8V2DSCXGsjy61IpDooLcd65aM+7YyfqTiPtCtfAu6Ux5/ wOMy/bmSNI0MoYY4LJm+yqCMlU4bVI2nmFkD/EomVcL7EBncsMy3mrXdxOMr8Fxk/FR3 1KZp/lsMxsien2R8uo9lNQKcPpyibXYt4f7X+mmciA3XSSi1g1nyHsl5XzJ/NufbhUKd vq/w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:message-id:date:subject:cc:to:from:dkim-signature :dmarc-filter:delivered-to; bh=EYMS94wNVVcDIJ5uPgHARubVZSroDowkxYypAhl9Gys=; fh=WGsUz8wV5hwN5NPzxbAbDw96RTAa/zJ5kJWXhlGaSus=; b=BsIfHokOQ6L4LwSz6qd8YSbak1kqukHtkptM8+vt0038W5EwA6UUehcjj4LdHP/2SF bZ/aGWyBNNnAyGCRcuoWZlBS1shHPFDVD3eoBw46/GEf5/910z5OeTRZNuBmfOPo7COI QmczO7Or/9Bhdkyn6kaRUXBuIrW/Ot7sjkwBc6V7aveUBb8KDsyxQmRgQ9vXB+XUSZ9l k7xoz9Zl6+xMjUJL1V7Sv6GuRKSOTUzqZVmwgVKsGXjiujIWcvdIRZP2QRx8tqGQkx5J n9qWxurndz5TbibcEJOY0MZCZ+KW09rsaA+GTQs9dXDtAAE7cMKNg9MY/YHToO66eior eiHw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@vrull.eu header.s=google header.b=CLmzQcc4; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org" Received: from server2.sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id x19-20020a170906441300b0099bc8469e26si5089461ejo.923.2023.08.07.04.52.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:52:58 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@vrull.eu header.s=google header.b=CLmzQcc4; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 206633895FEA for ; Mon, 7 Aug 2023 11:38:13 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-lj1-x22e.google.com (mail-lj1-x22e.google.com [IPv6:2a00:1450:4864:20::22e]) by sourceware.org (Postfix) with ESMTPS id B3F8238483F2 for ; Mon, 7 Aug 2023 11:31:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B3F8238483F2 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=vrull.eu Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=vrull.eu Received: by mail-lj1-x22e.google.com with SMTP id 38308e7fff4ca-2ba1e9b1fa9so44554861fa.3 for ; Mon, 07 Aug 2023 04:31:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vrull.eu; s=google; t=1691407875; x=1692012675; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=EYMS94wNVVcDIJ5uPgHARubVZSroDowkxYypAhl9Gys=; b=CLmzQcc47rgFHV7H05uTw9Gz8/tmRTR2dJ/DFjUI+G+CpVweghKXnoZo0XB+gFORYT j4ZzuCaUh4ebfJmLRRSP9JILYhi8fMLImlB4d0rx7BJWlZIREqOux2OyzIGq/vqt1qLE 67YJ2MKKEa3HQ3YinaXM6Cs/gG9KEokkR72OQPaYPMd6EINOG28N/er6pZwFfjX2rFR9 OXmWrF6ey20r20wjmiZ3zy0UCQdkWBpXLqzANKDlkDlsIrrk/y0FQyFvdyAH849TQ1EB es6+p7mKtFGkDmYtYdW9kNJ4Nfr0CFFBOVu1I22/DKPPn1/Otyo7kfp421zHXBBUuEVS pUrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691407875; x=1692012675; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=EYMS94wNVVcDIJ5uPgHARubVZSroDowkxYypAhl9Gys=; b=WrgbsGZPbNmwim40+79e+UX/5n0DDsNieWlxyRuhTVDcylQyavxv2Z1P3qFTAbOALv la83nDHErMLYs6UQMKzp9HhxYgVXRXmLyPgbzbj0kqgB9u7UoRG++95Nd7uwdPxFOlCa mg3roow2cSwD3TVjk3MZlhOU/i0FO2L8qh201DufBs/GWUjUP4m/jqvT7B6YY9q/USoJ OpgE3eRWPlJuSZ5fQhAOsQZJzhZsWcZXexu83CbDxUWQL1GFf8xuJBmTkEEhY66oj96Z NIIbLFJBb8oxUguROTzhkXTQxKTzUnG74GDOj49ygf57x3pLlEbtay0EtGf9NoWwSZAL dRtA== X-Gm-Message-State: AOJu0Ywgx0qf/alyJx9LyzF45RDvQywyL+1N6Otfl5OoT58cJf4D7V8w F0/yyy7ChR++a1Xl2u70oU5xzdZFcGId6V6aR18= X-Received: by 2002:a2e:8758:0:b0:2b6:da64:734f with SMTP id q24-20020a2e8758000000b002b6da64734fmr6798799ljj.47.1691407874933; Mon, 07 Aug 2023 04:31:14 -0700 (PDT) Received: from helsinki-03.engr ([2a01:4f9:6b:2a47::2]) by smtp.gmail.com with ESMTPSA id y15-20020a2e7d0f000000b002b9cd2d0d39sm1783361ljc.28.2023.08.07.04.31.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Aug 2023 04:31:14 -0700 (PDT) From: Manolis Tsamis To: gcc-patches@gcc.gnu.org Cc: Vineet Gupta , Philipp Tomsich , Jivan Hakobyan , Jeff Law , Manolis Tsamis Subject: [PATCH] cprop_hardreg: Allow more propagation of the stack pointer. Date: Mon, 7 Aug 2023 13:31:05 +0200 Message-Id: <20230807113105.437693-1-manolis.tsamis@vrull.eu> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Spam-Status: No, score=-11.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, JMQ_SPF_NEUTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=unavailable 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: , Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1773571070333986369 X-GMAIL-MSGID: 1773571070333986369 The stack pointer propagation fix 736f8fd3 turned out to be more restrictive than needed by rejecting propagation of the stack pointer when REG_POINTER didn't match. This commit removes this check: When the stack pointer is propagated it is fine for this to result in REG_POINTER becoming true from false, which is what the original code checked. This simplification makes the previously introduced function maybe_copy_reg_attrs obsolete and the logic can be inlined at the call sites, as it was before 736f8fd3. gcc/ChangeLog: * regcprop.cc (maybe_copy_reg_attrs): Remove unnecessary function. (find_oldest_value_reg): Inline stack_pointer_rtx check. (copyprop_hardreg_forward_1): Inline stack_pointer_rtx check. Signed-off-by: Manolis Tsamis --- gcc/regcprop.cc | 56 ++++++++++++++++++++----------------------------- 1 file changed, 23 insertions(+), 33 deletions(-) diff --git a/gcc/regcprop.cc b/gcc/regcprop.cc index d28a4d5aca8..a75af2ba7e3 100644 --- a/gcc/regcprop.cc +++ b/gcc/regcprop.cc @@ -451,31 +451,6 @@ maybe_mode_change (machine_mode orig_mode, machine_mode copy_mode, return NULL_RTX; } -/* Helper function to copy attributes when replacing OLD_REG with NEW_REG. - If the changes required for NEW_REG are invalid return NULL_RTX, otherwise - return NEW_REG. This is intended to be used with maybe_mode_change. */ - -static rtx -maybe_copy_reg_attrs (rtx new_reg, rtx old_reg) -{ - if (new_reg != stack_pointer_rtx) - { - /* NEW_REG is assumed to be a register copy resulting from - maybe_mode_change. */ - ORIGINAL_REGNO (new_reg) = ORIGINAL_REGNO (old_reg); - REG_ATTRS (new_reg) = REG_ATTRS (old_reg); - REG_POINTER (new_reg) = REG_POINTER (old_reg); - } - else if (REG_POINTER (new_reg) != REG_POINTER (old_reg)) - { - /* Only a single instance of STACK_POINTER_RTX must exist and we cannot - modify it. Allow propagation if REG_POINTER for OLD_REG matches and - don't touch ORIGINAL_REGNO and REG_ATTRS. */ - return NULL_RTX; - } - return new_reg; -} - /* Find the oldest copy of the value contained in REGNO that is in register class CL and has mode MODE. If found, return an rtx of that oldest register, otherwise return NULL. */ @@ -511,7 +486,17 @@ find_oldest_value_reg (enum reg_class cl, rtx reg, struct value_data *vd) new_rtx = maybe_mode_change (oldmode, vd->e[regno].mode, mode, i, regno); if (new_rtx) - return maybe_copy_reg_attrs (new_rtx, reg); + { + /* NEW_RTX may be the global stack pointer rtx, in which case we + must not modify it's attributes. */ + if (new_rtx != stack_pointer_rtx) + { + ORIGINAL_REGNO (new_rtx) = ORIGINAL_REGNO (reg); + REG_ATTRS (new_rtx) = REG_ATTRS (reg); + REG_POINTER (new_rtx) = REG_POINTER (reg); + } + return new_rtx; + } } return NULL_RTX; @@ -985,15 +970,20 @@ copyprop_hardreg_forward_1 (basic_block bb, struct value_data *vd) if (validate_change (insn, &SET_SRC (set), new_rtx, 0)) { - if (maybe_copy_reg_attrs (new_rtx, src)) + /* NEW_RTX may be the global stack pointer rtx, in which + case we must not modify it's attributes. */ + if (new_rtx != stack_pointer_rtx) { - if (dump_file) - fprintf (dump_file, - "insn %u: replaced reg %u with %u\n", - INSN_UID (insn), regno, REGNO (new_rtx)); - changed = true; - goto did_replacement; + ORIGINAL_REGNO (new_rtx) = ORIGINAL_REGNO (src); + REG_ATTRS (new_rtx) = REG_ATTRS (src); + REG_POINTER (new_rtx) = REG_POINTER (src); } + if (dump_file) + fprintf (dump_file, + "insn %u: replaced reg %u with %u\n", + INSN_UID (insn), regno, REGNO (new_rtx)); + changed = true; + goto did_replacement; } /* We need to re-extract as validate_change clobbers recog_data. */