From patchwork Thu Apr 11 22:15:12 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Bergner X-Patchwork-Id: 1922722 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=sUxDaxCl; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; 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 [8.43.85.97]) (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 4VFvCl2VhZz1yYB for ; Fri, 12 Apr 2024 08:15:45 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C83D03858D20 for ; Thu, 11 Apr 2024 22:15:43 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by sourceware.org (Postfix) with ESMTPS id C9D6F3858D20 for ; Thu, 11 Apr 2024 22:15:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C9D6F3858D20 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linux.ibm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org C9D6F3858D20 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712873724; cv=none; b=HUP2UHP3lJrt0cJ5KLIY0kc2kjP5vOIc0qwFRhY5aVYBf8RbATQJqY7CCLfkYkuLJvOwaI0/A3KbjyeBNM/oz9T2TtmRB+8jfmEP+jNMIGd1BHq2+g8ZeD7Z3WcAq6hsqpp7vKzrn2rQTM0Qf2QexLXSfHSAUPhvG6f7ddRZ5pQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712873724; c=relaxed/simple; bh=rAxLOpM/pxoUb0Rzzz+YfAy9qrc6SEnxV/A6apmlbE8=; h=DKIM-Signature:Message-ID:Date:To:From:Subject:MIME-Version; b=wQHthbXg90Zf7XKXIGSWWsPCCQFyi5xmWHkS1ehI3/3QVAOhna2U1wvyGpvX8yZmRUZNIemV1qX8lAcF3JdNKypKdqjsI8/DG4UpxPfrPFe9kR5YN+g9DEotAJDyh2XJe+0/K4q9KI7reAQtMac/Ft2uBdNslpdjd1qH4bj32b0= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 43BM2BDm026578; Thu, 11 Apr 2024 22:15:19 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=message-id : date : to : cc : from : subject : content-type : content-transfer-encoding : mime-version; s=pp1; bh=yqMW5qczrmaYgFt32eA9Hj9PcgoWkyc9eKelTQ/68TE=; b=sUxDaxClF4MErw7+W9tphzNy/V5pkbzkVFPnJ0xY7wVpOeBHfCDPT11Sp7BnN9Xpwzeu 3UYzUOpO4vhvAmik5DmdwmpN30XzuQ2f0vbqNQtk3200ug+GR1RMMxtOgHEGkSkWKaQO rQjHs32w1cWXU8F748D2dgict0KHvqSz9IMPPrWOENtHv3w7aorxwWiZCaeyugDqtriC INxGsb1jtFfgVJLFOPqrBIT7jnaXeodbQ+1oy25hH9EuOKI6CirL3LBH4C46BUY/iQtR LC3ufhN2ocXQYOikeImMLJrKqfzn90sr/tbkmRJ+wyltCOGu4Axvh672Y7srSBgDTgKY iQ== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3xepfhr7sg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 11 Apr 2024 22:15:19 +0000 Received: from m0353729.ppops.net (m0353729.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 43BMFI8Y013507; Thu, 11 Apr 2024 22:15:18 GMT Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3xepfhr7sc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 11 Apr 2024 22:15:18 +0000 Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 43BM5Dth029951; Thu, 11 Apr 2024 22:15:17 GMT Received: from smtprelay03.wdc07v.mail.ibm.com ([172.16.1.70]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 3xbj7mp06b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 11 Apr 2024 22:15:17 +0000 Received: from smtpav03.wdc07v.mail.ibm.com (smtpav03.wdc07v.mail.ibm.com [10.39.53.230]) by smtprelay03.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 43BMFEAt20447978 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 11 Apr 2024 22:15:16 GMT Received: from smtpav03.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2D6475805D; Thu, 11 Apr 2024 22:15:14 +0000 (GMT) Received: from smtpav03.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6863758054; Thu, 11 Apr 2024 22:15:13 +0000 (GMT) Received: from [9.61.87.235] (unknown [9.61.87.235]) by smtpav03.wdc07v.mail.ibm.com (Postfix) with ESMTP; Thu, 11 Apr 2024 22:15:13 +0000 (GMT) Message-ID: Date: Thu, 11 Apr 2024 17:15:12 -0500 User-Agent: Mozilla Thunderbird Content-Language: en-US To: "Kewen.Lin" , David Edelsohn , Segher Boessenkool Cc: Michael Meissner , GCC Patches From: Peter Bergner Subject: [PATCH] rs6000: Add OPTION_MASK_POWER8 [PR101865] X-TM-AS-GCONF: 00 X-Proofpoint-GUID: pth0_Uh-04eICx6_xcFPHoUFdDE56m2K X-Proofpoint-ORIG-GUID: 1I3LWTTWUt3f0m3i3efrh6qHeZsNbNIg X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-04-11_10,2024-04-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 adultscore=0 spamscore=0 priorityscore=1501 malwarescore=0 phishscore=0 clxscore=1015 mlxlogscore=999 mlxscore=0 bulkscore=0 suspectscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2404010000 definitions=main-2404110160 X-Spam-Status: No, score=-9.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP 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 FYI: This patch is an update to Will Schmidt's patches to fix PR101865: https://gcc.gnu.org/pipermail/gcc-patches/2022-September/601825.html https://gcc.gnu.org/pipermail/gcc-patches/2022-September/601823.html ...taking into consideration patch reviews received than. I also found a few more locations that needed patching, as well as simplifying the testsuite test cases by removing the need to scan for the predefined macros. The bug in PR101865 is the _ARCH_PWR8 predefined macro is conditional upon TARGET_DIRECT_MOVE, which can be false for some -mcpu=power8 compiles if the -mno-altivec or -mno-vsx options are used. The solution here is to create a new OPTION_MASK_POWER8 mask that is true for -mcpu=power8, regardless of Altivec or VSX enablement. Unfortunately, the only way to create an OPTION_MASK_* mask is to create a new option, which we have done here, but marked it as WarnRemoved since we do not want users using it. For stage1, we will look into how we can create ISA mask flags for use in the compiler without the need for explicit options. The passed bootstrap and regtest on powerpc64le-linux. Ok for trunk? This is also broken on the release branches, so ok for backports after some burn-in time on trunk? Peter 2024-04-11 Will Schmidt Peter Bergner gcc/ PR target/101865 * config/rs6000/rs6000-builtin.cc (rs6000_builtin_is_supported): Use TARGET_POWER8. * config/rs6000/rs6000-c.cc (rs6000_target_modify_macros): Use OPTION_MASK_POWER8. * config/rs6000/rs6000-cpus.def (POWERPC_MASKS): Add OPTION_MASK_POWER8. (ISA_2_7_MASKS_SERVER): Likewise. * config/rs6000/rs6000.cc (rs6000_option_override_internal): Update comment. Use OPTION_MASK_POWER8 and TARGET_POWER8. * config/rs6000/rs6000.h (TARGET_SYNC_HI_QI): Use TARGET_POWER8. * config/rs6000/rs6000.md (define_attr "isa"): Add p8. (define_attr "enabled"): Handle it. (define_insn "prefetch"): Use TARGET_POWER8. * config/rs6000/rs6000.opt (mdo-not-use-this-option): New. gcc/testsuite/ PR target/101865 * gcc.target/powerpc/predefined-p7-novsx.c: New test. * gcc.target/powerpc/predefined-p8-noaltivec-novsx.c: New test. * gcc.target/powerpc/predefined-p8-noaltivec.c: New test. * gcc.target/powerpc/predefined-p8-novsx.c: New test. * gcc.target/powerpc/predefined-p8-pragma-vsx.c: New test. * gcc.target/powerpc/predefined-p9-novsx.c: New test. diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc index e7d6204074c..320affd79e3 100644 --- a/gcc/config/rs6000/rs6000-builtin.cc +++ b/gcc/config/rs6000/rs6000-builtin.cc @@ -165,7 +165,7 @@ rs6000_builtin_is_supported (enum rs6000_gen_builtins fncode) case ENB_P7_64: return TARGET_POPCNTD && TARGET_POWERPC64; case ENB_P8: - return TARGET_DIRECT_MOVE; + return TARGET_POWER8; case ENB_P8V: return TARGET_P8_VECTOR; case ENB_P9: diff --git a/gcc/config/rs6000/rs6000-c.cc b/gcc/config/rs6000/rs6000-c.cc index 647f20de7f2..bd493ab87c5 100644 --- a/gcc/config/rs6000/rs6000-c.cc +++ b/gcc/config/rs6000/rs6000-c.cc @@ -429,7 +429,7 @@ rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT flags) rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR6"); if ((flags & OPTION_MASK_POPCNTD) != 0) rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR7"); - if ((flags & OPTION_MASK_P8_VECTOR) != 0) + if ((flags & OPTION_MASK_POWER8) != 0) rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR8"); if ((flags & OPTION_MASK_MODULO) != 0) rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR9"); diff --git a/gcc/config/rs6000/rs6000-cpus.def b/gcc/config/rs6000/rs6000-cpus.def index 45dd5a85901..6ee678e69c3 100644 --- a/gcc/config/rs6000/rs6000-cpus.def +++ b/gcc/config/rs6000/rs6000-cpus.def @@ -47,6 +47,7 @@ fusion here, instead set it in rs6000.cc if we are tuning for a power8 system. */ #define ISA_2_7_MASKS_SERVER (ISA_2_6_MASKS_SERVER \ + | OPTION_MASK_POWER8 \ | OPTION_MASK_P8_VECTOR \ | OPTION_MASK_CRYPTO \ | OPTION_MASK_EFFICIENT_UNALIGNED_VSX \ @@ -130,6 +131,7 @@ | OPTION_MASK_MODULO \ | OPTION_MASK_MULHW \ | OPTION_MASK_NO_UPDATE \ + | OPTION_MASK_POWER8 \ | OPTION_MASK_P8_FUSION \ | OPTION_MASK_P8_VECTOR \ | OPTION_MASK_P9_MINMAX \ diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc index c241371147c..117999613d8 100644 --- a/gcc/config/rs6000/rs6000.cc +++ b/gcc/config/rs6000/rs6000.cc @@ -3807,11 +3807,10 @@ rs6000_option_override_internal (bool global_init_p) "-mmultiple"); } - /* If little-endian, default to -mstrict-align on older processors. - Testing for direct_move matches power8 and later. */ + /* If little-endian, default to -mstrict-align on older processors. */ if (!BYTES_BIG_ENDIAN && !(processor_target_table[tune_index].target_enable - & OPTION_MASK_P8_VECTOR)) + & OPTION_MASK_POWER8)) rs6000_isa_flags |= ~rs6000_isa_flags_explicit & OPTION_MASK_STRICT_ALIGN; /* Add some warnings for VSX. */ @@ -3897,7 +3896,7 @@ rs6000_option_override_internal (bool global_init_p) else rs6000_isa_flags |= ISA_3_0_MASKS_SERVER; } - else if (TARGET_P8_VECTOR || TARGET_DIRECT_MOVE || TARGET_CRYPTO) + else if (TARGET_P8_VECTOR || TARGET_POWER8 || TARGET_CRYPTO) rs6000_isa_flags |= (ISA_2_7_MASKS_SERVER & ~ignore_masks); else if (TARGET_VSX) rs6000_isa_flags |= (ISA_2_6_MASKS_SERVER & ~ignore_masks); diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index 77d045c9f6e..2cde2e329b0 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -490,7 +490,7 @@ extern int rs6000_vector_align[]; memory support. */ #define TARGET_SYNC_HI_QI (TARGET_QUAD_MEMORY \ || TARGET_QUAD_MEMORY_ATOMIC \ - || TARGET_DIRECT_MOVE) + || TARGET_POWER8) #define TARGET_SYNC_TI TARGET_QUAD_MEMORY_ATOMIC diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index bc8bc6ab060..ac5651d7420 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -355,7 +355,7 @@ (define_attr "cpu" (const (symbol_ref "(enum attr_cpu) rs6000_tune"))) ;; The ISA we implement. -(define_attr "isa" "any,p5,p6,p7,p7v,p8v,p9,p9v,p9kf,p9tf,p10" +(define_attr "isa" "any,p5,p6,p7,p7v,p8,p8v,p9,p9v,p9kf,p9tf,p10" (const_string "any")) ;; Is this alternative enabled for the current CPU/ISA/etc.? @@ -380,6 +380,10 @@ (define_attr "enabled" "" (match_test "TARGET_VSX")) (const_int 1) + (and (eq_attr "isa" "p8") + (match_test "TARGET_POWER8")) + (const_int 1) + (and (eq_attr "isa" "p8v") (match_test "TARGET_P8_VECTOR")) (const_int 1) @@ -14305,7 +14309,7 @@ (define_insn "prefetch" AIX does not support the dcbtstt and dcbtt extended mnemonics. The AIX assembler does not support the three operand form of dcbt and dcbtst on Power 7 (-mpwr7). */ - int inst_select = INTVAL (operands[2]) || !TARGET_DIRECT_MOVE; + int inst_select = INTVAL (operands[2]) || !TARGET_POWER8; if (REG_P (operands[0])) { diff --git a/gcc/config/rs6000/rs6000.opt b/gcc/config/rs6000/rs6000.opt index dfd5051b964..457c7d05e7e 100644 --- a/gcc/config/rs6000/rs6000.opt +++ b/gcc/config/rs6000/rs6000.opt @@ -470,6 +470,10 @@ Save the TOC in the prologue for indirect calls rather than inline. mvsx-timode Target RejectNegative Undocumented Ignore +;; This option exists only to create its MASK. It is not intended for users. +mdo-not-use-this-option +Target RejectNegative Mask(POWER8) Var(rs6000_isa_flags) WarnRemoved + mpower8-fusion Target Mask(P8_FUSION) Var(rs6000_isa_flags) Fuse certain integer operations together for better performance on power8. diff --git a/gcc/testsuite/gcc.target/powerpc/predefined-p7-novsx.c b/gcc/testsuite/gcc.target/powerpc/predefined-p7-novsx.c new file mode 100644 index 00000000000..bebe62d8f48 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/predefined-p7-novsx.c @@ -0,0 +1,22 @@ +/* PR target/101865 */ +/* { dg-do preprocess } */ +/* { dg-options "-mdejagnu-cpu=power7 -mno-vsx" } */ + +/* Verify we correctly set the correct set of predefined macros + for the given set of options. */ + +#ifndef _ARCH_PWR7 +#error "_ARCH_PWR7 should be defined for this test" +#endif + +#ifndef __ALTIVEC__ +#error "__ALTIVEC__ should be defined for this test" +#endif + +#ifdef _ARCH_PWR8 +#error "_ARCH_PWR8 should not be defined for this test" +#endif + +#ifdef __VSX__ +#error "__VSX__ should not be defined for this test" +#endif diff --git a/gcc/testsuite/gcc.target/powerpc/predefined-p8-noaltivec-novsx.c b/gcc/testsuite/gcc.target/powerpc/predefined-p8-noaltivec-novsx.c new file mode 100644 index 00000000000..9d118b44fe8 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/predefined-p8-noaltivec-novsx.c @@ -0,0 +1,26 @@ +/* PR target/101865 */ +/* { dg-do preprocess } */ +/* { dg-options "-mdejagnu-cpu=power8 -mno-altivec -mno-vsx" } */ + +/* Verify _ARCH_PWR8 is defined for -mcpu=power8 and after disabling + both altivec and vsx. */ + +#ifndef _ARCH_PWR7 +#error "_ARCH_PWR7 should be defined for this test" +#endif + +#ifndef _ARCH_PWR8 +#error "_ARCH_PWR8 should be defined for this test" +#endif + +#ifdef _ARCH_PWR9 +#error "_ARCH_PWR9 should not be defined for this test" +#endif + +#ifdef __ALTIVEC__ +#error "__ALTIVEC__ should not be defined for this test" +#endif + +#ifdef __VSX__ +#error "__VSX__ should not be defined for this test" +#endif diff --git a/gcc/testsuite/gcc.target/powerpc/predefined-p8-noaltivec.c b/gcc/testsuite/gcc.target/powerpc/predefined-p8-noaltivec.c new file mode 100644 index 00000000000..5d2a7b852b1 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/predefined-p8-noaltivec.c @@ -0,0 +1,26 @@ +/* PR target/101865 */ +/* { dg-do preprocess } */ +/* { dg-options "-mdejagnu-cpu=power8 -mno-altivec -w" } */ + +/* Verify _ARCH_PWR8 is defined for -mcpu=power8 and after disabling altivec. + The -w option is used to silence the -mno-altivec disables -mvsx warning. */ + +#ifndef _ARCH_PWR7 +#error "_ARCH_PWR7 should be defined for this test" +#endif + +#ifndef _ARCH_PWR8 +#error "_ARCH_PWR8 should be defined for this test" +#endif + +#ifdef _ARCH_PWR9 +#error "_ARCH_PWR9 should not be defined for this test" +#endif + +#ifdef __ALTIVEC__ +#error "__ALTIVEC__ should not be defined for this test" +#endif + +#ifdef __VSX__ +#error "__VSX__ should not be defined for this test" +#endif diff --git a/gcc/testsuite/gcc.target/powerpc/predefined-p8-novsx.c b/gcc/testsuite/gcc.target/powerpc/predefined-p8-novsx.c new file mode 100644 index 00000000000..5eeadf421b2 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/predefined-p8-novsx.c @@ -0,0 +1,26 @@ +/* PR target/101865 */ +/* { dg-do preprocess } */ +/* { dg-options "-mdejagnu-cpu=power8 -mno-vsx" } */ + +/* Verify _ARCH_PWR8 is defined for -mcpu=power8 and after disabling vsx. + This also confirms __ALTIVEC__ remains set when VSX is disabled. */ + +#ifndef _ARCH_PWR7 +#error "_ARCH_PWR7 should be defined for this test" +#endif + +#ifndef _ARCH_PWR8 +#error "_ARCH_PWR8 should be defined for this test" +#endif + +#ifndef __ALTIVEC__ +#error "__ALTIVEC__ should be defined for this test" +#endif + +#ifdef _ARCH_PWR9 +#error "_ARCH_PWR9 should not be defined for this test" +#endif + +#ifdef __VSX__ +#error "__VSX__ should not be defined for this test" +#endif diff --git a/gcc/testsuite/gcc.target/powerpc/predefined-p8-pragma-vsx.c b/gcc/testsuite/gcc.target/powerpc/predefined-p8-pragma-vsx.c new file mode 100644 index 00000000000..cb3cc16d968 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/predefined-p8-pragma-vsx.c @@ -0,0 +1,101 @@ +/* PR target/101865 */ +/* { dg-do run } */ +/* { dg-require-effective-target p8vector_hw } */ +/* { dg-options "-mdejagnu-cpu=power8 -mvsx -O2" } */ + +/* Verify we correctly set our predefined macros in the face of #pragma usage. */ + +#include +#include + +volatile int power8_set; +volatile int vsx_set; + +void +test_default (void) +{ +#ifdef _ARCH_PWR8 + power8_set=1; +#else + power8_set=0; +#endif +#ifdef __VSX__ + vsx_set=1; +#else + vsx_set=0; +#endif +} + +#pragma GCC target "no-vsx" +void +test_no_vsx (void) +{ +#ifdef _ARCH_PWR8 + power8_set=1; +#else + power8_set=0; +#endif +#ifdef __VSX__ + vsx_set=1; +#else + vsx_set=0; +#endif +} + +#pragma GCC reset_options +void +test_reset_options (void) +{ +#ifdef _ARCH_PWR8 + power8_set=1; +#else + power8_set=0; +#endif +#ifdef __VSX__ + vsx_set=1; +#else + vsx_set=0; +#endif +} + +int +main (void) +{ + test_default (); + if (!power8_set) + { + printf ("_ARCH_PWR8 is not set.\n"); + abort (); + } + if (!vsx_set) + { + printf ("__VSX__ is not set.\n"); + abort (); + } + + test_no_vsx (); + if (!power8_set) + { + printf ("_ARCH_PWR8 is not set.\n"); + abort (); + } + if (vsx_set) + { + printf ("__VSX__ is unexpectedly set.\n"); + abort (); + } + + test_reset_options (); + if (!power8_set) + { + printf ("_ARCH_PWR8 is not set.\n"); + abort (); + } + if (!vsx_set) + { + printf ("__VSX__ is not set.\n"); + abort (); + } + + return 0; +} diff --git a/gcc/testsuite/gcc.target/powerpc/predefined-p9-novsx.c b/gcc/testsuite/gcc.target/powerpc/predefined-p9-novsx.c new file mode 100644 index 00000000000..d8f12275fd0 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/predefined-p9-novsx.c @@ -0,0 +1,26 @@ +/* PR target/101865 */ +/* { dg-do preprocess } */ +/* { dg-options "-mdejagnu-cpu=power9 -mno-vsx" } */ + +/* Verify _ARCH_PWR8 is defined for -mcpu=power9 and after disabling vsx. + This also confirms __ALTIVEC__ remains set when VSX is disabled. */ + +#ifndef _ARCH_PWR7 +#error "_ARCH_PWR7 should be defined for this test" +#endif + +#ifndef _ARCH_PWR8 +#error "_ARCH_PWR8 should be defined for this test" +#endif + +#ifndef _ARCH_PWR9 +#error "_ARCH_PWR9 should be defined for this test" +#endif + +#ifndef __ALTIVEC__ +#error "__ALTIVEC__ should be defined for this test" +#endif + +#ifdef __VSX__ +#error "__VSX__ should not be defined for this test" +#endif