From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id 4CC083858D35 for ; Tue, 8 Nov 2022 07:58:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4CC083858D35 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 (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 2A87uuWE007559 for ; Tue, 8 Nov 2022 07:58:14 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : references : date : in-reply-to : message-id : content-type : mime-version; s=corp-2022-7-12; bh=RgpH0HVd9VClgggWjkfMEIFUjVQ8HeIlYdWDKnwaAaI=; b=Ok+PQQISnxgFiwqSkzXvZal5IjPY+WUbUYeKLGFVOBGa0UUVar69Fnsm7mMiPB1lyYHs jGyMk9fRHgRpSuOM5pw5GDvbbATWcwylCYpfb9fR/fSgOnvVayVuIaw7OYcTb5h6Tfmv ftYUAR9MdmwzQTFdpoATFcTnhY72r34nd4WHoeNcs2jyOur4XdG3Y4JzRIZ3s63p3vQQ DnwwMJ6/yKdAm/q7DsBFgNeYdxmj/X2ewdHGaELE2We/m/yHwd9Wa71Xnyn/ncvx4BaG YoYN/1oz4oFZs9+XYeIRr8IP1ghU65y8nLUkWNdgwSlsHd/wYjPm8MQRgREyZXJ250K2 Cw== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3kngmj621u-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 08 Nov 2022 07:58:14 +0000 Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 2A86KKaO025544 for ; Tue, 8 Nov 2022 07:58:14 GMT Received: from nam10-bn7-obe.outbound.protection.outlook.com (mail-bn7nam10lp2109.outbound.protection.outlook.com [104.47.70.109]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3kpcqfp98g-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 08 Nov 2022 07:58:13 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=anqdpeVvZBiHfVpUQQCPfRFyHEm92lSmkia4RJCHiXMokf6/lGco+oGXpY5SLNwZjQYwcBWQE2Ak8x0sMyWoToq+7Z3a+w264LQW+CGnXMtjWVl8xxprMT4jvY7jWx6Igc7hwY3XjI4gUbafUOHmFqhChXJPOb8q2b46xBbP63Dn4eDdD4cmf5CcbK75XxGlNToUtQLF5arIgn5AOBu0wqhYBj/0eEYu7LrFqHnjsX2HI9soqEA3x/TGjbEQAu+fEyO+9cj1/XLhiJgvD5ufRcUls4Wo6Vmo6/sEnEur694adgmHhcXLp7RCmF+FruCo+rW61jcr3Y4pHA4DflGQxQ== 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=RgpH0HVd9VClgggWjkfMEIFUjVQ8HeIlYdWDKnwaAaI=; b=SqXfdKKGFNnIQOteI+4DyiDTQ6XXbVfxT6QkftN6Aynq3rzrUeq9brdt985maE2y26i9zzvRppEUcmuKQINwhQFwppR2qvJj+6uh2qB2ns8BmqtdiIM6CcnsEXOVHUaUhnEDvdDNP4MD8WdCIlYyCCUTWU7XU9KYvNLt7u8G8NVtIVKdLCzeglVmnBpgqWcOXFmBbswrp9p0LWsEJgKnsImY29eUyb7khEu5Ztrgkypt/DY1M0IsKv3yLB7Y503sWdvqLtOa1iOEzWYejOIn6xHPnx2OxR+NEAvz2X/HigI94M643d+PskSPeS+tW9G6HxPRI1phwxoAXLoa6azWwA== 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=RgpH0HVd9VClgggWjkfMEIFUjVQ8HeIlYdWDKnwaAaI=; b=EpCT7yPYIwP39F33eY0F6PwqI3QYO0OOjuZUTzW+vxmiLmaYxPxixxOjUs7SAG68SOn3gxQtC9q6iax2OP34z6CHKbqS4kqz8Zrdm3e8jXqpbmaDlytngiV6X+oZ/+CUA0B+xdxmyBfG2HQMmefgL5gPOEO+JwpyX/TOzNOEQVI= Received: from BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) by BN0PR10MB5351.namprd10.prod.outlook.com (2603:10b6:408:127::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5791.26; Tue, 8 Nov 2022 07:58:12 +0000 Received: from BYAPR10MB2888.namprd10.prod.outlook.com ([fe80::5095:b148:8def:1049]) by BYAPR10MB2888.namprd10.prod.outlook.com ([fe80::5095:b148:8def:1049%5]) with mapi id 15.20.5791.027; Tue, 8 Nov 2022 07:58:11 +0000 From: "Jose E. Marchesi" To: David Faust Cc: gcc-patches@gcc.gnu.org Subject: Re: [PATCH] bpf: Use enum for resolved overloaded builtins References: <20221107224829.12440-1-david.faust@oracle.com> Date: Tue, 08 Nov 2022 09:02:07 +0100 In-Reply-To: <20221107224829.12440-1-david.faust@oracle.com> (David Faust's message of "Mon, 7 Nov 2022 14:48:29 -0800") Message-ID: <871qqd6fi8.fsf@oracle.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Content-Type: text/plain X-ClientProxiedBy: AM0PR04CA0129.eurprd04.prod.outlook.com (2603:10a6:208:55::34) To BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BYAPR10MB2888:EE_|BN0PR10MB5351:EE_ X-MS-Office365-Filtering-Correlation-Id: 87e8dbf8-7d49-4b7d-0346-08dac15efb6e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: d2/KCzMypz8PJVq+LS1fJ1FqxOcPLqRHZfeTS9KNkAfHJuBMChyu1Oeyoo4qNKhFARte/QYewWyEBAJSQB/5zt1ArSsIc+BpKenngdJbgVlnWWsug0ufWU/bj5yzfSD4Fc4qxyD7F+7iug84DbCqB9Nf1Bqxawo2WUsGXMMoF4y1imS17MRmMsC9wnX1Wk3QHGyPOMlCK1R7Lw0AP6t9QK9ntU3BHOlfYEBVZvu3hat06pVqfMjGWErZ0egfkunFKswP0zqvPcKRONhujF5SAuVPwwtdsyWM2sIK8mKLJrOkntMGKCUxA7szbQDUyOtj+mMX86vVDLzS1IVVHCXoxxhlZwTzaiZvy6xLA63iCA8ScC7J0rNVeJECj6dPqCFuIyOcooy5jK4yxEe9jjlcWCzUvPDzpm1z/3o5vk4T9+3/i8hA63OqjTCUyGTqi+kZi8koI3zv66aoNR9OEixykkMbs4gnqZ/5csCORz+K9NPdmKC0I9ex0EO5avhvRSBDOK3h3VExjrQEH17N8tcSGaRTAcdAYVkusssFS2PKy9RrMFNWj4psQyetjbNCsSEH3b301xYL9VCR1Pg1Latz0DEF4qgyP1T+ShXe2RYiTXfgAGrsfYb9XaqIktlT1fOvP+sk/M57Ol4LlNORZc0VFzz/ZwrzirsT4Pxe/HitkvZoJLQDbtBmSZZ5xWRobXpk6JMMXl1ZWdy6l/1vAOqQAQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR10MB2888.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(366004)(396003)(346002)(136003)(39860400002)(376002)(451199015)(5660300002)(6862004)(41300700001)(8936002)(66946007)(66476007)(4326008)(8676002)(66556008)(37006003)(6636002)(36756003)(478600001)(316002)(6486002)(66899015)(6506007)(186003)(26005)(2616005)(6512007)(6666004)(2906002)(86362001)(83380400001)(38100700002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?FXxh71n2gBZNk1V57Ude8XqogHSH3M+toAlPQOH9ZAByUXrIT5QqYYc5jW9m?= =?us-ascii?Q?RpcBHGC1eXa1hkSbpQSkhreZ2ZcfjLM31/JuKy2nyiwV2BtaTgVZnmraSBKc?= =?us-ascii?Q?AZVsqA9RL1+7ZafSfcBEthA4L5yp2XH41yZQHgnGtlO2UpQ8akqE5vNsL4da?= =?us-ascii?Q?k3LLAMzi0syRVN5I2mAfeLwY/AYx0Qao8RVukQJvkzbL1hDCoztorVy1/Smt?= =?us-ascii?Q?2HQAqrOojwzhEEfaHfUP7BF49BorKbrrW4hb9Gl//UPgUigjxq9V4cv94jrB?= =?us-ascii?Q?EMSowh8s2I1ewLFo/p75CK/M9S7eGemHfngAy4CxF2b5FSVplTYcJ3MqQxfm?= =?us-ascii?Q?bGYEGZ/mFAOv4ykkiM27ppby4m4JVUMZqJp7bkgH6HqLMKKrfWUICp5A2bU9?= =?us-ascii?Q?rc/SKYgD+j/htQyxqx413X9YvavcyCnxGnyKF7hPr5hQX7CkblJ54nckXpGz?= =?us-ascii?Q?LdXouQd2W7O0ajHxzF9oZiyySTpg9htxOVCZjtIhQHAVNkPDKnYPbnZ3DpxI?= =?us-ascii?Q?lUIMJoDFGoLjPuScCajdm/IDeT34caffpyqQTwXgQZoM7HuYEKY3sZMujwvB?= =?us-ascii?Q?+eBX5oA/0Ujt0HFPEFPrYhzYiZTyyYzGlPorxNwXZ4uUYZHXhQ78pCATVmp1?= =?us-ascii?Q?K6zldLcVQ6XgOCBpSgAbvtEZXnBM8E8xnRRJmqcmebBDzeYLVHsXt6jfvzoW?= =?us-ascii?Q?XijYZjydC1AM0ffJQ+MmyVHhNX6r6b82104FtISfO2kgxxp/P3xVoemMv5XG?= =?us-ascii?Q?ShPxBIHOifjo5AhCRWZ6D5DFbwQKOR6SAUXIVyLcWXcfH7C5l8XLIiCQRJ0f?= =?us-ascii?Q?8e9xIKM56nrBLGHnZdd1RL1BOT5D5/uiG9iQ/EmYJlpvV5xN5+AOuav0/KWF?= =?us-ascii?Q?WazDhM4q19UET3rvzJiLQjTXpfyhVTp1a3UYOIDKoqU07FWo2+COS6VCO1G7?= =?us-ascii?Q?VrLtHf29fUl0hhZEdnZ/8ZajsvX8R95//zc2626pxscmxAT9blKolLI7Tv9+?= =?us-ascii?Q?Sk+DjqwuaTJzoORfUr536YOpil88ZffzsHsnRaQMGSg9pNI5V4UGlD0L3ryN?= =?us-ascii?Q?ElYG2JhwY6+BQOzKKKmy5hSYQyts1UEWDyNVhPGDDjgYlv17dSmgHm9fASg/?= =?us-ascii?Q?wsIN9oU80xzCOB+5VWzHXA8iHhBBk5qym2J46wPtv6rZ0DWwJNQr6SJhaBSq?= =?us-ascii?Q?Y6qWnFj8nAx5hEiWqJ2GOTqJMFOlr+Y/ioSZEUONdv1pxNOgbvzl9cbW2WFA?= =?us-ascii?Q?WMhI6w/LJjNvluBly7q6UVs7v6Ii2gzCruFLPQFIkYZHzu/dWN1a6p7cHlym?= =?us-ascii?Q?/oOITWOLq1EbrBxkCRxmaazUEOYlO0gQSpqg54djrVctVe1tJb5/bibsEnbj?= =?us-ascii?Q?dB8DY8pe8OnAJg6KMzdOQi0OXH1TUebVenK7v8fWOVxXDjpIh6cLRxoRmh8w?= =?us-ascii?Q?LqMeyIT9CZDdgEtTATwfBbghTgGBcS/uZzE7UlcBF8SJtkY1mvGRuxy7P+Hm?= =?us-ascii?Q?8LIubFtWHwij4oZL3I8Gqr25qSoi9N4qd/O0ldtEHsW77z3vN60jDaCghJ0V?= =?us-ascii?Q?QwxNMieiEVrLT13qXvc48WQxvMlT/e/jdfFKTR4cafeEEl3TllvzFltqq1uA?= =?us-ascii?Q?ZQ=3D=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 87e8dbf8-7d49-4b7d-0346-08dac15efb6e X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB2888.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Nov 2022 07:58:11.9005 (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: xWrzMHblpZF2V1sIWL5/12178X2gzYasjcL+DjbMZk7IUab02vwUo+BVwdfd3bnglihr9z+sHMF36wwFMj1yvTmcIYpPyV8iu8zS7dIMrKc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN0PR10MB5351 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.895,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2022-11-07_11,2022-11-07_02,2022-06-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 adultscore=0 mlxscore=0 suspectscore=0 spamscore=0 malwarescore=0 bulkscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2210170000 definitions=main-2211080043 X-Proofpoint-GUID: J5wcnCib1LOYLmVHutpmzapbOSJCl16J X-Proofpoint-ORIG-GUID: J5wcnCib1LOYLmVHutpmzapbOSJCl16J X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,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: Hi David. > Change several places in the eBPF backend dealing with overloaded > built-in functions to consistently use the enum bpf_builtins type, > rather than variously using integer constants or booleans. The result is > eaiser to read and extend. > > Tested on bpf-unknown-none, no known regressions. > OK to push? OK. Thanks for the patch. > > Thanks. > > gcc/ > > * config/bpf/bpf.cc (struct core_walk_data): Add field `which'... > (bpf_resolve_overloaded_builtin): ... set it here. Use values of enum > bpf_builtins for error checks. > (bpf_core_walk): Use values of enum bpf_builtins. > (bpf_core_newdecl): Likewise. > (bpf_expand_builtin): Likewise. > --- > gcc/config/bpf/bpf.cc | 106 +++++++++++++++++++++++------------------- > 1 file changed, 59 insertions(+), 47 deletions(-) > > diff --git a/gcc/config/bpf/bpf.cc b/gcc/config/bpf/bpf.cc > index fd4003c2bfc..16af2412bf6 100644 > --- a/gcc/config/bpf/bpf.cc > +++ b/gcc/config/bpf/bpf.cc > @@ -1222,7 +1222,7 @@ bpf_expand_builtin (tree exp, rtx target ATTRIBUTE_UNUSED, > return gen_rtx_REG (ops[0].mode, BPF_R0); > } > > - else if (code == -1) > + else if (code == -BPF_BUILTIN_PRESERVE_ACCESS_INDEX) > { > /* A resolved overloaded __builtin_preserve_access_index. */ > tree arg = CALL_EXPR_ARG (exp, 0); > @@ -1249,7 +1249,7 @@ bpf_expand_builtin (tree exp, rtx target ATTRIBUTE_UNUSED, > return expand_normal (arg); > } > > - else if (code == -2) > + else if (code == -BPF_BUILTIN_PRESERVE_FIELD_INFO) > { > /* A resolved overloaded __builtin_preserve_field_info. */ > tree src = CALL_EXPR_ARG (exp, 0); > @@ -1444,28 +1444,37 @@ bpf_core_get_index (const tree node) > __builtin_preserve_access_index. */ > > static tree > -bpf_core_newdecl (tree type, bool is_pai) > +bpf_core_newdecl (tree type, enum bpf_builtins which) > { > tree rettype; > char name[80]; > static unsigned long pai_count = 0; > static unsigned long pfi_count = 0; > > - if (is_pai) > + switch (which) > { > - rettype = build_function_type_list (type, type, NULL); > - int len = snprintf (name, sizeof (name), "%s", "__builtin_pai_"); > - len = snprintf (name + len, sizeof (name) - len, "%lu", pai_count++); > - } > - else > - { > - rettype = build_function_type_list (unsigned_type_node, type, > - unsigned_type_node, NULL); > - int len = snprintf (name, sizeof (name), "%s", "__builtin_pfi_"); > - len = snprintf (name + len, sizeof (name) - len, "%lu", pfi_count++); > + case BPF_BUILTIN_PRESERVE_ACCESS_INDEX: > + { > + rettype = build_function_type_list (type, type, NULL); > + int len = snprintf (name, sizeof (name), "%s", "__builtin_pai_"); > + len = snprintf (name + len, sizeof (name) - len, "%lu", pai_count++); > + } > + break; > + > + case BPF_BUILTIN_PRESERVE_FIELD_INFO: > + { > + rettype = build_function_type_list (unsigned_type_node, type, > + unsigned_type_node, NULL); > + int len = snprintf (name, sizeof (name), "%s", "__builtin_pfi_"); > + len = snprintf (name + len, sizeof (name) - len, "%lu", pfi_count++); > + } > + break; > + > + default: > + gcc_unreachable (); > } > > - return add_builtin_function_ext_scope (name, rettype, is_pai ? -1 : -2, > + return add_builtin_function_ext_scope (name, rettype, -which, > BUILT_IN_MD, NULL, NULL_TREE); > } > > @@ -1492,6 +1501,7 @@ bpf_core_is_maybe_aggregate_access (tree expr) > > struct core_walk_data { > location_t loc; > + enum bpf_builtins which; > tree arg; > }; > > @@ -1501,7 +1511,6 @@ static tree > bpf_core_walk (tree *tp, int *walk_subtrees, void *data) > { > struct core_walk_data *dat = (struct core_walk_data *) data; > - bool is_pai = dat->arg == NULL_TREE; > > /* If this is a type, don't do anything. */ > if (TYPE_P (*tp)) > @@ -1510,19 +1519,21 @@ bpf_core_walk (tree *tp, int *walk_subtrees, void *data) > return NULL_TREE; > } > > - /* Build a new function call to a resolved builtin for the desired operation. > - If this is a preserve_field_info call, pass along the argument to the > - resolved builtin call. */ > - if (bpf_core_is_maybe_aggregate_access (*tp)) > - { > - tree newdecl = bpf_core_newdecl (TREE_TYPE (*tp), is_pai); > - tree newcall; > - if (is_pai) > - newcall = build_call_expr_loc (dat->loc, newdecl, 1, *tp); > - else > - newcall = build_call_expr_loc (dat->loc, newdecl, 2, *tp, dat->arg); > + /* Build a new function call to a type-resolved temporary builtin for the > + desired operation, and pass along args as necessary. */ > + tree newdecl = bpf_core_newdecl (TREE_TYPE (*tp), dat->which); > > - *tp = newcall; > + if (dat->which == BPF_BUILTIN_PRESERVE_ACCESS_INDEX) > + { > + if (bpf_core_is_maybe_aggregate_access (*tp)) > + { > + *tp = build_call_expr_loc (dat->loc, newdecl, 1, *tp); > + *walk_subtrees = 0; > + } > + } > + else > + { > + *tp = build_call_expr_loc (dat->loc, newdecl, 2, *tp, dat->arg); > *walk_subtrees = 0; > } > > @@ -1572,32 +1583,26 @@ bpf_is_valid_preserve_field_info_arg (tree expr) > > /* Implement TARGET_RESOLVE_OVERLOADED_BUILTIN (see gccint manual section > Target Macros::Misc.). > - We use this for the __builtin_preserve_access_index builtin for CO-RE > - support. > + Used for CO-RE support builtins such as __builtin_preserve_access_index > + and __builtin_preserve_field_info. > > FNDECL is the declaration of the builtin, and ARGLIST is the list of > - arguments passed to it, and is really a vec *. > - > - In this case, the 'operation' implemented by the builtin is a no-op; > - the builtin is just a marker. So, the result is simply the argument. */ > + arguments passed to it, and is really a vec *. */ > > static tree > bpf_resolve_overloaded_builtin (location_t loc, tree fndecl, void *arglist) > { > - bool is_pai = DECL_MD_FUNCTION_CODE (fndecl) > - == BPF_BUILTIN_PRESERVE_ACCESS_INDEX; > - bool is_pfi = DECL_MD_FUNCTION_CODE (fndecl) > - == BPF_BUILTIN_PRESERVE_FIELD_INFO; > + enum bpf_builtins which = (enum bpf_builtins) DECL_MD_FUNCTION_CODE (fndecl); > > - if (!is_pai && !is_pfi) > + if (which < BPF_BUILTIN_PRESERVE_ACCESS_INDEX > + || which >= BPF_BUILTIN_MAX) > return NULL_TREE; > > - /* We only expect one argument, but it may be an arbitrarily-complicated > - statement-expression. */ > vec *params = static_cast *> (arglist); > unsigned n_params = params ? params->length() : 0; > > - if ((is_pai && n_params != 1) || (is_pfi && n_params != 2)) > + if (!(which == BPF_BUILTIN_PRESERVE_ACCESS_INDEX && n_params == 1) > + && n_params != 2) > { > error_at (loc, "wrong number of arguments"); > return error_mark_node; > @@ -1605,12 +1610,15 @@ bpf_resolve_overloaded_builtin (location_t loc, tree fndecl, void *arglist) > > tree param = (*params)[0]; > > - /* If not generating BPF_CORE information, preserve_access_index does nothing, > - and simply "resolves to" the argument. */ > - if (!TARGET_BPF_CORE && is_pai) > + /* If not generating BPF_CORE information, preserve_access_index does > + nothing, and simply "resolves to" the argument. */ > + if (which == BPF_BUILTIN_PRESERVE_ACCESS_INDEX && !TARGET_BPF_CORE) > return param; > > - if (is_pfi && !bpf_is_valid_preserve_field_info_arg (param)) > + /* For __builtin_preserve_field_info, enforce that the parameter is exactly a > + field access and not a more complex expression. */ > + else if (which == BPF_BUILTIN_PRESERVE_FIELD_INFO > + && !bpf_is_valid_preserve_field_info_arg (param)) > { > error_at (EXPR_LOC_OR_LOC (param, loc), > "argument is not a field access"); > @@ -1642,7 +1650,11 @@ bpf_resolve_overloaded_builtin (location_t loc, tree fndecl, void *arglist) > > struct core_walk_data data; > data.loc = loc; > - data.arg = is_pai ? NULL_TREE : (*params)[1]; > + data.which = which; > + if (which == BPF_BUILTIN_PRESERVE_ACCESS_INDEX) > + data.arg = NULL_TREE; > + else > + data.arg = (*params)[1]; > > walk_tree (¶m, bpf_core_walk, (void *) &data, NULL);