From patchwork Fri Mar 8 17:22:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Faust X-Patchwork-Id: 86986 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 23263385E02F for ; Fri, 8 Mar 2024 17:21:50 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id A24463858D33 for ; Fri, 8 Mar 2024 17:21:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A24463858D33 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org A24463858D33 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1709918483; cv=pass; b=VrCBF9RUTihFghWhTpeA63+rWKfe3QYCY0SRxXVpreErEWSLbEbFFU+sOVWnuyVIQH5Ww4y51f+RjLe4Q6PrfHOfhW2llz6Ewt6Z+yzUM5JgG67Mx2WQ/56i7PiUvbjpRP77zvGFX8/O6zkGo/zaNk1OXkCYACY/2aTP+9E44cs= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1709918483; c=relaxed/simple; bh=UvNzRtkSiY38QZX7S/sjKaoWlw86se5ph1tYnyg9Bns=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=tYyChvHbXKQYtBT2P6bWpRb8er0xOUJ0FYNl4aLSRSTtXCKdEsooF0SNIzYLUVmcGMaj4lSjwbbCqf95pRKG6dGLtiQkLKhJ/703w570jt3GnWsIbs9k9+YjjwGVpG31D+vqkEXIW0FO1WVQyW2DqD5mhRvp9W2r8AhVybi5vXY= ARC-Authentication-Results: i=2; server2.sourceware.org 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 428DTZNZ013833 for ; Fri, 8 Mar 2024 17:21:20 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : content-transfer-encoding : content-type : mime-version; s=corp-2023-11-20; bh=hc3Anr12l+hLprW4t8CrIuN/wORwHYFcvPlTViYyiO0=; b=c5jgLNdl4yv30Vh3LE8u8G0dadfGgsKu91TwdvbkOYDft+A9l45LxIgpTcaS5uM4R++F w2QxEIsn4DrEFYkCawiI0e059j6SL4U4M3uJZgBP6x1RwJHLh8qFzTq7dI+pGocxANpm DUuZII/Xb5/18hVL0Cbr+lnv9jT8VQdSOthe5Duxwrnpgi1I2onYaKecFiW49Gogm0m+ 7Fezti3I9/YIHPt44uNqB4wtbxa2f+il+5LZ2OkPXppCzp9gU7Ar6TxvIkc1Di6ntbmi weqAYevApPoDMFHxG/9dsP8dYJ+6p2AjJ1uEDDIa+ZEdUR79MJr+3LEaGKwqlmPAUrsx +w== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3wkvnv6f73-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 08 Mar 2024 17:21:20 +0000 Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 428G3ZWt016033 for ; Fri, 8 Mar 2024 17:21:19 GMT Received: from nam10-bn7-obe.outbound.protection.outlook.com (mail-bn7nam10lp2100.outbound.protection.outlook.com [104.47.70.100]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3wktjd4gsc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 08 Mar 2024 17:21:19 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=O49ibvJebHLP5TKAjxO8JAHWqmXi+LPVot6qiwN5QfDnbi/zwgkm5Dmp6h/19CHdcDWHRP9m+hN2IVc/oqT3Aepxc0qaemVj0ODwKJJ47vVn4ib478QWlV+6ViroABUNj5+ynHAeBJLG92M2B3Mo2mqlUQp8y1W4cMPUv9R0nMbH54794Gg+dJq2k5UpzMfSzXTC2d8rQso8RjxuL/y8qoSlmmrCywubSEKSPaYctjweSrIIXPCOD3Ai038R1EVna2VhmicdrM7SHl0fOTmt4hMTkjat2bNpt277LvHFaRmUZd0nII6/f6oJ94fPJzTNm47Cw7T5GICtU0tK+8Xiug== 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=hc3Anr12l+hLprW4t8CrIuN/wORwHYFcvPlTViYyiO0=; b=UsGzqGWOLDuzBMrgTjc32Ur8qqUsD1GGpCr3HFhW/SirkHeUP8MHqE08zz6MCLcEPRLHor4Dr3Ui2F3joZlIl4s6X/eWnRdD//zJEPISaDwpnfrCBOHbBSDFjw7QYNT68uyctdKqCvgJyCp2dLtg6gFLdchjc1JcuQS5iZrprn+VxzDq/cW3fu0kzXd/19psMx6QaDgjhWiVgGw7ux56I2uHg5m6IyQRNwqACOn1awXvaG7Svy8+4gozXRKNvoB8KDo2WXrKhOb1eeyDpRs/GhJatHKOUug6NdEUUrEaksJTfl0ZT4jAaifYtFSwmH8ExytBCLjweJpS69r0lL5T2Q== 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=hc3Anr12l+hLprW4t8CrIuN/wORwHYFcvPlTViYyiO0=; b=qnAOOBmapkORVh28gzE83v/oWpAF2rChm5W4fQI2z3gmf3Shv6VzQ7S6N2Q6e+v/hz9vWCtgOtpWqIaHtROMVIRPiNbVq2wg+nB+WIhch7Sx4a6J7Ztf3G6dtDi7sJ4YYgpPmewOKdX6OAJCbKITKYh+84eCaEDTpl8WKXAXocY= Received: from DS0PR10MB7953.namprd10.prod.outlook.com (2603:10b6:8:1a1::22) by CH3PR10MB7458.namprd10.prod.outlook.com (2603:10b6:610:15a::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7339.39; Fri, 8 Mar 2024 17:21:17 +0000 Received: from DS0PR10MB7953.namprd10.prod.outlook.com ([fe80::c0b9:6482:3e36:a112]) by DS0PR10MB7953.namprd10.prod.outlook.com ([fe80::c0b9:6482:3e36:a112%3]) with mapi id 15.20.7362.019; Fri, 8 Mar 2024 17:21:17 +0000 From: David Faust To: gcc-patches@gcc.gnu.org Cc: jose.marchesi@oracle.com Subject: [PATCH v2] bpf: add size threshold for inlining mem builtins Date: Fri, 8 Mar 2024 09:22:01 -0800 Message-ID: <20240308172201.33853-1-david.faust@oracle.com> X-Mailer: git-send-email 2.43.0 X-ClientProxiedBy: MWH0EPF00056D03.namprd21.prod.outlook.com (2603:10b6:30f:fff2:0:1:0:d) To DS0PR10MB7953.namprd10.prod.outlook.com (2603:10b6:8:1a1::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR10MB7953:EE_|CH3PR10MB7458:EE_ X-MS-Office365-Filtering-Correlation-Id: 7d1f890f-7103-4e40-7c7d-08dc3f9429f3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Y9p9kzh5oF57HKlvwVh27l51cn1kIOCOjRQHTCZiUti3w9ztUy0R6/80osv1Nm1L5lr8oSxKTVWX2QvfnN+jpCDtNEoq6gqSvVSU4d2g8HjpjBUMlNWDrSop7fSG62E9GUdPETfCT6wUqoOHfE411D/qKlltdSeFB52c/FTBvBWBYApwzLhRbqINqYQ6j8yvCz4FWSqYB2m5GkzCuq/wqDEQLUt2fq0tilX53eKi6HaH2HsEw0t081LhpWG3DUSNtoAVORm4UsMe1ufgfsNA6vooMjFw9gny/2/vsGkztq2KgOyeK6WW26/4NVtObOWEyT34LE3SF1EyblBCjI/xFK95XVdnJcMeiXo5UMfIIgq0mXirzk5XLOYwqFYpCClEeb3Cvo0O5vgCvk9h+VafRT6fnJoYT03RQjNRScOdwon8cBsYOcWSbJnHctm11/gfxii0ALqRHcnfAI1jJyw/tSoOW9jitMOhGMl/O9gQR38WeXupVDkxzOjtyIldKWsE4eQm11isO598tVF3nbA/mAuC50lpM0504E0edYcXQMncHrTRenNmw7DXhH7D4zRA+RX6ZksHcQOdD9KMx1G6a4yOT+SC4DLxCQD4AkMCwb6A2zdx8wKoCwol5WJFTXL+ X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DS0PR10MB7953.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(1800799015)(376005); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: nQpobDsdihOWX2vWDNQVFltQQ81qNcEwa9q9QDsIcjFXHKlKUGglDDPa75m3li0tPhQAM/EBqwTHHNQQcq6IjQHFq3R447vfxDCLvfpuCoZG5u5l/ZVZBbXJclx7QjbNUrLMRZ0B7k8eniMGt2F62R8b/7miVM7w4MB/h5l1akWvswjuquqFSik6WpWVUQPVS2tqijtN0gkj90oHECzDop8D9u/5xGE/P4H40zjNjEw+W7l8/hGJTnNWS5g7W9AIjnXeyZedIK6yQcjNJ44oWX+rfqBIPzf8ct98EOyxe5dgVLnLCiDJ8jvEFDcF7KYJyXCHkj3xGv0ZHlVICFYHj0WdIUoupC3I+Ab8WnDlGH2CaeWXobuA89KpUv94yHSdFZxiYIS868VTjjB4WTlgG3U4AGyfnK7MEDTMzIl924vh/9C7t10wX2ZJfKhiyxD7oP27L1FoGvQaIZNO8B+CDj+al87u+Rtji48AYfAnIApB2ieKSE3/aqLOpf+dMRwfAbzwYHtCnCl1m5R6gD78e1bVC0L36PIl5dHz42jIzUZuxYpBe33Z5L4F0fvmCmyDvf3kkOd6IMr0BJDGFd4ncRJ5HnSDMz9h6jE5u0UmiMfr7NU8gFcUY3jKawvP/d6vc+p5v8tKrs74jeitS5o0cFBRJXUUc+ArsJGvSUTTOIQBY11l00xTErM9gUv+LE2NohKQJ8jahl8/VOSmAfShWUm/gGQVGncIeDSe+fFChHtX909OxuFZ+vzfN9Vg8fcACruvffd5K8Cz68Yk5J2KahSkUm7eKLPIWXdHFMQzHaLWdVPfnutNXmbx0tIq9mjoiijZDOa+FGX3NwGJoOhFJ1FWxSYH41RAaIAHu67+/OW3HDpHVSTnovhE7GRW8cJTk1AlTL81Jgd1hjuPKXODXl2qjbVBX+yQMHqeB2QgcRKJcgCEjcFDft38jXvN14Syjw0qhTUHHCaRXsRJDNvvdLoR/eQILUq47nIPbx+Oka2R74hhutmqyaQ93N8yZeVNNBKY81w/fP9ZnwwtpCtqh2NJybhpy6K0gDn2eJzOyrbQ+4BrLCVj+CrtBqejQ9xMMsyn1ESA8lqDg0ag1nYcJRX57DNuOGApmdnN9Y4WBdwVlRX+ZoxTAElNPEdT826x7vY5wbaHqcVFCChri6yOzXpZ/a4w+vi4T/rLMsvdtdt2Lr328ORnxIw9WgAIAxGGIx84tnDJt58ZwL6zkgIb2Nj+sEdKW4sK2FHDvCwXvTo8CrUmNhwRCivd1H76NZbGdCrg0M2oIhhW2An83vy5/VlE8nfMYhbAa9m29vaXUNf92zziD4R20SgdiIvebw56bJFDaPfXADzzSyi9MD3NN3FkEpz+kguXwX4VRfaAAVvD1JJqDGHf4Ty+uqjOvtYIcxhCUO6olJ0QxlJbQnYarfMkWJ95mvDMCaMdbrERcYb+JNhuOEQGhbUJA9P+H2k0C3izQF/BunjneLyCfO/yY79pz/La73k/VGSXpsh9Qlgr0Hp5d3RW9XdnU6hMR84QZG+3+leAGRlrh85KQmcH6l5Dn6Y3aowYX33TsM3VwDfMco5Ys7Dn+Prx+LmuFMzhyu9PH7gPsSrS7LJQ6esSHg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: MWpUE0Ks22kT7EJ8ARGWQ90hJk4/45OhNIFA1Ot5I5d3wOekaojQoZbIsf5c4qR5j5P/bMLW1VK1XcqC/RAYjWEdnvw6NJt6hVQe1t1+KGESBXAo2cH/3oX0LwwuZBJyhDPnnr8CLBRSaoIVYa8iiL/70KBJftHxjITet/AZcap9mrR0fuSmcZGaKttq36Hx9CfE94lGL4QZpaKW6BfMoYBfiheDqxi22WW4h0OrQPTISy/41GlPHg+bt0iGfcVOMkX98q2lZn8T1bMVCzufD/Bo5tl1D2zKkGHjWLOPjI8FNX7xsaGM7+tj5z36bDhn1vL4gJOgFxv6eOKAwKviMmkSpkRf5Vqrm1Jr82liPpd9EgVmSmnOfMYa6Q1VhRW6wzAJjlqua86xUjNw3QTqvoXDR2Q9QH3NKxcDkc4hUwzSMp3gQsE4oeDH9VGIKm4QDOuLAQ5aGTBXpsLsIDLs8oAioGYODGTNxz1q19R2oXpNhNzIRJkc3Bg1ORhiPVmYnz61uFB8iTQEN5PRfVPOHs4J9WzeW5RuhjfnETdKRhboVh+r5ddTs8BwVg7Vqi3SH+v4cD0LKXt4X5Ec8vghQcrVdi8Au5DHOPHrIJDcTo0= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7d1f890f-7103-4e40-7c7d-08dc3f9429f3 X-MS-Exchange-CrossTenant-AuthSource: DS0PR10MB7953.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Mar 2024 17:21:17.2611 (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: VblXvTKIhsiYWwwC8vR+cpBPKn+t5oO6hGPm6ZeDL8Lf4BAOtCc9XsB8pwdP4vKEPoo5Jo8eMke2UNplsY9Irw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7458 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-08_08,2024-03-06_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 adultscore=0 mlxlogscore=999 suspectscore=0 spamscore=0 malwarescore=0 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311290000 definitions=main-2403080138 X-Proofpoint-ORIG-GUID: Xov469uOU4yPpSeFYeGY_4AnGPiVTJhi X-Proofpoint-GUID: Xov469uOU4yPpSeFYeGY_4AnGPiVTJhi X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, 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 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 [Changes from v1: - Error if threshold is exceeded instead of silently emitting libcall - Update test accordingly - Expand documentation to explain this behavior ] BPF cannot fall back on library calls to implement memmove, memcpy and memset, so we attempt to expand these inline always if possible. However, this inline expansion was being attempted even for excessively large operations, which could result in gcc consuming huge amounts of memory and hanging. Add a size threshold in the BPF backend below which to always expand these operations inline, and introduce an option -minline-memops-threshold= to control the threshold. Defaults to 1024 bytes. gcc/ * config/bpf/bpf.cc (bpf_expand_cpymem, bpf_expand_setmem): Do not attempt inline expansion if size is above threshold. * config/bpf/bpf.opt (-minline-memops-threshold): New option. * doc/invoke.texi (eBPF Options) <-minline-memops-threshold>: Document. gcc/testsuite/ * gcc.target/bpf/inline-memops-threshold-1.c: New test. * gcc.target/bpf/inline-memops-threshold-2.c: New test. --- gcc/config/bpf/bpf.cc | 26 ++++++++++++++++++- gcc/config/bpf/bpf.opt | 4 +++ gcc/doc/invoke.texi | 11 +++++++- .../bpf/inline-memops-threshold-1.c | 15 +++++++++++ .../bpf/inline-memops-threshold-2.c | 11 ++++++++ 5 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.target/bpf/inline-memops-threshold-1.c create mode 100644 gcc/testsuite/gcc.target/bpf/inline-memops-threshold-2.c diff --git a/gcc/config/bpf/bpf.cc b/gcc/config/bpf/bpf.cc index 0e33f4347ba..8365cd9fcb1 100644 --- a/gcc/config/bpf/bpf.cc +++ b/gcc/config/bpf/bpf.cc @@ -1244,9 +1244,9 @@ bool bpf_expand_cpymem (rtx *operands, bool is_move) { /* Size must be constant for this expansion to work. */ + const char *name = is_move ? "memmove" : "memcpy"; if (!CONST_INT_P (operands[2])) { - const char *name = is_move ? "memmove" : "memcpy"; if (flag_building_libgcc) warning (0, "could not inline call to %<__builtin_%s%>: " "size must be constant", name); @@ -1275,6 +1275,18 @@ bpf_expand_cpymem (rtx *operands, bool is_move) gcc_unreachable (); } + /* For sizes above threshold, always use a libcall. */ + if (size_bytes > (unsigned HOST_WIDE_INT) bpf_inline_memops_threshold) + { + if (flag_building_libgcc) + warning (0, "could not inline call to %<__builtin_%s%>: " + "too many bytes, use -minline-memops-threshold", name); + else + error ("could not inline call to %<__builtin_%s%>: " + "too many bytes, use -minline-memops-threshold", name); + return false; + } + unsigned iters = size_bytes >> ceil_log2 (align); unsigned remainder = size_bytes & (align - 1); @@ -1347,6 +1359,18 @@ bpf_expand_setmem (rtx *operands) gcc_unreachable (); } + /* For sizes above threshold, always use a libcall. */ + if (size_bytes > (unsigned HOST_WIDE_INT) bpf_inline_memops_threshold) + { + if (flag_building_libgcc) + warning (0, "could not inline call to %<__builtin_memset%>: " + "too many bytes, use -minline-memops-threshold"); + else + error ("could not inline call to %<__builtin_memset%>: " + "too many bytes, use -minline-memops-threshold"); + return false; + } + unsigned iters = size_bytes >> ceil_log2 (align); unsigned remainder = size_bytes & (align - 1); unsigned inc = GET_MODE_SIZE (mode); diff --git a/gcc/config/bpf/bpf.opt b/gcc/config/bpf/bpf.opt index acfddebdad7..541ebe4dfc4 100644 --- a/gcc/config/bpf/bpf.opt +++ b/gcc/config/bpf/bpf.opt @@ -108,3 +108,7 @@ Enum(asm_dialect) String(normal) Value(ASM_NORMAL) EnumValue Enum(asm_dialect) String(pseudoc) Value(ASM_PSEUDOC) + +minline-memops-threshold= +Target RejectNegative Joined UInteger Var(bpf_inline_memops_threshold) Init(1024) +-minline-memops-threshold= Maximum size of memset/memmove/memcpy to inline, larger sizes will use a library call. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index c0d604a2c5c..85c938d4a14 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -971,7 +971,7 @@ Objective-C and Objective-C++ Dialects}. @gccoptlist{-mbig-endian -mlittle-endian -mframe-limit=@var{bytes} -mxbpf -mco-re -mno-co-re -mjmpext -mjmp32 -malu32 -mv3-atomics -mbswap -msdiv -msmov -mcpu=@var{version} --masm=@var{dialect}} +-masm=@var{dialect} -minline-memops-threshold=@var{bytes}} @emph{FR30 Options} @gccoptlist{-msmall-model -mno-lsim} @@ -25701,6 +25701,15 @@ Outputs pseudo-c assembly dialect. @end table +@opindex -minline-memops-threshold +@item -minline-memops-threshold=@var{bytes} +Specifies a size threshold in bytes at or below which memmove, memcpy +and memset shall always be expanded inline. Operations dealing with +sizes larger than this threshold would have to be be implemented using +a library call instead of being expanded inline, but since BPF doesn't +allow libcalls, exceeding this threshold results in a compile-time +error. The default is @samp{1024} bytes. + @end table @node FR30 Options diff --git a/gcc/testsuite/gcc.target/bpf/inline-memops-threshold-1.c b/gcc/testsuite/gcc.target/bpf/inline-memops-threshold-1.c new file mode 100644 index 00000000000..c2ba4db5b7b --- /dev/null +++ b/gcc/testsuite/gcc.target/bpf/inline-memops-threshold-1.c @@ -0,0 +1,15 @@ + +/* { dg-do compile } */ +/* { dg-options "-O2" "-minline-memops-threshold=256"} */ + +char buf[512]; + +void +mov_small (void) +{ + __builtin_memmove (buf, buf + 2, 255); +} + +/* { dg-final { scan-assembler-not "call" } } */ +/* { dg-final { scan-assembler "ldxb" } } */ +/* { dg-final { scan-assembler "stxb" } } */ diff --git a/gcc/testsuite/gcc.target/bpf/inline-memops-threshold-2.c b/gcc/testsuite/gcc.target/bpf/inline-memops-threshold-2.c new file mode 100644 index 00000000000..50910483890 --- /dev/null +++ b/gcc/testsuite/gcc.target/bpf/inline-memops-threshold-2.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -minline-memops-threshold=256" } */ + +char buf[512]; + +void +mov_big (void) +{ + __builtin_memmove (buf, buf + 12, 354); /* { dg-error "too many bytes" } */ +} +