From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 766CE385841C for ; Tue, 14 Feb 2023 19:52:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 766CE385841C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 31EJOf5V009755 for ; Tue, 14 Feb 2023 19:52:04 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : subject : date : message-id : content-transfer-encoding : content-type : mime-version; s=corp-2022-7-12; bh=MbvDOs8g7Y1p3w9I39cjgckAJw1wPZuTR21YreYAjSs=; b=OHpTc9pDqg7MAOuj1wQ4vdbuvy/DX183ZBINtyu9nd2pI7B2oX/Q8rKX75MHFiOyASKP QgVO2Y+EOURoeTpnuJVneapxDoyZNNslASoPLWAdJso8ZBnb9ekAIbZX83SgtRhgzWog ftqfQLxDKsvm2RQuWhx3s+4XS+ZYhCnIRO39yK+W1XtnktiRktDi8IKG1tKbqZ0V8qMs 9s7+GSSRoj6GBDkvYLen1NrGLRKCc8tlIh9xPgK7kykeNhHAwLWsVWfEgGiCySQoh1M6 gyEc3/LzeILFtNLdMyPVt/lxZgQZWJDRzdko/0fAVYrQqzg9Ra7gBgV+tB15JHf6PVrL xA== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3np3jtxcxh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 14 Feb 2023 19:52:03 +0000 Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 31EIHx13003713 for ; Tue, 14 Feb 2023 19:52:02 GMT Received: from nam04-mw2-obe.outbound.protection.outlook.com (mail-mw2nam04lp2168.outbound.protection.outlook.com [104.47.73.168]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3np1f6jnsa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 14 Feb 2023 19:52:02 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AnCgwCEDgkpqj4StfvRRdfJ+DQY1HROodxuDl0kjiTZ9eeaJQW3esNcSo6etd6xu36iGGiC3n2T+Ks8Ijb3hogXjRM2vIcWcsXoci74EpOGHdjqqRUmBZ1yKpQEKlx6y+XLA/ohyggzOC5UkP9+SbRSDEWqgYtuEdM3zTniWd+w4i1p+YTN5PPpgirtuNlpdFP3aAepf9n3WJ3Iy/pORLz2y7VLIB3qMS0fLIurEKEeN6Wrr6Y+S352PQ3UdM1DlC2tkvt+W8O5e+J3ZWLZXtJnh0vYEIAyii/Rz+Ib0x0LECgA4yUoXZQIu5kUITSKQR6lkLQVXxGgZmuVc83Tegg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=MbvDOs8g7Y1p3w9I39cjgckAJw1wPZuTR21YreYAjSs=; b=Y3K9W1smWDyekm1WS7lxd0rGHizX+ImFSh7wM5RABjB92ibrtSBpdEM+k6/NDS238D82sU0oOZp2GJn437+7CJPIB4DMEcjYIrmtazkJP/dvvhu54Zm6LNKBeWECe+fYxX/OGnFlifBiZmfo2W3SUhHLpjFBlUULCPAH0eRniEJIp0RF7FhwZeW1w3dKQL54ek//UBD4+KvxoeZVE5GGxsYx3HeJ9ZsimZ0lgnjvNLjZPdBJT+J7T1i3pjt06AclhtU9uBNLN/8aLpnDUeyu1BZK5d3FWl85D9KBPUeqKTr6f9CTjtpKtbilwI0tYaSJ2qnb1p8omUBOiDncSdil6w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MbvDOs8g7Y1p3w9I39cjgckAJw1wPZuTR21YreYAjSs=; b=UWj6TaGBsHB1MBUjkxq+/k8+dgF4NswYqKzwC9Bypj+fUrfNWO2SrJoBT5gFo0I+/QrjVtL8WcTy9X6jNO32SFUsK6cA8lEbD3HxZ+NMSEopacHx/TEAUZkTwl2H8PH8NZYtrVinG2skA10MprWqIMBJMHcqhqaYFSCJay9FszU= Received: from MN2PR10MB3213.namprd10.prod.outlook.com (2603:10b6:208:131::33) by PH7PR10MB5815.namprd10.prod.outlook.com (2603:10b6:510:126::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6111.10; Tue, 14 Feb 2023 19:52:00 +0000 Received: from MN2PR10MB3213.namprd10.prod.outlook.com ([fe80::13a5:8183:f0c1:be7d]) by MN2PR10MB3213.namprd10.prod.outlook.com ([fe80::13a5:8183:f0c1:be7d%4]) with mapi id 15.20.6086.019; Tue, 14 Feb 2023 19:51:59 +0000 From: David Faust To: gcc-patches@gcc.gnu.org Subject: [PATCH] bpf: fix memory constraint of ldx/stx instructions [PR108790] Date: Tue, 14 Feb 2023 11:51:53 -0800 Message-Id: <20230214195153.8445-1-david.faust@oracle.com> X-Mailer: git-send-email 2.39.1 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: BYAPR08CA0003.namprd08.prod.outlook.com (2603:10b6:a03:100::16) To MN2PR10MB3213.namprd10.prod.outlook.com (2603:10b6:208:131::33) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MN2PR10MB3213:EE_|PH7PR10MB5815:EE_ X-MS-Office365-Filtering-Correlation-Id: ede25fef-53d9-46bf-3578-08db0ec4ef7f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: jkJehL3+auIMrxOfGRW+BZFUqN7eNXRvUqy61UtnMMKw/IOnv2jMEkGJ7GiFLze5XXmCsBy2kDTpI2NmEhhcZW0NzEMs4xEjhWyovFgJOIw6pjm94LpsNxTaHMedvysoYNTYl6VXWhfwh2jQ7hN/jA6sVnqf9hcU8nwzRZg003mDiARs8Ct5cs/JlAUEkx1TEsLgnNkpgnBfvC0MQz1GN4NzJDIkgSASNAqrIzNJIx4ePJGl4hMTv2RIGHdITGv/IepfJcPEQyczauTc2318vtmF+pNfe3XfthcIz4y81SrSy59sGs94aMQNgYMmJX/pjEXk6Z14fOg+oNdwPh//QguhJREWS9aKglg7sd7Gg0u/N/riOSVdsSK4rb6ZysPNsxcnoj7iS2HROQO8qNEb2KlrQvcDR95lNxxuMuALNLJY5qJgy1+H/Z0OotXBKldvRCIE58H7KBqjDrHGv+TwS5CAXnRb0mOKZz8YBsBOBOIz+mb9xLHs/04sAkM9yYomt9SkgvVergXroQLaSmsqClac2KQMow9mt7snOh46dQdiVASHNMMJP7H8MsyqDWX1Is7vJOwYqULBBsvajlRMbJreJlcI1xo2jOB/GOvmO3+6lZcsPo8eBtrN+OOsiNMs X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR10MB3213.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(136003)(366004)(346002)(39860400002)(396003)(376002)(451199018)(2616005)(6486002)(84970400001)(36756003)(6506007)(6666004)(6512007)(83380400001)(478600001)(316002)(186003)(1076003)(26005)(6916009)(38100700002)(66946007)(66556008)(66476007)(41300700001)(5660300002)(44832011)(8676002)(86362001)(2906002)(8936002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?SfCXLaQgeVCUCrThvavDurGgvtdiWPaKYYSNJVgOILbbAq1euzspqT3m0X50?= =?us-ascii?Q?t+a2OvOWpViBew30K2m5LHTJnNQcxtq4+Aqp0ynPNogt2NqudEDXjwdzJ4tg?= =?us-ascii?Q?ODRlTJ+VrMI6TPS1WNHjKMm29qWmQ2LlXfA31k8d4lzn5FOlgd7bR7OgC3tc?= =?us-ascii?Q?wp70wi99gjRyWnOrBXPsngeH46qWYE0ijyjlwU2Suty0wQ+rjnT2wYzyDOQA?= =?us-ascii?Q?3IPDFMqIhgT2u2bytVe749hi1XF7YoaECRMMg6sZL/dDg99TgZw0EvGo8LGS?= =?us-ascii?Q?JgMCW6rgN2ClXUtd2GMIqpzB4DzAeJudf5Ng2pZNEG+VIQkI1PrHAeOoF6Dg?= =?us-ascii?Q?6AC3N53mQSAv6NLpqxls2nvICOeRMbFmS8nlmqkO6O38w1iarQ/rPtpNJqcK?= =?us-ascii?Q?qUw2lFDmWfyqsOu3Cp+dBPjjnWu2gRL3QOaffIDWxf7f1ij7SnYjMnaRoONx?= =?us-ascii?Q?gzirestFbYLtRSYVzDL6ek2BtmNKfLQJ5Ex2UZzYVfpJ3F3fFUSoGhYgKB1B?= =?us-ascii?Q?udZuHKL+wmHBCk48wxByGbLkTY11xzcu6vUhlfhX2Tb1vEASZE4kRmbmukVt?= =?us-ascii?Q?qheZv342ZmRM+hbS9fNMVYyOMcDZcpUFSpz5s0/2THf6Hz8jGiWJpr6OrY9h?= =?us-ascii?Q?yllt4tJUdyZHWl9yHCwyHIZckbrA3K38be0wIPe45ClmRYtsyKaATvkJgoYF?= =?us-ascii?Q?HzsZhsNADtzPdrds+7YcxnxEQ0UsWX6RSoZkbBUyiZ86+WryXzj3TJKQroqq?= =?us-ascii?Q?oTn2rIPPPyKZZ0PW/xtuwR7L2F56ufapjnDRTri48DygHB0ewb1X/x61oepj?= =?us-ascii?Q?9BAZZTUd2cTmKa3sdbCpLzfCRsKZcFrulQ3PcLICGm25r3DL12DMMjxX9sOc?= =?us-ascii?Q?pJ3gmnPTy5B31yzWZXSgIWeUu5GLkucM3My2R5c2PTUEDJJYYtWmhMx8LmAU?= =?us-ascii?Q?AboYMay8YnIai7w8jnK3xENV1DuB+yz+mp6GgoFgwCrX2G8wfsQkHAhnVQ3n?= =?us-ascii?Q?3GluLwrzLhKgJ1PrpVT5N9cJ5xW94COI1RHUNG9xEpTisb1qy4SjAIS5aovl?= =?us-ascii?Q?vKXg4RhMwG+LqC96aqtoM5I1+94PiPXCM7CktP5fX7/1JA08+VJAYHrzTD4v?= =?us-ascii?Q?CmxFZLTse94c0ksbTEWDA0zxDGl985IrfBdzjP7TjDBuB43cRJr1e6N/DSdb?= =?us-ascii?Q?PeaEMHsaZjAWfwEfVe/ZWBu/QJj4XJwDtKDsHLphPH8hxNVV0aslI7Wsl5lK?= =?us-ascii?Q?Qn0SYax/HP45bYb4vlWLbD5ALg7oo2zGsw8SQwN3CP+3eUMAo9XYoHkR/aeb?= =?us-ascii?Q?KtVV2EUwrpeHDs6Ps2QBgtWA/gFL6/WwJFnRrCHnBf7QdalHHdQwv/MwzNnd?= =?us-ascii?Q?Hssk3Wt1gX5ROoCsFJ3oEa25b7oxLHyKMUY4weNtCOQf6XNQdOzNdt0jN/Ww?= =?us-ascii?Q?qYsSmU2rSuzB4QpkkKQdd17lBMt4nMswcs1RXhskpXrZu188zi+crVowJ6ll?= =?us-ascii?Q?ao/A/T0YbLlE9viNH0yHyzwnmwXbvHqDmvSlHIDz1879JZZU9Et0NYjNuZnA?= =?us-ascii?Q?Zcm4JLiPxLxxmCi83Gy7m/FJ6Sy20p3B4ja5ZK7z?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: PqvDTFAjJHCHSdHVMGvuIZOLf8kYDlaqYSPUd4SGoo/OG22YDY6hjavzJ/zv+ZEQQISYik5R5BoQYNYLvAUGtz1wGBBr4jGMVmLUpsahT+GMLSltoXNLy7GI09JYDr1vSn58Z1zLBNOY953oRet3qQ1JXPmck+tkgPH8JIF2dcizqkbBJOJ0uE3V0g8iA7AQ1A2HEwORukH35Lc6M7ggUeS8vcgy06qQpl6NdTZ9BM8x8O3F8k5gv8jYrv42mmbcKxmgyTw+AwAdLB8WSzg+xE8dkXtmNt5+0oOYbrUC2sYtydfEq+g6K9ugkIcQhjZLVXC8vU+DmiRcGZQcgvkOYXWEELbjmoDjFYDIa/R2z07a1T2QhtgpGVxLSf1Tyv2qYw7uhI4UdZ/Sog2m65gFDTsu/OJAteRhPAQpdmfxP1Ucjzk2eHjLrcTWqJT1nw18LEDRToxBvofNV3ojiOdLnXRbwL/xxyZQnMYsYcQrrn0e5xaYVIthJ2F/XPuhWbecO9peVRNVzu1kBkNdOGZh4uQ6FLMIDNDE/Ns8YovmErHRGMzhKuNZwb1TPO3LwyAGjECEO5t3Noa01oZuMMEYuaE50S2ww6QoAZuFOtdxS9o2E5rrAeAX0HwLYhKLMJ31S51ePRh36GP1fsij4pIlEZrB2v3xl5cGvtoZlBmqxoIur8m94d++P3YKB3r09iNw7kva3flUdbSqPpeyWOrNatBqhQYyhqDyARVHf/TQKEilFbERHLhWSY6h1t0/5nAV X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: ede25fef-53d9-46bf-3578-08db0ec4ef7f X-MS-Exchange-CrossTenant-AuthSource: MN2PR10MB3213.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Feb 2023 19:51:59.8933 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: U913k1vQfSXtiIIvWBgXfVY3WbBzlYKRKyehT+fLrko8Go+NQJcj3YFJpkKNTrbp2nrQLLh7xjEJ/b6u3vgl5A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB5815 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.170.22 definitions=2023-02-14_14,2023-02-14_01,2023-02-09_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 mlxscore=0 adultscore=0 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2302140172 X-Proofpoint-ORIG-GUID: lOaTT6sv0ahj3UJ3zqAR0T83PL1Yv4Qu X-Proofpoint-GUID: lOaTT6sv0ahj3UJ3zqAR0T83PL1Yv4Qu X-Spam-Status: No, score=-13.2 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H2,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 List-Id: In some cases where the target memory address for an ldx or stx instruction could be reduced to a constant, GCC could emit a malformed instruction like: ldxdw %r0,0 Rather than the expected form: ldxdw %rX, [%rY + OFFSET] This is due to the constraint allowing a const_int operand, which the output templates do not handle. Fix it by introducing a new memory constraint for the appropriate operands of these instructions, which is identical to 'm' except that it does not accept const_int. Tested with bpf-unknown-none, no known regressions. OK? Thanks. gcc/ PR target/108790 * config/bpf/constraints.md (q): New memory constraint. * config/bpf/bpf.md (zero_extendhidi2): Use it here. (zero_extendqidi2): Likewise. (zero_extendsidi2): Likewise. (*mov): Likewise. gcc/testsuite/ PR target/108790 * gcc.target/bpf/ldxdw.c: New test. --- gcc/config/bpf/bpf.md | 10 +++++----- gcc/config/bpf/constraints.md | 11 +++++++++++ gcc/testsuite/gcc.target/bpf/ldxdw.c | 12 ++++++++++++ 3 files changed, 28 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.target/bpf/ldxdw.c diff --git a/gcc/config/bpf/bpf.md b/gcc/config/bpf/bpf.md index d9af98384ef..f6be0a21234 100644 --- a/gcc/config/bpf/bpf.md +++ b/gcc/config/bpf/bpf.md @@ -242,7 +242,7 @@ (define_insn "xor3" (define_insn "zero_extendhidi2" [(set (match_operand:DI 0 "register_operand" "=r,r,r") - (zero_extend:DI (match_operand:HI 1 "nonimmediate_operand" "0,r,m")))] + (zero_extend:DI (match_operand:HI 1 "nonimmediate_operand" "0,r,q")))] "" "@ and\t%0,0xffff @@ -252,7 +252,7 @@ (define_insn "zero_extendhidi2" (define_insn "zero_extendqidi2" [(set (match_operand:DI 0 "register_operand" "=r,r,r") - (zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "0,r,m")))] + (zero_extend:DI (match_operand:QI 1 "nonimmediate_operand" "0,r,q")))] "" "@ and\t%0,0xff @@ -263,7 +263,7 @@ (define_insn "zero_extendqidi2" (define_insn "zero_extendsidi2" [(set (match_operand:DI 0 "register_operand" "=r,r") (zero_extend:DI - (match_operand:SI 1 "nonimmediate_operand" "r,m")))] + (match_operand:SI 1 "nonimmediate_operand" "r,q")))] "" "@ * return bpf_has_alu32 ? \"mov32\t%0,%1\" : \"mov\t%0,%1\;and\t%0,0xffffffff\"; @@ -302,8 +302,8 @@ (define_expand "mov" }") (define_insn "*mov" - [(set (match_operand:MM 0 "nonimmediate_operand" "=r, r,r,m,m") - (match_operand:MM 1 "mov_src_operand" " m,rI,B,r,I"))] + [(set (match_operand:MM 0 "nonimmediate_operand" "=r, r,r,q,q") + (match_operand:MM 1 "mov_src_operand" " q,rI,B,r,I"))] "" "@ ldx\t%0,%1 diff --git a/gcc/config/bpf/constraints.md b/gcc/config/bpf/constraints.md index c8a65cfcddb..33f9177b8eb 100644 --- a/gcc/config/bpf/constraints.md +++ b/gcc/config/bpf/constraints.md @@ -29,3 +29,14 @@ (define_constraint "B" (define_constraint "S" "A constant call address." (match_code "const,symbol_ref,label_ref,const_int")) + +;; +;; Memory constraints. +;; + +; Just like 'm' but disallows const_int. +; Used for ldx[b,h,w,dw] and stx[b,h,w,dw] instructions. +(define_memory_constraint "q" + "Memory reference which is not a constant integer." + (and (match_code "mem") + (match_test "GET_CODE(XEXP(op, 0)) != CONST_INT"))) diff --git a/gcc/testsuite/gcc.target/bpf/ldxdw.c b/gcc/testsuite/gcc.target/bpf/ldxdw.c new file mode 100644 index 00000000000..0985ea3e6ac --- /dev/null +++ b/gcc/testsuite/gcc.target/bpf/ldxdw.c @@ -0,0 +1,12 @@ +/* Verify that we do not generate a malformed ldxdw instruction + with a constant instead of register + offset. */ + +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +/* { dg-final { scan-assembler-times "ldxdw\t%r.,\\\[%r.+0\\\]" 1 } } */ +/* { dg-final { scan-assembler-not "ldxdw\t%r.,\[0-9\]+" } } */ + +unsigned long long test () { + return *((unsigned long long *) 0x4000); +} -- 2.39.0