From patchwork Tue Oct 17 20:47:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alex Coplan X-Patchwork-Id: 154526 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2908:b0:403:3b70:6f57 with SMTP id ib8csp4390188vqb; Tue, 17 Oct 2023 13:48:15 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGt5CdDQVSR53zcb6PPMLbtlqgOkieP2afocYPEcChUVzi9EvrdUGuhyFEJZS4rG5rUc0uQ X-Received: by 2002:a05:6122:a02:b0:49a:9146:ec02 with SMTP id 2-20020a0561220a0200b0049a9146ec02mr4110133vkn.1.1697575695166; Tue, 17 Oct 2023 13:48:15 -0700 (PDT) Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id f1-20020ac859c1000000b0041b77382a1fsi1657437qtf.598.2023.10.17.13.48.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 Oct 2023 13:48:15 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=t+L9klrY; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=t+L9klrY; arc=fail (previous hop failed); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E880D385703D for ; Tue, 17 Oct 2023 20:48:14 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2065.outbound.protection.outlook.com [40.107.241.65]) by sourceware.org (Postfix) with ESMTPS id 3DC41385734F for ; Tue, 17 Oct 2023 20:47:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3DC41385734F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 3DC41385734F Authentication-Results: server2.sourceware.org; arc=fail smtp.remote-ip=40.107.241.65 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1697575669; cv=fail; b=ZJ6CTqdH5LWYFBuShW48Kw1GNRtUAX0buBomvfJpl9X61dgpHDKQYdLU4Rp0r8376Hzy3cJi1TFdl4+DbdMWRghPUZNR4yMJ4mk5C2R1Fe1//rTwUKeZnUY8IVgX3ZrPzHtcjtEfpgRgdpTMWU6SHhR5PdrkyA5DdsPPIhnRiAc= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1697575669; c=relaxed/simple; bh=6hafx5DA+/uPcdk/KEUG9dZHPR2y4QfBYmOQnIlaAWU=; h=DKIM-Signature:DKIM-Signature:Date:From:To:Subject:Message-ID: MIME-Version; b=nkPTGLsbEPA14Qma3Ae8olhQfLor2dDif5lCXO35byndq3iwqxmDVxezn5OJazphO5RRzwQBE39P8LP9lnMHRI2Sfi09lY5lh7fWL3ZVnVmAWPK+DYhGRcmhsyZplPs1e+7dBzJth1vEG1joBLv78qI+RRTQu0UxeqQmnKSoclA= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4Jxm7JkbfzaidDQOA0djyciJUFPjig5Li6qi6njyFaU=; b=t+L9klrYkq3I/caHkz0Y1katBNdvfzflWA1TTjCcppIRMmmPjSExENjUq011+XuQ6w8rBVab/U5lIWpWGlpX2OMS2jmIM2IwKh6H2O/y3Sz8HbZRUgth7QSZYfbYy1yOT8KHND52syxQCf7saDiUPx43v9MaJclV13taSPdCVPQ= Received: from AS9PR06CA0458.eurprd06.prod.outlook.com (2603:10a6:20b:49a::10) by GVXPR08MB10408.eurprd08.prod.outlook.com (2603:10a6:150:149::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6886.36; Tue, 17 Oct 2023 20:47:40 +0000 Received: from AMS0EPF00000198.eurprd05.prod.outlook.com (2603:10a6:20b:49a:cafe::29) by AS9PR06CA0458.outlook.office365.com (2603:10a6:20b:49a::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6886.35 via Frontend Transport; Tue, 17 Oct 2023 20:47:40 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AMS0EPF00000198.mail.protection.outlook.com (10.167.16.244) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6907.20 via Frontend Transport; Tue, 17 Oct 2023 20:47:40 +0000 Received: ("Tessian outbound ab4fc72d2cd4:v211"); Tue, 17 Oct 2023 20:47:40 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: c9eed82c02de991e X-CR-MTA-TID: 64aa7808 Received: from 19c625389070.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 754BCE3A-0D7B-4657-B42E-0E0787BA7D36.1; Tue, 17 Oct 2023 20:47:33 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 19c625389070.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 17 Oct 2023 20:47:33 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GZTCfyBil8utifE2bYSKncTAhW9P8RmLgvHArU4bxKUephfjmXqKwbXM9zTsV3aOmkRhIdwqfGUlmiDH2XjyJTF86lEX7YqYHXfX9upfFLRx3o01pOYPb+k/nbxgcTXOjJ/ASCmCqdbc6oulpapzNiHFJeRjCVuLbp64FPAYYwWDBrxeCl+HtIeYRuQOsx9cMIY5l9J/IWhQ8LPl6i2g25klZc3dRZDAn3K6ip0iRmgFB009dx36s1z4q02Ut/Vtg697MT/RlQbTYMgK+5Yl5PU7NQpYnFuqwtr6xZaKWDKWYLAun8Pw3sLPgYTMsn9biavnua/TJ8jcikQn2i2qfA== 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=4Jxm7JkbfzaidDQOA0djyciJUFPjig5Li6qi6njyFaU=; b=ifkuwxkdEzE6h3ufJmL1A8kqtx+fY/3LMrwNS75Ujz124H0yg2wH5d/pjYl/6g70pMb3ey1Gz2jpx+feFmQRNb2Dla1NGf/cYBtIESiEj/4cBS2unrXc3spJKd2GmA2YkR3KdZgPDIN7MOlk3UWM8Y2ljqkxyvbNbIJ7xL0yrXVQV/JvmY6oO3vpTRFeU4SSJvEUa1DwklhZz6/KvKFhYbCXeUrthTC9AHaBlGYGF6+yD5LYWL79kWgfuJc3s59i43bFVu0ikMBEhu+/hHj+sclkK6K2LhDrup4W1QJ8edMfANECeKUO1gqWX+mmhlaUDGpynRUtlyITqOfEcX1RBQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4Jxm7JkbfzaidDQOA0djyciJUFPjig5Li6qi6njyFaU=; b=t+L9klrYkq3I/caHkz0Y1katBNdvfzflWA1TTjCcppIRMmmPjSExENjUq011+XuQ6w8rBVab/U5lIWpWGlpX2OMS2jmIM2IwKh6H2O/y3Sz8HbZRUgth7QSZYfbYy1yOT8KHND52syxQCf7saDiUPx43v9MaJclV13taSPdCVPQ= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from PAWPR08MB8958.eurprd08.prod.outlook.com (2603:10a6:102:33e::15) by AS4PR08MB7580.eurprd08.prod.outlook.com (2603:10a6:20b:4ff::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6886.36; Tue, 17 Oct 2023 20:47:32 +0000 Received: from PAWPR08MB8958.eurprd08.prod.outlook.com ([fe80::f41:4ae1:dba2:70f4]) by PAWPR08MB8958.eurprd08.prod.outlook.com ([fe80::f41:4ae1:dba2:70f4%6]) with mapi id 15.20.6863.046; Tue, 17 Oct 2023 20:47:32 +0000 Date: Tue, 17 Oct 2023 21:47:30 +0100 From: Alex Coplan To: gcc-patches@gcc.gnu.org Cc: Richard Sandiford Subject: [PATCH 04/11] rtl-ssa: Support inferring uses of mem in change_insns Message-ID: Content-Disposition: inline X-ClientProxiedBy: LO2P265CA0039.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:61::27) To PAWPR08MB8958.eurprd08.prod.outlook.com (2603:10a6:102:33e::15) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAWPR08MB8958:EE_|AS4PR08MB7580:EE_|AMS0EPF00000198:EE_|GVXPR08MB10408:EE_ X-MS-Office365-Filtering-Correlation-Id: 20bad312-1850-4abe-4520-08dbcf524e11 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: lqoj5c5bO40/LZx+REDSnPKjI3N7Lnx+Mamo7FhJf1vD78MSPnEAAYX+7bKmFORJBDyfSJlDA/YZ6R8zWS/thWUUvr/g7FrLIiMdY0P/kO9Mkxy+qkL6IrMZoNlS30GUtjtU5fqLJ8xTLl0Z2tS6sBCIwbsgF95CzweLyr5atMUBpY2Is+78/Bp/pJZs8gS8bCRxaB6aQE7HotNpZNei6Fe7Eqz9LshpYAC1QakMRVBf5s/yyR3bdub8Y/aKOlpOpPLhHDRQsDk65cph2JiYEc1l7rrIZG8uhgungGP8xPgCTph4BqXoBhnPORrWYhOMPOAlbb8br2hxjJl/2/i4/JZ4Zm2/VXOvxxt5iUcJJA03LTsTYYWU/cuWRtxQFvFREFdLDiWFBAcUlKT9qemjTcNsObtcYwabKTjchpM84I/x2WzDLDgHkjPTDeHp3WhUukNqtiZvArg/NyR1dRmwumkxb8mcBhYcrfRcyzthpoV5UW4AQYh9n+n3eDL4spj7khjjpbftWzWacGyPlhp+0PawQj8jkYrzVVrEz4ZeVqJMYKcWoODpBF/dlIEs2JWbSQHsiOqXuI2/V8R/soLtmRWHfHShi6BHYIM+er6ncJY= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAWPR08MB8958.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(346002)(396003)(366004)(136003)(39860400002)(376002)(230922051799003)(64100799003)(451199024)(1800799009)(186009)(316002)(66556008)(66946007)(66476007)(8936002)(8676002)(6916009)(38100700002)(6512007)(478600001)(2616005)(6486002)(44144004)(33964004)(6506007)(83380400001)(4326008)(26005)(235185007)(2906002)(5660300002)(44832011)(86362001)(41300700001)(36756003)(2700100001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4PR08MB7580 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AMS0EPF00000198.eurprd05.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: cf72f80f-4a2f-4c84-1338-08dbcf5248eb X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: s1WbB5sb0Ah1eujDDe3N7fsd7jMTum57ISeY4XjIk2WJ0TM/4Szh0du6V9e89/pd6D9vGo1jaL+D1IzRWIM5pG0O4vg7ZsyE/GrNMzol9dHOMEEGbq5UjtEgbG4n3X+WLzWnUnwgW8Gj3Gs4Um01ZjaAA8294xjBIxnzp1QE98HF9k0dGJdMtY57hDAJxM4OHrXKdRpOLIofKo8Cy8alsEm0t3rPH+1NQOgw5ECc3uUmSBxMdymC62eBgYPE/dJNlJftACx6ldGdThIPyHGMn3ApqFV7GJwCmtXoeYtDiNgu92TBqe65gBrBq3n5vN3dESWyDd+rHrvQ+ppYTWoLYpt2M44ou6sk1YhjKcrxTassfpMnfjUHBnNIftO+z9bJ1b3ljeycNvqo9KFGCHHy32VSPmZiVUaJqPMi4CgCD5M+SsbmEi3V6d4lOt8QllNfsZ8Q4nO8+uEc1dBiV3fWZHxPnlHuVGEDN9SrHO110wAHtJfrwdsJhQV8BsJmMHqsISqNwrWtuDPMuE8WATuBa4SS+eWoINxQLSc1uzAIB6+ur5ag1xg1xh40v00qryDI2ShA9vtSwfF+1tRENoORfhE2dtfwV3Vfaa15XjDSAdJhvy5ao3+uvBpq/m9V4FKmDTS+tsZGYQyuE5UMCx177SQxe1kmua5vuwa95iClPik2COsojvk+f1gWU04MAcGmPGMgRIgwfhnW57OF0xaIxxkBwAj7Rmal3aQAR1mpB99jOCrQGf3FlOY7caVnBrjYzkkgw2jYPdF7KDgOWmu6dA== X-Forefront-Antispam-Report: CIP:63.35.35.123; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:64aa7808-outbound-1.mta.getcheckrecipient.com; PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; CAT:NONE; SFS:(13230031)(4636009)(376002)(346002)(136003)(396003)(39860400002)(230922051799003)(1800799009)(451199024)(82310400011)(64100799003)(186009)(40470700004)(36840700001)(46966006)(82740400003)(235185007)(356005)(81166007)(40460700003)(4326008)(8936002)(8676002)(41300700001)(44832011)(5660300002)(86362001)(2906002)(40480700001)(6506007)(33964004)(44144004)(478600001)(6486002)(47076005)(6512007)(336012)(36756003)(2616005)(83380400001)(26005)(6916009)(70586007)(70206006)(36860700001)(316002)(2700100001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2023 20:47:40.6454 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 20bad312-1850-4abe-4520-08dbcf524e11 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123]; Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: AMS0EPF00000198.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR08MB10408 X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, UNPARSEABLE_RELAY 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+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1780037132087795811 X-GMAIL-MSGID: 1780037132087795811 Currently, rtl_ssa::change_insns requires all new uses and defs to be specified explicitly. This turns out to be rather inconvenient for forming load pairs in the new aarch64 load pair pass, as the pass has to determine which mem def the final load pair consumes, and then obtain or create a suitable use (i.e. significant bookkeeping, just to keep the RTL-SSA IR consistent). It turns out to be much more convenient to allow change_insns to infer which def is consumed and create a suitable use of mem itself. This patch does that. Bootstrapped/regtested as a series on aarch64-linux-gnu, OK for trunk? gcc/ChangeLog: * rtl-ssa/changes.cc (function_info::finalize_new_accesses): Add new parameter to give final insn position, infer use of mem if it isn't specified explicitly. (function_info::change_insns): Pass down final insn position to finalize_new_accesses. * rtl-ssa/functions.h: Add parameter to finalize_new_accesses. --- gcc/rtl-ssa/changes.cc | 31 ++++++++++++++++++++++++++++--- gcc/rtl-ssa/functions.h | 2 +- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/gcc/rtl-ssa/changes.cc b/gcc/rtl-ssa/changes.cc index c48ddd2463c..523ad60d7d8 100644 --- a/gcc/rtl-ssa/changes.cc +++ b/gcc/rtl-ssa/changes.cc @@ -370,8 +370,11 @@ update_insn_in_place (insn_change &change) // Finalize the new list of definitions and uses in CHANGE, removing // any uses and definitions that are no longer needed, and converting // pending clobbers into actual definitions. +// +// POS gives the final position of INSN, which hasn't yet been moved into +// place. void -function_info::finalize_new_accesses (insn_change &change) +function_info::finalize_new_accesses (insn_change &change, insn_info *pos) { insn_info *insn = change.insn (); @@ -462,13 +465,34 @@ function_info::finalize_new_accesses (insn_change &change) // Add (possibly temporary) uses to m_temp_uses for each resource. // If there are multiple references to the same resource, aggregate // information in the modes and flags. + use_info *mem_use = nullptr; for (rtx_obj_reference ref : properties.refs ()) if (ref.is_read ()) { unsigned int regno = ref.regno; machine_mode mode = ref.is_reg () ? ref.mode : BLKmode; use_info *use = find_access (unshared_uses, ref.regno); - gcc_assert (use); + if (!use) + { + // For now, we only support inferring uses of mem. + gcc_assert (regno == MEM_REGNO); + + if (mem_use) + { + mem_use->record_reference (ref, false); + continue; + } + + resource_info resource { mode, regno }; + auto def = find_def (resource, pos).prev_def (pos); + auto set = safe_dyn_cast (def); + gcc_assert (set); + mem_use = allocate (insn, resource, set); + mem_use->record_reference (ref, true); + m_temp_uses.safe_push (mem_use); + continue; + } + if (use->m_has_been_superceded) { // This is the first reference to the resource. @@ -656,7 +680,8 @@ function_info::change_insns (array_slice changes) // Finalize the new list of accesses for the change. Don't install // them yet, so that we still have access to the old lists below. - finalize_new_accesses (change); + finalize_new_accesses (change, + placeholder ? placeholder : insn); } placeholders[i] = placeholder; } diff --git a/gcc/rtl-ssa/functions.h b/gcc/rtl-ssa/functions.h index d7da9774213..73690a0e63b 100644 --- a/gcc/rtl-ssa/functions.h +++ b/gcc/rtl-ssa/functions.h @@ -265,7 +265,7 @@ private: insn_info *add_placeholder_after (insn_info *); void possibly_queue_changes (insn_change &); - void finalize_new_accesses (insn_change &); + void finalize_new_accesses (insn_change &, insn_info *); void apply_changes_to_insn (insn_change &); void init_function_data ();