From patchwork Wed Jun 3 08:12:45 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hongyu Wang X-Patchwork-Id: 136357 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8D4194BA2E2A for ; Wed, 3 Jun 2026 08:13:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8D4194BA2E2A Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=JYMfJrk0 X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) by sourceware.org (Postfix) with ESMTPS id 95B784BA2E05 for ; Wed, 3 Jun 2026 08:12:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 95B784BA2E05 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 95B784BA2E05 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1780474370; cv=none; b=AT3JHRE+bzv27s+ylohBrQuD2T+iMNlskS+57deosiBE6cIzKDK2Bask5npcsBoV4Tg61LtgBP7Os8KdBf4xpRxWUmhsyYyjnKkxCRyLAQroDgbSV0tk7OTYiOw5kLSIzzI+OJIAaqEpEGpXRMI/khB1hZE+5IoHQgMGJL/X9fI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1780474370; c=relaxed/simple; bh=GYLe+d5r5v6nFZAsZwyVd4NlVlFPnEM5Qr+a7XRCZn4=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=FxUGSPav1vRt/nNijbLApM5jiuIK659CbB9i8i81HqZEomnfjfHi/vg7ynUYwIFySZmPuFKD/sedbW+xL75J9G3zrI175Os1ZcFx94bL96oyRKiuxm8OA4sBh4SlB2CwKrVvLwyCusGMCTQOCstxMi52kf6MRBo1lsLAndpYuuY= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=JYMfJrk0 DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 95B784BA2E05 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1780474369; x=1812010369; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=GYLe+d5r5v6nFZAsZwyVd4NlVlFPnEM5Qr+a7XRCZn4=; b=JYMfJrk0CCp+s2XL7fj7Oq1ZoRK0RWkG7jb+St81XG12/qLIBlud2oxQ G0BpRfp9V6kaNtM2p9AmxHwG9VfOtp6CaDoim8+QBcxOoCw3D8vgguogo FaWC8dzYXZZ6R3A9XveliGttdy/J/VgbCpZQ/xvLLK1x9PJ1G3hFtaOGo c4a4+BIV+jQ2Ij3MedJXgtCM3cnxZfRWDD3vzRrjNtKo3K4nZE8wjp7s0 VroarEcU0d+tAE2rYC24iJKWTYYLPwRMt52iF/VOcAVNgkvEirLobZlM9 r+OMTtnFTFgf9I3GR3M/ar3Xxf5T9bDE6vgp0JAoOzU40CQvT4UxCX23t w==; X-CSE-ConnectionGUID: 4OB2LFD+TwSpsAWxz8/KmA== X-CSE-MsgGUID: rbEqvfQVRB66q8Dt0NnGRg== X-IronPort-AV: E=McAfee;i="6800,10657,11805"; a="81304395" X-IronPort-AV: E=Sophos;i="6.24,184,1774335600"; d="scan'208";a="81304395" Received: from orviesa005.jf.intel.com ([10.64.159.145]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Jun 2026 01:12:48 -0700 X-CSE-ConnectionGUID: zZB823LTToyPnYfKCWQfGA== X-CSE-MsgGUID: OEAd8V77T82b6wTD9n6sPA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.24,184,1774335600"; d="scan'208";a="249080578" Received: from shliclel4217.sh.intel.com ([10.239.240.127]) by orviesa005.jf.intel.com with ESMTP; 03 Jun 2026 01:12:47 -0700 From: Hongyu Wang To: gcc-patches@gcc.gnu.org Cc: hongtao.liu@intel.com, ubizjak@gmail.com Subject: [PATCH] i386: Add FMV support for avx10.2 and apxf Date: Wed, 3 Jun 2026 16:12:45 +0800 Message-Id: <20260603081245.3365457-1-hongyu.wang@intel.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE, SPF_NONE, TXREP, URIBL_BLOCKED shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on 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~patchwork=sourceware.org@gcc.gnu.org Hi, This patch adds function multiversioning priority for avx10.2 and apxf features, also add P_PROC_AVX10_2 for processors like diamondrapids and novalake that supports these. The priority order is: P_AVX10_1 < P_PROC_AVX10_1 < P_AVX10_2 < P_APX_F < P_PROC_AVX10_2 Bootstrapped & regtested under x86_64-pc-linux-gnu{-m32,}. Ok for trunk? gcc/ChangeLog: * common/config/i386/i386-cpuinfo.h (enum feature_priority): Add P_AVX10_2, P_APX_F, P_PROC_AVX10_2. * common/config/i386/i386-isas.h: Set P_AVX10_2 for avx10.2 and P_APX_F for apxf. * common/config/i386/i386-common.cc (processor_alias_table): Use P_PROC_AVX10_2 for diamondrapids and novalake. gcc/testsuite/ChangeLog: * gcc.target/i386/mvc18.c: New test for target_clones with avx10.2, apxf, and arch=diamondrapids/novalake. --- gcc/common/config/i386/i386-common.cc | 4 ++-- gcc/common/config/i386/i386-cpuinfo.h | 3 +++ gcc/common/config/i386/i386-isas.h | 4 ++-- gcc/testsuite/gcc.target/i386/mvc18.c | 16 ++++++++++++++++ 4 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/mvc18.c diff --git a/gcc/common/config/i386/i386-common.cc b/gcc/common/config/i386/i386-common.cc index 1dd9819c309..395dc5acd60 100644 --- a/gcc/common/config/i386/i386-common.cc +++ b/gcc/common/config/i386/i386-common.cc @@ -2327,11 +2327,11 @@ const pta processor_alias_table[] = {"pantherlake", PROCESSOR_PANTHERLAKE, CPU_HASWELL, PTA_PANTHERLAKE, M_CPU_SUBTYPE (INTEL_COREI7_PANTHERLAKE), P_PROC_AVX2}, {"diamondrapids", PROCESSOR_DIAMONDRAPIDS, CPU_HASWELL, PTA_DIAMONDRAPIDS, - M_CPU_SUBTYPE (INTEL_COREI7_DIAMONDRAPIDS), P_PROC_AVX10_1}, + M_CPU_SUBTYPE (INTEL_COREI7_DIAMONDRAPIDS), P_PROC_AVX10_2}, {"wildcatlake", PROCESSOR_PANTHERLAKE, CPU_HASWELL, PTA_PANTHERLAKE, M_CPU_SUBTYPE (INTEL_COREI7_PANTHERLAKE), P_PROC_AVX2}, {"novalake", PROCESSOR_NOVALAKE, CPU_HASWELL, PTA_NOVALAKE, - M_CPU_SUBTYPE (INTEL_COREI7_NOVALAKE), P_PROC_AVX10_1}, + M_CPU_SUBTYPE (INTEL_COREI7_NOVALAKE), P_PROC_AVX10_2}, {"bonnell", PROCESSOR_BONNELL, CPU_ATOM, PTA_BONNELL, M_CPU_TYPE (INTEL_BONNELL), P_PROC_SSSE3}, {"atom", PROCESSOR_BONNELL, CPU_ATOM, PTA_BONNELL, diff --git a/gcc/common/config/i386/i386-cpuinfo.h b/gcc/common/config/i386/i386-cpuinfo.h index 5407d9d9eba..098f81274ad 100644 --- a/gcc/common/config/i386/i386-cpuinfo.h +++ b/gcc/common/config/i386/i386-cpuinfo.h @@ -157,6 +157,9 @@ enum feature_priority P_X86_64_V4, P_AVX10_1 = 34, P_PROC_AVX10_1, + P_AVX10_2, + P_APX_F, + P_PROC_AVX10_2, P_PROC_DYNAMIC }; diff --git a/gcc/common/config/i386/i386-isas.h b/gcc/common/config/i386/i386-isas.h index a6a736e9983..62973b15f0f 100644 --- a/gcc/common/config/i386/i386-isas.h +++ b/gcc/common/config/i386/i386-isas.h @@ -181,10 +181,10 @@ ISA_NAMES_TABLE_START ISA_NAMES_TABLE_ENTRY("sm3", FEATURE_SM3, P_NONE, "-msm3") ISA_NAMES_TABLE_ENTRY("sha512", FEATURE_SHA512, P_NONE, "-msha512") ISA_NAMES_TABLE_ENTRY("sm4", FEATURE_SM4, P_NONE, "-msm4") - ISA_NAMES_TABLE_ENTRY("apxf", FEATURE_APX_F, P_NONE, "-mapxf") + ISA_NAMES_TABLE_ENTRY("apxf", FEATURE_APX_F, P_APX_F, "-mapxf") ISA_NAMES_TABLE_ENTRY("usermsr", FEATURE_USER_MSR, P_NONE, "-musermsr") ISA_NAMES_TABLE_ENTRY("avx10.1", FEATURE_AVX10_1, P_AVX10_1, "-mavx10.1") - ISA_NAMES_TABLE_ENTRY("avx10.2", FEATURE_AVX10_2, P_NONE, "-mavx10.2") + ISA_NAMES_TABLE_ENTRY("avx10.2", FEATURE_AVX10_2, P_AVX10_2, "-mavx10.2") ISA_NAMES_TABLE_ENTRY("amx-avx512", FEATURE_AMX_AVX512, P_NONE, "-mamx-avx512") ISA_NAMES_TABLE_ENTRY("amx-tf32", FEATURE_AMX_TF32, P_NONE, "-mamx-tf32") diff --git a/gcc/testsuite/gcc.target/i386/mvc18.c b/gcc/testsuite/gcc.target/i386/mvc18.c new file mode 100644 index 00000000000..0d78381677b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/mvc18.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ + +/* { dg-final { scan-assembler "foo\.avx10_2\[,@\]" } } */ +/* { dg-final { scan-assembler "foo\.apxf\[,@\]" } } */ +/* { dg-final { scan-assembler "foo\.arch_diamondrapids\[,@\]" } } */ +/* { dg-final { scan-assembler "foo\.arch_novalake\[,@\]" } } */ + +__attribute__((target_clones("avx10.2","apxf","arch=diamondrapids", + "arch=novalake","default"))) +int foo (); + +int main() +{ + return foo(); +}