From patchwork Wed Feb 12 08:36:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Pinski X-Patchwork-Id: 106360 Return-Path: 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 1C89E385840E for ; Wed, 12 Feb 2025 08:40:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1C89E385840E Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=quicinc.com header.i=@quicinc.com header.a=rsa-sha256 header.s=qcppdkim1 header.b=n7xvMi92 X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by sourceware.org (Postfix) with ESMTPS id 41A273858C52 for ; Wed, 12 Feb 2025 08:39:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 41A273858C52 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 41A273858C52 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1739349597; cv=none; b=nzezQB4JKfuMd/soElznoncVjlQin1F/XPHNsg+zbkiBnmzjTXyQl8aHHfQHtXdiLSWYC3ya+L+dJpppfID9YoboZP5vlsned46h6zqDX1+isDJhEx6tWtkNEXiJfngPGOJSMPhkuSSZSGlIczdqen1cZ0jgPGPWn/uqmJ7jhOM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1739349597; c=relaxed/simple; bh=PcMnz4IoRVpt5PlCzvGLCHYU3WxaVHOOZ8lMD1Sqqq0=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=oT4F2ysko7UrLHtIIWf1Fd6xvkCDzCO1guZlAkOuCcwHUN9ScwAJDclsdVAtrNVkZ9UoSz6XPVjCsc7nt1WWNukmviuIpxhIgselUTlZIkqMStBpmATEu2Tvsg94xRMuhQH4uqJGhkWkJvIMNXKRxv6S8TWXwmI0r9brkzu+NH8= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 41A273858C52 Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 51BKiSbp025864 for ; Wed, 12 Feb 2025 08:39:56 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= cc:content-transfer-encoding:content-type:date:from:message-id :mime-version:subject:to; s=qcppdkim1; bh=PiJA91bp9K93MYJz2HIM2E A7DKdi0VgED2L1ZaVbKvA=; b=n7xvMi9201OQxvn/dGLFmuLgVj7DVtY233q1Da IU7+vUnCCSAeWflkV3HjfQ9U4bB4NhAeKpQ9NvctMw+xB4CqAsBD8cIWlcTiiWKW SxYW4auhR1BcEt35I0o/CjWZ1wZMPWaVbjuDZS8JtX5oexw2DbsfqUzhVaDEOKLS gti1i/lvSn+YNVrC+/VQsTXMpEdL4iCTUw4kFWqLyCG07yYhVYBL/aDNM7w+uv8n tEdN+FSi2E7iZPvspDdGl+em/1bzOlINdatBXXtrX7LAXY8X42NN/p60TS6Cc3ab nlDH7gXSMY6Vfsf8VxME86Vzrp+ixdX/uN35TfveEN/1FnEg== Received: from nasanppmta04.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 44r5j5b476-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 12 Feb 2025 08:39:56 +0000 (GMT) Received: from nasanex01c.na.qualcomm.com (nasanex01c.na.qualcomm.com [10.45.79.139]) by NASANPPMTA04.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id 51C8dtLp020749 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 12 Feb 2025 08:39:55 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.1544.9; Wed, 12 Feb 2025 00:39:55 -0800 From: Andrew Pinski To: CC: Andrew Pinski Subject: [PATCH] loop-invariant: Treat inline-asm conditional trapping [PR102150] Date: Wed, 12 Feb 2025 00:36:46 -0800 Message-ID: <20250212083646.297869-1-quic_apinski@quicinc.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Originating-IP: [10.49.16.6] X-ClientProxiedBy: nalasex01b.na.qualcomm.com (10.47.209.197) 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: gWUBNb7J5Hhw53IgtuThzdexDYD5D1Yg X-Proofpoint-GUID: gWUBNb7J5Hhw53IgtuThzdexDYD5D1Yg X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-12_02,2025-02-11_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 priorityscore=1501 mlxscore=0 bulkscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 spamscore=0 clxscore=1015 impostorscore=0 mlxlogscore=840 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2501170000 definitions=main-2502120066 X-Spam-Status: No, score=-14.2 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_NONE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org So inline-asm is known not to trap BUT it can have undefined behavior if made executed speculatively. This fixes the loop invariant pass to treat it similarly as trapping cases. If the inline-asm could be executed always, then it will be pulled out of the loop; otherwise it will be kept inside the loop. Bootstrapped and tested on x86_64-linux-gnu. gcc/ChangeLog: * loop-invariant.cc (find_invariant_insn): Treat inline-asm similar to trapping instruction and only move them if always executed. Signed-off-by: Andrew Pinski --- gcc/loop-invariant.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/loop-invariant.cc b/gcc/loop-invariant.cc index bcb52bb9c76..79a4c39dfb0 100644 --- a/gcc/loop-invariant.cc +++ b/gcc/loop-invariant.cc @@ -1123,6 +1123,11 @@ find_invariant_insn (rtx_insn *insn, bool always_reached, bool always_executed) if (may_trap_or_fault_p (PATTERN (insn)) && !always_reached) return; + /* inline-asm that is not always executed cannot be moved + as it might trap. */ + if (!always_reached && asm_noperands (PATTERN (insn)) >= 0) + return; + depends_on = BITMAP_ALLOC (NULL); if (!check_dependencies (insn, depends_on)) {