From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2054.outbound.protection.outlook.com [40.107.105.54]) by sourceware.org (Postfix) with ESMTPS id 2E64B38555A4 for ; Thu, 22 Dec 2022 17:43:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 2E64B38555A4 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=8hyc1gYjkQSNUcPHumH3asWSUedWYGBF6sFLzfHw9Rk=; b=YZ8UbNNt9UFCTxxY4s+ZwiBEib92A07TJVLnYfWloBDLZXs51pjBnm7Tewj6qCh0kFxDIvnlHYKl5Sa1vDYae8KSRd3HnbFQ2J4Q1945eGpLqumEPF9GW85sycgG9hkiGrkUlOkFJyi7AREOrN5jQ/0faxKg4B2Tp+LFjWM53Tw= Received: from DB6PR07CA0058.eurprd07.prod.outlook.com (2603:10a6:6:2a::20) by AS8PR08MB6069.eurprd08.prod.outlook.com (2603:10a6:20b:29c::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5944.6; Thu, 22 Dec 2022 17:43:35 +0000 Received: from DBAEUR03FT012.eop-EUR03.prod.protection.outlook.com (2603:10a6:6:2a:cafe::76) by DB6PR07CA0058.outlook.office365.com (2603:10a6:6:2a::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5944.10 via Frontend Transport; Thu, 22 Dec 2022 17:43:34 +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 DBAEUR03FT012.mail.protection.outlook.com (100.127.142.126) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5944.12 via Frontend Transport; Thu, 22 Dec 2022 17:43:34 +0000 Received: ("Tessian outbound 8038f0863a52:v132"); Thu, 22 Dec 2022 17:43:34 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 138f9340366541eb X-CR-MTA-TID: 64aa7808 Received: from 3e35189a221f.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id E06B5094-C805-4E87-8D22-D1196EEFB303.1; Thu, 22 Dec 2022 17:43:28 +0000 Received: from EUR02-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 3e35189a221f.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 22 Dec 2022 17:43:28 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RnMwy6TwCA+axKI5M1RjmxrkDAQiPZODLFeM9n0oAAlzEv0KSe3btdvUZZhz4wjeKLCNmvHPTQ+29VfQF9MAMSqNksU9wzDU8Q16Ni/iacrF5raMR/BrIExYaLorXD3oV8nilneHNz9g19rnkvsL+lBliGNzINa2qeoJbbWewUw1dzix4CEE4vL1XiAnPjA5bvfpReh1+pPRfG5EyJ+GKHhrGZJHiBqsLOD6pmIT70fUkFyGl28evR29KXbWO1RCYLVWE89oQP5FnpnFcJeXQV88kt8ZU0+j+k3vnz1krRSPuiQbDeT7d3jhN0WW+A5GJ6KPmrZh/M0Ui6/FDym4hw== 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=8hyc1gYjkQSNUcPHumH3asWSUedWYGBF6sFLzfHw9Rk=; b=SNs+VH8ZmK3exX4+DMMHECb3lV6KNu5ByJP6j9Tjb9qKpGC/RpZVcCh9B4ON7Xsz32Se4Gse4Nx26baq4157oLjPehqSt0wCPcrZcEVHC7UJZPaXe9I9S/Ad06rkvsApYAPAozONHiY/TLZtHMC1rLWX3SwEHYfYxk9vMIPiF6Ul2zRTaU/iVycaIyP3suqKb20QtHxxGaGgPfqtkpg5UzUEOsedCaBZKGBiivisSpnAJ9HsviYklMTEO1fM480vwtDrfHj9knxWNdRT78hJfGu92CA+ONkkq2pwlIYsFATB1qWi1s01m8fELQxvW9CU5plT20foQT8hqMONaPQH0Q== 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=8hyc1gYjkQSNUcPHumH3asWSUedWYGBF6sFLzfHw9Rk=; b=YZ8UbNNt9UFCTxxY4s+ZwiBEib92A07TJVLnYfWloBDLZXs51pjBnm7Tewj6qCh0kFxDIvnlHYKl5Sa1vDYae8KSRd3HnbFQ2J4Q1945eGpLqumEPF9GW85sycgG9hkiGrkUlOkFJyi7AREOrN5jQ/0faxKg4B2Tp+LFjWM53Tw= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from AS8PR08MB6678.eurprd08.prod.outlook.com (2603:10a6:20b:398::8) by AS8PR08MB9954.eurprd08.prod.outlook.com (2603:10a6:20b:638::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5944.6; Thu, 22 Dec 2022 17:43:26 +0000 Received: from AS8PR08MB6678.eurprd08.prod.outlook.com ([fe80::8256:29ca:bcd8:b754]) by AS8PR08MB6678.eurprd08.prod.outlook.com ([fe80::8256:29ca:bcd8:b754%5]) with mapi id 15.20.5944.011; Thu, 22 Dec 2022 17:43:26 +0000 Date: Thu, 22 Dec 2022 17:43:21 +0000 From: Andrew Carlotti To: gcc-patches@gcc.gnu.org Subject: [PATCH 9/8] middle-end: Allow build_popcount_expr to use an IFN Message-ID: References: Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-ClientProxiedBy: LO4P302CA0044.GBRP302.PROD.OUTLOOK.COM (2603:10a6:600:317::10) To AS8PR08MB6678.eurprd08.prod.outlook.com (2603:10a6:20b:398::8) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: AS8PR08MB6678:EE_|AS8PR08MB9954:EE_|DBAEUR03FT012:EE_|AS8PR08MB6069:EE_ X-MS-Office365-Filtering-Correlation-Id: be21a285-f5b0-40ac-0416-08dae4440cab 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: Frm0l7gZQU0lr1BcyREWOleU1GdvHIA8NevuqyiQX2Zbjzwf468Wz+7CwmsLd2QH4p2w4hDemhV2sS281y8qvfD2p7g9fFf+d/wpNUFCyQ8JR67mfhUOn4MEVTecEoF384F7pdxUERighPVNIE1ey1l1Ea0UQct5jytufryPJb//REr7HQ+ENIf3VgK7X0KdVWGZRP7Y9wwlLlkM/DUUMXiyPWMgA1FSi3RIMk5kv/r1d9r0jtN9fIomgDemhj23S9rWx295E0SX86XW32fFPUiT7uDN1njKpiNb8haEMHupJ3C24pFdQ5VgTMy11SE6d46jzUXNvu5GL+G/le5Zr6B1BhpYkiEksjXMusSohcr7vQAERbtFVDd92Cob+kO6vhG4g9aOCxfmgj7HQ0tOdv4J3R5+YzvGBKUUuLW9POwUVrPT5nNWiMiQYMR4MttxhzhUrQ7iTWv1fGGHUCjUsFYIwcTnPA/jAVcjgR3HnEUXPsG8M7h7lBXSAa1ZiT7aqIwz5V7bH1EGCK90uSQZLGQZBEjleCczFca7uQhXtiFn4Lu8ogT9MqNO6670Owkh53TCoH7q2aS9gwEM3St9Q9y3BojE2eXjzLp+5SeKc3W3GmvDuqZVZ3i4PPrlfCWSumnQgMRPF/cjn6zuGHcHmV/pWBHIibzFCVP6StVdJ//UrSNorkU76gY6ke7s9XmrIOVArK9aCqNUxEPacWurxQ== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR08MB6678.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(376002)(346002)(366004)(39860400002)(396003)(136003)(451199015)(8676002)(86362001)(66476007)(66556008)(66946007)(6512007)(6486002)(478600001)(186003)(6666004)(6506007)(6916009)(316002)(26005)(38100700002)(2906002)(41300700001)(5660300002)(84970400001)(8936002)(44832011);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB9954 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: DBAEUR03FT012.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 274a0f43-8089-4666-939b-08dae44406ef X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5VfpzJuA+UngdG5OvTuPH3Fm6qtiEXdvl5ihKNn+afrvi3DSj7BnjbC2NqaQSwtKqzZG5gI6mHeiv8pWLDkrg8vgdnHPMq5cVr5yIiQbqliJRewiX7+9Ap6685nsfgpmUbMbZCHg5DwK9ObBh8sGZslLMlDUv1wlETVtnPVwK69CWI2i+WfQeiaWFgJr1etimJO4wYIuMcVNZbfMmEDchVBtmqJk8eGpkLnIpO30i363QJYXfae1i+PcVM70IaGEOnB6GO8ga72962b2XfsyqwWUR12OwblgUII/IMTL24gGPaikE/J40j4oNTPgVyuDqORWFfD64N7yq3C512xcnDN8ivwFgOBx+kTzslnWKKUb0GvtK/qkBT0wpzxFKOx180830J9CsMVdwm3gsBI5gF+VcpfxHZbW8z+AzM0avFpBSSI1nxQlo17jA6N+8iYfSUAkXw+7BzybM0T76q/R94EbE5UbcO98r8cfQ96CE5MrQQcXJvU8NFAyu3j6dMTD0dQeMj+qtFPT55WcTcP2LTk7I6l+/guQRT1HmuvqE3KcPdikC76agP8Xp/NMe3ZM4lyPFOEywnGe/8aaEeZU5mhRxzcQ7dJIAw4Hr3ZL7VY5AQCBnQkqSvpovCoIgX0Z5k8lP0iITrXH2Xlvo7p9Ecgh8B0tqXKtjEUdO2RV/90492cnrOhzYsFirayqHf5DbliV76RvA+tgVOIfZLjiSp+b+sS0dPRWdJwQksynKV1dsQzuv8BLl/dAJg++7A0tPp3Eeu3N1rkZ9nwzwPTktA== 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:(13230022)(4636009)(376002)(39860400002)(136003)(396003)(346002)(451199015)(40470700004)(46966006)(36840700001)(40480700001)(336012)(86362001)(40460700003)(81166007)(41300700001)(70586007)(44832011)(5660300002)(8936002)(8676002)(6506007)(478600001)(6486002)(6666004)(6916009)(82310400005)(26005)(316002)(82740400003)(70206006)(186003)(356005)(6512007)(47076005)(2906002)(36860700001)(84970400001);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2022 17:43:34.7789 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: be21a285-f5b0-40ac-0416-08dae4440cab 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: DBAEUR03FT012.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6069 X-Spam-Status: No, score=-13.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_LOTSOFHASH,KAM_SHORT,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 List-Id: Bootstrapped and regression tested on aarch64-unknown-linux-gnu and x86_64-pc-linux-gnu - ok to merge? gcc/ChangeLog: * tree-ssa-loop-niter.cc (build_popcount_expr): Add IFN support. gcc/testsuite/ChangeLog: * g++.dg/tree-ssa/pr86544.C: Add .POPCOUNT to tree scan regex. * gcc.dg/tree-ssa/popcount.c: Likewise. * gcc.dg/tree-ssa/popcount2.c: Likewise. * gcc.dg/tree-ssa/popcount3.c: Likewise. * gcc.target/aarch64/popcount4.c: Likewise. * gcc.target/i386/pr95771.c: Likewise, and... * gcc.target/i386/pr95771-2.c: ...split int128 test from above, since this would emit just a single IFN if a TI optab is added. --- diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr86544.C b/gcc/testsuite/g++.dg/tree-ssa/pr86544.C index ef438916a8019320564f444ace08e2f4b4190684..50befb36bac75de1cfa282e38358278b3288bd1c 100644 --- a/gcc/testsuite/g++.dg/tree-ssa/pr86544.C +++ b/gcc/testsuite/g++.dg/tree-ssa/pr86544.C @@ -12,5 +12,5 @@ int PopCount (long b) { return c; } -/* { dg-final { scan-tree-dump-times "__builtin_popcount" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "__builtin_popcount|\\.POPCOUNT" 1 "optimized" } } */ /* { dg-final { scan-tree-dump-times "if" 0 "phiopt4" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/popcount.c b/gcc/testsuite/gcc.dg/tree-ssa/popcount.c index b4694109411a4631697463519acbe7d9df65bf6e..efd906a0f5447f0beb3752eded3756999b02e6e6 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/popcount.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/popcount.c @@ -39,4 +39,4 @@ void PopCount3 (long b1) { } } -/* { dg-final { scan-tree-dump-times "__builtin_popcount" 3 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "__builtin_popcount|\\.POPCOUNT" 3 "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/popcount2.c b/gcc/testsuite/gcc.dg/tree-ssa/popcount2.c index ef73e345573de721833e98e89c252640a55f7c60..ae38a329bd4d868a762300d3218d68864c0fc4be 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/popcount2.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/popcount2.c @@ -26,4 +26,4 @@ int main() return 0; } -/* { dg-final { scan-tree-dump-times "__builtin_popcount" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "__builtin_popcount|\\.POPCOUNT" 1 "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/popcount3.c b/gcc/testsuite/gcc.dg/tree-ssa/popcount3.c index ef438916a8019320564f444ace08e2f4b4190684..50befb36bac75de1cfa282e38358278b3288bd1c 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/popcount3.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/popcount3.c @@ -12,5 +12,5 @@ int PopCount (long b) { return c; } -/* { dg-final { scan-tree-dump-times "__builtin_popcount" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "__builtin_popcount|\\.POPCOUNT" 1 "optimized" } } */ /* { dg-final { scan-tree-dump-times "if" 0 "phiopt4" } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/popcount4.c b/gcc/testsuite/gcc.target/aarch64/popcount4.c index ee55b2e335223053ca024e95b7a13aa4af32550e..8aa15ff018d4b5fc6bb59e52af20d5c33cea2ee0 100644 --- a/gcc/testsuite/gcc.target/aarch64/popcount4.c +++ b/gcc/testsuite/gcc.target/aarch64/popcount4.c @@ -11,4 +11,4 @@ int PopCount (long b) { return c; } -/* { dg-final { scan-tree-dump-times "__builtin_popcount" 0 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "__builtin_popcount|\\.POPCOUNT" 0 "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr95771-2.c b/gcc/testsuite/gcc.target/i386/pr95771-2.c new file mode 100644 index 0000000000000000000000000000000000000000..1db9dc94d0b66477667624012221d6844c141a26 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr95771-2.c @@ -0,0 +1,17 @@ +/* PR tree-optimization/95771 */ +/* { dg-do compile } */ +/* { dg-require-effective-target int128 } */ +/* { dg-options "-O2 -mpopcnt -fdump-tree-optimized" } */ +/* { dg-final { scan-tree-dump " = __builtin_popcount| = \\.POPCOUNT" "optimized" } } */ + +int +corge (unsigned __int128 x) +{ + int i = 0; + while (x) + { + x &= x - 1; + ++i; + } + return i; +} diff --git a/gcc/testsuite/gcc.target/i386/pr95771.c b/gcc/testsuite/gcc.target/i386/pr95771.c index d7b67017800b705b9854f561916c20901ea76803..d41be445f4a68613a082b8956fea3ceaf33d7e0f 100644 --- a/gcc/testsuite/gcc.target/i386/pr95771.c +++ b/gcc/testsuite/gcc.target/i386/pr95771.c @@ -1,8 +1,7 @@ /* PR tree-optimization/95771 */ /* { dg-do compile } */ /* { dg-options "-O2 -mpopcnt -fdump-tree-optimized" } */ -/* { dg-final { scan-tree-dump-times " = __builtin_popcount" 6 "optimized" { target int128 } } } */ -/* { dg-final { scan-tree-dump-times " = __builtin_popcount" 4 "optimized" { target { ! int128 } } } } */ +/* { dg-final { scan-tree-dump-times " = __builtin_popcount| = \\.POPCOUNT" 4 "optimized" } } */ int foo (unsigned char x) @@ -51,17 +50,3 @@ qux (unsigned long long x) } return i; } - -#ifdef __SIZEOF_INT128__ -int -corge (unsigned __int128 x) -{ - int i = 0; - while (x) - { - x &= x - 1; - ++i; - } - return i; -} -#endif diff --git a/gcc/tree-ssa-loop-niter.cc b/gcc/tree-ssa-loop-niter.cc index 9c2f9f3d5f6205bb5e7f490257800c660fdd0b8d..cc53b27329f8518bc2cacef1830768a140331b31 100644 --- a/gcc/tree-ssa-loop-niter.cc +++ b/gcc/tree-ssa-loop-niter.cc @@ -2033,11 +2033,18 @@ static tree build_popcount_expr (tree src) { tree fn; + bool use_ifn = false; int prec = TYPE_PRECISION (TREE_TYPE (src)); int i_prec = TYPE_PRECISION (integer_type_node); int li_prec = TYPE_PRECISION (long_integer_type_node); int lli_prec = TYPE_PRECISION (long_long_integer_type_node); - if (prec <= i_prec) + + tree utype = unsigned_type_for (TREE_TYPE (src)); + src = fold_convert (utype, src); + + if (direct_internal_fn_supported_p (IFN_POPCOUNT, utype, OPTIMIZE_FOR_BOTH)) + use_ifn = true; + else if (prec <= i_prec) fn = builtin_decl_implicit (BUILT_IN_POPCOUNT); else if (prec == li_prec) fn = builtin_decl_implicit (BUILT_IN_POPCOUNTL); @@ -2046,12 +2053,11 @@ build_popcount_expr (tree src) else return NULL_TREE; - tree utype = unsigned_type_for (TREE_TYPE (src)); - src = fold_convert (utype, src); - if (prec < i_prec) - src = fold_convert (unsigned_type_node, src); tree call; - if (prec == 2 * lli_prec) + if (use_ifn) + call = build_call_expr_internal_loc (UNKNOWN_LOCATION, IFN_POPCOUNT, + integer_type_node, 1, src); + else if (prec == 2 * lli_prec) { tree src1 = fold_convert (long_long_unsigned_type_node, fold_build2 (RSHIFT_EXPR, TREE_TYPE (src), @@ -2064,7 +2070,12 @@ build_popcount_expr (tree src) call = fold_build2 (PLUS_EXPR, integer_type_node, call1, call2); } else - call = build_call_expr (fn, 1, src); + { + if (prec < i_prec) + src = fold_convert (unsigned_type_node, src); + + call = build_call_expr (fn, 1, src); + } return call; }