From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2066.outbound.protection.outlook.com [40.107.21.66]) by sourceware.org (Postfix) with ESMTPS id 0F7A83858C74 for ; Thu, 13 Jul 2023 11:54:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0F7A83858C74 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com 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=DjYvAlzMUlEdJWudI6dYtRhhHiC5qXk5F3W2AXltXpw=; b=nXkLND0UaP7EtouG7gem+Z3dbH6R2/cgqOdLVR9wwlvhgsk9/i6/Bdi70euAG8E9IPB9zLFsiK2NLQzCCVYilmh5mtUdb1hRRhwK/TE9ZtIcOpRWPGg7bsYyYOqcEPjQwJuLYwRFJ29z05HH6jWAIs7SSIKr0VhG9Vpne7we7Z0= Received: from AS9PR06CA0573.eurprd06.prod.outlook.com (2603:10a6:20b:486::8) by AS2PR08MB9449.eurprd08.prod.outlook.com (2603:10a6:20b:5eb::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6565.32; Thu, 13 Jul 2023 11:54:30 +0000 Received: from AM7EUR03FT053.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:486:cafe::fe) by AS9PR06CA0573.outlook.office365.com (2603:10a6:20b:486::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.24 via Frontend Transport; Thu, 13 Jul 2023 11:54:30 +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 AM7EUR03FT053.mail.protection.outlook.com (100.127.140.202) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.26 via Frontend Transport; Thu, 13 Jul 2023 11:54:30 +0000 Received: ("Tessian outbound ba2f3d95109c:v145"); Thu, 13 Jul 2023 11:54:29 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: e45c7134c49b5e6f X-CR-MTA-TID: 64aa7808 Received: from 48cac0ddd1c4.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id A96430AB-2860-4B45-84B2-89CEE6655052.1; Thu, 13 Jul 2023 11:54:22 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 48cac0ddd1c4.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 13 Jul 2023 11:54:22 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=C54PeAJi4pZkD96Scrpykpn65Ip21urI05Fw4yCms+WnMmaJsJWhM16rlrhJtORY2sYH2X98nOD/PH4cyG+0wOjqEW8sQOqJfg2ojFuDgd5rR0qk9Vof7onc71uv+8gPrAtA5RX+fJGVW6RPA2oQIK16jn9wo0TzPAw4x78t48FAEcvBWbHoq63uMNsxZwiPy8CKuXSCHrdOuo+OeHIvXQzE7em+msxyr/7fWb8h4fmpOBjr3WXjQ7jCIbXzsAS9ppl6lpeCvu04nn9ybCncrOih21vGnxLl43CRVFUDzILkHOBxJTnkz0hZDwAJc7bg1hKcrBoWHgDySUfrBqTMVQ== 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=DjYvAlzMUlEdJWudI6dYtRhhHiC5qXk5F3W2AXltXpw=; b=ecFqZZzpk03OAPB3BxM5C6EDFv7mC74Q+CQOlHvQD6ibwQesQ1uvvjeJHyYjnzv9lXgyvyCUy3e+rBLRc+zabgjH+oYoXOBYlXouOmSPwU7E9zCCOOnY8qyNEZ3bo66kzDTs2bEOgywSFsDamblKC26ny8bSHoKaRk5c+y+Z1NzWTsfJAJABxz3iSs2NASp07ouC3l+MNGMBvaWK7QPuHJvTpyn0cOcatZ+Fxa2/DEe2+MoK9H46hRKpyV8Up4PBPRxRjCWGni88alufZmHR4Slu/7bUw1SXArA/9DSHDqGhGYckj/nG5vnqV8YBDHs+t9GE7ibdzs0rEQkXdFwxuA== 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=DjYvAlzMUlEdJWudI6dYtRhhHiC5qXk5F3W2AXltXpw=; b=nXkLND0UaP7EtouG7gem+Z3dbH6R2/cgqOdLVR9wwlvhgsk9/i6/Bdi70euAG8E9IPB9zLFsiK2NLQzCCVYilmh5mtUdb1hRRhwK/TE9ZtIcOpRWPGg7bsYyYOqcEPjQwJuLYwRFJ29z05HH6jWAIs7SSIKr0VhG9Vpne7we7Z0= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by PAWPR08MB9518.eurprd08.prod.outlook.com (2603:10a6:102:2ed::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.24; Thu, 13 Jul 2023 11:54:20 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::2301:1cde:cfe7:eaf0]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::2301:1cde:cfe7:eaf0%6]) with mapi id 15.20.6588.024; Thu, 13 Jul 2023 11:54:20 +0000 From: Tamar Christina To: Richard Biener CC: "gcc-patches@gcc.gnu.org" , nd , "jlaw@ventanamicro.com" Subject: RE: [PATCH 7/19]middle-end: Refactor vectorizer loop conditionals and separate out IV to new variables Thread-Topic: [PATCH 7/19]middle-end: Refactor vectorizer loop conditionals and separate out IV to new variables Thread-Index: AQHZqca/7dPFeHci8EGeKQYdgXtm2K+3p7kAgAABwsA= Date: Thu, 13 Jul 2023 11:54:20 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: VI1PR08MB5325:EE_|PAWPR08MB9518:EE_|AM7EUR03FT053:EE_|AS2PR08MB9449:EE_ X-MS-Office365-Filtering-Correlation-Id: 3d96e75e-ce64-41c7-5a45-08db8397ea8d 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: hwAHQe6mBSNN8xQDgGy49tqprZH33zo6I29KOB5Gq8+pPGr1+/RwolohtfTOaf0WduBqcWmZbFUAWeX548/u3bISONSbmdPjvjfl/qonrpLYCu7lwtL/nMZhtk4InTRSiwwZleE8EK71z5vBpNXlnlb6mn0LVJYxT9YHBMFnu6xI8nsAzH9okwuz7n0ADdVqSJEMhen+vA5SWd4K+KDaZ/XFD38Yv+rdSEVu0njlpnui0JIYNvl7bdSiUXE6RN1zqhh4Krwqjh50/udvSjZbjWXjSmwZ/+GHpk2P1fPb57hDTbp4rYyepD8n8UcYO61gRPQC5YieKoJiAYb2YpHz+lnyjJAqzcTRidD2MUgbzuwHWbFmHmii+cdqP8GANg62mHEu2cRPaZLblnIdVWLZpFezwCX0GocS2XPXuj4stdVlj92zUPeqkdVnPKlif2EiWompMfOpm4QbjzGEzNqiL61nYtYN2+DmxssZivWN6iS2sJRDZVWM5/2okMm997oGHY1sULa6y3/TrDcp/DIMUXXf03cYscyqAqU6fPyhu4Odtg61ryT1okfQ5EErPbTuo9pMOeDzGD//nZrdzBxl853CMz7ow32IN8MgNfHfW1WnTs5P09uAh8t23TQGHF6L X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR08MB5325.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(136003)(346002)(39860400002)(376002)(366004)(396003)(451199021)(2906002)(54906003)(478600001)(71200400001)(7696005)(8676002)(8936002)(66946007)(41300700001)(76116006)(66446008)(4326008)(6916009)(66556008)(66476007)(64756008)(316002)(9686003)(83380400001)(38100700002)(55016003)(122000001)(5660300002)(52536014)(6506007)(33656002)(38070700005)(86362001)(26005)(186003);DIR:OUT;SFP:1101; Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAWPR08MB9518 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: AM7EUR03FT053.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 61fe78af-5665-43a7-209f-08db8397e495 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3z/KuNuZPaeEvUWoOK8yVFbpdI3/jrGjipq4Ne/C7/X0xGUnxY+baGxe41q0atJflIzuRNppLT9LFSGC88WsBUCSYbZDV/cCezws7gzFMFVqXqKyQBWeDyYTo4Qmo1p+5h79N5VGz1JGq9Mz2ZM36x9usqrI0po1oG5un74LaoMqH7aff6jDAbbp073WFW2aefx7LFN1ob7D7zcTwKYGf8IA2q85a7E5/U5amHYd6gWW/iWkyqFIL8qBJl4N4BPL9E+1XOam4C6rfDnvlrthtWBxxoiEL9B03YFwgtjDH6BZUDnhdNpFmhGGw1+FyTtPetjgm0OfnlGLPmzY+gEjxWe8P795/XGvX4CTK6i1vqLZxRr6MX+T2vTARSDqEPElAdkPc1zYhkuJhqxmdexF5nyrJ0d5Tm1EuEvV3Z+JlhNnir/CXHLLMLnlr/vzJ9HqgP/8wWwx0/MjDB7uvJ4dU8HACwaEXv/XZOvc3pEDHH1l4AnNLejJ5sD0nJefjhm/ieIVVBvObTJEhBLBR5huVLcE6SZxUoKlsGC8157xwPq3fIfGCwfr2TRIwSEa+/9wxdnvrQU3avMJ4EHzy3ES/xE3RmPAVqzvHRWzDzqE23g6GwpvETMiqb1m9Fo5e7CYAcuojXTCFfFJgy4P9YxvNqLWVrFbGBroRMI7TyTJ8+9fYzkUBs0eSxkQj5yrWSZ+GqsbT0kkMH3PfF3c5dZiW4CZ4PVwQ2zW6j6a0LwLKK3m5Q6EkZoQDJ7WyFvdRqrq 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:(13230028)(4636009)(346002)(136003)(396003)(376002)(39860400002)(451199021)(36840700001)(40470700004)(46966006)(4326008)(7696005)(70586007)(70206006)(478600001)(356005)(82740400003)(81166007)(55016003)(26005)(6506007)(40480700001)(54906003)(316002)(41300700001)(9686003)(6862004)(82310400005)(8676002)(8936002)(86362001)(40460700003)(83380400001)(107886003)(5660300002)(52536014)(186003)(33656002)(2906002)(36860700001)(336012)(47076005);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2023 11:54:30.0708 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3d96e75e-ce64-41c7-5a45-08db8397ea8d 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: AM7EUR03FT053.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB9449 X-Spam-Status: No, score=-12.2 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,T_SCC_BODY_TEXT_LINE,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 List-Id: > e7ac2b5f3db55de3dbbab7bd2bfe08388f4ec533..cab82d7960e5be517bba2 > 621f7f4 > > 888e7bf3c295 100644 > > --- a/gcc/cfgloop.h > > +++ b/gcc/cfgloop.h > > @@ -272,6 +272,14 @@ public: > > the basic-block from being collected but its index can still be > > reused. */ > > basic_block former_header; > > + > > + /* The controlling loop IV for the current loop when vectorizing. T= his IV > > + controls the natural exits of the loop. */ edge GTY ((skip > > + (""))) vec_loop_iv; > > + > > + /* If the loop has multiple exits this structure contains the altern= ate > > + exits of the loop which are relevant for vectorization. */ > > + vec GTY ((skip (""))) vec_loop_alt_exits; >=20 > That's a quite heavy representation and as you say it's vectorizer specif= ic. May > I ask you to eliminate at _least_ vec_loop_alt_exits? > Are there not all exits in that vector? Note there's already the list of= exits and if > you have the canonical counting IV exit you can match against that to get= all > the others? >=20 Sure, though that means some filtering whenever one iterates over the alt e= xits, not a problem though. > > /* Given LOOP this function generates a new copy of it and puts it > > on E which is either the entry or exit of LOOP. If SCALAR_LOOP is > > @@ -1458,13 +1523,15 @@ slpeel_tree_duplicate_loop_to_edge_cfg (class > loop *loop, > > edge exit, new_exit; > > bool duplicate_outer_loop =3D false; > > > > - exit =3D single_exit (loop); > > + exit =3D loop->vec_loop_iv; > > at_exit =3D (e =3D=3D exit); > > if (!at_exit && e !=3D loop_preheader_edge (loop)) > > return NULL; > > > > if (scalar_loop =3D=3D NULL) > > scalar_loop =3D loop; > > + else > > + vec_init_exit_info (scalar_loop); > > > > bbs =3D XNEWVEC (basic_block, scalar_loop->num_nodes + 1); > > pbbs =3D bbs + 1; > > @@ -1490,13 +1557,17 @@ slpeel_tree_duplicate_loop_to_edge_cfg (class > loop *loop, > > bbs[0] =3D preheader; > > new_bbs =3D XNEWVEC (basic_block, scalar_loop->num_nodes + 1); > > > > - exit =3D single_exit (scalar_loop); > > + exit =3D scalar_loop->vec_loop_iv; > > copy_bbs (bbs, scalar_loop->num_nodes + 1, new_bbs, > > &exit, 1, &new_exit, NULL, > > at_exit ? loop->latch : e->src, true); > > - exit =3D single_exit (loop); > > + exit =3D loop->vec_loop_iv; > > basic_block new_preheader =3D new_bbs[0]; > > > > + /* Record the new loop exit information. new_loop doesn't have SCEV > data and > > + so we must initialize the exit information. */ > > + vec_init_exit_info (new_loop); > > + >=20 > You have a mapping of old to new BB so you should be able to > map old to new exit by mapping e->src/dest and looking up the new edge? >=20 > The vec_loop_iv exit is mapped directly (new_exit). >=20 > So I don't really understand what's missing there. But I don't have the mapping when the loop as versioned, e.g. by ifcvt. So= in the cases where scalar_loop !=3D loop in which case I still need them to match up. vect_loop_form_info is destroyed after analysis though and is not available= during peeling. That's why we copy relevant information out in vect_create_loop_vi= nfo. But in general we only have 1 per loop as well, so it would be the same as = using loop_vinfo. I could move it into loop_vinfo and then require you to pass the edges to t= he peeling function as you mentioned. This would solve the location we place them in, but stil= l not sure what to do about versioned loops. Would need to get its main edge "somewhere", would = another field in loop_vinfo be ok? Cheers, Tamar > > + if (!loop->vec_loop_iv) > > + return opt_result::failure_at (vect_location, > > + "not vectorized:" > > + " could not determine main exit from" > > + " loop with multiple exits.\n"); > > + > > /* Different restrictions apply when we are considering an inner-mos= t loop, > > vs. an outer (nested) loop. > > (FORNOW. May want to relax some of these restrictions in the futu= re). */ > > @@ -3025,9 +3032,8 @@ start_over: > > if (dump_enabled_p ()) > > dump_printf_loc (MSG_NOTE, vect_location, "epilog loop require= d\n"); > > if (!vect_can_advance_ivs_p (loop_vinfo) > > - || !slpeel_can_duplicate_loop_p (LOOP_VINFO_LOOP (loop_vinfo), > > - single_exit (LOOP_VINFO_LOOP > > - (loop_vinfo)))) > > + || !slpeel_can_duplicate_loop_p (loop_vinfo, > > + LOOP_VINFO_IV_EXIT (loop_vinfo))) > > { > > ok =3D opt_result::failure_at (vect_location, > > "not vectorized: can't create required " > > @@ -5964,7 +5970,7 @@ vect_create_epilog_for_reduction (loop_vec_info > loop_vinfo, > > Store them in NEW_PHIS. */ > > if (double_reduc) > > loop =3D outer_loop; > > - exit_bb =3D single_exit (loop)->dest; > > + exit_bb =3D LOOP_VINFO_IV_EXIT (loop_vinfo)->dest; > > exit_gsi =3D gsi_after_labels (exit_bb); > > reduc_inputs.create (slp_node ? vec_num : ncopies); > > for (unsigned i =3D 0; i < vec_num; i++) > > @@ -5980,7 +5986,7 @@ vect_create_epilog_for_reduction (loop_vec_info > loop_vinfo, > > phi =3D create_phi_node (new_def, exit_bb); > > if (j) > > def =3D gimple_get_lhs (STMT_VINFO_VEC_STMTS (rdef_info)[j]); > > - SET_PHI_ARG_DEF (phi, single_exit (loop)->dest_idx, def); > > + SET_PHI_ARG_DEF (phi, LOOP_VINFO_IV_EXIT (loop_vinfo)- > >dest_idx, def); > > new_def =3D gimple_convert (&stmts, vectype, new_def); > > reduc_inputs.quick_push (new_def); > > } > > @@ -10301,12 +10307,12 @@ vectorizable_live_operation (vec_info > *vinfo, > > lhs' =3D new_tree; */ > > > > class loop *loop =3D LOOP_VINFO_LOOP (loop_vinfo); > > - basic_block exit_bb =3D single_exit (loop)->dest; > > + basic_block exit_bb =3D LOOP_VINFO_IV_EXIT (loop_vinfo)->dest; > > gcc_assert (single_pred_p (exit_bb)); > > > > tree vec_lhs_phi =3D copy_ssa_name (vec_lhs); > > gimple *phi =3D create_phi_node (vec_lhs_phi, exit_bb); > > - SET_PHI_ARG_DEF (phi, single_exit (loop)->dest_idx, vec_lhs); > > + SET_PHI_ARG_DEF (phi, LOOP_VINFO_IV_EXIT (loop_vinfo)->dest_idx, > vec_lhs); > > > > gimple_seq stmts =3D NULL; > > tree new_tree; > > @@ -10829,7 +10835,8 @@ scale_profile_for_vect_loop (class loop *loop, > unsigned vf) > > scale_loop_frequencies (loop, p); > > } > > > > - edge exit_e =3D single_exit (loop); > > + edge exit_e =3D loop->vec_loop_iv; > > + > > exit_e->probability =3D profile_probability::always () / (new_est_ni= ter + 1); > > > > edge exit_l =3D single_pred_edge (loop->latch); > > @@ -11177,7 +11184,7 @@ vect_transform_loop (loop_vec_info > loop_vinfo, gimple *loop_vectorized_call) > > > > /* Make sure there exists a single-predecessor exit bb. Do this bef= ore > > versioning. */ > > - edge e =3D single_exit (loop); > > + edge e =3D LOOP_VINFO_IV_EXIT (loop_vinfo); > > if (! single_pred_p (e->dest)) > > { > > split_loop_exit_edge (e, true); > > diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h > > index > a36974c2c0d2103b0a2d0397d06ab84dace08129..bd5eceb5da7a45ef036c > d14609ebe091799320bf 100644 > > --- a/gcc/tree-vectorizer.h > > +++ b/gcc/tree-vectorizer.h > > @@ -917,6 +917,8 @@ public: > > > > /* Access Functions. */ > > #define LOOP_VINFO_LOOP(L) (L)->loop > > +#define LOOP_VINFO_IV_EXIT(L) (L)->loop->vec_loop_iv > > +#define LOOP_VINFO_ALT_EXITS(L) (L)->loop->vec_loop_alt_exi= ts > > #define LOOP_VINFO_BBS(L) (L)->bbs > > #define LOOP_VINFO_NITERSM1(L) (L)->num_itersm1 > > #define LOOP_VINFO_NITERS(L) (L)->num_iters > > @@ -2162,6 +2164,7 @@ extern void vect_prepare_for_masked_peels > (loop_vec_info); > > extern dump_user_location_t find_loop_location (class loop *); > > extern bool vect_can_advance_ivs_p (loop_vec_info); > > extern void vect_update_inits_of_drs (loop_vec_info, tree, tree_code); > > +extern void vec_init_exit_info (class loop *); > > > > /* In tree-vect-stmts.cc. */ > > extern tree get_related_vectype_for_scalar_type (machine_mode, tree, >=20 > So I didn't really see why we should need to have the info in > struct loop. >=20 > Richard.