From patchwork Fri Dec 25 06:22:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandre Oliva X-Patchwork-Id: 1420577 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=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=adacore.com Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4D2H1m3wmyz9sW0 for ; Fri, 25 Dec 2020 17:23:08 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 458F1385481A; Fri, 25 Dec 2020 06:23:06 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from rock.gnat.com (rock.gnat.com [205.232.38.15]) by sourceware.org (Postfix) with ESMTP id DBE293854800 for ; Fri, 25 Dec 2020 06:23:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org DBE293854800 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oliva@adacore.com Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id B6CE411729D; Fri, 25 Dec 2020 01:23:03 -0500 (EST) X-Virus-Scanned: Debian amavisd-new at gnat.com Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id rNBEoI3mueTi; Fri, 25 Dec 2020 01:23:03 -0500 (EST) Received: from free.home (tron.gnat.com [IPv6:2620:20:4000:0:46a8:42ff:fe0e:e294]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by rock.gnat.com (Postfix) with ESMTPS id 84407116FD7; Fri, 25 Dec 2020 01:23:03 -0500 (EST) Received: from livre (livre.home [172.31.160.2]) by free.home (8.15.2/8.15.2) with ESMTPS id 0BP6MvqF128461 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 25 Dec 2020 03:22:57 -0300 From: Alexandre Oliva To: gcc-patches@gcc.gnu.org Subject: -mno-long-calls for arm/headmerge tests Organization: Free thinker, does not speak for AdaCore Date: Fri, 25 Dec 2020 03:22:57 -0300 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: , Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" The headmerge tests pass a constant to conditional calls, so that the same constant is always passed to a function, though it's a different function depending on which path is taken. The test checks that the constant appears only once in the assembly output, as a means to verify that the insns setting up the argument are unified: they appear as separate insns up to jump2, where crossjump identifies a common prefix to all conditional paths and unifies them. Alas, with -mlong-calls, that we enable in our arm-vxworks configurations, the argument register is loaded after loading the callee address into another register. Since each path calls a different function, there's no common initial code sequence for crossjump to unify, and the argument register set up remains separate, so the test fails. Though it would surely be desirable for the compiler to perform the unification of the argument register setting up, this patch merely avoids the effects of -mlong-calls, with an explicit -mno-long-calls. Regstrapped on x86_64-linux-gnu, also tested on arm-vxworks7r2. Ok to install? for gcc/testsuite/ChangeLog * gcc.target/arm/headmerge-1.c: Add -mno-long-calls. * gcc.target/arm/headmerge-2.c: Likewise. --- gcc/testsuite/gcc.target/arm/headmerge-1.c | 2 +- gcc/testsuite/gcc.target/arm/headmerge-2.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/testsuite/gcc.target/arm/headmerge-1.c b/gcc/testsuite/gcc.target/arm/headmerge-1.c index 218c6a21ebd27..319ccd254626d 100644 --- a/gcc/testsuite/gcc.target/arm/headmerge-1.c +++ b/gcc/testsuite/gcc.target/arm/headmerge-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2" } */ +/* { dg-options "-O2 -mno-long-calls" } */ /* { dg-final { scan-assembler-times "#120" 1 } } */ extern void foo1 (int); diff --git a/gcc/testsuite/gcc.target/arm/headmerge-2.c b/gcc/testsuite/gcc.target/arm/headmerge-2.c index 17d8e9365c52e..a015eb0f56905 100644 --- a/gcc/testsuite/gcc.target/arm/headmerge-2.c +++ b/gcc/testsuite/gcc.target/arm/headmerge-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2" } */ +/* { dg-options "-O2 -mno-long-calls" } */ /* { dg-final { scan-assembler-times "120\n" 1 } } */ extern void foo1 (int);