From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by sourceware.org (Postfix) with ESMTPS id 052743858281 for ; Mon, 11 Mar 2024 02:58:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 052743858281 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=quicinc.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 052743858281 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1710125909; cv=none; b=vPp4J41Zg8piulSzNgdZxbhkrvLzMLIwuVLSaQS8zr2G7ZfiagvwXTitKB7xd0Z2/OUFxouyfR15XHKlqpGmUXOjogZLcqQ/jMgv+gcR1+K35/zPPWnPURJzSz+4j5sxaran9PjNE20Wew58Uyf9451qSazJfD8XaKatZ3FUAPs= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1710125909; c=relaxed/simple; bh=7kZ8CKeUBBn7mk9zIng4jOALsS9ZPlx2gS3RGLR6Epc=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=f/neNwqPtOpLr/XbfC5u6XD1fdOIyKo5aWOuTq8mW0DNP493qR/S4sGt7exmvRE6/RZMHxFAPn508cZpO0FBUX9goaRM5DWTc8DmN/VX20pg6mB3U1DH+grq/l+JM4cppfg2EaXzl+TEC5F8eNlgYZ/DeKcLmcf8bcp2NnGYfH4= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 42B22ECm007292 for ; Mon, 11 Mar 2024 02:58:25 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding:content-type; s=qcppdkim1; bh=dOt2UW9 Fkw8X3F+vlCdh0MmSHrKdMc1YUcPSTk98GnI=; b=W6YnYjH4ERcrBecj3IEV+vn bIZ+5GhHyCpn3YJwaN5wX+9CBSwztl02wkBoWwz8r7SZiwjq7oHOTuHtZBENtOJU PouD+s6RzKNcpM7VR+P5oDhTGHO8/g2+GrOsRVui8nIeBbnuSEQp0OtDglCKseL6 GKnlmgj2kTJugHPTgcJXonjLOkZ7rAZcivzWTwPmp/BGjtG58YkeSRJErwzTOj01 tUrchicx147Py18SWE8AIpeWx9JzYIjoS/HBrgOvC8iqayGgge0P2FzbGBkQnXSo LR4fLlylq7Pt7BZl44RLMPVzD/ajQJbNZ6Gj4JPvClKVyLYZtyyq0tEdhxtScZA= = Received: from nasanppmta01.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3wreqvjk4v-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 11 Mar 2024 02:58:25 +0000 (GMT) Received: from nasanex01c.na.qualcomm.com (nasanex01c.na.qualcomm.com [10.45.79.139]) by NASANPPMTA01.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 42B2wOed016631 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 11 Mar 2024 02:58:24 GMT Received: from hu-apinski-lv.qualcomm.com (10.49.16.6) by nasanex01c.na.qualcomm.com (10.45.79.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Sun, 10 Mar 2024 19:58:24 -0700 From: Andrew Pinski To: CC: Andrew Pinski Subject: [COMMITTED] Fold: Fix up merge_truthop_with_opposite_arm for NaNs [PR95351] Date: Sun, 10 Mar 2024 19:58:13 -0700 Message-ID: <20240311025813.3805399-1-quic_apinski@quicinc.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.49.16.6] X-ClientProxiedBy: nalasex01c.na.qualcomm.com (10.47.97.35) To nasanex01c.na.qualcomm.com (10.45.79.139) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: 3FafcHkFn3iBvb-F9H2B3NUqdOyXjU1s X-Proofpoint-GUID: 3FafcHkFn3iBvb-F9H2B3NUqdOyXjU1s X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-03-10_16,2024-03-06_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 bulkscore=0 spamscore=0 impostorscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 clxscore=1015 mlxlogscore=719 lowpriorityscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2402120000 definitions=main-2403110022 X-Spam-Status: No, score=-13.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,SPF_HELO_NONE,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: The problem here is that merge_truthop_with_opposite_arm would use the type of the result of the comparison rather than the operands of the comparison to figure out if we are honoring NaNs. This fixes that oversight and now we get the correct results in this case. Committed as obvious after a bootstrap/test on x86_64-linux-gnu. PR middle-end/95351 gcc/ChangeLog: * fold-const.cc (merge_truthop_with_opposite_arm): Use the type of the operands of the comparison and not the type of the comparison. gcc/testsuite/ChangeLog: * gcc.dg/float_opposite_arm-1.c: New test. Signed-off-by: Andrew Pinski --- gcc/fold-const.cc | 3 ++- gcc/testsuite/gcc.dg/float_opposite_arm-1.c | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/float_opposite_arm-1.c diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc index 43105d20be3..299c22bf391 100644 --- a/gcc/fold-const.cc +++ b/gcc/fold-const.cc @@ -6420,7 +6420,6 @@ static tree merge_truthop_with_opposite_arm (location_t loc, tree op, tree cmpop, bool rhs_only) { - tree type = TREE_TYPE (cmpop); enum tree_code code = TREE_CODE (cmpop); enum tree_code truthop_code = TREE_CODE (op); tree lhs = TREE_OPERAND (op, 0); @@ -6436,6 +6435,8 @@ merge_truthop_with_opposite_arm (location_t loc, tree op, tree cmpop, if (TREE_CODE_CLASS (code) != tcc_comparison) return NULL_TREE; + tree type = TREE_TYPE (TREE_OPERAND (cmpop, 0)); + if (rhs_code == truthop_code) { tree newrhs = merge_truthop_with_opposite_arm (loc, rhs, cmpop, rhs_only); diff --git a/gcc/testsuite/gcc.dg/float_opposite_arm-1.c b/gcc/testsuite/gcc.dg/float_opposite_arm-1.c new file mode 100644 index 00000000000..d2dbff35066 --- /dev/null +++ b/gcc/testsuite/gcc.dg/float_opposite_arm-1.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O1 -fdump-tree-original -fdump-tree-optimized" } */ +/* { dg-add-options ieee } */ +/* PR middle-end/95351 */ + +int Foo(double possiblyNAN, double b, double c) +{ + return (possiblyNAN <= 2.0) || ((possiblyNAN > 2.0) && (b > c)); +} + +/* Make sure we don't remove either >/<= */ + +/* { dg-final { scan-tree-dump "possiblyNAN > 2.0e.0" "original" } } */ +/* { dg-final { scan-tree-dump "possiblyNAN_\[0-9\]+.D. > 2.0e.0" "optimized" } } */ + +/* { dg-final { scan-tree-dump "possiblyNAN <= 2.0e.0" "original" } } */ +/* { dg-final { scan-tree-dump "possiblyNAN_\[0-9\]+.D. <= 2.0e.0" "optimized" } } */ -- 2.43.0