From patchwork Thu Mar 3 14:22:15 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 1600368 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=d1cLyZ0R; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Received: from 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 RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4K8Y9k4gxBz9sBy for ; Fri, 4 Mar 2022 01:23:05 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 42F8E3857C56 for ; Thu, 3 Mar 2022 14:23:02 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 42F8E3857C56 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1646317382; bh=hPGVc+AjyfPokUyP6McZQ7Q7zGfQhEPUBkMf1vZG/OE=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=d1cLyZ0RuprsXH+PlZR0Dmzqm2yal7vca3kkqfjqRW33HrogEvtjBz3FhER4V3uvs Ha6eFy8YL5o1pZGgyQZywPda6Z1nvHrMC4NpuZT3Do7rCKuNvOmeINSR7qIk7uZVqM C2TkWMGKykuJ73X7pXZMjH31OEQEhvkRXg2Cm9Sc= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-pj1-x102a.google.com (mail-pj1-x102a.google.com [IPv6:2607:f8b0:4864:20::102a]) by sourceware.org (Postfix) with ESMTPS id 22C7B3858D39 for ; Thu, 3 Mar 2022 14:22:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 22C7B3858D39 Received: by mail-pj1-x102a.google.com with SMTP id m13-20020a17090aab0d00b001bbe267d4d1so6247595pjq.0 for ; Thu, 03 Mar 2022 06:22:18 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=hPGVc+AjyfPokUyP6McZQ7Q7zGfQhEPUBkMf1vZG/OE=; b=VHUdWOzmEDnJkgjxq5NVEYzINpcDO0mGi1yXV4o0Xwfx9q8BL+rAkL0YGFRR4S8Bva k0+8RMQBtsx8C1fxdu8HTIP1w3tU3Q6s4thp50sNBNon/AgYxgR91rvKuKRKHNHZ1gWV k3SbRanhILRAYHVEPLzB2Qg3Z7GvvB6IR4OVUXTNDe3lK+9gMMLJRlhHYG+78Oli3C6r 2LOlfSOoPzvfdfLauAiJ0vwYlblBg0a6mN00yJpKgYkVC1Mr9XMWnBiXsGJSB97Hh2fh ueCqC3TVqVWOvExYPOs0Su0sa0x9nGEC1zWG5mkf1D7a62gG3jiJiFr/GYBUiSi6j6wR 9sBg== X-Gm-Message-State: AOAM533OOadAN/tDwRU+xYJWTUdGngxSWXb0/uvwa0iLJXJEMJpYNQK1 1LbZFGwKR+9uAWbLgz28cXOkg5tpwkM= X-Google-Smtp-Source: ABdhPJymvi2tdFrjullSJ+x2US/j/IjgvprBpq7qsQVdbI0spxkefgEUiCSMZ4gr2oY5pQAcNjYglQ== X-Received: by 2002:a17:902:6b07:b0:14f:83f2:8c11 with SMTP id o7-20020a1709026b0700b0014f83f28c11mr36992370plk.168.1646317336396; Thu, 03 Mar 2022 06:22:16 -0800 (PST) Received: from gnu-tgl-3.localdomain ([172.58.35.88]) by smtp.gmail.com with ESMTPSA id oa2-20020a17090b1bc200b001bcff056f09sm2411433pjb.13.2022.03.03.06.22.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Mar 2022 06:22:16 -0800 (PST) Received: from gnu-tgl-3.. (localhost [IPv6:::1]) by gnu-tgl-3.localdomain (Postfix) with ESMTP id 13AB2C027D; Thu, 3 Mar 2022 06:22:15 -0800 (PST) To: gcc-patches@gcc.gnu.org Subject: [PATCH] x86: Always return pseudo register in ix86_gen_scratch_sse_rtx Date: Thu, 3 Mar 2022 06:22:15 -0800 Message-Id: <20220303142215.4173773-1-hjl.tools@gmail.com> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 X-Spam-Status: No, score=-3029.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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-Patchwork-Original-From: "H.J. Lu via Gcc-patches" From: "H.J. Lu" Reply-To: "H.J. Lu" Cc: liuhongt Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" ix86_gen_scratch_sse_rtx returns XMM7/XMM15/XMM31 as a scratch vector register to prevent RTL optimizers from removing vector register. It introduces a conflict with explicit XMM7/XMM15/XMM31 usage and when it is called by RTL optimizers, it may introduce conflicting usages of XMM7/XMM15/XMM31. Change ix86_gen_scratch_sse_rtx to always return a pseudo register and xfail x86 tests which are optimized with a hard scratch register. gcc/ PR target/104704 * config/i386/i386.cc (ix86_gen_scratch_sse_rtx): Always return a pseudo register. gcc/testsuite/ PR target/104704 * gcc.target/i386/incoming-11.c: Xfail. * gcc.target/i386/pieces-memset-3.c: Likewise. * gcc.target/i386/pieces-memset-37.c: Likewise. * gcc.target/i386/pieces-memset-39.c: Likewise. * gcc.target/i386/pieces-memset-46.c: Likewise. * gcc.target/i386/pieces-memset-47.c: Likewise. * gcc.target/i386/pieces-memset-48.c: Likewise. * gcc.target/i386/pr90773-5.c: Likewise. * gcc.target/i386/pr90773-14.c: Likewise. * gcc.target/i386/pr90773-17.c: Likewise. * gcc.target/i386/pr100865-8a.c: Likewise. * gcc.target/i386/pr100865-8c.c: Likewise. * gcc.target/i386/pr100865-9c.c: Likewise. * gcc.target/i386/pieces-memset-21.c: Always expect vzeroupper. * gcc.target/i386/pr82941-1.c: Likewise. * gcc.target/i386/pr82942-1.c: Likewise. * gcc.target/i386/pr82990-1.c: Likewise. * gcc.target/i386/pr82990-3.c: Likewise. * gcc.target/i386/pr82990-5.c: Likewise. * gcc.target/i386/pr100865-11b.c: Expect vmovdqa instead of vmovdqa64. * gcc.target/i386/pr100865-12b.c: Likewise. * gcc.target/i386/pr100865-8b.c: Likewise. * gcc.target/i386/pr100865-9b.c: Likewise. * gcc.target/i386/pr104704-1.c: New test. * gcc.target/i386/pr104704-2.c: Likewise. * gcc.target/i386/pr104704-3.c: Likewise. * gcc.target/i386/pr104704-4.c: Likewise. * gcc.target/i386/pr104704-5.c: Likewise. * gcc.target/i386/pr104704-6.c: Likewise. --- gcc/config/i386/i386.cc | 19 +---------- gcc/testsuite/gcc.target/i386/incoming-11.c | 2 +- .../gcc.target/i386/pieces-memset-21.c | 3 +- .../gcc.target/i386/pieces-memset-3.c | 4 +-- .../gcc.target/i386/pieces-memset-37.c | 4 +-- .../gcc.target/i386/pieces-memset-39.c | 4 +-- .../gcc.target/i386/pieces-memset-46.c | 2 +- .../gcc.target/i386/pieces-memset-47.c | 2 +- .../gcc.target/i386/pieces-memset-48.c | 2 +- gcc/testsuite/gcc.target/i386/pr100865-11b.c | 2 +- gcc/testsuite/gcc.target/i386/pr100865-12b.c | 2 +- gcc/testsuite/gcc.target/i386/pr100865-8a.c | 2 +- gcc/testsuite/gcc.target/i386/pr100865-8b.c | 2 +- gcc/testsuite/gcc.target/i386/pr100865-8c.c | 2 +- gcc/testsuite/gcc.target/i386/pr100865-9b.c | 2 +- gcc/testsuite/gcc.target/i386/pr100865-9c.c | 2 +- gcc/testsuite/gcc.target/i386/pr104704-1.c | 33 +++++++++++++++++++ gcc/testsuite/gcc.target/i386/pr104704-2.c | 33 +++++++++++++++++++ gcc/testsuite/gcc.target/i386/pr104704-3.c | 33 +++++++++++++++++++ gcc/testsuite/gcc.target/i386/pr104704-4.c | 33 +++++++++++++++++++ gcc/testsuite/gcc.target/i386/pr104704-5.c | 33 +++++++++++++++++++ gcc/testsuite/gcc.target/i386/pr104704-6.c | 33 +++++++++++++++++++ gcc/testsuite/gcc.target/i386/pr82941-1.c | 3 +- gcc/testsuite/gcc.target/i386/pr82942-1.c | 3 +- gcc/testsuite/gcc.target/i386/pr82990-1.c | 3 +- gcc/testsuite/gcc.target/i386/pr82990-3.c | 3 +- gcc/testsuite/gcc.target/i386/pr82990-5.c | 3 +- gcc/testsuite/gcc.target/i386/pr90773-14.c | 2 +- gcc/testsuite/gcc.target/i386/pr90773-17.c | 2 +- gcc/testsuite/gcc.target/i386/pr90773-5.c | 2 +- 30 files changed, 225 insertions(+), 50 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr104704-1.c create mode 100644 gcc/testsuite/gcc.target/i386/pr104704-2.c create mode 100644 gcc/testsuite/gcc.target/i386/pr104704-3.c create mode 100644 gcc/testsuite/gcc.target/i386/pr104704-4.c create mode 100644 gcc/testsuite/gcc.target/i386/pr104704-5.c create mode 100644 gcc/testsuite/gcc.target/i386/pr104704-6.c diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc index b2bf90576d5..95219902694 100644 --- a/gcc/config/i386/i386.cc +++ b/gcc/config/i386/i386.cc @@ -23786,24 +23786,7 @@ ix86_optab_supported_p (int op, machine_mode mode1, machine_mode, rtx ix86_gen_scratch_sse_rtx (machine_mode mode) { - if (TARGET_SSE && !lra_in_progress) - { - unsigned int regno; - if (TARGET_64BIT) - { - /* In 64-bit mode, use XMM31 to avoid vzeroupper and always - use XMM31 for CSE. */ - if (ix86_hard_regno_mode_ok (LAST_EXT_REX_SSE_REG, mode)) - regno = LAST_EXT_REX_SSE_REG; - else - regno = LAST_REX_SSE_REG; - } - else - regno = LAST_SSE_REG; - return gen_rtx_REG (mode, regno); - } - else - return gen_reg_rtx (mode); + return gen_reg_rtx (mode); } /* Address space support. diff --git a/gcc/testsuite/gcc.target/i386/incoming-11.c b/gcc/testsuite/gcc.target/i386/incoming-11.c index 4b822684b88..a06fdee477d 100644 --- a/gcc/testsuite/gcc.target/i386/incoming-11.c +++ b/gcc/testsuite/gcc.target/i386/incoming-11.c @@ -15,4 +15,4 @@ void f() for (i = 0; i < 100; i++) q[i] = 1; } -/* { dg-final { scan-assembler-not "andl\[\\t \]*\\$-16,\[\\t \]*%esp" } } */ +/* { dg-final { scan-assembler-not "andl\[\\t \]*\\$-16,\[\\t \]*%esp" { xfail *-*-* } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-21.c b/gcc/testsuite/gcc.target/i386/pieces-memset-21.c index 4e2a7407c8a..a04f7eb55c7 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-21.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-21.c @@ -11,8 +11,7 @@ foo (void) /* { dg-final { scan-assembler-times "vpxor(?:d|)\[ \\t\]+\[^\n\]*%xmm" 1 } } */ /* { dg-final { scan-assembler-times "vmovdqu(?:64|8)\[ \\t\]+\[^\n\]*%zmm" 1 } } */ -/* { dg-final { scan-assembler-not "vzeroupper" { target { ! ia32 } } } } */ -/* { dg-final { scan-assembler "vzeroupper" { target ia32 } } } */ +/* { dg-final { scan-assembler "vzeroupper" } } */ /* No need to dynamically realign the stack here. */ /* { dg-final { scan-assembler-not "and\[^\n\r]*%\[re\]sp" } } */ /* Nor use a frame pointer. */ diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-3.c b/gcc/testsuite/gcc.target/i386/pieces-memset-3.c index 2aed6dbc68e..765441a7c4a 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-3.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-3.c @@ -13,6 +13,6 @@ foo (int x) /* { dg-final { scan-assembler-times "vinserti64x4\[ \\t\]+\[^\n\]*%zmm" 1 } } */ /* { dg-final { scan-assembler-times "vmovdqu64\[ \\t\]+\[^\n\]*%zmm" 1 } } */ /* No need to dynamically realign the stack here. */ -/* { dg-final { scan-assembler-not "and\[^\n\r]*%\[re\]sp" } } */ +/* { dg-final { scan-assembler-not "and\[^\n\r]*%\[re\]sp" { xfail *-*-* } } } */ /* Nor use a frame pointer. */ -/* { dg-final { scan-assembler-not "%\[re\]bp" { target { ! ia32 } } } } */ +/* { dg-final { scan-assembler-not "%\[re\]bp" { xfail *-*-* } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-37.c b/gcc/testsuite/gcc.target/i386/pieces-memset-37.c index fd09bd153ce..0c5056be54d 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-37.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-37.c @@ -10,6 +10,6 @@ foo (int a1, int a2, int a3, int a4, int a5, int a6, int x, char *dst) /* { dg-final { scan-assembler-times "vpbroadcastb\[ \\t\]+\[^\n\]*%ymm" 1 } } */ /* { dg-final { scan-assembler-times "vmovdqu\[ \\t\]+\[^\n\]*%ymm" 2 } } */ /* No need to dynamically realign the stack here. */ -/* { dg-final { scan-assembler-not "and\[^\n\r]*%\[re\]sp" } } */ +/* { dg-final { scan-assembler-not "and\[^\n\r]*%\[re\]sp" { xfail *-*-* } } } */ /* Nor use a frame pointer. */ -/* { dg-final { scan-assembler-not "%\[re\]bp" } } */ +/* { dg-final { scan-assembler-not "%\[re\]bp" { xfail *-*-* } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-39.c b/gcc/testsuite/gcc.target/i386/pieces-memset-39.c index 0ed88b274bd..e33644c2f10 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-39.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-39.c @@ -11,6 +11,6 @@ foo (int a1, int a2, int a3, int a4, int a5, int a6, int x, char *dst) /* { dg-final { scan-assembler-not "vinserti64x4" } } */ /* { dg-final { scan-assembler-times "vmovdqu8\[ \\t\]+\[^\n\]*%zmm" 1 } } */ /* No need to dynamically realign the stack here. */ -/* { dg-final { scan-assembler-not "and\[^\n\r]*%\[re\]sp" } } */ +/* { dg-final { scan-assembler-not "and\[^\n\r]*%\[re\]sp" { xfail *-*-* } } } */ /* Nor use a frame pointer. */ -/* { dg-final { scan-assembler-not "%\[re\]bp" } } */ +/* { dg-final { scan-assembler-not "%\[re\]bp" { xfail *-*-* } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-46.c b/gcc/testsuite/gcc.target/i386/pieces-memset-46.c index ab7894aa2e6..be1b054eed2 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-46.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-46.c @@ -10,7 +10,7 @@ foo (void) } /* { dg-final { scan-assembler-times "vmovdqu8\[ \\t\]+\[^\n\]*%zmm" 1 } } */ -/* { dg-final { scan-assembler-times "vmovw\[ \\t\]+\[^\n\]*%xmm" 1 } } */ +/* { dg-final { scan-assembler-times "vmovw\[ \\t\]+\[^\n\]*%xmm" 1 { xfail *-*-* } } } */ /* No need to dynamically realign the stack here. */ /* { dg-final { scan-assembler-not "and\[^\n\r]*%\[re\]sp" } } */ /* Nor use a frame pointer. */ diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-47.c b/gcc/testsuite/gcc.target/i386/pieces-memset-47.c index 8f2c254ad03..78d3290c74f 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-47.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-47.c @@ -10,7 +10,7 @@ foo (void) } /* { dg-final { scan-assembler-times "vmovdqu(?:8|)\[ \\t\]+\[^\n\]*%xmm" 4 } } */ -/* { dg-final { scan-assembler-times "vmovw\[ \\t\]+\[^\n\]*%xmm" 1 } } */ +/* { dg-final { scan-assembler-times "vmovw\[ \\t\]+\[^\n\]*%xmm" 1 { xfail *-*-* } } } */ /* No need to dynamically realign the stack here. */ /* { dg-final { scan-assembler-not "and\[^\n\r]*%\[re\]sp" } } */ /* Nor use a frame pointer. */ diff --git a/gcc/testsuite/gcc.target/i386/pieces-memset-48.c b/gcc/testsuite/gcc.target/i386/pieces-memset-48.c index 9a7da962183..6342dbb91b0 100644 --- a/gcc/testsuite/gcc.target/i386/pieces-memset-48.c +++ b/gcc/testsuite/gcc.target/i386/pieces-memset-48.c @@ -10,7 +10,7 @@ foo (void) } /* { dg-final { scan-assembler-times "vmovdqu(?:8|)\[ \\t\]+\[^\n\]*%ymm" 2 } } */ -/* { dg-final { scan-assembler-times "vmovw\[ \\t\]+\[^\n\]*%xmm" 1 } } */ +/* { dg-final { scan-assembler-times "vmovw\[ \\t\]+\[^\n\]*%xmm" 1 { xfail *-*-* } } } */ /* No need to dynamically realign the stack here. */ /* { dg-final { scan-assembler-not "and\[^\n\r]*%\[re\]sp" } } */ /* Nor use a frame pointer. */ diff --git a/gcc/testsuite/gcc.target/i386/pr100865-11b.c b/gcc/testsuite/gcc.target/i386/pr100865-11b.c index 7e458e85cdd..12d55b9a642 100644 --- a/gcc/testsuite/gcc.target/i386/pr100865-11b.c +++ b/gcc/testsuite/gcc.target/i386/pr100865-11b.c @@ -5,4 +5,4 @@ /* { dg-final { scan-assembler-times "movabsq" 1 } } */ /* { dg-final { scan-assembler-times "vpbroadcastq\[\\t \]+%(?:r|e)\[^\n\]*, %xmm\[0-9\]+" 1 } } */ -/* { dg-final { scan-assembler-times "vmovdqa64\[\\t \]%xmm\[0-9\]+, " 16 } } */ +/* { dg-final { scan-assembler-times "vmovdqa\[\\t \]%xmm\[0-9\]+, " 16 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr100865-12b.c b/gcc/testsuite/gcc.target/i386/pr100865-12b.c index dee0cfb016a..63a5629b90c 100644 --- a/gcc/testsuite/gcc.target/i386/pr100865-12b.c +++ b/gcc/testsuite/gcc.target/i386/pr100865-12b.c @@ -5,4 +5,4 @@ /* { dg-final { scan-assembler-times "movabsq" 1 } } */ /* { dg-final { scan-assembler-times "vpbroadcastq\[\\t \]+%(?:r|e)\[^\n\]*, %xmm\[0-9\]+" 1 } } */ -/* { dg-final { scan-assembler-times "vmovdqa64\[\\t \]%xmm\[0-9\]+, " 16 } } */ +/* { dg-final { scan-assembler-times "vmovdqa\[\\t \]%xmm\[0-9\]+, " 16 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr100865-8a.c b/gcc/testsuite/gcc.target/i386/pr100865-8a.c index 544a14db6f7..911b14d4a25 100644 --- a/gcc/testsuite/gcc.target/i386/pr100865-8a.c +++ b/gcc/testsuite/gcc.target/i386/pr100865-8a.c @@ -20,5 +20,5 @@ foo (void) array[i] = MK_CONST128_BROADCAST_SIGNED (-45); } -/* { dg-final { scan-assembler-times "(?:vpbroadcastd|vpshufd)\[\\t \]+\[^\n\]*, %xmm\[0-9\]+" 1 } } */ +/* { dg-final { scan-assembler-times "(?:vpbroadcastd|vpshufd)\[\\t \]+\[^\n\]*, %xmm\[0-9\]+" 1 { xfail *-*-* } } } */ /* { dg-final { scan-assembler-times "vmovdqa\[\\t \]%xmm\[0-9\]+, " 16 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr100865-8b.c b/gcc/testsuite/gcc.target/i386/pr100865-8b.c index 4b7dd7cee3e..99a10ad83bd 100644 --- a/gcc/testsuite/gcc.target/i386/pr100865-8b.c +++ b/gcc/testsuite/gcc.target/i386/pr100865-8b.c @@ -4,4 +4,4 @@ #include "pr100865-8a.c" /* { dg-final { scan-assembler-times "vpbroadcastd\[\\t \]+%(?:r|e)\[^\n\]*, %xmm\[0-9\]+" 1 } } */ -/* { dg-final { scan-assembler-times "vmovdqa64\[\\t \]%xmm\[0-9\]+, " 16 } } */ +/* { dg-final { scan-assembler-times "vmovdqa\[\\t \]%xmm\[0-9\]+, " 16 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr100865-8c.c b/gcc/testsuite/gcc.target/i386/pr100865-8c.c index efee0488614..00682edb8c9 100644 --- a/gcc/testsuite/gcc.target/i386/pr100865-8c.c +++ b/gcc/testsuite/gcc.target/i386/pr100865-8c.c @@ -3,5 +3,5 @@ #include "pr100865-8a.c" -/* { dg-final { scan-assembler-times "vpshufd\[\\t \]+\[^\n\]*, %xmm\[0-9\]+" 1 } } */ +/* { dg-final { scan-assembler-times "vpshufd\[\\t \]+\[^\n\]*, %xmm\[0-9\]+" 1 { xfail *-*-* } } } */ /* { dg-final { scan-assembler-times "vmovdqa\[\\t \]%xmm\[0-9\]+, " 16 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr100865-9b.c b/gcc/testsuite/gcc.target/i386/pr100865-9b.c index a315dde7c52..14696248525 100644 --- a/gcc/testsuite/gcc.target/i386/pr100865-9b.c +++ b/gcc/testsuite/gcc.target/i386/pr100865-9b.c @@ -4,4 +4,4 @@ #include "pr100865-9a.c" /* { dg-final { scan-assembler-times "vpbroadcastw\[\\t \]+%(?:r|e)\[^\n\]*, %xmm\[0-9\]+" 1 } } */ -/* { dg-final { scan-assembler-times "vmovdqa64\[\\t \]%xmm\[0-9\]+, " 16 } } */ +/* { dg-final { scan-assembler-times "vmovdqa\[\\t \]%xmm\[0-9\]+, " 16 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr100865-9c.c b/gcc/testsuite/gcc.target/i386/pr100865-9c.c index e6f25902c1d..8ffcdc1629d 100644 --- a/gcc/testsuite/gcc.target/i386/pr100865-9c.c +++ b/gcc/testsuite/gcc.target/i386/pr100865-9c.c @@ -3,5 +3,5 @@ #include "pr100865-9a.c" -/* { dg-final { scan-assembler-times "vpshufd\[\\t \]+\[^\n\]*, %xmm\[0-9\]+" 1 } } */ +/* { dg-final { scan-assembler-times "vpshufd\[\\t \]+\[^\n\]*, %xmm\[0-9\]+" 1 { xfail *-*-* } } } */ /* { dg-final { scan-assembler-times "vmovdqa\[\\t \]%xmm\[0-9\]+, " 16 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr104704-1.c b/gcc/testsuite/gcc.target/i386/pr104704-1.c new file mode 100644 index 00000000000..28c499f4c44 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr104704-1.c @@ -0,0 +1,33 @@ +/* { dg-do run { target { ! ia32 } } } */ +/* { dg-options "-O2 -march=x86-64 -mavx512f" } */ + +#include + +__m512d y, z; + +int i; + +__attribute__((noipa)) +int +do_test (void) +{ + register int xmm31 __asm ("xmm31") = i; + asm volatile ("" : "+v" (xmm31)); + z = y; + register int xmm2 __asm ("xmm2") = xmm31; + asm volatile ("" : "+v" (xmm2)); + return xmm2; +} + +__attribute__((target("arch=x86-64"))) +int +main (void) +{ + if (__builtin_cpu_supports ("avx512f")) + { + i = 4; + if (do_test () != 4) + __builtin_abort (); + } + return 0; +} diff --git a/gcc/testsuite/gcc.target/i386/pr104704-2.c b/gcc/testsuite/gcc.target/i386/pr104704-2.c new file mode 100644 index 00000000000..79b04b2543a --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr104704-2.c @@ -0,0 +1,33 @@ +/* { dg-do run { target { ! ia32 } } } */ +/* { dg-options "-O2 -march=x86-64 -mavx2" } */ + +#include + +__m256d y, z; + +int i; + +__attribute__((noipa)) +int +do_test (void) +{ + register int xmm15 __asm ("xmm15") = i; + asm volatile ("" : "+v" (xmm15)); + z = y; + register int xmm2 __asm ("xmm2") = xmm15; + asm volatile ("" : "+v" (xmm2)); + return xmm2; +} + +__attribute__((target("arch=x86-64"))) +int +main (void) +{ + if (__builtin_cpu_supports ("avx2")) + { + i = 4; + if (do_test () != 4) + __builtin_abort (); + } + return 0; +} diff --git a/gcc/testsuite/gcc.target/i386/pr104704-3.c b/gcc/testsuite/gcc.target/i386/pr104704-3.c new file mode 100644 index 00000000000..d0648d82fbd --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr104704-3.c @@ -0,0 +1,33 @@ +/* { dg-do run { target ia32 } } */ +/* { dg-options "-O2 -march=i686 -msse2" } */ + +#include + +__m128d y, z; + +int i; + +__attribute__((noipa)) +int +do_test (void) +{ + register int xmm7 __asm ("xmm7") = i; + asm volatile ("" : "+v" (xmm7)); + z = y; + register int xmm2 __asm ("xmm2") = xmm7; + asm volatile ("" : "+v" (xmm2)); + return xmm2; +} + +__attribute__((target("arch=i486"))) +int +main (void) +{ + if (__builtin_cpu_supports ("sse2")) + { + i = 4; + if (do_test () != 4) + __builtin_abort (); + } + return 0; +} diff --git a/gcc/testsuite/gcc.target/i386/pr104704-4.c b/gcc/testsuite/gcc.target/i386/pr104704-4.c new file mode 100644 index 00000000000..c97666293b7 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr104704-4.c @@ -0,0 +1,33 @@ +/* { dg-do run { target { ! ia32 } } } */ +/* { dg-options "-O2 -march=x86-64 -mavx512f" } */ + +#include + +char z[128]; + +int i; + +__attribute__((noipa)) +int +do_test (void) +{ + register int xmm31 __asm ("xmm31") = i; + asm volatile ("" : "+v" (xmm31)); + __builtin_memset (&z, 0, sizeof (z)); + register int xmm2 __asm ("xmm2") = xmm31; + asm volatile ("" : "+v" (xmm2)); + return xmm2; +} + +__attribute__((target("arch=x86-64"))) +int +main (void) +{ + if (__builtin_cpu_supports ("avx512f")) + { + i = 4; + if (do_test () != 4) + __builtin_abort (); + } + return 0; +} diff --git a/gcc/testsuite/gcc.target/i386/pr104704-5.c b/gcc/testsuite/gcc.target/i386/pr104704-5.c new file mode 100644 index 00000000000..de9466e697d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr104704-5.c @@ -0,0 +1,33 @@ +/* { dg-do run { target { ! ia32 } } } */ +/* { dg-options "-O2 -march=x86-64 -mtune=skylake -mavx2" } */ + +#include + +char z[64]; + +int i; + +__attribute__((noipa)) +int +do_test (void) +{ + register int xmm15 __asm ("xmm15") = i; + asm volatile ("" : "+v" (xmm15)); + __builtin_memset (&z, 0, sizeof (z)); + register int xmm2 __asm ("xmm2") = xmm15; + asm volatile ("" : "+v" (xmm2)); + return xmm2; +} + +__attribute__((target("arch=x86-64"))) +int +main (void) +{ + if (__builtin_cpu_supports ("avx2")) + { + i = 4; + if (do_test () != 4) + __builtin_abort (); + } + return 0; +} diff --git a/gcc/testsuite/gcc.target/i386/pr104704-6.c b/gcc/testsuite/gcc.target/i386/pr104704-6.c new file mode 100644 index 00000000000..e6a4cb840ee --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr104704-6.c @@ -0,0 +1,33 @@ +/* { dg-do run { target ia32 } } */ +/* { dg-options "-O2 -march=i686 -mtune=skylake -msse2" } */ + +#include + +char z[16]; + +int i; + +__attribute__((noipa)) +int +do_test (void) +{ + register int xmm7 __asm ("xmm7") = i; + asm volatile ("" : "+v" (xmm7)); + __builtin_memset (&z, 0, sizeof (z)); + register int xmm2 __asm ("xmm2") = xmm7; + asm volatile ("" : "+v" (xmm2)); + return xmm2; +} + +__attribute__((target("arch=i486"))) +int +main (void) +{ + if (__builtin_cpu_supports ("sse2")) + { + i = 4; + if (do_test () != 4) + __builtin_abort (); + } + return 0; +} diff --git a/gcc/testsuite/gcc.target/i386/pr82941-1.c b/gcc/testsuite/gcc.target/i386/pr82941-1.c index c3be2f5b797..d7e530d5116 100644 --- a/gcc/testsuite/gcc.target/i386/pr82941-1.c +++ b/gcc/testsuite/gcc.target/i386/pr82941-1.c @@ -11,5 +11,4 @@ pr82941 () z = y; } -/* { dg-final { scan-assembler-times "vzeroupper" 1 { target ia32 } } } */ -/* { dg-final { scan-assembler-not "vzeroupper" { target { ! ia32 } } } } */ +/* { dg-final { scan-assembler-times "vzeroupper" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr82942-1.c b/gcc/testsuite/gcc.target/i386/pr82942-1.c index 29ead049a67..9cdf81a9d60 100644 --- a/gcc/testsuite/gcc.target/i386/pr82942-1.c +++ b/gcc/testsuite/gcc.target/i386/pr82942-1.c @@ -3,5 +3,4 @@ #include "pr82941-1.c" -/* { dg-final { scan-assembler-times "vzeroupper" 1 { target ia32 } } } */ -/* { dg-final { scan-assembler-not "vzeroupper" { target { ! ia32 } } } } */ +/* { dg-final { scan-assembler-times "vzeroupper" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr82990-1.c b/gcc/testsuite/gcc.target/i386/pr82990-1.c index bbf580fea77..ff1d6d40eb2 100644 --- a/gcc/testsuite/gcc.target/i386/pr82990-1.c +++ b/gcc/testsuite/gcc.target/i386/pr82990-1.c @@ -11,5 +11,4 @@ pr82941 () z = y; } -/* { dg-final { scan-assembler-times "vzeroupper" 1 { target ia32 } } } */ -/* { dg-final { scan-assembler-not "vzeroupper" { target { ! ia32 } } } } */ +/* { dg-final { scan-assembler-times "vzeroupper" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr82990-3.c b/gcc/testsuite/gcc.target/i386/pr82990-3.c index 89ddb20adb3..201fa98d8d4 100644 --- a/gcc/testsuite/gcc.target/i386/pr82990-3.c +++ b/gcc/testsuite/gcc.target/i386/pr82990-3.c @@ -3,5 +3,4 @@ #include "pr82941-1.c" -/* { dg-final { scan-assembler-times "vzeroupper" 1 { target ia32 } } } */ -/* { dg-final { scan-assembler-not "vzeroupper" { target { ! ia32 } } } } */ +/* { dg-final { scan-assembler-times "vzeroupper" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr82990-5.c b/gcc/testsuite/gcc.target/i386/pr82990-5.c index b9da0e706b1..9932bdc5375 100644 --- a/gcc/testsuite/gcc.target/i386/pr82990-5.c +++ b/gcc/testsuite/gcc.target/i386/pr82990-5.c @@ -11,5 +11,4 @@ pr82941 () z = y; } -/* { dg-final { scan-assembler-times "vzeroupper" 1 { target ia32 } } } */ -/* { dg-final { scan-assembler-not "vzeroupper" { target { ! ia32 } } } } */ +/* { dg-final { scan-assembler-times "vzeroupper" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr90773-14.c b/gcc/testsuite/gcc.target/i386/pr90773-14.c index 96ee5cb08c1..60763bb7c37 100644 --- a/gcc/testsuite/gcc.target/i386/pr90773-14.c +++ b/gcc/testsuite/gcc.target/i386/pr90773-14.c @@ -10,4 +10,4 @@ foo (void) } /* { dg-final { scan-assembler-times "movups\[\\t \]+%xmm\[0-9\]+, \\(%\[\^,\]+\\)" 1 } } */ -/* { dg-final { scan-assembler-times "movd\[\\t \]+%xmm\[0-9\]+, 16\\(%\[\^,\]+\\)" 1 } } */ +/* { dg-final { scan-assembler-times "movd\[\\t \]+%xmm\[0-9\]+, 16\\(%\[\^,\]+\\)" 1 { xfail *-*-* } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr90773-17.c b/gcc/testsuite/gcc.target/i386/pr90773-17.c index 73d5d5abaee..570748366f8 100644 --- a/gcc/testsuite/gcc.target/i386/pr90773-17.c +++ b/gcc/testsuite/gcc.target/i386/pr90773-17.c @@ -11,4 +11,4 @@ foo (void) /* { dg-final { scan-assembler-times "vpbroadcastb" 1 } } */ /* { dg-final { scan-assembler-times "vmovdqu8\[\\t \]+%xmm\[0-9\]+, \\(%\[\^,\]+\\)" 1 } } */ -/* { dg-final { scan-assembler-times "vmovd\[\\t \]+%xmm\[0-9\]+, 15\\(%\[\^,\]+\\)" 1 } } */ +/* { dg-final { scan-assembler-times "vmovd\[\\t \]+%xmm\[0-9\]+, 16\\(%\[\^,\]+\\)" 1 { xfail *-*-* } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr90773-5.c b/gcc/testsuite/gcc.target/i386/pr90773-5.c index 27185a236a7..9ef96279960 100644 --- a/gcc/testsuite/gcc.target/i386/pr90773-5.c +++ b/gcc/testsuite/gcc.target/i386/pr90773-5.c @@ -10,4 +10,4 @@ foo (void) } /* { dg-final { scan-assembler-times "movups\[\\t \]+%xmm\[0-9\]+, \\(%\[\^,\]+\\)" 1 } } */ -/* { dg-final { scan-assembler-times "movq\[\\t \]+%xmm\[0-9\]+, 13\\(%\[\^,\]+\\)" 1 } } */ +/* { dg-final { scan-assembler-times "movq\[\\t \]+%xmm\[0-9\]+, 13\\(%\[\^,\]+\\)" 1 { xfail *-*-* } } } */