From patchwork Thu Jan 16 12:50:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wilco Dijkstra X-Patchwork-Id: 1224186 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-517510-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha1 header.s=default header.b=U/uR4ZwY; dkim=fail reason="signature verification failed" (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=MaB9l4Uc; dkim=fail reason="signature verification failed" (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=MaB9l4Uc; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 47z3vp62pcz9sP3 for ; Thu, 16 Jan 2020 23:50:45 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:content-type :content-transfer-encoding:mime-version; q=dns; s=default; b=DiS 8293QjGE1vJX234ovn3NLC7EGjzPIiZ/bYChp2L1uxpR1miac4ImMcbydMiTM9Ef c5eWqGcyBSfplGUwkTzhhOQ2jnWDiLaodLb/QCwWo5dpv8MOBNrJT3ApPQB6X0R+ b1X6g8jho8vH4AFTJc1RE6kiCJyIPswv4xwNT1Q4= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:content-type :content-transfer-encoding:mime-version; s=default; bh=oz2zWIKdO JuufUIECfMDCuMZoSo=; b=U/uR4ZwYAGCozNKfXzoiC65vyzCe7Eg+nh1sbg3xE 5pNFG9LIYOa0q2dq5ghSOe6QI/TBfNsRi84gXbBI2zQxwOArAS1rFkaK01eSeq5f LLbCkJojq25OJx0aK9feC6B+5uBIbk2jalevObmPhE+tFCqDgR7jOtf8qIQ+JHs1 A8= Received: (qmail 58752 invoked by alias); 16 Jan 2020 12:50:36 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 58726 invoked by uid 89); 16 Jan 2020 12:50:36 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-19.6 required=5.0 tests=AWL, BAYES_00, FORGED_SPF_HELO, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 spammy= X-HELO: EUR04-VI1-obe.outbound.protection.outlook.com Received: from mail-eopbgr80054.outbound.protection.outlook.com (HELO EUR04-VI1-obe.outbound.protection.outlook.com) (40.107.8.54) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 16 Jan 2020 12:50:25 +0000 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=Vdo69rxAUMB8pTcRyh6BAcB9Fq7pbCXYEi7Ss7ETVLI=; b=MaB9l4Uc1dno2c/H/PhKk+YU4n+nCAIZFn4sAjiSOU7QEK/nFnNgOzgcSb5sdwRzfrHuTm+jl/NPLYmgB/yGrbDGwmckHGqU3XVb0BtY3BO4EmFey6lJG7qZSUvmCDTZddH264JfWi46/VB4ZarcGQwjtNVI6ubWnAF2n+IP7p8= Received: from AM4PR08CA0074.eurprd08.prod.outlook.com (2603:10a6:205:2::45) by AM0PR08MB4962.eurprd08.prod.outlook.com (2603:10a6:208:15a::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20; Thu, 16 Jan 2020 12:50:22 +0000 Received: from VE1EUR03FT060.eop-EUR03.prod.protection.outlook.com (2a01:111:f400:7e09::201) by AM4PR08CA0074.outlook.office365.com (2603:10a6:205:2::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.21 via Frontend Transport; Thu, 16 Jan 2020 12:50:22 +0000 Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; gcc.gnu.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; gcc.gnu.org; dmarc=bestguesspass 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; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT060.mail.protection.outlook.com (10.152.19.187) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2602.11 via Frontend Transport; Thu, 16 Jan 2020 12:50:22 +0000 Received: ("Tessian outbound e09e55c05044:v40"); Thu, 16 Jan 2020 12:50:21 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: e98730b36f46ec66 X-CR-MTA-TID: 64aa7808 Received: from 1b459a9615aa.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 90D41DCB-C008-410A-BD1B-C14ACC067EE3.1; Thu, 16 Jan 2020 12:50:16 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 1b459a9615aa.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 16 Jan 2020 12:50:16 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cu9tDtTHr8efgk83DRYsp6v8KLyaftsj1TLfdhFEgLclQL1VxCX1PccW2tAyQZvm9wmd/iO1gvXBdvk6an+pKouA9/WtJmrb7N0qg2IIIwW+CqNG4OIM6w6gTHTUVPVM2BXmpEiisgbRNxqxyUUhGh/rnaVSvrKxA82OdTqp+aF212+Jrq0/X2lXxki38jXJM93HMu0CKJRpBwAi+fGu/EtY7Ta6L0FgeWGhh9YFlVv4AtyOeAQz7UAflRYn4i+IMXKUQj4pC74u0seXe5Rxflh0Kj4AZWbGv6MNe9KdUz1U3PjT/pwMPjfXmtSoS1UN5myhg/i6IGooXFaP7A3unQ== 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-SenderADCheck; bh=Vdo69rxAUMB8pTcRyh6BAcB9Fq7pbCXYEi7Ss7ETVLI=; b=JLfpnGqng+w54fxkc5sazZ4BVpWA3giNDHKrI/zvE2Z2x7c4kxxJ8jTJky8BUQAGlKRAWcgrONg0m35Cs5CkxBbn65I29lCuZyN42KZwaVTe+vhLORO24YdP8fAeK7IdX+0Q710e31XPS4fx97r3XqHHh9wT6JNv07g8/z1JbwBDEV7SDKeQ1lQYOrVrXZeTd6IcNqOGLF11jFB2GwjO7N/8I++DQ/bNADWIQ0BQUv1mY2zEmEjDEgxKaHjcdEkJZ+3FNvJcXEXmj9LChQrGYmRX5tMIuLF+8Nqkj9sSBMcCTfZicY7H9L4yglDCzxEmj/a3Pkro2c63KvugiMkPPg== 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=Vdo69rxAUMB8pTcRyh6BAcB9Fq7pbCXYEi7Ss7ETVLI=; b=MaB9l4Uc1dno2c/H/PhKk+YU4n+nCAIZFn4sAjiSOU7QEK/nFnNgOzgcSb5sdwRzfrHuTm+jl/NPLYmgB/yGrbDGwmckHGqU3XVb0BtY3BO4EmFey6lJG7qZSUvmCDTZddH264JfWi46/VB4ZarcGQwjtNVI6ubWnAF2n+IP7p8= Received: from AM5PR0801MB2035.eurprd08.prod.outlook.com (10.168.157.147) by AM5PR0801MB1970.eurprd08.prod.outlook.com (10.168.157.142) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.19; Thu, 16 Jan 2020 12:50:14 +0000 Received: from AM5PR0801MB2035.eurprd08.prod.outlook.com ([fe80::5144:2ebc:af0a:fc56]) by AM5PR0801MB2035.eurprd08.prod.outlook.com ([fe80::5144:2ebc:af0a:fc56%7]) with mapi id 15.20.2644.021; Thu, 16 Jan 2020 12:50:14 +0000 From: Wilco Dijkstra To: GCC Patches CC: Andrew Pinski , Kyrylo Tkachov , Richard Earnshaw , Richard Sandiford Subject: [PATCH][AArch64] Fix shrinkwrapping interactions with atomics (PR92692) Date: Thu, 16 Jan 2020 12:50:14 +0000 Message-ID: Authentication-Results-Original: spf=none (sender IP is ) smtp.mailfrom=Wilco.Dijkstra@arm.com; x-ms-exchange-transport-forked: True x-checkrecipientrouted: true x-ms-oob-tlc-oobclassifiers: OLM:4502;OLM:4502; X-Forefront-Antispam-Report-Untrusted: SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(366004)(346002)(136003)(376002)(396003)(199004)(189003)(52536014)(66476007)(66446008)(8676002)(66556008)(71200400001)(478600001)(33656002)(64756008)(76116006)(55016002)(5660300002)(81166006)(81156014)(9686003)(66946007)(8936002)(316002)(86362001)(4326008)(186003)(6916009)(54906003)(7696005)(6506007)(26005)(2906002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0801MB1970; H:AM5PR0801MB2035.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: DZy/nZ+IRqhUjPG4gEaGrgxIDjeo8/HVCtcVQreSNjbW2l2/xAtI8NPW5ndbgt0MFwLJIOSKn6Eedixi1N5iDG9fXezpbB5AB4XL0bgHlTBYJLeE9xgyV5qEpTZ1UBFA68s/dfZeBtVfH4upzAN/4Wr6CwsxBrKkXtaJ0P/hmNWyxdbtY4hEOxWUz1W/hv8p1FsaXko4wxhgAGuuUUFzXD4NRqSYT1ItSJTqZvRmN9SniFiNnl17FtSUyACRvn94lJBFnHqHSbrJZwWChNXsopocYqpD8Kc6//Wu0a4Q9gafAgww3Z2BxRswn0AvIXD10oUSEi4jTH4ZADFWmUWqGs1L5cD6cRzKDLVoNKazQosOZA+g7hetQDFfXKs7tkfvxaXNJ8O9FsbfNNILmpmxoeSiWkof74eWJnpPq/MZkJ1M//KEUR/Yqq9o5IX6BI1L MIME-Version: 1.0 Original-Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Wilco.Dijkstra@arm.com; X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT060.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 79d94983-4602-42e3-a258-08d79a82a1a8 The separate shrinkwrapping pass may insert stores in the middle of atomics loops which can cause issues on some implementations. Avoid this by delaying splitting of atomic patterns until after prolog/epilog generation. Bootstrap completed, no test regressions on AArch64. Andrew, can you verify this fixes the failure you were getting? ChangeLog: 2020-01-16 Wilco Dijkstra PR target/92692 * config/aarch64/aarch64.c (aarch64_split_compare_and_swap) Add assert to ensure prolog has been emitted. (aarch64_split_atomic_op): Likewise. * config/aarch64/atomics.md (aarch64_compare_and_swap) Use epilogue_completed rather than reload_completed. (aarch64_atomic_exchange): Likewise. (aarch64_atomic_): Likewise. (atomic_nand): Likewise. (aarch64_atomic_fetch_): Likewise. (atomic_fetch_nand): Likewise. (aarch64_atomic__fetch): Likewise. (atomic_nand_fetch): Likewise. diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index ac89cc1f9c938455d33d8850d9ebfc0473cb73dc..cd9d813f2ac4990971f6435fdb28b0f94ae10309 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -18375,6 +18375,9 @@ aarch64_emit_post_barrier (enum memmodel model) void aarch64_split_compare_and_swap (rtx operands[]) { + /* Split after prolog/epilog to avoid interactions with shrinkwrapping. */ + gcc_assert (epilogue_completed); + rtx rval, mem, oldval, newval, scratch, x, model_rtx; machine_mode mode; bool is_weak; @@ -18469,6 +18472,9 @@ void aarch64_split_atomic_op (enum rtx_code code, rtx old_out, rtx new_out, rtx mem, rtx value, rtx model_rtx, rtx cond) { + /* Split after prolog/epilog to avoid interactions with shrinkwrapping. */ + gcc_assert (epilogue_completed); + machine_mode mode = GET_MODE (mem); machine_mode wmode = (mode == DImode ? DImode : SImode); const enum memmodel model = memmodel_from_int (INTVAL (model_rtx)); diff --git a/gcc/config/aarch64/atomics.md b/gcc/config/aarch64/atomics.md index c2bcabd0c3c2627b7222dcbc1af9c2e6b7ce6a76..996947799b5ef8445e9786b94e1ce62fd16e5b5c 100644 --- a/gcc/config/aarch64/atomics.md +++ b/gcc/config/aarch64/atomics.md @@ -56,7 +56,7 @@ (define_insn_and_split "@aarch64_compare_and_swap" (clobber (match_scratch:SI 7 "=&r"))] "" "#" - "&& reload_completed" + "&& epilogue_completed" [(const_int 0)] { aarch64_split_compare_and_swap (operands); @@ -80,7 +80,7 @@ (define_insn_and_split "@aarch64_compare_and_swap" (clobber (match_scratch:SI 7 "=&r"))] "" "#" - "&& reload_completed" + "&& epilogue_completed" [(const_int 0)] { aarch64_split_compare_and_swap (operands); @@ -104,7 +104,7 @@ (define_insn_and_split "@aarch64_compare_and_swap" (clobber (match_scratch:SI 7 "=&r"))] "" "#" - "&& reload_completed" + "&& epilogue_completed" [(const_int 0)] { aarch64_split_compare_and_swap (operands); @@ -223,7 +223,7 @@ (define_insn_and_split "aarch64_atomic_exchange" (clobber (match_scratch:SI 4 "=&r"))] "" "#" - "&& reload_completed" + "&& epilogue_completed" [(const_int 0)] { aarch64_split_atomic_op (SET, operands[0], NULL, operands[1], @@ -344,7 +344,7 @@ (define_insn_and_split "aarch64_atomic_" (clobber (match_scratch:SI 4 "=&r"))] "" "#" - "&& reload_completed" + "&& epilogue_completed" [(const_int 0)] { aarch64_split_atomic_op (, NULL, operands[3], operands[0], @@ -400,7 +400,7 @@ (define_insn_and_split "atomic_nand" (clobber (match_scratch:SI 4 "=&r"))] "" "#" - "&& reload_completed" + "&& epilogue_completed" [(const_int 0)] { aarch64_split_atomic_op (NOT, NULL, operands[3], operands[0], @@ -504,7 +504,7 @@ (define_insn_and_split "aarch64_atomic_fetch_" (clobber (match_scratch:SI 5 "=&r"))] "" "#" - "&& reload_completed" + "&& epilogue_completed" [(const_int 0)] { aarch64_split_atomic_op (, operands[0], operands[4], operands[1], @@ -551,7 +551,7 @@ (define_insn_and_split "atomic_fetch_nand" (clobber (match_scratch:SI 5 "=&r"))] "" "#" - "&& reload_completed" + "&& epilogue_completed" [(const_int 0)] { aarch64_split_atomic_op (NOT, operands[0], operands[4], operands[1], @@ -604,7 +604,7 @@ (define_insn_and_split "aarch64_atomic__fetch" (clobber (match_scratch:SI 4 "=&r"))] "" "#" - "&& reload_completed" + "&& epilogue_completed" [(const_int 0)] { aarch64_split_atomic_op (, NULL, operands[0], operands[1], @@ -628,7 +628,7 @@ (define_insn_and_split "atomic_nand_fetch" (clobber (match_scratch:SI 4 "=&r"))] "" "#" - "&& reload_completed" + "&& epilogue_completed" [(const_int 0)] { aarch64_split_atomic_op (NOT, NULL, operands[0], operands[1],