From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by sourceware.org (Postfix) with ESMTPS id D36283858D32 for ; Tue, 23 Aug 2022 02:17:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D36283858D32 X-IronPort-AV: E=McAfee;i="6500,9779,10447"; a="294854069" X-IronPort-AV: E=Sophos;i="5.93,256,1654585200"; d="scan'208";a="294854069" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Aug 2022 19:17:20 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,256,1654585200"; d="scan'208";a="609177291" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by orsmga002.jf.intel.com with ESMTP; 22 Aug 2022 19:17:20 -0700 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Mon, 22 Aug 2022 19:17:19 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31 via Frontend Transport; Mon, 22 Aug 2022 19:17:19 -0700 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.175) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Mon, 22 Aug 2022 19:17:19 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=D51C3y4j4PLtncu/VpzPk+HAQxPf7lFWuUa2bjmUUyHLuBsMbx30j/zNiwcUwSEbla+aVT+HV5npvNyxcKz/Nzj9wUdXpAn6FETchFIg5HGk9SayMjS43QV7yt61rUBikRxoZ1ZALgBdQ1J0ae0JrgfXtpkNJWGMKYsUSlgWqUwd9D5Bh6Qzc2McKFIHsW/OLSlQJe2NKsgwulzVQWFbaKti7PcB2NflEXP50ZghCEtJl1j5a11+UhWuAQbhxt3GB/bgyX2gtxZ3w+UCOvNbgF71CdwKIfqmZnIJwHiDSLMS2xLrB/MJpqFoBnfVsi4mQ/IMyQyfl+LYMQH8N++xbg== 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=xmnH0Qje7BUC7m9v5boUjG3uo56W6LEFZjsoe7AQw2Q=; b=In2BFBELITXM50xxFWX7LfDPyrQOYhoNsE0IR1k+osNBQf1Y/ZURPvQZ+B30xG5YRKaIJpG9f8TRaOMfQwVnlNg+8l+DNUo9bERr9VuGNN9mDuQFsOH3htM1CW89xI5VsXoxw1lRRpAOEuDvueiX0ctTgr7AGN+9H2baSx5AcbOcBN2r4PlJ7cj24l102DIdvB+fzmlipSrm5dQaD+m0DbgkaVUBxqYqXGNXqt+1ywBTJ3SwEY0Rj8ufOBBT1NnkJgsREz+tCJdZOQU0qZNrSeRbMkYkLORbmpj4bXGtXLmNfs2TUpRTajjHu/YeeGhXaLaC1IT1lES0152hTJN4xA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from DM4PR11MB5487.namprd11.prod.outlook.com (2603:10b6:5:39f::22) by CO1PR11MB4868.namprd11.prod.outlook.com (2603:10b6:303:90::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5546.16; Tue, 23 Aug 2022 02:17:18 +0000 Received: from DM4PR11MB5487.namprd11.prod.outlook.com ([fe80::1cf5:eb50:5eb:a1c3]) by DM4PR11MB5487.namprd11.prod.outlook.com ([fe80::1cf5:eb50:5eb:a1c3%7]) with mapi id 15.20.5546.023; Tue, 23 Aug 2022 02:17:18 +0000 From: "Kong, Lingling" To: "Liu, Hongtao" , "gcc-patches@gcc.gnu.org" , "richard.guenther@gmail.com" Subject: RE: [PATCH] Enhance final_value_replacement_loop to handle bitop with an invariant induction.[PR105735] Thread-Topic: [PATCH] Enhance final_value_replacement_loop to handle bitop with an invariant induction.[PR105735] Thread-Index: AdiyzcjTCPng9VotSJ+bADYz6wSZJQDxo8/Q Date: Tue, 23 Aug 2022 02:17:17 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.6.500.17 dlp-reaction: no-action x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 411a92c4-39a9-45e2-045f-08da84ad9a62 x-ms-traffictypediagnostic: CO1PR11MB4868:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: EV9cav6u6A9zZu6fgUK569DWvN2c+v5HyCcfkADCzpm5EFju8ouG8rIvlol/ifngG39xgNf/RY6rYXTklQf1ISasDL0ghl/izteTyirUj43Gi3s0oiqjnukyF4/YW5hxdFR8YS+k4Nra6T62Hmzpg8t4B3D60JaxCeWnz0ooq2uSSS4lI9GMUZQYG6bTrxa4asvLrNO3nrfGVsSPxNebkiqStADYjLKtouCkgS61Jaiw4mpyFlkYmMcAwCy/8n5YbykxymylDqM5a23xpw5Fr/LeRclQ894naY3h/L2nqsepZjbStZ/T+FQGyUgrzXPwDVSYzszwWAxBu3tJoVtlcBmXwkCB2G+IWE1zhjr6UzJcntntKKz6w584jzOjDyeaeOWu68wZbHEvg5gzPkCDQYZbAjnVZt+s0VMVSWqKAakQfrpJQhd47gwYg8vthIAumbTjFNquKASbUfc/MvKlf7s1CzVUeyJTc4LkxGPoeiB5spcHsZVYWGbug/tl1+LmLJpuhQrqXr/NHgr2MH+b0CXsiBBGuFQWlBaTXWnAKz4EVKnwiRok6vOfYDua20RErRXEhRCLKOEe8ycWNe8jMPG4tMWbw3TxLuT2VndPx3yypBCj+0U6g2nOnFN2s0cURlc+PykHtlvKdc72mgRwHGnJVYYU/KyLxwqSpbTkLcDuSsTICG43fYpIUOAqe3hLPIsjfEERaTwV8B/k3QZdxW9/d9YXz4m8AKBwm6QRhijIyTQvrWjC2n7yqAN7vA8sDHhsvEaH6ok+dz64/T+LJWZYr9OuJ9LimwVNZuXbiZs= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM4PR11MB5487.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(39860400002)(396003)(346002)(366004)(376002)(136003)(41300700001)(84970400001)(52536014)(8936002)(186003)(71200400001)(5660300002)(26005)(4326008)(8676002)(9686003)(107886003)(33656002)(6506007)(2906002)(7696005)(66946007)(64756008)(478600001)(66446008)(66476007)(66556008)(86362001)(76116006)(38100700002)(82960400001)(55016003)(122000001)(110136005)(38070700005)(316002); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?y9IpQ/AEqjqdbmRJTYQpUGnj1btKSQhE93DTzlvD7uUsdVAxpafoY/pawTem?= =?us-ascii?Q?JKiHyiomGMsSnQ7kdW4bkaK96guSW13wUL3TNgEzlDA8kI93ONnFfCQ8K0eF?= =?us-ascii?Q?O1jWwMR0sd240z7nERJaF7SobKRkHMsTEJsAYTU58CBIGU7R4++FUWoWlKAy?= =?us-ascii?Q?wZ+nJmp7hYgDj1W+kj5WUz2QWUAf/uQqVES/YZ+8thekQSFhGMfPJjoRwAI+?= =?us-ascii?Q?h9fiEOJTTtod4hXJOkTgQWiC069FJ2/hHE4yQevYsnN6ZVKLJlBYWHf+GjhZ?= =?us-ascii?Q?vW1QbdsQGztPBLVkzA7StLx+THm3+xlZ9pMPCniN0TuTTIbZ2gucqU+LXHcM?= =?us-ascii?Q?TnEHU8InMxWKR2OUhJ/ISyQ1jlEwY/cGCbbsXdLEBpu+eWqGvgYFFrtCYFrY?= =?us-ascii?Q?SwvWtSS7pknLforjS8+qZrzlgpce4ADGC5jPeyoRGs0MIH53L9tkYJQ9biOA?= =?us-ascii?Q?DKSSyj5RvFPE6dUZh5SrAVa1aXb7Do4z4pwbJGKHzqm1/Pnc8cTKRjy56spB?= =?us-ascii?Q?gyXiTAWszbi1Kd/cx9MUay4/IM914YAV5VT+LwOQCPHLBGaXFkO9dCSWekZT?= =?us-ascii?Q?4E3p28p+7Da5jBoclhAKDwZu+IXZJUArESdBQ89ZEtixDGkXk56AV6YePscg?= =?us-ascii?Q?KiX5Y5cvltqRJs2U9l7TfUSIcFbaYodlD04478SsYf/pfpVLJVp+UaqvNQ55?= =?us-ascii?Q?Mnk+R4Rp9Be1DUvcwB/sJdxtCo2YEkF9sVOutBVnVozndkrwmuagAbzECpEs?= =?us-ascii?Q?6Ei606M06iz5v/BVANP9jZ3T3Jv6nTh/z6XxeDXgYamLcEELZJOIkPlbsV6C?= =?us-ascii?Q?uBwHWg7mUSs7DjuEqvbfg61HOHefpNFMjdp6xrNNixDAES2NBnynHw33zbZW?= =?us-ascii?Q?cW46QqiRQVU7gdnkjK2OfXW8zf+GEBAGcV1ugaVzLTwllY9m0953srmGnxsY?= =?us-ascii?Q?Wq8M7dhKxhhO/hLlugMQGPU5cZ4QCkDWbj3FLWEv2m0IuEc9MLtfDY1h6PNq?= =?us-ascii?Q?w92KnrQjOsl8Jagg1s0/MPe5fsQFveyTONdxhTsMsesDAXWzwwnLb0Ml6OzJ?= =?us-ascii?Q?bzraMmGXG3XsncWDUfZR72hjmdEdRqk3cgWszCeOQo7s4MGOYIOVBFdKhqNl?= =?us-ascii?Q?R7+F7sUJShjCKed4cWtpZ3yu8OeAVF376M4YgowqjHzvA6ZAP63DSt76LZ+n?= =?us-ascii?Q?SdmAuSIxspasDwOlt5Edb0LQMnvTOZreXLiwdCohcaNupPYHXAT8YTC33m3l?= =?us-ascii?Q?WYL/rWqkjEUKSk8ryVFJpLhImvBsagNKJb4zBY2VZ4Nk39G8PPMqHCXMmPkI?= =?us-ascii?Q?OozNEkXxLZ+dvWBC9SXkMChSPVqMutHzevn6w1h+ScaChVXue6Lcq4rPtSlw?= =?us-ascii?Q?qBtHkBQLX6MV3hj7FKrCXO250ON/qUicXGVC2fQQHGdQUGbkGj5uDyRlI/Hx?= =?us-ascii?Q?0WMDhdhlU42nFrpOkfaA5KTpX4z/8JRnFOZdBx9ImP9kvT0crN40vnS4RAdE?= =?us-ascii?Q?s6i5G7WLGqNU0OJrVtcDQe7x76CPiThvo1y5m1iDfsVoJ2UwXcpqdpQakQB5?= =?us-ascii?Q?QpQAt8dOjSoqBNjdWt2I2XnPURA8NqrqOpGBu/Rv?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5487.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 411a92c4-39a9-45e2-045f-08da84ad9a62 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Aug 2022 02:17:18.0201 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: RrwD2VwKXViI2o0ZiMrgK8E+yALJyiTRYLnyu7wsmsqVOihqznTBi4pt4aSUXdC9vnqmzcs1GB7ksjVBfQU/FA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR11MB4868 X-OriginatorOrg: intel.com X-Spam-Status: No, score=-13.8 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, 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.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Aug 2022 02:17:24 -0000 Hi Richard, could you help to have a look for the patch ? =20 > Hi, >=20 > This patch is for pr105735/pr101991. It will enable below optimization: > { > - long unsigned int bit; > - > - [local count: 32534376]: > - > - [local count: 1041207449]: > - # tmp_10 =3D PHI > - # bit_12 =3D PHI > - tmp_7 =3D bit2_6(D) & tmp_10; > - bit_8 =3D bit_12 + 1; > - if (bit_8 !=3D 32) > - goto ; [96.97%] > - else > - goto ; [3.03%] > - > - [local count: 1009658865]: > - goto ; [100.00%] > - > - [local count: 32534376]: > - # tmp_11 =3D PHI > - return tmp_11; > + tmp_11 =3D tmp_4(D) & bit2_6(D); > + return tmp_11; >=20 > } >=20 > Ok for master ? >=20 > gcc/ChangeLog: >=20 > PR middle-end/105735 > * match.pd (bitop_with_inv_p): New match. > * tree-scalar-evolution.cc (gimple_bitop_with_inv_p): Declare. > (analyze_and_compute_bitop_with_inv_effect): New function. > (final_value_replacement_loop): Enhanced to handle bitop > with inv induction. >=20 > gcc/testsuite/ChangeLog: >=20 > * gcc.target/i386/pr105735-1.c: New test. > * gcc.target/i386/pr105735-2.c: New test. > --- > gcc/match.pd | 4 + > gcc/testsuite/gcc.target/i386/pr105735-1.c | 88 ++++++++++++++++++++++ > gcc/testsuite/gcc.target/i386/pr105735-2.c | 28 +++++++ > gcc/tree-scalar-evolution.cc | 59 +++++++++++++++ > 4 files changed, 179 insertions(+) > create mode 100644 gcc/testsuite/gcc.target/i386/pr105735-1.c > create mode 100644 gcc/testsuite/gcc.target/i386/pr105735-2.c >=20 > diff --git a/gcc/match.pd b/gcc/match.pd index 562138a8034..cfe593ebb02 > 100644 > --- a/gcc/match.pd > +++ b/gcc/match.pd > @@ -8050,6 +8050,10 @@ and, > (bit_not > (nop_convert1? (bit_xor@0 (convert2? (lshift integer_onep@1 @2)) @3)))= ) >=20 > +(for bit_op (bit_and bit_ior bit_xor) > + (match (bitop_with_inv_p @0 @1) > + (bit_op:c @0 @1))) > + > /* n - (((n > C1) ? n : C1) & -C2) -> n & C1 for unsigned case. > n - (((n > C1) ? n : C1) & -C2) -> (n <=3D C1) ? n : (n & C1) for si= gned case. */ > (simplify diff --git a/gcc/testsuite/gcc.target/i386/pr105735-1.c > b/gcc/testsuite/gcc.target/i386/pr105735-1.c > new file mode 100644 > index 00000000000..8d2123ed351 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/i386/pr105735-1.c > @@ -0,0 +1,88 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O1 -fdump-tree-sccp-details" } */ > +/* { dg-final { scan-tree-dump-times {final value replacement} 8 "sccp" > +} } */ > + > +unsigned long long > +__attribute__((noipa)) > +foo (unsigned long long tmp, unsigned long long bit2) { > + for (int bit =3D 0; bit < 64; bit++) > + tmp &=3D bit2; > + return tmp; > +} > + > +unsigned long long > +__attribute__((noipa)) > +foo1 (unsigned long long tmp, unsigned long long bit2) { > + for (int bit =3D 63; bit >=3D 0; bit -=3D3) > + tmp &=3D bit2; > + return tmp; > +} > + > +unsigned long long > +__attribute__((noipa)) > +foo2 (unsigned long long tmp, unsigned long long bit2) { > + for (int bit =3D 0; bit < 64; bit++) > + tmp |=3D bit2; > + return tmp; > +} > + > +unsigned long long > +__attribute__((noipa)) > +foo3 (unsigned long long tmp, unsigned long long bit2) { > + for (int bit =3D 63; bit >=3D 0; bit -=3D3) > + tmp |=3D bit2; > + return tmp; > +} > + > +unsigned long long > +__attribute__((noipa)) > +foo4 (unsigned long long tmp, unsigned long long bit2) { > + for (int bit =3D 0; bit < 64; bit++) > + tmp ^=3D bit2; > + return tmp; > +} > + > +unsigned long long > +__attribute__((noipa)) > +foo5 (unsigned long long tmp, unsigned long long bit2) { > + for (int bit =3D 0; bit < 63; bit++) > + tmp ^=3D bit2; > + return tmp; > +} > + > +unsigned long long > +__attribute__((noipa)) > +f (unsigned long long tmp, long long bit, unsigned long long bit2) { > + unsigned long long res =3D tmp; > + for (long long i =3D 0; i < bit; i++) > + res &=3D bit2; > + return res; > +} > + > +unsigned long long > +__attribute__((noipa)) > +f1 (unsigned long long tmp, long long bit, unsigned long long bit2) { > + unsigned long long res =3D tmp; > + for (long long i =3D 0; i < bit; i++) > + res |=3D bit2; > + return res; > +} > + > +unsigned long long > +__attribute__((noipa)) > +f2 (unsigned long long tmp, long long bit, unsigned long long bit2) { > + unsigned long long res =3D tmp; > + for (long long i =3D 0; i < bit; i++) > + res ^=3D bit2; > + return res; > +} > + > diff --git a/gcc/testsuite/gcc.target/i386/pr105735-2.c > b/gcc/testsuite/gcc.target/i386/pr105735-2.c > new file mode 100644 > index 00000000000..79c1d300b1b > --- /dev/null > +++ b/gcc/testsuite/gcc.target/i386/pr105735-2.c > @@ -0,0 +1,28 @@ > +/* { dg-do run } */ > +/* { dg-options "-O1" } */ > + > +#include "pr105735-1.c" > + > +int main() > +{ > + unsigned long long tmp =3D 0x1101101ULL; > + unsigned long long bit2 =3D 0x1111111011110111ULL; > + if (foo (tmp, bit2) !=3D 0x1100101ULL) > + __builtin_abort (); > + if (foo1 (tmp, bit2) !=3D 0x1100101ULL) > + __builtin_abort (); > + if (foo2 (tmp, bit2) !=3D 0x1111111011111111ULL) > + __builtin_abort (); > + if (foo3 (tmp, bit2) !=3D 0x1111111011111111ULL) > + __builtin_abort (); > + if (foo4 (tmp, bit2) !=3D 0x1101101ULL) > + __builtin_abort (); > + if (foo5 (tmp, bit2) !=3D 0x1111111010011010ULL) > + __builtin_abort (); > + if (f (tmp, 64, bit2) !=3D 0x1100101ULL) > + __builtin_abort (); > + if (f1 (tmp, 64, bit2) !=3D 0x1111111011111111ULL) > + __builtin_abort (); > + if (f2 (tmp, 64, bit2) !=3D 0x1101101ULL) > + __builtin_abort (); > +} > diff --git a/gcc/tree-scalar-evolution.cc b/gcc/tree-scalar-evolution.cc = index > fc59d035b19..81220f08d2e 100644 > --- a/gcc/tree-scalar-evolution.cc > +++ b/gcc/tree-scalar-evolution.cc > @@ -3635,6 +3635,53 @@ enum bit_op_kind > return fold_build2 (code1, type, inv, wide_int_to_tree (type, bits)); = } >=20 > +/* Match.pd function to match bitop with invariant expression > + .i.e. > + tmp_7 =3D _0 & _1; */ > +extern bool gimple_bitop_with_inv_p (tree, tree *, tree (*)(tree)); > + > +/* Return the inductive expression of bitop with invariant if possible, > + otherwise returns DEF. */ > +static tree > +analyze_and_compute_bitop_with_inv_effect (class loop* loop, tree phidef= , > + tree niter) > +{ > + tree match_op[2],inv; > + tree type =3D TREE_TYPE (phidef); > + gphi* header_phi =3D NULL; > + /* match thing like op0 (match[0]), op1(match[1]), phidef(PHIDEF) > + > + op1 =3D PHI > + phidef =3D op0 & op1 > + if op0 is an invariant, it could change to > + phidef =3D op0 & inv. */ > + if (!gimple_bitop_with_inv_p (phidef, &match_op[0], NULL) > + || TREE_CODE (match_op[1]) !=3D SSA_NAME > + || !expr_invariant_in_loop_p (loop, match_op[0]) > + || !(header_phi =3D dyn_cast (SSA_NAME_DEF_STMT (match_op= [1]))) > + || gimple_phi_num_args (header_phi) !=3D 2) > + return NULL_TREE; > + > + if (PHI_ARG_DEF_FROM_EDGE (header_phi, loop_latch_edge (loop)) !=3D ph= idef) > + return NULL_TREE; > + > + enum tree_code code1 > + =3D gimple_assign_rhs_code (SSA_NAME_DEF_STMT (phidef)); > + > + if (code1 =3D=3D BIT_XOR_EXPR) > + { > + if (!tree_fits_uhwi_p (niter)) > + return NULL_TREE; > + unsigned HOST_WIDE_INT niter_num; > + niter_num =3D tree_to_uhwi (niter); > + if (niter_num % 2 !=3D 0) > + match_op[0] =3D build_zero_cst (type); > + } > + > + inv =3D PHI_ARG_DEF_FROM_EDGE (header_phi, loop_preheader_edge (loop))= ; > + return fold_build2 (code1, type, inv, match_op[0]); } > + > /* Do final value replacement for LOOP, return true if we did anything. = */ >=20 > bool > @@ -3687,6 +3734,18 @@ final_value_replacement_loop (class loop *loop) > &folded_casts); > def =3D compute_overall_effect_of_inner_loop (ex_loop, def); >=20 > + /* Handle bitop with invariant induction expression. > + > + .i.e > + for (int i =3D0 ;i < 32; i++) > + tmp &=3D bit2; > + if bit2 is an invariant in loop which could simple to > + tmp &=3D bit2. */ > + tree bitinv_def; > + if ((bitinv_def > + =3D analyze_and_compute_bitop_with_inv_effect (loop, phidef, niter))= ) > + def =3D bitinv_def; > + > /* Handle bitwise induction expression. >=20 > .i.e. > -- > 2.18.2