From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 88F233870C01 for ; Thu, 24 Nov 2022 09:17:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 88F233870C01 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 Received: from pps.filterd (m0127361.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 2AO7qJ6P002386; Thu, 24 Nov 2022 09:17:14 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=pp1; bh=bTwVgI3n/OwH2U8k5/NnZopdJ1HLqG+MYKoondA2BQQ=; b=KtTjm+a8P7ySdNfQ2T2UW0uDO8wR8xeY6S/W+pJ5MWhWeAJLQj7FoGHSqe7+lLGfEDUz u1gcJqHIRLzInEV3j3LZB4Xyv+GnP7zrc4u0hXXTrkTYuQQP+6AqfRUUtlQ1VsOuDxGx /fkrk7nXHdYVsFsgJZdK20eU3bGn4+ug4D1iZj9EA9BQVywcsmgzokTl/rITZFuiK0M8 8HTE/pY+6hrdkY93+WnNkYcPYIzlcKfv5KjuU7XgFhPnyaPM/Jluura6HRu3cRblzgTN xaTdfvA2UQwWzszHmJIw+yX4PQUqiJYCJVBhilU344su/jdC4cWc+5G7tPLO9s18PawP HA== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3m1xk91g9d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 24 Nov 2022 09:17:13 +0000 Received: from m0127361.ppops.net (m0127361.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 2AO9B71Z002932; Thu, 24 Nov 2022 09:17:13 GMT Received: from ppma06ams.nl.ibm.com (66.31.33a9.ip4.static.sl-reverse.com [169.51.49.102]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3m1xk91g8s-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 24 Nov 2022 09:17:13 +0000 Received: from pps.filterd (ppma06ams.nl.ibm.com [127.0.0.1]) by ppma06ams.nl.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 2AO960km026732; Thu, 24 Nov 2022 09:17:11 GMT Received: from b06avi18878370.portsmouth.uk.ibm.com (b06avi18878370.portsmouth.uk.ibm.com [9.149.26.194]) by ppma06ams.nl.ibm.com with ESMTP id 3kxpdhyx5n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 24 Nov 2022 09:17:11 +0000 Received: from d06av24.portsmouth.uk.ibm.com (d06av24.portsmouth.uk.ibm.com [9.149.105.60]) by b06avi18878370.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 2AO9HnWI5046870 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 24 Nov 2022 09:17:50 GMT Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 74DF34203F; Thu, 24 Nov 2022 09:17:08 +0000 (GMT) Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6DDD542041; Thu, 24 Nov 2022 09:17:07 +0000 (GMT) Received: from trout.aus.stglabs.ibm.com (unknown [9.40.194.100]) by d06av24.portsmouth.uk.ibm.com (Postfix) with ESMTP; Thu, 24 Nov 2022 09:17:07 +0000 (GMT) From: Kewen Lin To: gcc-patches@gcc.gnu.org Cc: Kewen Lin , segher@kernel.crashing.org, dje.gcc@gmail.com, bergner@linux.ibm.com, meissner@linux.ibm.com Subject: [PATCH 9/9] rs6000: Rework vector integer comparison in rs6000_emit_vector_compare - p5 Date: Thu, 24 Nov 2022 03:15:57 -0600 Message-Id: <20221124091557.514727-10-linkw@linux.ibm.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20221124091557.514727-1-linkw@linux.ibm.com> References: <20221124091557.514727-1-linkw@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: GmTVno1Ciz2sJsEePT1lWr_8W0YvQ5mv X-Proofpoint-GUID: bBKbvvbaSJF1mlkzsbRZy_UzqfPL8meI X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.895,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2022-11-24_06,2022-11-23_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=999 mlxscore=0 lowpriorityscore=0 malwarescore=0 bulkscore=0 phishscore=0 impostorscore=0 suspectscore=0 priorityscore=1501 clxscore=1015 spamscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2210170000 definitions=main-2211240072 X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,GIT_PATCH_0,KAM_NUMSUBJECT,RCVD_IN_MSPIKE_H2,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: The current handlings in rs6000_emit_vector_compare is a bit complicated to me, especially after we emit vector float comparison insn with the given code directly. So it's better to refactor the handlings of vector integer comparison here. This is part 5, it's to refactor all the handlings of vector integer comparison to make it neat. This patch doesn't introduce any functionality change. gcc/ChangeLog: * config/rs6000/rs6000.cc (rs6000_emit_vector_compare): Refactor the handlings of vector integer comparison. --- gcc/config/rs6000/rs6000.cc | 68 ++++++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 24 deletions(-) diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc index a3645e321a7..b694080840a 100644 --- a/gcc/config/rs6000/rs6000.cc +++ b/gcc/config/rs6000/rs6000.cc @@ -15662,34 +15662,54 @@ rs6000_emit_vector_compare (enum rtx_code rcode, return mask; } - /* For any of vector integer comparison operators for which we - have direct hardware instructions, just emit it directly - here. */ - if (rcode == EQ || rcode == GT || rcode == GTU) - emit_insn (gen_rtx_SET (mask, gen_rtx_fmt_ee (rcode, dmode, op0, op1))); - else if (rcode == LT || rcode == LTU) + bool swap_operands = false; + bool need_invert = false; + enum rtx_code code = rcode; + + switch (rcode) { + case EQ: + case GT: + case GTU: + /* Emit directly with native hardware insn. */ + break; + case LT: + case LTU: /* lt{,u}(a,b) = gt{,u}(b,a) */ - enum rtx_code code = swap_condition (rcode); - std::swap (op0, op1); - mask = gen_reg_rtx (dmode); - emit_insn (gen_rtx_SET (mask, gen_rtx_fmt_ee (code, dmode, op0, op1))); + code = swap_condition (rcode); + swap_operands = true; + break; + case NE: + case LE: + case LEU: + /* ne(a,b) = ~eq(a,b); le{,u}(a,b) = ~gt{,u}(a,b) */ + code = reverse_condition (rcode); + need_invert = true; + break; + case GE: + /* ge(a,b) = ~gt(b,a) */ + code = GT; + swap_operands = true; + need_invert = true; + break; + case GEU: + /* geu(a,b) = ~gtu(b,a) */ + code = GTU; + swap_operands = true; + need_invert = true; + break; + default: + gcc_unreachable (); + break; } - else if (rcode == NE || rcode == LE || rcode == LEU) + + if (swap_operands) + std::swap (op0, op1); + + emit_insn (gen_rtx_SET (mask, gen_rtx_fmt_ee (code, dmode, op0, op1))); + + if (need_invert) { - /* ne(a,b) = ~eq(a,b); le{,u}(a,b) = ~gt{,u}(a,b) */ - enum rtx_code code = reverse_condition (rcode); - mask = gen_reg_rtx (dmode); - emit_insn (gen_rtx_SET (mask, gen_rtx_fmt_ee (code, dmode, op0, op1))); - enum insn_code nor_code = optab_handler (one_cmpl_optab, dmode); - gcc_assert (nor_code != CODE_FOR_nothing); - emit_insn (GEN_FCN (nor_code) (mask, mask)); - } else { - /* ge{,u}(a,b) = ~gt{,u}(b,a) */ - gcc_assert (rcode == GE || rcode == GEU); - enum rtx_code code = rcode == GE ? GT : GTU; - mask = gen_reg_rtx (dmode); - emit_insn (gen_rtx_SET (mask, gen_rtx_fmt_ee (code, dmode, op0, op1))); enum insn_code nor_code = optab_handler (one_cmpl_optab, dmode); gcc_assert (nor_code != CODE_FOR_nothing); emit_insn (GEN_FCN (nor_code) (mask, mask)); -- 2.27.0