From patchwork Wed Dec 29 01:27:06 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xionghu Luo X-Patchwork-Id: 49357 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 4BDEB3858417 for ; Wed, 29 Dec 2021 01:27:45 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4BDEB3858417 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1640741265; bh=KKUrbbEmdfnGTgtq/mDBHVip41m0ScWKHAFfuPLGBHQ=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=B2NAjzVG+wxz+fCjSb9F7B6uzwJ55i0nRJ+iwuUfcLm4/USxqinsFo6OQoSkOT35D /1AZUho+UevD6Prao9KnkYRiOgfKTRUTPceaRBbRyUfF46AgfkdidgdhniEzACTXQd Fk2DRV3AYwvg6hTcTjnmdCa3XbU5RVtP5vFsqMLs= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 8E87D3858D39; Wed, 29 Dec 2021 01:27:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 8E87D3858D39 Received: from pps.filterd (m0127361.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 1BSMVDVp027087; Wed, 29 Dec 2021 01:27:16 GMT Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 3d81g6dt3r-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 29 Dec 2021 01:27:15 +0000 Received: from m0127361.ppops.net (m0127361.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.43/8.16.0.43) with SMTP id 1BT1RFlY004121; Wed, 29 Dec 2021 01:27:15 GMT Received: from ppma04fra.de.ibm.com (6a.4a.5195.ip4.static.sl-reverse.com [149.81.74.106]) by mx0a-001b2d01.pphosted.com with ESMTP id 3d81g6dt3f-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 29 Dec 2021 01:27:15 +0000 Received: from pps.filterd (ppma04fra.de.ibm.com [127.0.0.1]) by ppma04fra.de.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 1BT1MU5l007875; Wed, 29 Dec 2021 01:27:13 GMT Received: from b06cxnps3075.portsmouth.uk.ibm.com (d06relay10.portsmouth.uk.ibm.com [9.149.109.195]) by ppma04fra.de.ibm.com with ESMTP id 3d5txa2u6u-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 29 Dec 2021 01:27:13 +0000 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 1BT1RAss43778524 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 29 Dec 2021 01:27:10 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1092D52057; Wed, 29 Dec 2021 01:27:10 +0000 (GMT) Received: from rain6p1.aus.stglabs.ibm.com (unknown [9.40.203.151]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id E9D2152065; Wed, 29 Dec 2021 01:27:08 +0000 (GMT) To: gcc-patches@gcc.gnu.org Subject: [PATCH] convert (xor (and (xor A B) C) A) to (ior (and A ~C) (and B C)) [PR90323] Date: Tue, 28 Dec 2021 19:27:06 -0600 Message-Id: <20211229012706.3244946-1-luoxhu@linux.ibm.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: myQeNrech44XsOMQt1plZn56x4vGFH6O X-Proofpoint-GUID: S8xmIEFCd3_1OQhoDMe0dcGLUpyP14nY X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.11.62.513 definitions=2021-12-28_13,2021-12-28_01,2021-12-02_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 mlxscore=0 priorityscore=1501 bulkscore=0 adultscore=0 lowpriorityscore=0 suspectscore=0 mlxlogscore=999 phishscore=0 clxscore=1015 malwarescore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2112290003 X-Spam-Status: No, score=-10.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: Xionghu Luo via Gcc-patches From: Xionghu Luo Reply-To: Xionghu Luo Cc: segher@kernel.crashing.org, Xionghu Luo , wschmidt@linux.ibm.com, linkw@gcc.gnu.org, dje.gcc@gmail.com Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Bootstrapped and regtested on powerpc64le-linux-gnu {P10,P9} powerpc64-linux-gnu {P8, P7} and X86. OK for master? gcc/ChangeLog: PR 90323 * simplify-rtx.c (simplify_context::simplify_binary_operation_1): Relax C from constant to constant or reg. gcc/testsuite/ChangeLog: * gcc.target/powerpc/pr90323.c: New test. --- gcc/simplify-rtx.c | 11 ++++---- gcc/testsuite/gcc.target/powerpc/pr90323.c | 33 ++++++++++++++++++++++ 2 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.target/powerpc/pr90323.c diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index a060f1bbce0..be240b2979e 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -3581,12 +3581,13 @@ simplify_context::simplify_binary_operation_1 (rtx_code code, } } - /* If we have (xor (and (xor A B) C) A) with C a constant we can instead - do (ior (and A ~C) (and B C)) which is a machine instruction on some - machines, and also has shorter instruction path length. */ + /* If we have (xor (and (xor A B) C) A) with C a constant or register + we can instead do (ior (and A ~C) (and B C)) which is a machine + instruction on some machines, and also has shorter instruction path + length. */ if (GET_CODE (op0) == AND && GET_CODE (XEXP (op0, 0)) == XOR - && CONST_INT_P (XEXP (op0, 1)) + && (CONST_INT_P (XEXP (op0, 1)) || REG_P (XEXP (op0, 1))) && rtx_equal_p (XEXP (XEXP (op0, 0), 0), trueop1)) { rtx a = trueop1; @@ -3600,7 +3601,7 @@ simplify_context::simplify_binary_operation_1 (rtx_code code, /* Similarly, (xor (and (xor A B) C) B) as (ior (and A C) (and B ~C)) */ else if (GET_CODE (op0) == AND && GET_CODE (XEXP (op0, 0)) == XOR - && CONST_INT_P (XEXP (op0, 1)) + && (CONST_INT_P (XEXP (op0, 1)) || REG_P (XEXP (op0, 1))) && rtx_equal_p (XEXP (XEXP (op0, 0), 1), trueop1)) { rtx a = XEXP (XEXP (op0, 0), 0); diff --git a/gcc/testsuite/gcc.target/powerpc/pr90323.c b/gcc/testsuite/gcc.target/powerpc/pr90323.c new file mode 100644 index 00000000000..e80609c477f --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr90323.c @@ -0,0 +1,33 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +#include +#include +volatile vector unsigned orig = {0xebebebeb, 0x34343434, 0x76767676, 0x12121212}; +volatile vector unsigned mask = {0xffffffff, 0, 0xffffffff, 0}; +volatile vector unsigned fill = {0xfefefefe, 0xaaaaaaaa, 0xbbbbbbbb, 0xcccccccc}; +volatile vector unsigned expected = {0xfefefefe, 0x34343434, 0xbbbbbbbb, 0x12121212}; +__attribute__((noinline)) vector unsigned +without_sel(vector unsigned l, vector unsigned r, vector unsigned mask) { + l = l & ~mask; + l |= mask & r; + return l; +} + +__attribute__((noinline)) vector unsigned +with_sel(vector unsigned l, vector unsigned r, vector unsigned mask) { + return vec_sel(l, r, mask); +} + +int main() { + vector unsigned res1 = without_sel(orig, fill, mask); + vector unsigned res2 = with_sel(orig, fill, mask); + if (!vec_all_eq(res1, expected)) + printf("error1\n"); + if (!vec_all_eq(res2, expected)) + printf("error2\n"); + return 0; +} + + +/* { dg-final { scan-assembler-times {\mxxsel\M} 2 } } */