From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from xry111.site (xry111.site [89.208.246.23]) by sourceware.org (Postfix) with ESMTPS id B29F2385841C; Tue, 14 Nov 2023 10:03:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B29F2385841C Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=xry111.site Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=xry111.site ARC-Filter: OpenARC Filter v1.0.0 sourceware.org B29F2385841C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=89.208.246.23 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699956237; cv=none; b=Y1tsLGAHa/C3LoFzJVvItaWYLJOXInL0PmyhMJqk8QT1Ll3agtLeYiVewe/R9ikQBltCoRjyyualzhu2gg+NSrvQo0iRt+ACVJxvZyD3W7eW3vm7KC0RsEWyNoq0EZX/MfVoxa6xzKDlqEsoRWpTa88y4URSLyu+Do7/Qzf7JLg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699956237; c=relaxed/simple; bh=M1Ii+8S7NDCxMICmp1a0XtFIylKM2EfF1cuGyIsD5/Y=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=X7+plfy+PoQlNLonRC2gcvuyzvjRc2fSv68NPUtlqlknueNABHYuTQTi8Fm6yUlVXTDkI9Z3CljX/wV5vwpy/zY1BNzWGD2NXLZwr5lv733brZOLhhgUSErzLzEkvkDmYs7f8/7esSAHK8QzULNy0f469c5LUtVB4Gob916EoLY= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=xry111.site; s=default; t=1699956225; bh=M1Ii+8S7NDCxMICmp1a0XtFIylKM2EfF1cuGyIsD5/Y=; h=From:To:Cc:Subject:Date:From; b=cUveWslMaeKQEPp0Gr8ZzWdgxdaGXM1OGTWDRSLZtt8bkg/jkxUFieHvjuj1V52zh WkOc41zzEHA+3TgmGSKsDmPRhTV87C5y7EQZICsDRS9GO3P1487ddtmzy7pbjZJP8v 4KJzBD6a8C55EAVyUbZPo0zRich6cWXD/zIWyZOg= Received: from stargazer.. (unknown [IPv6:240e:358:11dd:4400:dc73:854d:832e:2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (Client did not present a certificate) (Authenticated sender: xry111@xry111.site) by xry111.site (Postfix) with ESMTPSA id 8690066A03; Tue, 14 Nov 2023 05:03:38 -0500 (EST) From: Xi Ruoyao To: gcc-patches@gcc.gnu.org Cc: chenglulu , i@xen0n.name, xuchenghua@loongson.cn, Tamar Christina , tschwinge@gcc.gnu.org, Roger Sayle , Andrew Pinski Subject: [PATCH] Only allow (copysign x, NEG_CONST) -> (fneg (fabs x)) simplification for constant folding [PR112483] Date: Tue, 14 Nov 2023 17:59:44 +0800 Message-ID: <20231114100320.47373-1-xry111@xry111.site> X-Mailer: git-send-email 2.42.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-8.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,LIKELY_SPAM_FROM,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: From: Andrew Pinski On targets with native copysign instructions, (copysign x, -1) is usually more efficient than (fneg (fabs x)). Since r14-5284, in the middle end we always optimize (fneg (fabs x)) to (copysign x, -1), not vice versa. If the target does not support native fcopysign, expand_COPYSIGN will expand it as (fneg (fabs x)) anyway. gcc/ChangeLog: PR rtl-optimization/112483 * simplify-rtx.cc (simplify_binary_operation_1) : Call simplify_unary_operation for NEG instead of simplify_gen_unary. --- [xry111]: Following Andrew's suggestion, I bootstrapped and regtested this patch on loongarch64-linux-gnu. Now with float t(float x) { return __builtin_copysignf(x, -0.1234); } It correctly generates pcalau12i $r12,%pc_hi20(.LC0) fld.s $f1,$r12,%pc_lo12(.LC0) fcopysign.s $f0,$f0,$f1 jr $r1 instead of the de-optimized fabs.s and fneg.s Ok for trunk? gcc/simplify-rtx.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/simplify-rtx.cc b/gcc/simplify-rtx.cc index 2d2e5a3c1ca..f3745d86aea 100644 --- a/gcc/simplify-rtx.cc +++ b/gcc/simplify-rtx.cc @@ -4392,7 +4392,7 @@ simplify_ashift: real_convert (&f1, mode, CONST_DOUBLE_REAL_VALUE (trueop1)); rtx tmp = simplify_gen_unary (ABS, mode, op0, mode); if (REAL_VALUE_NEGATIVE (f1)) - tmp = simplify_gen_unary (NEG, mode, tmp, mode); + tmp = simplify_unary_operation (NEG, mode, tmp, mode); return tmp; } if (GET_CODE (op0) == NEG || GET_CODE (op0) == ABS) -- 2.42.1