From patchwork Tue Jan 2 17:57:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tamar Christina X-Patchwork-Id: 1881703 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=armh.onmicrosoft.com header.i=@armh.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-armh-onmicrosoft-com header.b=aHlCOo3Y; dkim=pass (1024-bit key) header.d=armh.onmicrosoft.com header.i=@armh.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-armh-onmicrosoft-com header.b=aHlCOo3Y; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4T4LDX3X2Bz20LT for ; Wed, 3 Jan 2024 04:58:03 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 981E23857BB7 for ; Tue, 2 Jan 2024 17:58:01 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on2083.outbound.protection.outlook.com [40.107.8.83]) by sourceware.org (Postfix) with ESMTPS id B63C73858D32 for ; Tue, 2 Jan 2024 17:57:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B63C73858D32 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 B63C73858D32 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=40.107.8.83 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1704218258; cv=pass; b=gk0tirRb4ZFcudLQRHDXJzt2xclKwgWxsL5Y9pnfFi0n95nxGsQ/0wilKSlxelg5tcT9epdXy8yMfTPqftXqLIsMaPCDiIDbBgw2vBF0iaFBRP1SlCPnG70zTT7l5nlXx4CmI70ueDdnjrsKszjUJvBCiR/sD/zcDtpbDNaVglg= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1704218258; c=relaxed/simple; bh=dbeuqK65E+tjuGTuTDNULhwghHPg9W0PW0aUul2/zIY=; h=DKIM-Signature:DKIM-Signature:Date:From:To:Subject:Message-ID: MIME-Version; b=UWe1b37LlNSDKT+w6fIbAmmSQzur9/Z9jV182TiQRe81puh12BWNHdhV+UO+MH7xt+ZV6lsz83zL8xr3CM0DeFecqBdzKOGiVs3msozpFsh4yW6LVsQzc+Dt+8nvNAqxJhl8Dy3UMoIy7MPtvsfpWQtIYG+JsLBNazL2NoMzxSY= ARC-Authentication-Results: i=3; server2.sourceware.org ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=EizIv5mCiNhb8UwOLSz+TK44GTvAr8lfF3zlsEB9f5v+H+xnPrxAw2GERAR6kXExgyYlPldlKE4e9gbjXHSh/mAhoIlEEJymbGTfjVaWnnqRlccQ97Gy/Dv9UmjIdgFl9ilk3ZjDjQoYVMXywFdeSNFKxSf3QN2FvVdf196WFKPFo/tSzhB/xxsIIFyh1pWdWrBWki4xL5qY4mLU1Rz1/wo2lQXx4AKttQluqDJr9ZY0hMlg3kIGdPXdmxVPFyUmecj5HEa1NvRuvw6jvvwE2PiD/RvEOb4Ge7QzlUjmYvsiJYbF4FZWXrnvlyIjUW1q3bsHgGrqVtnQTOpOOpe4oA== ARC-Message-Signature: i=2; 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=9u0ZxAwCY7rc8XakkdvMER5ZE30YLXifDtetLznY64s=; b=SO7WPWE/i8Q6rr/iSE6Av4HCtB3n5udVWdtoF2/0hYojXV4cMWOgCSmpBDPwQor2l5szromdjAb8e1eIj2na/I2VNcpYZKCG6LG4eMPU1oYzYu22eFG86B6KuIhjncYNKWVQiCWgbFpbQuHdIacTKr8gox6tJYtsdqUt46+sc0dLiDtWo+EH5rCMK/muxwUcrHyzuLIX2A0eOyvyGJ6r0cWE3zsWmyvrcr5o1j5Gb+Spn6V440QIKMT1SFqflK70b7+XbKAvOdmbhSeAk/McPJ/BwTpxTZlfrwr2zkMn8P2MisP+scsniobxR5dDo5M4litDDKhODyKxj8+YfWEqbg== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=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=9u0ZxAwCY7rc8XakkdvMER5ZE30YLXifDtetLznY64s=; b=aHlCOo3Yo5CCy9AOrJnTfLMCvRvz3VKO7Eq4zTmiDShnluZlsmU0AqTC76D8wYbz/0m3NfHvcYl0W9GXqGTLwD4QMaZ0lqPoJp9+VSaAQHujQJTLho0DFDAnD1QfMkN1VS5YIzPVWn0WjctrDlyaBcG91rjE5tu2R8X++ZwC2UE= Received: from DU2PR04CA0268.eurprd04.prod.outlook.com (2603:10a6:10:28e::33) by PAVPR08MB9038.eurprd08.prod.outlook.com (2603:10a6:102:32d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7135.25; Tue, 2 Jan 2024 17:57:31 +0000 Received: from DU2PEPF0001E9BF.eurprd03.prod.outlook.com (2603:10a6:10:28e:cafe::3a) by DU2PR04CA0268.outlook.office365.com (2603:10a6:10:28e::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7135.25 via Frontend Transport; Tue, 2 Jan 2024 17:57:31 +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 DU2PEPF0001E9BF.mail.protection.outlook.com (10.167.8.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7159.9 via Frontend Transport; Tue, 2 Jan 2024 17:57:30 +0000 Received: ("Tessian outbound 7671e7ddc218:v228"); Tue, 02 Jan 2024 17:57:30 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: be2f026f9ff4bebc X-CR-MTA-TID: 64aa7808 Received: from b053c7f668d3.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id AE741D5D-2E40-44D8-B493-A3FD7CB9C88E.1; Tue, 02 Jan 2024 17:57:23 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id b053c7f668d3.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 02 Jan 2024 17:57:23 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=I2vbDVlCznD+hbgKcVLJ/cYz+2sEJIiE7c0OCHiThFmIIsSA4w3lMzHlXJsICDXxZiFMT9M0IW59siu2JCm2uPZSblXj9/NjrFW0CrXZgV5lp+/kNzl3a4+dXlPrOF/KJwiZpYCtYMopS18fLjbvtm8EfQcMMhvvxbscA6KYMrnmtPFMMXJ0S6LGw9UPbiLjcKTtkkodnP4AWYMJ+Z5vZy7z5nDLL0FvvEo0ar4PzKkJg7CyTYttmKxE5BJIuz642zVE46DchyNNM0j2HEiqSHYSNM0+k9e8WH/SbJKjABqFKXJfRXPbcQPWyropDViduwTlkySFpUN4cKvDC2ELeQ== 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=9u0ZxAwCY7rc8XakkdvMER5ZE30YLXifDtetLznY64s=; b=gjRrTFBticYXfG1igeP6XtkjtuoIAiVZVzpui2/xNljnP79aVD8vOTMrESgJowHmLdqUxoUBZSe+iEH8Fny6s7J3oeyOI3A/2qg35GVEzOHm0wAnGde6YZp8hhMZcsd33I30MezzIB6EG51WCHyuCFE5ii4L14VfWIMPkzmd2nL9Zt4rAEsKGXwwTpqqhlU9+AFDSDnKIMnpmtDM/86JmnAuI0SNzzz9BylVVR0t3o6h3xW9Gp4E2lOJhcn9+GQkh8Elb4+z5T2aEqjBhyswgCKwSxqJ5lChhiTEJwk6fVyCuuI7x97PL0fmDO/eXqjXE+k7pow3ZPThnB6/ta2D0Q== 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=9u0ZxAwCY7rc8XakkdvMER5ZE30YLXifDtetLznY64s=; b=aHlCOo3Yo5CCy9AOrJnTfLMCvRvz3VKO7Eq4zTmiDShnluZlsmU0AqTC76D8wYbz/0m3NfHvcYl0W9GXqGTLwD4QMaZ0lqPoJp9+VSaAQHujQJTLho0DFDAnD1QfMkN1VS5YIzPVWn0WjctrDlyaBcG91rjE5tu2R8X++ZwC2UE= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by AS8PR08MB9624.eurprd08.prod.outlook.com (2603:10a6:20b:617::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7135.25; Tue, 2 Jan 2024 17:57:21 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::9679:2ab0:99c6:54a3]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::9679:2ab0:99c6:54a3%6]) with mapi id 15.20.7159.013; Tue, 2 Jan 2024 17:57:21 +0000 Date: Tue, 2 Jan 2024 17:57:19 +0000 From: Tamar Christina To: gcc-patches@gcc.gnu.org Cc: nd@arm.com, rguenther@suse.de, jlaw@ventanamicro.com Subject: [PATCH]middle-end: check if target can do extract first for early breaks [PR113199] Message-ID: Content-Disposition: inline X-ClientProxiedBy: LO6P123CA0025.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:313::18) To VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: VI1PR08MB5325:EE_|AS8PR08MB9624:EE_|DU2PEPF0001E9BF:EE_|PAVPR08MB9038:EE_ X-MS-Office365-Filtering-Correlation-Id: 4a18d1fe-2977-4258-87a4-08dc0bbc4a4f 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: IUAvfDX84Y/AV5YV+WxwBsFxcik8RVBOwtOoQxFYqkixvTB30HvOYmwNiGvCbKkCq/oMRZllMWpPNoJvQA2MuSWg6GHPXxhYiLMjdJUOjRXyqlBRbZeDli8jEsvbKVjuMVtOM4fPbpDSeYwxJd1pPllGkBIJqKy6P2YiFbbU+c3VbNgxjqRsG2+wVeeElByzsVavXgORYbOfwSCRG5MnLy2lTasc6uOT9nw+O+cFTka+xIGZM+M3o8rrDBdgt0YyRf7UcKF+pMGwccvGaucD9x2ilCyx6iNmDt2Iqc69/b8xE2iK8ZBHWS4B4+dVK/yqHtsnwh4cqoGxWN7M+RhjyY6EIi1bfDs2nqFWbRg0ihPWYkmGwYhn+lIfCqsgpqayRMkw8SrKDEVt65HZcXNAyfOL/y5RXAhUMs0HHmOTLGdbIYydoxbfAkJCxCntkvaUYtP1XKxd3L6i0kqpNaHps0tlACp2mOCozqVw89BK+guKp2Q+HaO0x0qs0n4iz8MNiHA9lF9yAi0lrRkx5G/h+w5CvgHCpBI02Q+nCCI5GQD8E4552062rjgiXM9yghvticrAPD7XiYxvvxfbw8OdvmQb0c+0TXgPMumfYuQYyN1pABr1TzcVZ1PnAAcQo0C5 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:(13230031)(39860400002)(346002)(136003)(376002)(366004)(396003)(230922051799003)(1800799012)(64100799003)(451199024)(186009)(26005)(2616005)(4743002)(38100700002)(66946007)(66556008)(36756003)(66476007)(316002)(6916009)(6486002)(478600001)(86362001)(5660300002)(2906002)(235185007)(44832011)(8676002)(8936002)(4326008)(84970400001)(6512007)(6506007)(44144004)(33964004)(41300700001)(4216001)(2700100001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB9624 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: DU2PEPF0001E9BF.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: c854d1bd-9927-4ac1-930e-08dc0bbc44a1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: iYzaooOY91/VAnXmopAR6AxW8emh7lDwQVZEDgTNb71gr31qdIYJLmR9fgqSQYS0vJ0b/VOlj80lnHaGUXsQg3Hz3rpM2tW3iFwVKNTCe5r9tqmOD9tpusKsJTnksztb32KjBjz2ljqXagsQpNqMwM8OhzZkmhr4eg0tXq2YtnpWC+/BdqGMGoud6kbU5A0XGzesWK1FzILYS2CBGIZTMt0+EcQmsp8GEP5hK3iFH59iS1mn+sW5ZCcTqlD7fLxYB+wURdm/+HS+EgnJVyIN9MxEQRylHr5aIf/ib97emNTOohYGdX60oIKbFJFPk6iE8GoMq8VV3ooCH2EMvA/D8/AmFd5h6A2XIKmagHXfIxrh7sUulU2dd95wpFckCyfHkeaZZxTpDfzt18Y/xDfT0LxCByMoUwZO3P+XNPKCtD9TZI2iLjcuCu8DRH0rrV6QYO6PQhqktzR6rXMgkUvhQST65LVdhnI4swFpIBFfsBANbDzcp+esMB3ASQDxz936qVmqjlaM0ke9Oxc5m9+ZT4NYsnEiSypT0cs/+N5JxckQrI/n+1yb+jQopA+6bkNEviTJ3jIqEAmq/+BM/8t255Jdx9uRky2JTX6esCMY3HWzty2eiqpSwoijEebqOCRxfwIQ2D5pgyHxKlqoLvZzsagBgK09rj45XxPjWHVjQd/3Z+zvl9z5ROEPwgLGfQ4sz/+H4GQ+nkl30JB/6pplvY3ybtDkUce8ygTDrDXYj36eLMJut10sQyQfXxINtNld8EU5jYAGPnusb+wHntHUlg== 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)(346002)(39860400002)(396003)(136003)(376002)(230922051799003)(82310400011)(64100799003)(186009)(1800799012)(451199024)(36840700001)(46966006)(40470700004)(40480700001)(84970400001)(40460700003)(336012)(86362001)(70206006)(70586007)(82740400003)(81166007)(356005)(36756003)(33964004)(47076005)(4743002)(26005)(2616005)(107886003)(44144004)(478600001)(6486002)(6916009)(6506007)(316002)(5660300002)(235185007)(44832011)(36860700001)(2906002)(6512007)(41300700001)(4326008)(8676002)(8936002)(4216001)(2700100001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jan 2024 17:57:30.8094 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4a18d1fe-2977-4258-87a4-08dc0bbc4a4f 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: DU2PEPF0001E9BF.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR08MB9038 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, KAM_LOTSOFHASH, KAM_SHORT, 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 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+incoming=patchwork.ozlabs.org@gcc.gnu.org Hi All, I was generating the vector reverse mask without checking if the target actually supported such an operation. It also seems like more targets implement VEC_EXTRACT than permute on mask registers. So this adds a check for IFN_VEC_EXTRACT support when required and changes the select first code to use it. This is good for now since masks always come from whilelo. But in the future when masks can come from other sources we will need the old code back. Bootstrapped Regtested on aarch64-none-linux-gnu, x86_64-pc-linux-gnu and no issues with --enable-checking=release --enable-lto --with-build-config=bootstrap-O3 --enable-checking=yes,rtl,extra. tested on cross cc1 for amdgcn-amdhsa and issue fixed. Ok for master? Thanks, Tamar gcc/ChangeLog: PR tree-optimization/113199 * tree-vect-loop.cc (vectorizable_live_operation_1): Use IFN_VEC_EXTRACT. (vectorizable_live_operation): Check for IFN_VEC_EXTRACT support. gcc/testsuite/ChangeLog: PR tree-optimization/113199 * gcc.target/gcn/pr113199.c: New test. --- inline copy of patch -- diff --git a/gcc/testsuite/gcc.target/gcn/pr113199.c b/gcc/testsuite/gcc.target/gcn/pr113199.c new file mode 100644 index 0000000000000000000000000000000000000000..8a641e5536e80e207ca0163cac66c0f4f6ca93f7 --- diff --git a/gcc/testsuite/gcc.target/gcn/pr113199.c b/gcc/testsuite/gcc.target/gcn/pr113199.c new file mode 100644 index 0000000000000000000000000000000000000000..8a641e5536e80e207ca0163cac66c0f4f6ca93f7 --- /dev/null +++ b/gcc/testsuite/gcc.target/gcn/pr113199.c @@ -0,0 +1,44 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-O2" } */ + +typedef long unsigned int size_t; +typedef int wchar_t; +struct tm +{ + int tm_mon; + int tm_year; +}; +int abs (int); +struct lc_time_T { const char *month[12]; }; +struct __locale_t * __get_current_locale (void) { } +const struct lc_time_T * __get_time_locale (struct __locale_t *locale) { } +const wchar_t * __ctloc (wchar_t *buf, const char *elem, size_t *len_ret) { return buf; } +size_t +__strftime (wchar_t *s, size_t maxsize, const wchar_t *format, + const struct tm *tim_p, struct __locale_t *locale) +{ + size_t count = 0; + const wchar_t *ctloc; + wchar_t ctlocbuf[256]; + size_t i, ctloclen; + const struct lc_time_T *_CurrentTimeLocale = __get_time_locale (locale); + { + switch (*format) + { + case L'B': + (ctloc = __ctloc (ctlocbuf, _CurrentTimeLocale->month[tim_p->tm_mon], &ctloclen)); + for (i = 0; i < ctloclen; i++) + { + if (count < maxsize - 1) + s[count++] = ctloc[i]; + else + return 0; + { + int century = tim_p->tm_year >= 0 + ? tim_p->tm_year / 100 + 1900 / 100 + : abs (tim_p->tm_year + 1900) / 100; + } + } + } + } +} diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index 37f1be1101ffae779214056a0886411e0683e887..5aa92e67444e7aacf458fffa1428f1983c482374 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -10648,36 +10648,18 @@ vectorizable_live_operation_1 (loop_vec_info loop_vinfo, &LOOP_VINFO_MASKS (loop_vinfo), 1, vectype, 0); tree scalar_res; + gimple_seq_add_seq (&stmts, tem); /* For an inverted control flow with early breaks we want EXTRACT_FIRST - instead of EXTRACT_LAST. Emulate by reversing the vector and mask. */ + instead of EXTRACT_LAST. For now since the mask always comes from a + WHILELO we can get the first element ignoring the mask since CLZ of the + mask will always be zero. */ if (restart_loop && LOOP_VINFO_EARLY_BREAKS (loop_vinfo)) - { - /* First create the permuted mask. */ - tree perm_mask = perm_mask_for_reverse (TREE_TYPE (mask)); - tree perm_dest = copy_ssa_name (mask); - gimple *perm_stmt - = gimple_build_assign (perm_dest, VEC_PERM_EXPR, mask, - mask, perm_mask); - vect_finish_stmt_generation (loop_vinfo, stmt_info, perm_stmt, - &gsi); - mask = perm_dest; - - /* Then permute the vector contents. */ - tree perm_elem = perm_mask_for_reverse (vectype); - perm_dest = copy_ssa_name (vec_lhs_phi); - perm_stmt - = gimple_build_assign (perm_dest, VEC_PERM_EXPR, vec_lhs_phi, - vec_lhs_phi, perm_elem); - vect_finish_stmt_generation (loop_vinfo, stmt_info, perm_stmt, - &gsi); - vec_lhs_phi = perm_dest; - } - - gimple_seq_add_seq (&stmts, tem); - - scalar_res = gimple_build (&stmts, CFN_EXTRACT_LAST, scalar_type, - mask, vec_lhs_phi); + scalar_res = gimple_build (&stmts, CFN_VEC_EXTRACT, TREE_TYPE (vectype), + vec_lhs_phi, bitstart); + else + scalar_res = gimple_build (&stmts, CFN_EXTRACT_LAST, scalar_type, + mask, vec_lhs_phi); /* Convert the extracted vector element to the scalar type. */ new_tree = gimple_convert (&stmts, lhs_type, scalar_res); @@ -10852,9 +10834,25 @@ vectorizable_live_operation (vec_info *vinfo, stmt_vec_info stmt_info, gcc_assert (ncopies == 1 && !slp_node); if (direct_internal_fn_supported_p (IFN_EXTRACT_LAST, vectype, OPTIMIZE_FOR_SPEED)) - vect_record_loop_mask (loop_vinfo, - &LOOP_VINFO_MASKS (loop_vinfo), - 1, vectype, NULL); + { + if (LOOP_VINFO_EARLY_BREAKS_VECT_PEELED (loop_vinfo) + && LOOP_VINFO_EARLY_BREAKS (loop_vinfo) + && !direct_internal_fn_supported_p (IFN_EXTRACT_LAST, + vectype, + OPTIMIZE_FOR_SPEED)) + { + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, + "can't operate on partial vectors " + "because the target doesn't support extract " + "first reduction.\n"); + LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo) = false; + } + else + vect_record_loop_mask (loop_vinfo, + &LOOP_VINFO_MASKS (loop_vinfo), + 1, vectype, NULL); + } else if (can_vec_extract_var_idx_p ( TYPE_MODE (vectype), TYPE_MODE (TREE_TYPE (vectype)))) vect_record_loop_len (loop_vinfo, --- /dev/null +++ b/gcc/testsuite/gcc.target/gcn/pr113199.c @@ -0,0 +1,44 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-O2" } */ + +typedef long unsigned int size_t; +typedef int wchar_t; +struct tm +{ + int tm_mon; + int tm_year; +}; +int abs (int); +struct lc_time_T { const char *month[12]; }; +struct __locale_t * __get_current_locale (void) { } +const struct lc_time_T * __get_time_locale (struct __locale_t *locale) { } +const wchar_t * __ctloc (wchar_t *buf, const char *elem, size_t *len_ret) { return buf; } +size_t +__strftime (wchar_t *s, size_t maxsize, const wchar_t *format, + const struct tm *tim_p, struct __locale_t *locale) +{ + size_t count = 0; + const wchar_t *ctloc; + wchar_t ctlocbuf[256]; + size_t i, ctloclen; + const struct lc_time_T *_CurrentTimeLocale = __get_time_locale (locale); + { + switch (*format) + { + case L'B': + (ctloc = __ctloc (ctlocbuf, _CurrentTimeLocale->month[tim_p->tm_mon], &ctloclen)); + for (i = 0; i < ctloclen; i++) + { + if (count < maxsize - 1) + s[count++] = ctloc[i]; + else + return 0; + { + int century = tim_p->tm_year >= 0 + ? tim_p->tm_year / 100 + 1900 / 100 + : abs (tim_p->tm_year + 1900) / 100; + } + } + } + } +} diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index 37f1be1101ffae779214056a0886411e0683e887..5aa92e67444e7aacf458fffa1428f1983c482374 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -10648,36 +10648,18 @@ vectorizable_live_operation_1 (loop_vec_info loop_vinfo, &LOOP_VINFO_MASKS (loop_vinfo), 1, vectype, 0); tree scalar_res; + gimple_seq_add_seq (&stmts, tem); /* For an inverted control flow with early breaks we want EXTRACT_FIRST - instead of EXTRACT_LAST. Emulate by reversing the vector and mask. */ + instead of EXTRACT_LAST. For now since the mask always comes from a + WHILELO we can get the first element ignoring the mask since CLZ of the + mask will always be zero. */ if (restart_loop && LOOP_VINFO_EARLY_BREAKS (loop_vinfo)) - { - /* First create the permuted mask. */ - tree perm_mask = perm_mask_for_reverse (TREE_TYPE (mask)); - tree perm_dest = copy_ssa_name (mask); - gimple *perm_stmt - = gimple_build_assign (perm_dest, VEC_PERM_EXPR, mask, - mask, perm_mask); - vect_finish_stmt_generation (loop_vinfo, stmt_info, perm_stmt, - &gsi); - mask = perm_dest; - - /* Then permute the vector contents. */ - tree perm_elem = perm_mask_for_reverse (vectype); - perm_dest = copy_ssa_name (vec_lhs_phi); - perm_stmt - = gimple_build_assign (perm_dest, VEC_PERM_EXPR, vec_lhs_phi, - vec_lhs_phi, perm_elem); - vect_finish_stmt_generation (loop_vinfo, stmt_info, perm_stmt, - &gsi); - vec_lhs_phi = perm_dest; - } - - gimple_seq_add_seq (&stmts, tem); - - scalar_res = gimple_build (&stmts, CFN_EXTRACT_LAST, scalar_type, - mask, vec_lhs_phi); + scalar_res = gimple_build (&stmts, CFN_VEC_EXTRACT, TREE_TYPE (vectype), + vec_lhs_phi, bitstart); + else + scalar_res = gimple_build (&stmts, CFN_EXTRACT_LAST, scalar_type, + mask, vec_lhs_phi); /* Convert the extracted vector element to the scalar type. */ new_tree = gimple_convert (&stmts, lhs_type, scalar_res); @@ -10852,9 +10834,25 @@ vectorizable_live_operation (vec_info *vinfo, stmt_vec_info stmt_info, gcc_assert (ncopies == 1 && !slp_node); if (direct_internal_fn_supported_p (IFN_EXTRACT_LAST, vectype, OPTIMIZE_FOR_SPEED)) - vect_record_loop_mask (loop_vinfo, - &LOOP_VINFO_MASKS (loop_vinfo), - 1, vectype, NULL); + { + if (LOOP_VINFO_EARLY_BREAKS_VECT_PEELED (loop_vinfo) + && LOOP_VINFO_EARLY_BREAKS (loop_vinfo) + && !direct_internal_fn_supported_p (IFN_EXTRACT_LAST, + vectype, + OPTIMIZE_FOR_SPEED)) + { + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, + "can't operate on partial vectors " + "because the target doesn't support extract " + "first reduction.\n"); + LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo) = false; + } + else + vect_record_loop_mask (loop_vinfo, + &LOOP_VINFO_MASKS (loop_vinfo), + 1, vectype, NULL); + } else if (can_vec_extract_var_idx_p ( TYPE_MODE (vectype), TYPE_MODE (TREE_TYPE (vectype)))) vect_record_loop_len (loop_vinfo,