Message ID | 3dc25846-73ef-8021-3dd2-3c16a391b6cf@linux.ibm.com |
---|---|
State | New |
Headers |
Return-Path: <gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org> 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 9A0CD386EC0E for <patchwork@sourceware.org>; Thu, 24 Mar 2022 02:01:30 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9A0CD386EC0E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1648087290; bh=jGuRq4Z0Kicc/N9wNqmGsAjm5mFm1f69CRFXwk1klzg=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=aUwRm9dK+gVkAn+j/aSLki3TtKYYfaNcmpBRP3t2HusS7csDkaxrvSBgRFVebOl2d 6K60VlPK2K/bSBEc33fvwz18QmIQgDILYFa4ZMisViAEZ4boIJ804+soLpfxX+R/8V fQRmRKVX/1qJ8k8g8zNFY5dlT0LyHw1PU1N/ylgQ= 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 9E8AA3858C2C for <gcc-patches@gcc.gnu.org>; Thu, 24 Mar 2022 02:01:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 9E8AA3858C2C 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 22O1ghJo002111; Thu, 24 Mar 2022 02:01:00 GMT Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 3f08ckg5bt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 24 Mar 2022 02:00:59 +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 22O1pQ6w007002; Thu, 24 Mar 2022 02:00:57 GMT Received: from ppma03ams.nl.ibm.com (62.31.33a9.ip4.static.sl-reverse.com [169.51.49.98]) by mx0a-001b2d01.pphosted.com with ESMTP id 3f08ckg59j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 24 Mar 2022 02:00:57 +0000 Received: from pps.filterd (ppma03ams.nl.ibm.com [127.0.0.1]) by ppma03ams.nl.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 22O1x8np012668; Thu, 24 Mar 2022 02:00:50 GMT Received: from b06avi18878370.portsmouth.uk.ibm.com (b06avi18878370.portsmouth.uk.ibm.com [9.149.26.194]) by ppma03ams.nl.ibm.com with ESMTP id 3ew6t91p1k-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 24 Mar 2022 02:00:50 +0000 Received: from b06wcsmtp001.portsmouth.uk.ibm.com (b06wcsmtp001.portsmouth.uk.ibm.com [9.149.105.160]) by b06avi18878370.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 22O20pQF42991898 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 24 Mar 2022 02:00:51 GMT Received: from b06wcsmtp001.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1636EA4060; Thu, 24 Mar 2022 02:00:47 +0000 (GMT) Received: from b06wcsmtp001.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E468CA4054; Thu, 24 Mar 2022 02:00:44 +0000 (GMT) Received: from [9.197.245.145] (unknown [9.197.245.145]) by b06wcsmtp001.portsmouth.uk.ibm.com (Postfix) with ESMTP; Thu, 24 Mar 2022 02:00:44 +0000 (GMT) Message-ID: <3dc25846-73ef-8021-3dd2-3c16a391b6cf@linux.ibm.com> Date: Thu, 24 Mar 2022 10:00:43 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.6.1 Content-Language: en-US To: GCC Patches <gcc-patches@gcc.gnu.org> Subject: [PATCH] rs6000: Support UN[GL][ET] in rs6000_maybe_emit_maxc_minc [PR105002] Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-TM-AS-GCONF: 00 X-Proofpoint-GUID: Gzu0AHE9ZZhMb1wSWfuyVIoVQ70xQuW8 X-Proofpoint-ORIG-GUID: iwlfb0oHho8xBHO9Kim6qUQHwOFa8zDC X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.850,Hydra:6.0.425,FMLib:17.11.64.514 definitions=2022-03-23_08,2022-03-23_01,2022-02-23_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 clxscore=1015 adultscore=0 lowpriorityscore=0 priorityscore=1501 mlxscore=0 suspectscore=0 bulkscore=0 malwarescore=0 spamscore=0 mlxlogscore=999 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2203240010 X-Spam-Status: No, score=-11.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE 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 <gcc-patches.gcc.gnu.org> List-Unsubscribe: <https://gcc.gnu.org/mailman/options/gcc-patches>, <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe> List-Archive: <https://gcc.gnu.org/pipermail/gcc-patches/> List-Post: <mailto:gcc-patches@gcc.gnu.org> List-Help: <mailto:gcc-patches-request@gcc.gnu.org?subject=help> List-Subscribe: <https://gcc.gnu.org/mailman/listinfo/gcc-patches>, <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe> From: "Kewen.Lin via Gcc-patches" <gcc-patches@gcc.gnu.org> Reply-To: "Kewen.Lin" <linkw@linux.ibm.com> Cc: Michael Meissner <meissner@linux.ibm.com>, Peter Bergner <bergner@linux.ibm.com>, David Edelsohn <dje.gcc@gmail.com>, Segher Boessenkool <segher@kernel.crashing.org> Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" <gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org> |
Series |
rs6000: Support UN[GL][ET] in rs6000_maybe_emit_maxc_minc [PR105002]
|
|
Commit Message
Kewen.Lin
March 24, 2022, 2 a.m. UTC
Hi, Commit r12-7687 exposed one miss optimization chance in function rs6000_maybe_emit_maxc_minc, for now it only considers comparison codes GE/GT/LE/LT, but it can support more variants with codes UNLT/UNLE/UNGT/UNGE by reversing them into the equivalent ones with GE/GT/LE/LT. Bootstrapped and regtested on powerpc64-linux-gnu P8 and powerpc64le-linux-gnu P9 and P10. Is it ok for trunk? BR, Kewen ----- PR target/105002 gcc/ChangeLog: * config/rs6000/rs6000.cc (rs6000_maybe_emit_maxc_minc): Support more comparison codes UNLT/UNLE/UNGT/UNGE. --- gcc/config/rs6000/rs6000.cc | 7 +++++++ 1 file changed, 7 insertions(+) -- 2.27.0
Comments
Hi! On Thu, Mar 24, 2022 at 10:00:43AM +0800, Kewen.Lin wrote: > Commit r12-7687 exposed one miss optimization chance in function > rs6000_maybe_emit_maxc_minc, for now it only considers comparison > codes GE/GT/LE/LT, but it can support more variants with codes > UNLT/UNLE/UNGT/UNGE by reversing them into the equivalent ones > with GE/GT/LE/LT. > + /* Canonicalize UN[GL][ET] to [LG][TE]. */ > + if (code == UNGE || code == UNGT || code == UNLE || code == UNLT) > + { > + code = reverse_condition_maybe_unordered (code); > + std::swap (true_cond, false_cond); > + } Typically you would have to generate code to compensate for the reversed comparison. It works out fine here, but could you please restructure the code to make that less tricky / more obvious? Or at least add a comment? I wouldn't call it "canonicalisation" btw, LT is by no means more standard than UNGE is. You can say you are folding things so you later have to support fewer cases, or similar? Thanks, Segher
Hi Segher, on 2022/3/27 11:02 PM, Segher Boessenkool wrote: > Hi! > > On Thu, Mar 24, 2022 at 10:00:43AM +0800, Kewen.Lin wrote: >> Commit r12-7687 exposed one miss optimization chance in function >> rs6000_maybe_emit_maxc_minc, for now it only considers comparison >> codes GE/GT/LE/LT, but it can support more variants with codes >> UNLT/UNLE/UNGT/UNGE by reversing them into the equivalent ones >> with GE/GT/LE/LT. > >> + /* Canonicalize UN[GL][ET] to [LG][TE]. */ >> + if (code == UNGE || code == UNGT || code == UNLE || code == UNLT) >> + { >> + code = reverse_condition_maybe_unordered (code); >> + std::swap (true_cond, false_cond); >> + } > > Typically you would have to generate code to compensate for the reversed > comparison. It works out fine here, but could you please restructure > the code to make that less tricky / more obvious? Or at least add a > comment? > > I wouldn't call it "canonicalisation" btw, LT is by no means more > standard than UNGE is. You can say you are folding things so you later > have to support fewer cases, or similar? > Thanks for the review! Sorry for the late reply (I'm just back from vacation). I just posted v2 by adding more comments to describe the reversions and changing the bad "canonicalisation" word, hope it looks better to you. :) v2: https://gcc.gnu.org/pipermail/gcc-patches/2022-April/592624.html BR, Kewen
diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc index 283e8306ff7..b6a2509788f 100644 --- a/gcc/config/rs6000/rs6000.cc +++ b/gcc/config/rs6000/rs6000.cc @@ -15872,6 +15872,13 @@ rs6000_maybe_emit_maxc_minc (rtx dest, rtx op, rtx true_cond, rtx false_cond) if (result_mode != compare_mode) return false; + /* Canonicalize UN[GL][ET] to [LG][TE]. */ + if (code == UNGE || code == UNGT || code == UNLE || code == UNLT) + { + code = reverse_condition_maybe_unordered (code); + std::swap (true_cond, false_cond); + } + if (code == GE || code == GT) max_p = true; else if (code == LE || code == LT)