From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by sourceware.org (Postfix) with ESMTPS id 1136E3858D33 for ; Thu, 10 Aug 2023 00:20:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1136E3858D33 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=marvell.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=marvell.com Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 379GsilQ023142 for ; Wed, 9 Aug 2023 17:20:20 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : mime-version : content-transfer-encoding : content-type; s=pfpt0220; bh=vRrHPBSnKacpOtWEZuK6jttnayiZirUhX9UA2Ql2GdQ=; b=G9K0N1ME37ysiO+2qq26YwYVjQpbfR2Z28rhSx7H21gVg4KS8ke8HjAlD06tCf25s6gv OKppzN828Tp0Sc3q4CYTU39IFmhKbgRKY/PrNISDR2aHCaO5SbdxXq+Ud3zfFa4VeWzk FDfRq98LYGRYsR46B368rkKfe1N2EVOdHdwzjudHqDAyr5oYKJhAym2PwC/exVVuj3M9 kk7u43rbn5TxzGd2YPsX+L8Al++3NFThdEMyCTBmjJmAU60ss1VJ6385kdeXlghOCrrL EgTev+kWosZSJejVllUHGIWtqa13axpYiyHtYnoqopw06lE05VD2PjdlLCc9GA+YogWS Bg== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3sc57skwh4-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Wed, 09 Aug 2023 17:20:20 -0700 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Wed, 9 Aug 2023 17:20:07 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Wed, 9 Aug 2023 17:20:07 -0700 Received: from vpnclient.wrightpinski.org.com (unknown [10.69.242.187]) by maili.marvell.com (Postfix) with ESMTP id 48EFE5B6935; Wed, 9 Aug 2023 17:20:07 -0700 (PDT) From: Andrew Pinski To: CC: Andrew Pinski Subject: [PATCH] Fix PR 110954: wrong code with cmp | !cmp Date: Wed, 9 Aug 2023 17:19:56 -0700 Message-ID: <20230810001956.2680884-1-apinski@marvell.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Proofpoint-GUID: zsUn8_1QZ5VBjAlX69gS9NuyiFNEnBbU X-Proofpoint-ORIG-GUID: zsUn8_1QZ5VBjAlX69gS9NuyiFNEnBbU X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.267,Aquarius:18.0.957,Hydra:6.0.591,FMLib:17.11.176.26 definitions=2023-08-09_20,2023-08-09_01,2023-05-22_02 X-Spam-Status: No, score=-14.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_LOW,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: This was an oversight on my part not realizing that comparisons in generic can have a non-boolean type. This means if we have `(f < 0) | !(f < 0)` we would optimize this to -1 rather than just 1. This patch just adds the check for the type of the comparisons to be boolean type to keep the optimization in that case. OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions. PR 110954 gcc/ChangeLog: * generic-match-head.cc (bitwise_inverted_equal_p): Check the type of the comparison to be boolean too. gcc/testsuite/ChangeLog: * gcc.c-torture/execute/pr110954-1.c: New test. --- gcc/generic-match-head.cc | 3 ++- gcc/testsuite/gcc.c-torture/execute/pr110954-1.c | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr110954-1.c diff --git a/gcc/generic-match-head.cc b/gcc/generic-match-head.cc index ddaf22f2179..ac2119bfdd0 100644 --- a/gcc/generic-match-head.cc +++ b/gcc/generic-match-head.cc @@ -146,7 +146,8 @@ bitwise_inverted_equal_p (tree expr1, tree expr2) && bitwise_equal_p (expr1, TREE_OPERAND (expr2, 0))) return true; if (COMPARISON_CLASS_P (expr1) - && COMPARISON_CLASS_P (expr2)) + && COMPARISON_CLASS_P (expr2) + && TREE_CODE (TREE_TYPE (expr1)) == BOOLEAN_TYPE) { tree op10 = TREE_OPERAND (expr1, 0); tree op20 = TREE_OPERAND (expr2, 0); diff --git a/gcc/testsuite/gcc.c-torture/execute/pr110954-1.c b/gcc/testsuite/gcc.c-torture/execute/pr110954-1.c new file mode 100644 index 00000000000..8aad758e10f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr110954-1.c @@ -0,0 +1,10 @@ + +#define comparison (f < 0) +int main() { + int f = 0; + int d = comparison | !comparison; + if (d != 1) + __builtin_abort(); + return 0; +} + -- 2.31.1