From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by sourceware.org (Postfix) with ESMTPS id 1D5283858C3A for ; Wed, 8 May 2024 02:13:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1D5283858C3A Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linux.ibm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 1D5283858C3A Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1715134392; cv=none; b=Tl5mTUcXYb9aRHB018oTAFgQVtCDSYnHXy+ScxdYsoW2F3IG6yRedziuBQbN+bQgzHlDN2gmybLjwqXhe/WxNu1wCxYrbbm7ybcBQqEAsWTkpRiUkZmkZMD7G03hrMeFV7+eG9L/j3ebNcMS1BnwKqRDkdxlnmrmhG2Uwd4dETk= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1715134392; c=relaxed/simple; bh=T8c3cHjkAfGq/71yxQ0BSEg4z+rbJWX6FFua6sWrmf8=; h=DKIM-Signature:Message-ID:Date:Subject:From:To:MIME-Version; b=aubOjp6t4BybZXd4iU7g7zgeb+i6FvnFhEqTJcnOeOj605pdOKMR/jPRjbeWu7pBPKNxZPBX9RQ9kAoZ0169u/vbHRsKaPS0jYfXiXCDZrLOB0cHfpI0xunQFp3KXkv/ij4lUEBvvyE53qBLNGHN2sJzDctx8NCOrINkw8+b4kk= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 4481Ww9K009838; Wed, 8 May 2024 02:13:09 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=message-id : date : subject : from : to : cc : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pp1; bh=AGG5WnSLoj/IVKDLm+3d7uaNfhzNyPz6J0uTDlMKYOc=; b=WuBY4EFG6jV3SZLYlRrsP+NssDFV+w7ezv6gexQtDqmk4zXbzaIdzTyUnWO0R+cbW79Z 2fn8yBmQFeb0i5ax9XR+lrDF1OcSNMnj369KeBcCFtkU1f4EEmHed2JzMylJvlFnJRKa tONPRSBf02z/chzsqaay5N7d5mdHzIjnHpvkFVGCVt2sUF3NrYslOuDRnI0W9jMKDuBE 4mgNopJ7Jx9r1lFH1RznAZh9TxMyQtl2Fa3pb2uB4ajTVIcsBztP3LaFBEih+hJxDJZU rVIH8CEI5ouQqAFs9OvQqgcG93wIZq6r0XfIdJ99rKqSRKLZTfjaRqPwlkt4vZkKa31l FQ== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3xyytdg2qd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 08 May 2024 02:13:08 +0000 Received: from m0353729.ppops.net (m0353729.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 4482D8GP003200; Wed, 8 May 2024 02:13:08 GMT Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3xyytdg2qb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 08 May 2024 02:13:08 +0000 Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 4480kkUu009244; Wed, 8 May 2024 02:13:06 GMT Received: from smtprelay02.fra02v.mail.ibm.com ([9.218.2.226]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 3xysht2400-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 08 May 2024 02:13:06 +0000 Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay02.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 4482D1eZ52101442 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 8 May 2024 02:13:03 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 336A320040; Wed, 8 May 2024 02:13:01 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B907720043; Wed, 8 May 2024 02:12:59 +0000 (GMT) Received: from [9.200.103.244] (unknown [9.200.103.244]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 8 May 2024 02:12:59 +0000 (GMT) Message-ID: Date: Wed, 8 May 2024 10:13:00 +0800 User-Agent: Mozilla Thunderbird Subject: Ping [PATCH, RFC] combine: Don't truncate const operand of AND if it's no benefits From: HAO CHEN GUI To: gcc-patches Cc: Segher Boessenkool , David , "Kewen.Lin" , Peter Bergner References: Content-Language: en-US In-Reply-To: Content-Type: text/plain; charset=UTF-8 X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: X0J6-U1SpnGRnW9WjgcNHenYXoP5LuxG X-Proofpoint-GUID: FSfYep2hOtvjRa7FTzkCE64OIzdrcs2I Content-Transfer-Encoding: 8bit X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.650,FMLib:17.11.176.26 definitions=2024-05-07_16,2024-05-06_02,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 malwarescore=0 bulkscore=0 suspectscore=0 mlxlogscore=999 impostorscore=0 priorityscore=1501 adultscore=0 lowpriorityscore=0 mlxscore=0 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2405010000 definitions=main-2405080014 X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,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 List-Id: Hi, Gently ping this: https://gcc.gnu.org/pipermail/gcc-patches/2024-March/647533.html Thanks Gui Haochen 在 2024/3/18 17:10, HAO CHEN GUI 写道: > Hi, > Gently ping this: > https://gcc.gnu.org/pipermail/gcc-patches/2024-March/647533.html > > Thanks > Gui Haochen > > 在 2024/3/11 13:41, HAO CHEN GUI 写道: >> Hi, >> This patch tries to fix the problem when a canonical form doesn't benefit >> on a specific target. The const operand of AND is and with the nonzero >> bits of another operand in combine pass. It's a canonical form, but it's no >> benefits for the target which has rotate and mask insns. As the mask is >> truncated, it can't match the insn conditions which it originally matches. >> For example, the following insn condition checks the sum of two AND masks. >> When one of the mask is truncated, the condition breaks. >> >> (define_insn "*rotlsi3_insert_5" >> [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r") >> (ior:SI (and:SI (match_operand:SI 1 "gpc_reg_operand" "0,r") >> (match_operand:SI 2 "const_int_operand" "n,n")) >> (and:SI (match_operand:SI 3 "gpc_reg_operand" "r,0") >> (match_operand:SI 4 "const_int_operand" "n,n"))))] >> "rs6000_is_valid_mask (operands[2], NULL, NULL, SImode) >> && UINTVAL (operands[2]) != 0 && UINTVAL (operands[4]) != 0 >> && UINTVAL (operands[2]) + UINTVAL (operands[4]) + 1 == 0" >> ... >> >> This patch tries to fix the problem by comparing the rtx cost. If another >> operand (varop) is not changed and rtx cost with new mask is not less than >> the original one, the mask is restored to original one. >> >> I'm not sure if comparison of rtx cost here is proper. The outer code is >> unknown and I suppose it as "SET". Also the rtx cost might not be accurate. >> From my understanding, the canonical forms should always benefit as it can't >> be undo in combine pass. Do we have a perfect solution for this kind of >> issues? Looking forward for your advice. >> >> Another similar issues for canonical forms. Whether the widen mode for >> lshiftrt is always good? >> https://gcc.gnu.org/pipermail/gcc-patches/2023-July/624852.html >> >> Thanks >> Gui Haochen >> >> ChangeLog >> Combine: Don't truncate const operand of AND if it's no benefits >> >> In combine pass, the canonical form is to turn off all bits in the constant >> that are know to already be zero for AND. >> >> /* Turn off all bits in the constant that are known to already be zero. >> Thus, if the AND isn't needed at all, we will have CONSTOP == NONZERO_BITS >> which is tested below. */ >> >> constop &= nonzero; >> >> But it doesn't benefit when the target has rotate and mask insert insns. >> The AND mask is truncated and lost its information. Thus it can't match >> the insn conditions. For example, the following insn condition checks >> the sum of two AND masks. >> >> (define_insn "*rotlsi3_insert_5" >> [(set (match_operand:SI 0 "gpc_reg_operand" "=r,r") >> (ior:SI (and:SI (match_operand:SI 1 "gpc_reg_operand" "0,r") >> (match_operand:SI 2 "const_int_operand" "n,n")) >> (and:SI (match_operand:SI 3 "gpc_reg_operand" "r,0") >> (match_operand:SI 4 "const_int_operand" "n,n"))))] >> "rs6000_is_valid_mask (operands[2], NULL, NULL, SImode) >> && UINTVAL (operands[2]) != 0 && UINTVAL (operands[4]) != 0 >> && UINTVAL (operands[2]) + UINTVAL (operands[4]) + 1 == 0" >> ... >> >> This patch restores the const operand of AND if the another operand is >> not optimized and the truncated const operand doesn't save the rtx cost. >> >> gcc/ >> * combine.cc (simplify_and_const_int_1): Restore the const operand >> of AND if varop is not optimized and the rtx cost of the new const >> operand is not reduced. >> >> gcc/testsuite/ >> * gcc.target/powerpc/rlwimi-0.c: Reduced total number of insns and >> adjust the number of rotate and mask insns. >> * gcc.target/powerpc/rlwimi-1.c: Likewise. >> * gcc.target/powerpc/rlwimi-2.c: Likewise. >> >> patch.diff >> diff --git a/gcc/combine.cc b/gcc/combine.cc >> index a4479f8d836..16ff09ea854 100644 >> --- a/gcc/combine.cc >> +++ b/gcc/combine.cc >> @@ -10161,8 +10161,23 @@ simplify_and_const_int_1 (scalar_int_mode mode, rtx varop, >> if (constop == nonzero) >> return varop; >> >> - if (varop == orig_varop && constop == orig_constop) >> - return NULL_RTX; >> + if (varop == orig_varop) >> + { >> + if (constop == orig_constop) >> + return NULL_RTX; >> + else >> + { >> + rtx tmp = simplify_gen_binary (AND, mode, varop, >> + gen_int_mode (constop, mode)); >> + rtx orig = simplify_gen_binary (AND, mode, varop, >> + gen_int_mode (orig_constop, mode)); >> + if (set_src_cost (tmp, mode, optimize_this_for_speed_p) >> + < set_src_cost (orig, mode, optimize_this_for_speed_p)) >> + return tmp; >> + else >> + return NULL_RTX; >> + } >> + } >> >> /* Otherwise, return an AND. */ >> return simplify_gen_binary (AND, mode, varop, gen_int_mode (constop, mode)); >> diff --git a/gcc/testsuite/gcc.target/powerpc/rlwimi-0.c b/gcc/testsuite/gcc.target/powerpc/rlwimi-0.c >> index 961be199901..d9dd4419f1d 100644 >> --- a/gcc/testsuite/gcc.target/powerpc/rlwimi-0.c >> +++ b/gcc/testsuite/gcc.target/powerpc/rlwimi-0.c >> @@ -2,15 +2,15 @@ >> /* { dg-options "-O2" } */ >> >> /* { dg-final { scan-assembler-times {(?n)^\s+[a-z]} 16485 { target ilp32 } } } */ >> -/* { dg-final { scan-assembler-times {(?n)^\s+[a-z]} 19909 { target lp64 } } } */ >> +/* { dg-final { scan-assembler-times {(?n)^\s+[a-z]} 19780 { target lp64 } } } */ >> /* { dg-final { scan-assembler-times {(?n)^\s+blr} 6750 } } */ >> /* { dg-final { scan-assembler-times {(?n)^\s+mr} 3007 { target ilp32 } } } */ >> -/* { dg-final { scan-assembler-times {(?n)^\s+mr} 11 { target lp64 } } } */ >> -/* { dg-final { scan-assembler-times {(?n)^\s+rldicl} 6420 { target lp64 } } } */ >> +/* { dg-final { scan-assembler-times {(?n)^\s+mr} 140 { target lp64 } } } */ >> +/* { dg-final { scan-assembler-times {(?n)^\s+rldicl} 6162 { target lp64 } } } */ >> >> /* { dg-final { scan-assembler-times {(?n)^\s+rlwimi} 6420 { target ilp32 } } } */ >> -/* { dg-final { scan-assembler-times {(?n)^\s+rldimi} 310 { target lp64 } } } */ >> -/* { dg-final { scan-assembler-times {(?n)^\s+rlwimi} 6110 { target lp64 } } } */ >> +/* { dg-final { scan-assembler-times {(?n)^\s+rldimi} 366 { target lp64 } } } */ >> +/* { dg-final { scan-assembler-times {(?n)^\s+rlwimi} 6054 { target lp64 } } } */ >> /* { dg-final { scan-assembler-times {(?n)^\s+rotlwi} 308 } } */ >> >> >> diff --git a/gcc/testsuite/gcc.target/powerpc/rlwimi-1.c b/gcc/testsuite/gcc.target/powerpc/rlwimi-1.c >> index e2c607b1d45..d955fc792d9 100644 >> --- a/gcc/testsuite/gcc.target/powerpc/rlwimi-1.c >> +++ b/gcc/testsuite/gcc.target/powerpc/rlwimi-1.c >> @@ -2,15 +2,15 @@ >> /* { dg-options "-O2" } */ >> >> /* { dg-final { scan-assembler-times {(?n)^\s+[a-z]} 13977 { target ilp32 } } } */ >> -/* { dg-final { scan-assembler-times {(?n)^\s+[a-z]} 20217 { target lp64 } } } */ >> +/* { dg-final { scan-assembler-times {(?n)^\s+[a-z]} 20189 { target lp64 } } } */ >> /* { dg-final { scan-assembler-times {(?n)^\s+blr} 6750 } } */ >> /* { dg-final { scan-assembler-times {(?n)^\s+mr} 499 { target ilp32 } } } */ >> -/* { dg-final { scan-assembler-times {(?n)^\s+mr} 11 { target lp64 } } } */ >> -/* { dg-final { scan-assembler-times {(?n)^\s+rldicl} 6728 { target lp64 } } } */ >> +/* { dg-final { scan-assembler-times {(?n)^\s+mr} 39 { target lp64 } } } */ >> +/* { dg-final { scan-assembler-times {(?n)^\s+rldicl} 6672 { target lp64 } } } */ >> >> /* { dg-final { scan-assembler-times {(?n)^\s+rlwimi} 1404 { target ilp32 } } } */ >> -/* { dg-final { scan-assembler-times {(?n)^\s+rldimi} 134 { target lp64 } } } */ >> -/* { dg-final { scan-assembler-times {(?n)^\s+rlwimi} 1270 { target lp64 } } } */ >> +/* { dg-final { scan-assembler-times {(?n)^\s+rldimi} 190 { target lp64 } } } */ >> +/* { dg-final { scan-assembler-times {(?n)^\s+rlwimi} 1214 { target lp64 } } } */ >> >> /* { dg-final { scan-assembler-times {(?n)^\s+mulli} 5324 } } */ >> >> diff --git a/gcc/testsuite/gcc.target/powerpc/rlwimi-2.c b/gcc/testsuite/gcc.target/powerpc/rlwimi-2.c >> index bafa371db73..9abfd7abf08 100644 >> --- a/gcc/testsuite/gcc.target/powerpc/rlwimi-2.c >> +++ b/gcc/testsuite/gcc.target/powerpc/rlwimi-2.c >> @@ -2,14 +2,14 @@ >> /* { dg-options "-O2" } */ >> >> /* { dg-final { scan-assembler-times {(?n)^\s+[a-z]} 14121 { target ilp32 } } } */ >> -/* { dg-final { scan-assembler-times {(?n)^\s+[a-z]} 20217 { target lp64 } } } */ >> +/* { dg-final { scan-assembler-times {(?n)^\s+[a-z]} 19622 { target lp64 } } } */ >> /* { dg-final { scan-assembler-times {(?n)^\s+blr} 6750 } } */ >> /* { dg-final { scan-assembler-times {(?n)^\s+mr} 643 { target ilp32 } } } */ >> -/* { dg-final { scan-assembler-times {(?n)^\s+mr} 11 { target lp64 } } } */ >> -/* { dg-final { scan-assembler-times {(?n)^\s+rldicl} 7790 { target lp64 } } } */ >> +/* { dg-final { scan-assembler-times {(?n)^\s+mr} 658 { target lp64 } } } */ >> +/* { dg-final { scan-assembler-times {(?n)^\s+rldicl} 5460 { target lp64 } } } */ >> >> /* { dg-final { scan-assembler-times {(?n)^\s+rlwimi} 1692 { target ilp32 } } } */ >> -/* { dg-final { scan-assembler-times {(?n)^\s+rlwimi} 1666 { target lp64 } } } */ >> +/* { dg-final { scan-assembler-times {(?n)^\s+rlwimi} 1610 { target lp64 } } } */ >> >> /* { dg-final { scan-assembler-times {(?n)^\s+mulli} 5036 } } */ >>