Add avx512gnr* targets
This commit is contained in:
committed by
aneshlya
parent
7f1e1a3b79
commit
b86e1770ce
@@ -41,7 +41,8 @@ env:
|
||||
"avx2vnni-i32x4", "avx2vnni-i32x8", "avx2vnni-i32x16",
|
||||
"avx512skx-x4", "avx512skx-x8", "avx512skx-x16", "avx512skx-x64", "avx512skx-x32",
|
||||
"avx512icl-x4", "avx512icl-x8", "avx512icl-x16", "avx512icl-x64", "avx512icl-x32",
|
||||
"avx512spr-x4", "avx512spr-x8", "avx512spr-x16", "avx512spr-x64", "avx512spr-x32"]'
|
||||
"avx512spr-x4", "avx512spr-x8", "avx512spr-x16", "avx512spr-x64", "avx512spr-x32",
|
||||
"avx512gnr-x4", "avx512gnr-x8", "avx512gnr-x16", "avx512gnr-x64", "avx512gnr-x32"]'
|
||||
TARGETS_FULL_ARM: '["neon-i32x4", "neon-i32x8", "neon-i8x16", "neon-i16x8", "neon-i8x32", "neon-i16x16"]'
|
||||
OPTSETS_FULL: "-O0 -O1 -O2"
|
||||
ISPC_ANDROID_NDK_PATH: "/usr/local/share/android-ndk"
|
||||
|
||||
@@ -38,6 +38,7 @@ jobs:
|
||||
"avx512skx-x4", "avx512skx-x8", "avx512skx-x16", "avx512skx-x64", "avx512skx-x32",
|
||||
"avx512icl-x4", "avx512icl-x8", "avx512icl-x16", "avx512icl-x64", "avx512icl-x32",
|
||||
"avx512spr-x4", "avx512spr-x8", "avx512spr-x16", "avx512spr-x64", "avx512spr-x32",
|
||||
"avx512gnr-x4", "avx512gnr-x8", "avx512gnr-x16", "avx512gnr-x64", "avx512gnr-x32",
|
||||
"avx10.2dmr-x4", "avx10.2dmr-x8", "avx10.2dmr-x16", "avx10.2dmr-x64", "avx10.2dmr-x32"]
|
||||
steps:
|
||||
- run: echo "Defining targets"
|
||||
|
||||
@@ -35,6 +35,7 @@ jobs:
|
||||
"avx512skx-x4", "avx512skx-x8", "avx512skx-x16", "avx512skx-x64", "avx512skx-x32",
|
||||
"avx512icl-x4", "avx512icl-x8", "avx512icl-x16", "avx512icl-x64", "avx512icl-x32",
|
||||
"avx512spr-x4", "avx512spr-x8", "avx512spr-x16", "avx512spr-x64", "avx512spr-x32",
|
||||
"avx512gnr-x4", "avx512gnr-x8", "avx512gnr-x16", "avx512gnr-x64", "avx512gnr-x32",
|
||||
"avx10.2dmr-x4", "avx10.2dmr-x8", "avx10.2dmr-x16", "avx10.2dmr-x64", "avx10.2dmr-x32"]
|
||||
steps:
|
||||
- run: echo "Defining targets"
|
||||
|
||||
+2
-1
@@ -388,7 +388,8 @@ list(APPEND X86_TARGETS
|
||||
avx512skx-x32 avx512skx-x64
|
||||
avx512icl-x4 avx512icl-x8 avx512icl-x16 avx512icl-x16-nozmm
|
||||
avx512icl-x32 avx512icl-x64
|
||||
avx512spr-x4 avx512spr-x8 avx512spr-x16 avx512spr-x32 avx512spr-x64)
|
||||
avx512spr-x4 avx512spr-x8 avx512spr-x16 avx512spr-x32 avx512spr-x64
|
||||
avx512gnr-x4 avx512gnr-x8 avx512gnr-x16 avx512gnr-x32 avx512gnr-x64)
|
||||
|
||||
if (${LLVM_VERSION_NUMBER} VERSION_GREATER_EQUAL "20.1.2")
|
||||
list(APPEND X86_TARGETS avx10_2dmr-x4 avx10_2dmr-x8 avx10_2dmr-x16 avx10_2dmr-x32 avx10_2dmr-x64)
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
;; Copyright (c) 2025, Intel Corporation
|
||||
;;
|
||||
;; SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
define(`WIDTH',`16')
|
||||
define(`ISA',`AVX512SKX')
|
||||
@@ -0,0 +1,6 @@
|
||||
;; Copyright (c) 2025, Intel Corporation
|
||||
;;
|
||||
;; SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
define(`WIDTH',`32')
|
||||
define(`ISA',`AVX512SKX')
|
||||
@@ -0,0 +1,6 @@
|
||||
;; Copyright (c) 2025, Intel Corporation
|
||||
;;
|
||||
;; SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
define(`WIDTH',`4')
|
||||
define(`ISA',`AVX512SKX')
|
||||
@@ -0,0 +1,6 @@
|
||||
;; Copyright (c) 2025, Intel Corporation
|
||||
;;
|
||||
;; SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
define(`WIDTH',`64')
|
||||
define(`ISA',`AVX512SKX')
|
||||
@@ -0,0 +1,6 @@
|
||||
;; Copyright (c) 2025, Intel Corporation
|
||||
;;
|
||||
;; SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
define(`WIDTH',`8')
|
||||
define(`ISA',`AVX512SKX')
|
||||
@@ -17,8 +17,8 @@ function(should_skip_target_for_os target os bit out_skip)
|
||||
if ("${bit}" STREQUAL "32")
|
||||
set(skip TRUE)
|
||||
endif()
|
||||
# ISPC doesn't support avx512spr targets on macOS
|
||||
if ("${target}" MATCHES "avx512spr" OR "${target}" MATCHES "avx10")
|
||||
# ISPC doesn't support avx512spr/avx512gnr targets on macOS
|
||||
if ("${target}" MATCHES "avx512spr" OR "${target}" MATCHES "avx512gnr" OR "${target}" MATCHES "avx10")
|
||||
set(skip TRUE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -53,11 +53,11 @@ function(define_stdlib_families)
|
||||
# Note: nozmm targets are excluded - they produce different stdlib that avoids ZMM instructions
|
||||
set(FAMILY_DEFINITIONS
|
||||
# AVX512 families - use generic targets
|
||||
"i1x4:generic-i1x4:avx512skx-x4,avx512icl-x4,avx512spr-x4${AVX10_X4}"
|
||||
"i1x8:generic-i1x8:avx512skx-x8,avx512icl-x8,avx512spr-x8${AVX10_X8}"
|
||||
"i1x16:generic-i1x16:avx512skx-x16,avx512icl-x16,avx512spr-x16${AVX10_X16}"
|
||||
"i1x32:generic-i1x32:avx512skx-x32,avx512icl-x32,avx512spr-x32${AVX10_X32}"
|
||||
"i1x64:generic-i1x64:avx512skx-x64,avx512icl-x64,avx512spr-x64${AVX10_X64}"
|
||||
"i1x4:generic-i1x4:avx512skx-x4,avx512icl-x4,avx512spr-x4,avx512gnr-x4${AVX10_X4}"
|
||||
"i1x8:generic-i1x8:avx512skx-x8,avx512icl-x8,avx512spr-x8,avx512gnr-x8${AVX10_X8}"
|
||||
"i1x16:generic-i1x16:avx512skx-x16,avx512icl-x16,avx512spr-x16,avx512gnr-x16${AVX10_X16}"
|
||||
"i1x32:generic-i1x32:avx512skx-x32,avx512icl-x32,avx512spr-x32,avx512gnr-x32${AVX10_X32}"
|
||||
"i1x64:generic-i1x64:avx512skx-x64,avx512icl-x64,avx512spr-x64,avx512gnr-x64${AVX10_X64}"
|
||||
|
||||
# SSE/AVX families that match generic implementation
|
||||
"i32x4:generic-i32x4:sse2-i32x4,sse4-i32x4"
|
||||
|
||||
+1
-1
@@ -31,7 +31,7 @@ syn keyword ispcDefine ISPC ISPC_POINTER_SIZE ISPC_MAJOR_VERSION ISPC_MINOR_VER
|
||||
\ UINT8_MAX UINT16_MAX UINT32_MAX UINT64_MAX
|
||||
\ F16_MIN FLT_MIN DBL_MIN F16_MAX FLT_MAX DBL_MAX
|
||||
\ ISPC_TARGET_NEON ISPC_TARGET_SSE2 ISPC_TARGET_SSE4 ISPC_TARGET_AVX ISPC_TARGET_AVX2 ISPC_TARGET_AVX512KNL ISPC_TARGET_AVX512SKX
|
||||
\ ISPC_TARGET_AVX512SPR ISPC_TARGET_AVX10_2DMR
|
||||
\ ISPC_TARGET_AVX512SPR ISPC_TARGET_AVX512GNR ISPC_TARGET_AVX10_2DMR
|
||||
\ ISPC_TARGET_XELP ISPC_TARGET_XEHPG ISPC_TARGET_XEHPC ISPC_TARGET_XELPG ISPC_TARGET_XE2HPG ISPC_TARGET_XE2LPG
|
||||
|
||||
|
||||
|
||||
+5
-3
@@ -1255,7 +1255,8 @@ avx2 AVX2 Intel Haswell (2013) [#]_, AMD Excavator
|
||||
avx2vnni AVX2 Intel Alder Lake (2021), AMD Zen5 (2024)
|
||||
avx512skx AVX-512 Intel Skylake Xeon (2017), AMD Zen4 (2022)
|
||||
avx512icl AVX-512 Intel Icelake (2019), AMD Zen4 (2022)
|
||||
avx512spr AVX-512 Intel Sapphire Rapids (2023)
|
||||
avx512spr AVX-512 + AMX Intel Sapphire Rapids (2023)
|
||||
avx512gnr AVX-512 + AMX FP16 Intel Granite Rapids (2024)
|
||||
avx10.2dmr AVX10.2 + AMX Intel Diamond Rapids (2026+)
|
||||
neon ARMv8 NEON ARM Cortex-A35/A53/A57 (2012-2015)
|
||||
============= ========================= ===========================================================
|
||||
@@ -1336,7 +1337,8 @@ x86 targets:
|
||||
``avx512skx-x4``, ``avx512skx-x8``, ``avx512skx-x16``, ``avx512skx-x32``,
|
||||
``avx512skx-x64``, ``avx512icl-x4``, ``avx512icl-x8``, ``avx512icl-x16``, ``avx512icl-x32``,
|
||||
``avx512icl-x64``, ``avx512spr-x4``, ``avx512spr-x8``, ``avx512spr-x16``, ``avx512spr-x32``,
|
||||
``avx512spr-x64``.
|
||||
``avx512spr-x64``, ``avx512gnr-x4``, ``avx512gnr-x8``, ``avx512gnr-x16``, ``avx512gnr-x32``,
|
||||
``avx512gnr-x64``.
|
||||
|
||||
Neon targets:
|
||||
|
||||
@@ -1419,7 +1421,7 @@ preprocessor runs:
|
||||
* - ISPC
|
||||
- 1
|
||||
- Enables detecting that the ``ispc`` compiler is processing the file
|
||||
* - ISPC_TARGET_{NEON, SSE2, SSE4, AVX, AVX2, AVX512SKX, AVX512ICL, AVX512SPR, AVX10_2}
|
||||
* - ISPC_TARGET_{NEON, SSE2, SSE4, AVX, AVX2, AVX512SKX, AVX512ICL, AVX512SPR, AVX512GNR, AVX10_2DMR}
|
||||
- 1
|
||||
- One of these will be set, depending on the compilation target
|
||||
* - ISPC_POINTER_SIZE
|
||||
|
||||
@@ -100,8 +100,8 @@ message(STATUS "AMX support detected via: ${AMX_DETECTION_METHOD}")
|
||||
if(AMX_SUPPORTED)
|
||||
set (ISPC_SRC_NAME "amx_matmul")
|
||||
set (TARGET_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/amx_matmul.cpp)
|
||||
set (ISPC_FLAGS -O2 --target=avx512spr-x32 --cpu=gnr --enable-llvm-intrinsics --pic)
|
||||
set (ISPC_IA_TARGETS "avx512spr-x32")
|
||||
set (ISPC_FLAGS -O2 --target=avx512gnr-x32 --enable-llvm-intrinsics --pic)
|
||||
set (ISPC_IA_TARGETS "avx512gnr-x32")
|
||||
|
||||
add_ispc_example(NAME "amx"
|
||||
ISPC_IA_TARGETS ${ISPC_IA_TARGETS}
|
||||
|
||||
+3
-1
@@ -403,8 +403,10 @@ def check_targets():
|
||||
["SSE2", "SSE4.1", "SSE4.2", "AVX", "AVX1.1", "AVX2", "AVX2VNNI", "SKX", "ICL"], "-icl", False]),
|
||||
("SPR", [["avx512spr-x16", "avx512spr-x8", "avx512spr-x4", "avx512spr-x64", "avx512spr-x32"],
|
||||
["SSE2", "SSE4.1", "SSE4.2", "AVX", "AVX1.1", "AVX2", "AVX2VNNI", "SKX", "ICL", "SPR"], "-spr", False]),
|
||||
("GNR", [["avx512gnr-x16", "avx512gnr-x8", "avx512gnr-x4", "avx512gnr-x64", "avx512gnr-x32"],
|
||||
["SSE2", "SSE4.1", "SSE4.2", "AVX", "AVX1.1", "AVX2", "AVX2VNNI", "SKX", "ICL", "SPR", "GNR"], "-gnr", False]),
|
||||
("DMR", [["avx10.2dmr-x16", "avx10.2dmr-x8", "avx10.2dmr-x4", "avx10.2dmr-x64", "avx10.2dmr-x32"],
|
||||
["SSE2", "SSE4.1", "SSE4.2", "AVX", "AVX1.1", "AVX2", "AVX2VNNI", "SKX", "ICL", "SPR", "DMR"], "-dmr", False])
|
||||
["SSE2", "SSE4.1", "SSE4.2", "AVX", "AVX1.1", "AVX2", "AVX2VNNI", "SKX", "ICL", "SPR", "GNR", "DMR"], "-dmr", False])
|
||||
])
|
||||
|
||||
hw_arch = take_lines(check_isa, "first").split()[1]
|
||||
|
||||
@@ -164,29 +164,34 @@ class ISPCTarget:
|
||||
'neon-i32x8': 'generic-i32x8',
|
||||
|
||||
# AVX10.2 targets
|
||||
'avx10.2dmr-x4': 'avx512spr-x4',
|
||||
'avx10.2dmr-x8': 'avx512spr-x8',
|
||||
'avx10.2dmr-x16': 'avx512spr-x16',
|
||||
'avx10.2dmr-x32': 'avx512spr-x32',
|
||||
'avx10.2dmr-x64': 'avx512spr-x64',
|
||||
'avx10.2dmr-x4': 'avx512gnr-x4',
|
||||
'avx10.2dmr-x8': 'avx512gnr-x8',
|
||||
'avx10.2dmr-x16': 'avx512gnr-x16',
|
||||
'avx10.2dmr-x32': 'avx512gnr-x32',
|
||||
'avx10.2dmr-x64': 'avx512gnr-x64',
|
||||
|
||||
# AVX512 hierarchy
|
||||
'avx512gnr-x4': 'avx512spr-x4',
|
||||
'avx512spr-x4': 'avx512icl-x4',
|
||||
'avx512icl-x4': 'avx512skx-x4',
|
||||
'avx512skx-x4': 'generic-i1x4',
|
||||
|
||||
'avx512gnr-x8': 'avx512spr-x8',
|
||||
'avx512spr-x8': 'avx512icl-x8',
|
||||
'avx512icl-x8': 'avx512skx-x8',
|
||||
'avx512skx-x8': 'generic-i1x8',
|
||||
|
||||
'avx512gnr-x16': 'avx512spr-x16',
|
||||
'avx512spr-x16': 'avx512icl-x16',
|
||||
'avx512icl-x16': 'avx512skx-x16',
|
||||
'avx512skx-x16': 'generic-i1x16',
|
||||
|
||||
'avx512gnr-x32': 'avx512spr-x32',
|
||||
'avx512spr-x32': 'avx512icl-x32',
|
||||
'avx512icl-x32': 'avx512skx-x32',
|
||||
'avx512skx-x32': 'generic-i1x32',
|
||||
|
||||
'avx512gnr-x64': 'avx512spr-x64',
|
||||
'avx512spr-x64': 'avx512icl-x64',
|
||||
'avx512icl-x64': 'avx512skx-x64',
|
||||
'avx512skx-x64': 'generic-i1x64',
|
||||
|
||||
+10
-5
@@ -480,21 +480,24 @@ std::unordered_map<ISPCTarget, ISPCTarget> targetParentMap = {
|
||||
{ISPCTarget::rvv_x4, ISPCTarget::generic_i1x4},
|
||||
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_20_0
|
||||
{ISPCTarget::avx10_2dmr_x4, ISPCTarget::avx512spr_x4},
|
||||
{ISPCTarget::avx10_2dmr_x8, ISPCTarget::avx512spr_x8},
|
||||
{ISPCTarget::avx10_2dmr_x16, ISPCTarget::avx512spr_x16},
|
||||
{ISPCTarget::avx10_2dmr_x32, ISPCTarget::avx512spr_x32},
|
||||
{ISPCTarget::avx10_2dmr_x64, ISPCTarget::avx512spr_x64},
|
||||
{ISPCTarget::avx10_2dmr_x4, ISPCTarget::avx512gnr_x4},
|
||||
{ISPCTarget::avx10_2dmr_x8, ISPCTarget::avx512gnr_x8},
|
||||
{ISPCTarget::avx10_2dmr_x16, ISPCTarget::avx512gnr_x16},
|
||||
{ISPCTarget::avx10_2dmr_x32, ISPCTarget::avx512gnr_x32},
|
||||
{ISPCTarget::avx10_2dmr_x64, ISPCTarget::avx512gnr_x64},
|
||||
#endif
|
||||
|
||||
{ISPCTarget::avx512gnr_x4, ISPCTarget::avx512spr_x4},
|
||||
{ISPCTarget::avx512spr_x4, ISPCTarget::avx512icl_x4},
|
||||
{ISPCTarget::avx512icl_x4, ISPCTarget::avx512skx_x4},
|
||||
{ISPCTarget::avx512skx_x4, ISPCTarget::generic_i1x4},
|
||||
|
||||
{ISPCTarget::avx512gnr_x8, ISPCTarget::avx512spr_x8},
|
||||
{ISPCTarget::avx512spr_x8, ISPCTarget::avx512icl_x8},
|
||||
{ISPCTarget::avx512icl_x8, ISPCTarget::avx512skx_x8},
|
||||
{ISPCTarget::avx512skx_x8, ISPCTarget::generic_i1x8},
|
||||
|
||||
{ISPCTarget::avx512gnr_x16, ISPCTarget::avx512spr_x16},
|
||||
{ISPCTarget::avx512spr_x16, ISPCTarget::avx512icl_x16},
|
||||
{ISPCTarget::avx512icl_x16, ISPCTarget::avx512skx_x16},
|
||||
{ISPCTarget::avx512skx_x16, ISPCTarget::generic_i1x16},
|
||||
@@ -502,10 +505,12 @@ std::unordered_map<ISPCTarget, ISPCTarget> targetParentMap = {
|
||||
{ISPCTarget::avx512icl_x16_nozmm, ISPCTarget::avx512skx_x16_nozmm},
|
||||
{ISPCTarget::avx512skx_x16_nozmm, ISPCTarget::generic_i1x16},
|
||||
|
||||
{ISPCTarget::avx512gnr_x32, ISPCTarget::avx512spr_x32},
|
||||
{ISPCTarget::avx512spr_x32, ISPCTarget::avx512icl_x32},
|
||||
{ISPCTarget::avx512icl_x32, ISPCTarget::avx512skx_x32},
|
||||
{ISPCTarget::avx512skx_x32, ISPCTarget::generic_i1x32},
|
||||
|
||||
{ISPCTarget::avx512gnr_x64, ISPCTarget::avx512spr_x64},
|
||||
{ISPCTarget::avx512spr_x64, ISPCTarget::avx512icl_x64},
|
||||
{ISPCTarget::avx512icl_x64, ISPCTarget::avx512skx_x64},
|
||||
{ISPCTarget::avx512skx_x64, ISPCTarget::generic_i1x64},
|
||||
|
||||
@@ -21,7 +21,8 @@ enum ISA {
|
||||
SKX_AVX512 = 8,
|
||||
ICL_AVX512 = 9,
|
||||
SPR_AVX512 = 10,
|
||||
DMR_AVX10_2 = 11,
|
||||
GNR_AVX512 = 11,
|
||||
DMR_AVX10_2 = 12,
|
||||
|
||||
COUNT
|
||||
};
|
||||
@@ -195,7 +196,7 @@ UNUSED_ATTR static enum ISA get_x86_isa() {
|
||||
UNUSED_ATTR int tgl = icl && avx512_vp2intersect;
|
||||
int spr =
|
||||
icl && avx512_bf16 && avx512_amx_bf16 && avx512_amx_tile && avx512_amx_int8 && avx_vnni && avx512_fp16;
|
||||
UNUSED_ATTR int gnr = spr && amxfp16 && prefetchi;
|
||||
int gnr = spr && amxfp16 && prefetchi;
|
||||
|
||||
int avx10 = (info3[3] & (1 << 19)) != 0;
|
||||
|
||||
@@ -220,7 +221,9 @@ UNUSED_ATTR static enum ISA get_x86_isa() {
|
||||
return DMR_AVX10_2;
|
||||
}
|
||||
}
|
||||
if (spr) {
|
||||
if (gnr) {
|
||||
return GNR_AVX512;
|
||||
} else if (spr) {
|
||||
return SPR_AVX512;
|
||||
} else if (icl) {
|
||||
return ICL_AVX512;
|
||||
|
||||
+34
-13
@@ -251,12 +251,14 @@ static ISPCTarget lGetSystemISA() {
|
||||
return ISPCTarget::avx512icl_x16;
|
||||
case Target::ISA::SPR_AVX512:
|
||||
return ISPCTarget::avx512spr_x16;
|
||||
case Target::ISA::GNR_AVX512:
|
||||
return ISPCTarget::avx512gnr_x16;
|
||||
case Target::ISA::DMR_AVX10_2:
|
||||
// Return SPR target for LLVM versions < 20.0
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_20_0
|
||||
return ISPCTarget::avx10_2dmr_x16;
|
||||
#else
|
||||
return ISPCTarget::avx512spr_x16;
|
||||
return ISPCTarget::avx512gnr_x16;
|
||||
#endif
|
||||
default:
|
||||
Error(SourcePos(), "Detected unsupported x86 ISA. Exiting.");
|
||||
@@ -1028,10 +1030,13 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, PICLevel picL
|
||||
#endif
|
||||
|
||||
case CPU_SPR:
|
||||
case CPU_GNR:
|
||||
m_ispc_target = ISPCTarget::avx512spr_x16;
|
||||
break;
|
||||
|
||||
case CPU_GNR:
|
||||
m_ispc_target = ISPCTarget::avx512gnr_x16;
|
||||
break;
|
||||
|
||||
case CPU_ZNVER4:
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_20_0
|
||||
case CPU_ZNVER5:
|
||||
@@ -1577,7 +1582,8 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, PICLevel picL
|
||||
CPUfromISA = (m_ispc_target == ISPCTarget::avx512icl_x32) ? CPU_ICL : CPU_SKX;
|
||||
break;
|
||||
case ISPCTarget::avx512spr_x4:
|
||||
this->m_isa = Target::SPR_AVX512;
|
||||
case ISPCTarget::avx512gnr_x4:
|
||||
this->m_isa = (m_ispc_target == ISPCTarget::avx512gnr_x4) ? Target::GNR_AVX512 : Target::SPR_AVX512;
|
||||
this->m_nativeVectorWidth = 16;
|
||||
this->m_nativeVectorAlignment = 64;
|
||||
this->m_dataTypeWidth = 32;
|
||||
@@ -1589,12 +1595,13 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, PICLevel picL
|
||||
setCapabilities({TargetCapability::HalfConverts, TargetCapability::HalfFullSupport, TargetCapability::Rand,
|
||||
TargetCapability::Rsqrtd, TargetCapability::Rcpd, TargetCapability::Fp16Support,
|
||||
TargetCapability::IntelVNNI, TargetCapability::ConflictDetection});
|
||||
CPUfromISA = CPU_SPR;
|
||||
CPUfromISA = (m_ispc_target == ISPCTarget::avx512gnr_x4) ? CPU_GNR : CPU_SPR;
|
||||
this->m_funcAttributes.push_back(std::make_pair("prefer-vector-width", "256"));
|
||||
this->m_funcAttributes.push_back(std::make_pair("min-legal-vector-width", "256"));
|
||||
break;
|
||||
case ISPCTarget::avx512spr_x8:
|
||||
this->m_isa = Target::SPR_AVX512;
|
||||
case ISPCTarget::avx512gnr_x8:
|
||||
this->m_isa = (m_ispc_target == ISPCTarget::avx512gnr_x8) ? Target::GNR_AVX512 : Target::SPR_AVX512;
|
||||
this->m_nativeVectorWidth = 16;
|
||||
this->m_nativeVectorAlignment = 64;
|
||||
this->m_dataTypeWidth = 32;
|
||||
@@ -1606,12 +1613,13 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, PICLevel picL
|
||||
setCapabilities({TargetCapability::HalfConverts, TargetCapability::HalfFullSupport, TargetCapability::Rand,
|
||||
TargetCapability::Rsqrtd, TargetCapability::Rcpd, TargetCapability::Fp16Support,
|
||||
TargetCapability::IntelVNNI, TargetCapability::ConflictDetection});
|
||||
CPUfromISA = CPU_SPR;
|
||||
CPUfromISA = (m_ispc_target == ISPCTarget::avx512gnr_x8) ? CPU_GNR : CPU_SPR;
|
||||
this->m_funcAttributes.push_back(std::make_pair("prefer-vector-width", "256"));
|
||||
this->m_funcAttributes.push_back(std::make_pair("min-legal-vector-width", "256"));
|
||||
break;
|
||||
case ISPCTarget::avx512spr_x16:
|
||||
this->m_isa = Target::SPR_AVX512;
|
||||
case ISPCTarget::avx512gnr_x16:
|
||||
this->m_isa = (m_ispc_target == ISPCTarget::avx512gnr_x16) ? Target::GNR_AVX512 : Target::SPR_AVX512;
|
||||
this->m_nativeVectorWidth = 16;
|
||||
this->m_nativeVectorAlignment = 64;
|
||||
this->m_dataTypeWidth = 32;
|
||||
@@ -1623,12 +1631,13 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, PICLevel picL
|
||||
setCapabilities({TargetCapability::HalfConverts, TargetCapability::HalfFullSupport, TargetCapability::Rand,
|
||||
TargetCapability::Rsqrtd, TargetCapability::Rcpd, TargetCapability::Fp16Support,
|
||||
TargetCapability::IntelVNNI, TargetCapability::ConflictDetection});
|
||||
CPUfromISA = CPU_SPR;
|
||||
CPUfromISA = (m_ispc_target == ISPCTarget::avx512gnr_x16) ? CPU_GNR : CPU_SPR;
|
||||
this->m_funcAttributes.push_back(std::make_pair("prefer-vector-width", "512"));
|
||||
this->m_funcAttributes.push_back(std::make_pair("min-legal-vector-width", "512"));
|
||||
break;
|
||||
case ISPCTarget::avx512spr_x64:
|
||||
this->m_isa = Target::SPR_AVX512;
|
||||
case ISPCTarget::avx512gnr_x64:
|
||||
this->m_isa = (m_ispc_target == ISPCTarget::avx512gnr_x64) ? Target::GNR_AVX512 : Target::SPR_AVX512;
|
||||
this->m_nativeVectorWidth = 64;
|
||||
this->m_nativeVectorAlignment = 64;
|
||||
this->m_dataTypeWidth = 8;
|
||||
@@ -1640,10 +1649,11 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, PICLevel picL
|
||||
setCapabilities({TargetCapability::HalfConverts, TargetCapability::HalfFullSupport, TargetCapability::Rand,
|
||||
TargetCapability::Fp16Support, TargetCapability::IntelVNNI,
|
||||
TargetCapability::ConflictDetection});
|
||||
CPUfromISA = CPU_SPR;
|
||||
CPUfromISA = (m_ispc_target == ISPCTarget::avx512gnr_x64) ? CPU_GNR : CPU_SPR;
|
||||
break;
|
||||
case ISPCTarget::avx512spr_x32:
|
||||
this->m_isa = Target::SPR_AVX512;
|
||||
case ISPCTarget::avx512gnr_x32:
|
||||
this->m_isa = (m_ispc_target == ISPCTarget::avx512gnr_x32) ? Target::GNR_AVX512 : Target::SPR_AVX512;
|
||||
this->m_nativeVectorWidth = 64;
|
||||
this->m_nativeVectorAlignment = 64;
|
||||
this->m_dataTypeWidth = 16;
|
||||
@@ -1655,7 +1665,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, PICLevel picL
|
||||
setCapabilities({TargetCapability::HalfConverts, TargetCapability::HalfFullSupport, TargetCapability::Rand,
|
||||
TargetCapability::Fp16Support, TargetCapability::IntelVNNI,
|
||||
TargetCapability::ConflictDetection});
|
||||
CPUfromISA = CPU_SPR;
|
||||
CPUfromISA = (m_ispc_target == ISPCTarget::avx512gnr_x32) ? CPU_GNR : CPU_SPR;
|
||||
break;
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_20_0
|
||||
case ISPCTarget::avx10_2dmr_x4:
|
||||
@@ -2086,6 +2096,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, PICLevel picL
|
||||
case Target::SKX_AVX512:
|
||||
case Target::ICL_AVX512:
|
||||
case Target::SPR_AVX512:
|
||||
case Target::GNR_AVX512:
|
||||
this->setWarning(PerfWarningType::DIVModInt);
|
||||
break;
|
||||
// TODO: Add warnings for AVX10
|
||||
@@ -2127,7 +2138,7 @@ Target::Target(Arch arch, const char *cpu, ISPCTarget ispc_target, PICLevel picL
|
||||
|
||||
if ((m_ispc_target == ISPCTarget::generic_i32x16 || m_ispc_target == ISPCTarget::generic_i1x16 ||
|
||||
m_ispc_target == ISPCTarget::generic_i1x32 || m_ispc_target == ISPCTarget::generic_i1x64) &&
|
||||
(CPUID == CPU_SKX || CPUID == CPU_ICL || CPUID == CPU_SPR
|
||||
(CPUID == CPU_SKX || CPUID == CPU_ICL || CPUID == CPU_SPR || CPUID == CPU_GNR
|
||||
#if LLVM_VERSION >= ISPC_LLVM_20_0
|
||||
|| CPUID == CPU_DMR
|
||||
#endif
|
||||
@@ -2672,6 +2683,8 @@ const char *Target::ISAToString(ISA isa) {
|
||||
return "avx512icl";
|
||||
case Target::SPR_AVX512:
|
||||
return "avx512spr";
|
||||
case Target::GNR_AVX512:
|
||||
return "avx512gnr";
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_20_0
|
||||
case Target::DMR_AVX10_2:
|
||||
return "avx10.2dmr";
|
||||
@@ -2741,6 +2754,8 @@ const char *Target::ISAToTargetString(ISA isa) {
|
||||
return "avx512icl-x16";
|
||||
case Target::SPR_AVX512:
|
||||
return "avx512spr-x16";
|
||||
case Target::GNR_AVX512:
|
||||
return "avx512gnr-x16";
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_20_0
|
||||
case Target::DMR_AVX10_2:
|
||||
return "avx10.2dmr-x16";
|
||||
@@ -2804,6 +2819,12 @@ Target::ISA Target::TargetToISA(ISPCTarget target) {
|
||||
case ISPCTarget::avx512spr_x32:
|
||||
case ISPCTarget::avx512spr_x64:
|
||||
return Target::ISA::SPR_AVX512;
|
||||
case ISPCTarget::avx512gnr_x4:
|
||||
case ISPCTarget::avx512gnr_x8:
|
||||
case ISPCTarget::avx512gnr_x16:
|
||||
case ISPCTarget::avx512gnr_x32:
|
||||
case ISPCTarget::avx512gnr_x64:
|
||||
return Target::ISA::GNR_AVX512;
|
||||
case ISPCTarget::avx10_2dmr_x4:
|
||||
case ISPCTarget::avx10_2dmr_x8:
|
||||
case ISPCTarget::avx10_2dmr_x16:
|
||||
|
||||
@@ -255,6 +255,7 @@ class Target {
|
||||
SKX_AVX512 = dispatch::ISA::SKX_AVX512,
|
||||
ICL_AVX512 = dispatch::ISA::ICL_AVX512,
|
||||
SPR_AVX512 = dispatch::ISA::SPR_AVX512,
|
||||
GNR_AVX512 = dispatch::ISA::GNR_AVX512,
|
||||
DMR_AVX10_2 = dispatch::ISA::DMR_AVX10_2,
|
||||
#ifdef ISPC_ARM_ENABLED
|
||||
NEON,
|
||||
|
||||
+41
-1
@@ -188,9 +188,24 @@ ISPCTarget operator++(ISPCTarget &target, int dummy) {
|
||||
static_assert(static_cast<underlying>(ISPCTarget::avx512spr_x64) ==
|
||||
static_cast<underlying>(ISPCTarget::avx512spr_x32) + 1,
|
||||
"Enum ISPCTarget is not sequential");
|
||||
static_assert(static_cast<underlying>(ISPCTarget::avx10_2dmr_x4) ==
|
||||
static_assert(static_cast<underlying>(ISPCTarget::avx512gnr_x4) ==
|
||||
static_cast<underlying>(ISPCTarget::avx512spr_x64) + 1,
|
||||
"Enum ISPCTarget is not sequential");
|
||||
static_assert(static_cast<underlying>(ISPCTarget::avx512gnr_x8) ==
|
||||
static_cast<underlying>(ISPCTarget::avx512gnr_x4) + 1,
|
||||
"Enum ISPCTarget is not sequential");
|
||||
static_assert(static_cast<underlying>(ISPCTarget::avx512gnr_x16) ==
|
||||
static_cast<underlying>(ISPCTarget::avx512gnr_x8) + 1,
|
||||
"Enum ISPCTarget is not sequential");
|
||||
static_assert(static_cast<underlying>(ISPCTarget::avx512gnr_x32) ==
|
||||
static_cast<underlying>(ISPCTarget::avx512gnr_x16) + 1,
|
||||
"Enum ISPCTarget is not sequential");
|
||||
static_assert(static_cast<underlying>(ISPCTarget::avx512gnr_x64) ==
|
||||
static_cast<underlying>(ISPCTarget::avx512gnr_x32) + 1,
|
||||
"Enum ISPCTarget is not sequential");
|
||||
static_assert(static_cast<underlying>(ISPCTarget::avx10_2dmr_x4) ==
|
||||
static_cast<underlying>(ISPCTarget::avx512gnr_x64) + 1,
|
||||
"Enum ISPCTarget is not sequential");
|
||||
static_assert(static_cast<underlying>(ISPCTarget::avx10_2dmr_x8) ==
|
||||
static_cast<underlying>(ISPCTarget::avx10_2dmr_x4) + 1,
|
||||
"Enum ISPCTarget is not sequential");
|
||||
@@ -434,6 +449,16 @@ ISPCTarget ParseISPCTarget(std::string target) {
|
||||
return ISPCTarget::avx512spr_x32;
|
||||
} else if (target == "avx512spr-x64") {
|
||||
return ISPCTarget::avx512spr_x64;
|
||||
} else if (target == "avx512gnr-x4") {
|
||||
return ISPCTarget::avx512gnr_x4;
|
||||
} else if (target == "avx512gnr-x8") {
|
||||
return ISPCTarget::avx512gnr_x8;
|
||||
} else if (target == "avx512gnr-x16") {
|
||||
return ISPCTarget::avx512gnr_x16;
|
||||
} else if (target == "avx512gnr-x32") {
|
||||
return ISPCTarget::avx512gnr_x32;
|
||||
} else if (target == "avx512gnr-x64") {
|
||||
return ISPCTarget::avx512gnr_x64;
|
||||
#if ISPC_LLVM_VERSION >= ISPC_LLVM_20_0
|
||||
} else if (target == "avx10.2dmr-x4") {
|
||||
return ISPCTarget::avx10_2dmr_x4;
|
||||
@@ -629,6 +654,16 @@ std::string ISPCTargetToString(ISPCTarget target) {
|
||||
return "avx512spr-x32";
|
||||
case ISPCTarget::avx512spr_x64:
|
||||
return "avx512spr-x64";
|
||||
case ISPCTarget::avx512gnr_x4:
|
||||
return "avx512gnr-x4";
|
||||
case ISPCTarget::avx512gnr_x8:
|
||||
return "avx512gnr-x8";
|
||||
case ISPCTarget::avx512gnr_x16:
|
||||
return "avx512gnr-x16";
|
||||
case ISPCTarget::avx512gnr_x32:
|
||||
return "avx512gnr-x32";
|
||||
case ISPCTarget::avx512gnr_x64:
|
||||
return "avx512gnr-x64";
|
||||
case ISPCTarget::avx10_2dmr_x4:
|
||||
return "avx10.2dmr-x4";
|
||||
case ISPCTarget::avx10_2dmr_x8:
|
||||
@@ -757,6 +792,11 @@ bool ISPCTargetIsX86(ISPCTarget target) {
|
||||
case ISPCTarget::avx512spr_x16:
|
||||
case ISPCTarget::avx512spr_x32:
|
||||
case ISPCTarget::avx512spr_x64:
|
||||
case ISPCTarget::avx512gnr_x4:
|
||||
case ISPCTarget::avx512gnr_x8:
|
||||
case ISPCTarget::avx512gnr_x16:
|
||||
case ISPCTarget::avx512gnr_x32:
|
||||
case ISPCTarget::avx512gnr_x64:
|
||||
case ISPCTarget::avx10_2dmr_x4:
|
||||
case ISPCTarget::avx10_2dmr_x8:
|
||||
case ISPCTarget::avx10_2dmr_x16:
|
||||
|
||||
@@ -75,6 +75,11 @@ enum class ISPCTarget {
|
||||
avx512spr_x16,
|
||||
avx512spr_x32,
|
||||
avx512spr_x64,
|
||||
avx512gnr_x4,
|
||||
avx512gnr_x8,
|
||||
avx512gnr_x16,
|
||||
avx512gnr_x32,
|
||||
avx512gnr_x64,
|
||||
avx10_2dmr_x4,
|
||||
avx10_2dmr_x8,
|
||||
avx10_2dmr_x16,
|
||||
|
||||
@@ -171,13 +171,16 @@ static ISPCTarget lGetAliasTarget(ISPCTarget target) {
|
||||
// Otherwise returns the canonicalized target
|
||||
static ISPCTarget lCanonicalizeTarget(ISPCTarget target, TargetOS os, bool applyAliases) {
|
||||
// Check if target is unsupported on this OS
|
||||
// There's no Mac that supports SPR, so the decision is not support these targets when targeting macOS.
|
||||
// There's no Mac that supports SPR/GNR, so the decision is not support these targets when targeting macOS.
|
||||
// If these targets are linked in, then we still can use them for cross compilation, for example for Linux.
|
||||
if (os == TargetOS::macos && (target == ISPCTarget::avx512spr_x4 || target == ISPCTarget::avx512spr_x8 ||
|
||||
target == ISPCTarget::avx512spr_x16 || target == ISPCTarget::avx512spr_x32 ||
|
||||
target == ISPCTarget::avx512spr_x64 || target == ISPCTarget::avx10_2dmr_x4 ||
|
||||
target == ISPCTarget::avx10_2dmr_x8 || target == ISPCTarget::avx10_2dmr_x16 ||
|
||||
target == ISPCTarget::avx10_2dmr_x32 || target == ISPCTarget::avx10_2dmr_x64)) {
|
||||
target == ISPCTarget::avx512spr_x64 || target == ISPCTarget::avx512gnr_x4 ||
|
||||
target == ISPCTarget::avx512gnr_x8 || target == ISPCTarget::avx512gnr_x16 ||
|
||||
target == ISPCTarget::avx512gnr_x32 || target == ISPCTarget::avx512gnr_x64 ||
|
||||
target == ISPCTarget::avx10_2dmr_x4 || target == ISPCTarget::avx10_2dmr_x8 ||
|
||||
target == ISPCTarget::avx10_2dmr_x16 || target == ISPCTarget::avx10_2dmr_x32 ||
|
||||
target == ISPCTarget::avx10_2dmr_x64)) {
|
||||
return ISPCTarget::none;
|
||||
}
|
||||
|
||||
|
||||
@@ -171,7 +171,7 @@ static const int32 programIndex = {ISPC_PROGRAM_INDEX_INITIALIZER};
|
||||
#endif
|
||||
|
||||
#if defined(ISPC_TARGET_AVX512SKX) || defined(ISPC_TARGET_AVX512ICL) || defined(ISPC_TARGET_AVX512SPR) || \
|
||||
defined(ISPC_TARGET_AVX10_2DMR)
|
||||
defined(ISPC_TARGET_AVX512GNR) || defined(ISPC_TARGET_AVX10_2DMR)
|
||||
#define ISPC_TARGET_HAS_ROTATE_VIA_SHUFFLE_8_VAL 1
|
||||
#define ISPC_TARGET_HAS_ROTATE_VIA_SHUFFLE_16_VAL 1
|
||||
#if TARGET_WIDTH <= 32
|
||||
@@ -192,7 +192,7 @@ static const int32 programIndex = {ISPC_PROGRAM_INDEX_INITIALIZER};
|
||||
#endif
|
||||
|
||||
#if defined(ISPC_TARGET_AVX512SKX) || defined(ISPC_TARGET_AVX512ICL) || defined(ISPC_TARGET_AVX512SPR) || \
|
||||
defined(ISPC_TARGET_AVX10_2DMR)
|
||||
defined(ISPC_TARGET_AVX512GNR) || defined(ISPC_TARGET_AVX10_2DMR)
|
||||
#define ISPC_TARGET_HAS_SHIFT_VIA_SHUFFLE_8_VAL 1
|
||||
#define ISPC_TARGET_HAS_SHIFT_VIA_SHUFFLE_16_VAL 1
|
||||
#if TARGET_WIDTH < 64
|
||||
|
||||
@@ -3,17 +3,22 @@
|
||||
// RUN: %{ispc} --target=avx512skx-x4 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_SKX_INT8,CHECK_INT16,CHECK_INT32,CHECK_FLOAT,CHECK_DOUBLE,CHECK_INT64
|
||||
// RUN: %{ispc} --target=avx512icl-x4 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_SKX_INT8,CHECK_INT16,CHECK_INT32,CHECK_FLOAT,CHECK_DOUBLE,CHECK_INT64
|
||||
// RUN: %{ispc} --target=avx512spr-x4 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_SKX_INT8,CHECK_INT16,CHECK_INT32,CHECK_FLOAT,CHECK_DOUBLE,CHECK_INT64
|
||||
// RUN: %{ispc} --target=avx512gnr-x4 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_SKX_INT8,CHECK_INT16,CHECK_INT32,CHECK_FLOAT,CHECK_DOUBLE,CHECK_INT64
|
||||
// RUN: %{ispc} --target=avx512skx-x8 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_SKX_INT8,CHECK_INT16,CHECK_INT32,CHECK_FLOAT
|
||||
// RUN: %{ispc} --target=avx512icl-x8 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_SKX_INT8,CHECK_INT16,CHECK_INT32,CHECK_FLOAT
|
||||
// RUN: %{ispc} --target=avx512spr-x8 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_SKX_INT8,CHECK_INT16,CHECK_INT32,CHECK_FLOAT
|
||||
// RUN: %{ispc} --target=avx512gnr-x8 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_SKX_INT8,CHECK_INT16,CHECK_INT32,CHECK_FLOAT
|
||||
// RUN: %{ispc} --target=avx512skx-x16 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT8,CHECK_INT16,CHECK_INT32,CHECK_FLOAT
|
||||
// RUN: %{ispc} --target=avx512icl-x16 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT8,CHECK_INT16,CHECK_INT32,CHECK_FLOAT
|
||||
// RUN: %{ispc} --target=avx512spr-x16 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT8,CHECK_INT16,CHECK_INT32,CHECK_FLOAT
|
||||
// RUN: %{ispc} --target=avx512gnr-x16 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT8,CHECK_INT16,CHECK_INT32,CHECK_FLOAT
|
||||
// RUN: %{ispc} --target=avx512skx-x32 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT8
|
||||
// RUN: %{ispc} --target=avx512icl-x32 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT8
|
||||
// RUN: %{ispc} --target=avx512spr-x32 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT8
|
||||
// RUN: %{ispc} --target=avx512gnr-x32 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT8
|
||||
// RUN: %{ispc} --target=avx512icl-x64 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT8
|
||||
// RUN: %{ispc} --target=avx512spr-x64 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT8
|
||||
// RUN: %{ispc} --target=avx512gnr-x64 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT8
|
||||
|
||||
// REQUIRES: X86_ENABLED && !MACOS_HOST
|
||||
|
||||
|
||||
@@ -6,18 +6,17 @@
|
||||
// RUN: %{ispc} --target=avx512icl-x4 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT32,CHECK_FLOAT,CHECK_INT64,CHECK_DOUBLE
|
||||
// RUN: %{ispc} --target=avx512skx-x4 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT32,CHECK_FLOAT,CHECK_INT64,CHECK_DOUBLE
|
||||
// RUN: %{ispc} --target=avx512spr-x4 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT32,CHECK_FLOAT,CHECK_INT64,CHECK_DOUBLE
|
||||
// RUN: %{ispc} --target=avx512gnr-x4 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT32,CHECK_FLOAT,CHECK_INT64,CHECK_DOUBLE
|
||||
|
||||
// RUN: %{ispc} --target=avx512icl-x8 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT16,CHECK_INT32,CHECK_FLOAT
|
||||
// RUN: %{ispc} --target=avx512skx-x8 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT16,CHECK_INT32,CHECK_FLOAT
|
||||
// RUN: %{ispc} --target=avx512spr-x8 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT16,CHECK_INT32,CHECK_FLOAT
|
||||
|
||||
// RUN: %{ispc} --target=avx512icl-x8 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT16,CHECK_INT32,CHECK_FLOAT
|
||||
// RUN: %{ispc} --target=avx512skx-x8 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT16,CHECK_INT32,CHECK_FLOAT
|
||||
// RUN: %{ispc} --target=avx512spr-x8 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT16,CHECK_INT32,CHECK_FLOAT
|
||||
// RUN: %{ispc} --target=avx512gnr-x8 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT16,CHECK_INT32,CHECK_FLOAT
|
||||
|
||||
// RUN: %{ispc} --target=avx512icl-x16 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT8,CHECK_INT16,CHECK_INT32,CHECK_FLOAT
|
||||
// RUN: %{ispc} --target=avx512skx-x16 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT16,CHECK_INT32,CHECK_FLOAT
|
||||
// RUN: %{ispc} --target=avx512spr-x16 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT8,CHECK_INT16,CHECK_INT32,CHECK_FLOAT
|
||||
// RUN: %{ispc} --target=avx512gnr-x16 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s --check-prefixes=CHECK_ALL,CHECK_INT8,CHECK_INT16,CHECK_INT32,CHECK_FLOAT
|
||||
|
||||
|
||||
// REQUIRES: X86_ENABLED && !MACOS_HOST
|
||||
|
||||
@@ -10,6 +10,12 @@
|
||||
// RUN: %{ispc} --target=avx512spr-x32 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s
|
||||
// RUN: %{ispc} --target=avx512spr-x64 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s
|
||||
|
||||
// RUN: %{ispc} --target=avx512gnr-x4 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s
|
||||
// RUN: %{ispc} --target=avx512gnr-x8 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s
|
||||
// RUN: %{ispc} --target=avx512gnr-x16 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s
|
||||
// RUN: %{ispc} --target=avx512gnr-x32 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s
|
||||
// RUN: %{ispc} --target=avx512gnr-x64 --nowrap -O2 --emit-asm --x86-asm-syntax=intel %s -o - | FileCheck %s
|
||||
|
||||
// REQUIRES: X86_ENABLED && !MACOS_HOST
|
||||
|
||||
// CHECK-LABEL: clz___vyi
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
// Case 1: Checks avx512gnr-x16 assembly output for zmm registers.
|
||||
//; RUN: %{ispc} %s --target=avx512gnr-x16 --emit-asm -o - 2>&1 | FileCheck %s -check-prefix=CHECK_ZMM_32x16
|
||||
// Case 2a: Checks avx512gnr-x4 assembly output to ensure there are no zmm registers.
|
||||
//; RUN: %{ispc} %s --target=avx512gnr-x4 --emit-asm -o - 2>&1 | FileCheck %s --implicit-check-not "zmm"
|
||||
// Case 2b: Checks avx512gnr-x8 assembly output to ensure there are no zmm registers.
|
||||
//; RUN: %{ispc} %s --target=avx512gnr-x8 --emit-asm -o - 2>&1 | FileCheck %s --implicit-check-not "zmm"
|
||||
// Case 3: Checks avx512gnr-x16 LLVM IR to ensure avx512gnr-x8 func attributes are not present.
|
||||
//; RUN: %{ispc} %s --target=avx512gnr-x16 --emit-llvm-text -o - 2>&1 | FileCheck %s --implicit-check-not ""min-legal-vector-width"="256"" --implicit-check-not ""prefer-vector-width"="256""
|
||||
// Case 4a: Checks avx512gnr-x4 LLVM IR to ensure avx512gnr-x4 func attributes are present (same as for x8).
|
||||
//; RUN: %{ispc} %s --target=avx512gnr-x4 --emit-llvm-text -o - 2>&1 | FileCheck %s -check-prefix=CHECK_ATTR_8
|
||||
// Case 4b: Checks avx512gnr-x8 LLVM IR to ensure avx512gnr-x8 func attributes are present.
|
||||
//; RUN: %{ispc} %s --target=avx512gnr-x8 --emit-llvm-text -o - 2>&1 | FileCheck %s -check-prefix=CHECK_ATTR_8
|
||||
|
||||
// REQUIRES: X86_ENABLED && !MACOS_HOST
|
||||
|
||||
double ret_round(double val)
|
||||
{
|
||||
//; CHECK_ZMM_32x16: zmm
|
||||
return round(val+.49999);
|
||||
}
|
||||
|
||||
double foo(double val1, double val2)
|
||||
{
|
||||
//; CHECK_ZMM_32x16: zmm
|
||||
double sub_val = val1 - val2;
|
||||
return ret_round(sub_val);
|
||||
}
|
||||
|
||||
export void infoo(uniform double afoo1[], uniform double afoo2[], uniform double afoo3[])
|
||||
{
|
||||
double a = afoo1[programIndex];
|
||||
double b = afoo2[programIndex];
|
||||
double c = foo(a, b);
|
||||
//; CHECK_ZMM_32x16: zmm
|
||||
afoo3[programIndex] = c;
|
||||
}
|
||||
// The avx512gnr-x8 specific function attribute list will be present at 2 places.
|
||||
// Once where function attributes for exported functions are aggregated and
|
||||
// again where function attributes for non-exported functions are aggregated.
|
||||
//; CHECK_ATTR_8: "min-legal-vector-width"="256"
|
||||
//; CHECK_ATTR_8: "prefer-vector-width"="256"
|
||||
//; CHECK_ATTR_8: "min-legal-vector-width"="256"
|
||||
//; CHECK_ATTR_8: "prefer-vector-width"="256"
|
||||
@@ -32,6 +32,9 @@ int main() {
|
||||
printf("AVX512SPR\n");
|
||||
break;
|
||||
case 10:
|
||||
printf("AVX512GNR\n");
|
||||
break;
|
||||
case 11:
|
||||
printf("AVX10_2DMR\n");
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Compile the test for different x86 targets with auto-dispatch enabled and run the test under SDE to verify that correct platform was picked in runtime.
|
||||
|
||||
// RUN: %{ispc} %s --target=sse2-i32x4,sse4-i32x4,avx1-i32x8,avx2-i32x8,avx2vnni-i32x8,avx512skx-x16,avx512icl-x16,avx512spr-x16 -o %t_ispc0.o --nostdlib
|
||||
// RUN: %{ispc} %s --target=sse2-i32x4,sse4-i32x4,avx1-i32x8,avx2-i32x8,avx2vnni-i32x8,avx512skx-x16,avx512icl-x16,avx512spr-x16,avx512gnr-x16 -o %t_ispc0.o --nostdlib
|
||||
// RUN: %{cc} -O2 %S/check_dispatch.c %t_ispc0*.o -o %t.exe
|
||||
// RUN: sde -mrm -- %t.exe | FileCheck %s -check-prefix=CHECK_SSE2
|
||||
// Note sse4-i32x4 implies SSE4.2 ISA, while Penryn is SSE4.1, so should fall back to SSE2.
|
||||
@@ -12,15 +12,16 @@
|
||||
// RUN: sde -skx -- %t.exe | FileCheck %s -check-prefix=CHECK_SKX
|
||||
// RUN: sde -icl -- %t.exe | FileCheck %s -check-prefix=CHECK_ICL
|
||||
// RUN: sde -spr -- %t.exe | FileCheck %s -check-prefix=CHECK_SPR
|
||||
// RUN: sde -gnr -- %t.exe | FileCheck %s -check-prefix=CHECK_GNR
|
||||
|
||||
// RUN: %{ispc} %s --target=sse2-i32x4,sse4.1-i32x4,avx1-i32x8,avx2-i32x8,avx512skx-x16,avx512spr-x16 -o %t_ispc2.o --nostdlib
|
||||
// RUN: %{ispc} %s --target=sse2-i32x4,sse4.1-i32x4,avx1-i32x8,avx2-i32x8,avx512skx-x16,avx512spr-x16,avx512gnr-x16 -o %t_ispc2.o --nostdlib
|
||||
// RUN: %{cc} -O2 %S/check_dispatch.c %t_ispc2*.o -o %t2.exe
|
||||
// RUN: sde -mrm -- %t2.exe | FileCheck %s -check-prefix=CHECK_SSE2
|
||||
// sse4.1-i32x4 is specified, so both Penryn and Nehalem should use it.
|
||||
// RUN: sde -pnr -- %t2.exe | FileCheck %s -check-prefix=CHECK_SSE4
|
||||
// RUN: sde -nhm -- %t2.exe | FileCheck %s -check-prefix=CHECK_SSE4
|
||||
|
||||
// RUN: %{ispc} %s --target=sse2-i32x4,sse4.2-i32x4,avx1-i32x8,avx2-i32x8,avx512skx-x16,avx512spr-x16 -o %t_ispc3.o --nostdlib
|
||||
// RUN: %{ispc} %s --target=sse2-i32x4,sse4.2-i32x4,avx1-i32x8,avx2-i32x8,avx512skx-x16,avx512spr-x16,avx512gnr-x16 -o %t_ispc3.o --nostdlib
|
||||
// RUN: %{cc} -O2 %S/check_dispatch.c %t_ispc3*.o -o %t3.exe
|
||||
// RUN: sde -mrm -- %t3.exe | FileCheck %s -check-prefix=CHECK_SSE2
|
||||
// sse4.2-i32x4 is specified, so Penryn should fall back to SSE2.
|
||||
@@ -37,9 +38,12 @@
|
||||
// CHECK_SKX: AVX512SKX
|
||||
// CHECK_ICL: AVX512ICL
|
||||
// CHECK_SPR: AVX512SPR
|
||||
// CHECK_GNR: AVX512GNR
|
||||
|
||||
export uniform int detect_isa() {
|
||||
#if defined(ISPC_TARGET_AVX512SPR)
|
||||
#if defined(ISPC_TARGET_AVX512GNR)
|
||||
return 10;
|
||||
#elif defined(ISPC_TARGET_AVX512SPR)
|
||||
return 9;
|
||||
#elif defined(ISPC_TARGET_AVX512ICL)
|
||||
return 8;
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
|
||||
export uniform int detect_isa() {
|
||||
#if defined(ISPC_TARGET_AVX10_2DMR)
|
||||
return 11;
|
||||
#elif defined(ISPC_TARGET_AVX512GNR)
|
||||
return 10;
|
||||
#elif defined(ISPC_TARGET_AVX512SPR)
|
||||
return 9;
|
||||
|
||||
@@ -55,6 +55,16 @@
|
||||
// RUN: %{ispc} %s -O2 --woff --target=avx512spr-x32 --addressing=64 --nostdlib --emit-llvm-text --opt=disable-gathers --opt=disable-scatters -o - | FileCheck %s
|
||||
// RUN: %{ispc} %s -O2 --woff --target=avx512spr-x64 --addressing=32 --nostdlib --emit-llvm-text --opt=disable-gathers --opt=disable-scatters -o - | FileCheck %s
|
||||
// RUN: %{ispc} %s -O2 --woff --target=avx512spr-x64 --addressing=64 --nostdlib --emit-llvm-text --opt=disable-gathers --opt=disable-scatters -o - | FileCheck %s
|
||||
// RUN: %{ispc} %s -O2 --woff --target=avx512gnr-x4 --addressing=32 --nostdlib --emit-llvm-text --opt=disable-gathers --opt=disable-scatters -o - | FileCheck %s
|
||||
// RUN: %{ispc} %s -O2 --woff --target=avx512gnr-x4 --addressing=64 --nostdlib --emit-llvm-text --opt=disable-gathers --opt=disable-scatters -o - | FileCheck %s
|
||||
// RUN: %{ispc} %s -O2 --woff --target=avx512gnr-x8 --addressing=32 --nostdlib --emit-llvm-text --opt=disable-gathers --opt=disable-scatters -o - | FileCheck %s
|
||||
// RUN: %{ispc} %s -O2 --woff --target=avx512gnr-x8 --addressing=64 --nostdlib --emit-llvm-text --opt=disable-gathers --opt=disable-scatters -o - | FileCheck %s
|
||||
// RUN: %{ispc} %s -O2 --woff --target=avx512gnr-x16 --addressing=32 --nostdlib --emit-llvm-text --opt=disable-gathers --opt=disable-scatters -o - | FileCheck %s
|
||||
// RUN: %{ispc} %s -O2 --woff --target=avx512gnr-x16 --addressing=64 --nostdlib --emit-llvm-text --opt=disable-gathers --opt=disable-scatters -o - | FileCheck %s
|
||||
// RUN: %{ispc} %s -O2 --woff --target=avx512gnr-x32 --addressing=32 --nostdlib --emit-llvm-text --opt=disable-gathers --opt=disable-scatters -o - | FileCheck %s
|
||||
// RUN: %{ispc} %s -O2 --woff --target=avx512gnr-x32 --addressing=64 --nostdlib --emit-llvm-text --opt=disable-gathers --opt=disable-scatters -o - | FileCheck %s
|
||||
// RUN: %{ispc} %s -O2 --woff --target=avx512gnr-x64 --addressing=32 --nostdlib --emit-llvm-text --opt=disable-gathers --opt=disable-scatters -o - | FileCheck %s
|
||||
// RUN: %{ispc} %s -O2 --woff --target=avx512gnr-x64 --addressing=64 --nostdlib --emit-llvm-text --opt=disable-gathers --opt=disable-scatters -o - | FileCheck %s
|
||||
|
||||
// REQUIRES: X86_ENABLED && !MACOS_HOST
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// RUN: %{ispc} --pic --target=sse2-i32x4,sse4.1-i32x4,avx1-i32x4,avx2-i32x4,avx2vnni-i32x4,avx512icl-x4,avx512skx-x4,avx512spr-x4 -h %t.h %s -o %t.o -g
|
||||
// RUN: %{ispc} --pic --target=sse2-i32x4,sse4.1-i32x4,avx1-i32x4,avx2-i32x4,avx2vnni-i32x4,avx512icl-x4,avx512skx-x4,avx512spr-x4,avx512gnr-x4 -h %t.h %s -o %t.o -g
|
||||
// RUN: %{cc} -x c -c %s -o %t.c.o --include %t.h -g
|
||||
// RUN: %{cc} %t.c.o -o %t.c.bin -g -rdynamic %t.o %t_sse2.o %t_sse4.o %t_avx.o %t_avx2.o %t_avx2vnni.o %t_avx512icl.o %t_avx512skx.o %t_avx512spr.o
|
||||
// RUN: %{cc} %t.c.o -o %t.c.bin -g -rdynamic %t.o %t_sse2.o %t_sse4.o %t_avx.o %t_avx2.o %t_avx2vnni.o %t_avx512icl.o %t_avx512skx.o %t_avx512spr.o %t_avx512gnr.o
|
||||
|
||||
// RUN: sde -mrm -- %t.c.bin | FileCheck %s --check-prefix=CHECK-SSE2
|
||||
// RUN: sde -pnr -- %t.c.bin | FileCheck %s --check-prefix=CHECK-SSE4
|
||||
@@ -10,6 +10,7 @@
|
||||
// RUN: sde -skx -- %t.c.bin | FileCheck %s --check-prefix=CHECK-SKX
|
||||
// RUN: sde -icl -- %t.c.bin | FileCheck %s --check-prefix=CHECK-ICL
|
||||
// RUN: sde -spr -- %t.c.bin | FileCheck %s --check-prefix=CHECK-SPR
|
||||
// RUN: sde -gnr -- %t.c.bin | FileCheck %s --check-prefix=CHECK-GNR
|
||||
|
||||
// REQUIRES: LINUX_HOST && X86_ENABLED && SDE_INSTALLED
|
||||
|
||||
@@ -21,6 +22,7 @@
|
||||
// CHECK-SKX: ispc_foo_avx512skx
|
||||
// CHECK-ICL: ispc_foo_avx512icl
|
||||
// CHECK-SPR: ispc_foo_avx512spr
|
||||
// CHECK-GNR: ispc_foo_avx512gnr
|
||||
|
||||
#ifdef ISPC
|
||||
extern "C" void print_stack_trace();
|
||||
|
||||
@@ -8,6 +8,11 @@
|
||||
// RUN: %{ispc} %s --target=avx512spr-x32 --emit-asm -o - | FileCheck %s -check-prefix=CHECK_SPR
|
||||
// RUN: %{ispc} %s --target=avx512spr-x64 --emit-asm -o - | FileCheck %s -check-prefix=CHECK_SPR
|
||||
|
||||
// RUN: %{ispc} %s --target=avx512gnr-x4 --emit-asm -o - | FileCheck %s -check-prefix=CHECK_SPR
|
||||
// RUN: %{ispc} %s --target=avx512gnr-x8 --emit-asm -o - | FileCheck %s -check-prefix=CHECK_SPR
|
||||
// RUN: %{ispc} %s --target=avx512gnr-x32 --emit-asm -o - | FileCheck %s -check-prefix=CHECK_SPR
|
||||
// RUN: %{ispc} %s --target=avx512gnr-x64 --emit-asm -o - | FileCheck %s -check-prefix=CHECK_SPR
|
||||
|
||||
// REQUIRES: X86_ENABLED && !MACOS_HOST
|
||||
|
||||
// CHECK_SPR-LABEL: fp16_add
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//; RUN: %{ispc} %s --target=avx2-i32x8 --enable-llvm-intrinsics
|
||||
//; RUN: %{ispc} %s --cpu=ps4 --target=avx1-i32x8 --enable-llvm-intrinsics
|
||||
//; RUN: %{ispc} %s --nowrap --cpu=spr --target=avx512spr-x8 --enable-llvm-intrinsics
|
||||
//; RUN: %{ispc} %s --nowrap --cpu=gnr --target=avx512spr-x8 --enable-llvm-intrinsics
|
||||
//; RUN: %{ispc} %s --nowrap --target=avx512gnr-x8 --enable-llvm-intrinsics
|
||||
//; RUN: not %{ispc} %s --target=sse2-i32x8 --enable-llvm-intrinsics --nowrap 2>&1 | FileCheck %s -check-prefix=CHECK_SSE2
|
||||
|
||||
//; REQUIRES: X86_ENABLED && !MACOS_HOST
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//; RUN: %{ispc} %s --target=avx2-i32x8 --enable-llvm-intrinsics
|
||||
//; RUN: %{ispc} %s --cpu=ps4 --target=avx1-i32x8 --enable-llvm-intrinsics
|
||||
//; RUN: %{ispc} %s --nowrap --cpu=spr --target=avx512spr-x8 --enable-llvm-intrinsics
|
||||
//; RUN: %{ispc} %s --nowrap --cpu=gnr --target=avx512spr-x8 --enable-llvm-intrinsics
|
||||
//; RUN: %{ispc} %s --nowrap --target=avx512gnr-x8 --enable-llvm-intrinsics
|
||||
//; RUN: %{ispc} %s --nowrap --cpu=dmr --target=avx10.2dmr-x8 --enable-llvm-intrinsics
|
||||
//; RUN: not %{ispc} %s --target=sse2-i32x8 --enable-llvm-intrinsics --nowrap 2>&1 | FileCheck %s -check-prefix=CHECK_SSE2
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
// This test checks that AMX FP16 (amxfp16) intrinsics are correctly handled by ISPC
|
||||
|
||||
// RUN: not %{ispc} --nowrap %s --target=avx512spr-x4 --enable-llvm-intrinsics --emit-llvm-text -O2 -o - 2>&1 | FileCheck %s -check-prefix=CHECK_SPR_ERROR
|
||||
// RUN: %{ispc} --nowrap %s --target=avx512spr-x4 --cpu=gnr --enable-llvm-intrinsics --emit-llvm-text -O2 -o - 2>&1 | FileCheck %s -check-prefix=CHECK_GNR_SUCCESS
|
||||
// RUN: %{ispc} --nowrap %s --target=avx10.2dmr-x4 --cpu=dmr --enable-llvm-intrinsics --emit-llvm-text -O2 -o - 2>&1 | FileCheck %s -check-prefix=CHECK_DMR_SUCCESS
|
||||
// RUN: %{ispc} --nowrap %s --target=avx512gnr-x4 --enable-llvm-intrinsics --emit-llvm-text -O2 -o - 2>&1 | FileCheck %s -check-prefix=CHECK_GNR_SUCCESS
|
||||
// RUN: %{ispc} --nowrap %s --target=avx10.2dmr-x4 --enable-llvm-intrinsics --emit-llvm-text -O2 -o - 2>&1 | FileCheck %s -check-prefix=CHECK_DMR_SUCCESS
|
||||
|
||||
// REQUIRES: X86_ENABLED && LLVM_20_0+ && !MACOS_HOST
|
||||
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
// RUN: not %{ispc} --nowrap %s --target=avx512icl-x4 --enable-llvm-intrinsics --emit-llvm-text -O2 -o - 2>&1 | FileCheck %s -check-prefix=CHECK_ICL_ERROR
|
||||
// RUN: %{ispc} --nowrap %s --target=avx512spr-x4 --enable-llvm-intrinsics --emit-llvm-text -O2 -o - 2>&1 | FileCheck %s -check-prefix=CHECK_SPR_SUCCESS
|
||||
// RUN: %{ispc} --nowrap %s --target=avx512spr-x4 --cpu=gnr --enable-llvm-intrinsics --emit-llvm-text -O2 -o - 2>&1 | FileCheck %s -check-prefix=CHECK_GNR_SUCCESS
|
||||
// RUN: %{ispc} --nowrap %s --target=avx10.2dmr-x4 --cpu=dmr --enable-llvm-intrinsics --emit-llvm-text -O2 -o - 2>&1 | FileCheck %s -check-prefix=CHECK_DMR_SUCCESS
|
||||
// RUN: %{ispc} --nowrap %s --target=avx512gnr-x4 --enable-llvm-intrinsics --emit-llvm-text -O2 -o - 2>&1 | FileCheck %s -check-prefix=CHECK_GNR_SUCCESS
|
||||
// RUN: %{ispc} --nowrap %s --target=avx10.2dmr-x4 --enable-llvm-intrinsics --emit-llvm-text -O2 -o - 2>&1 | FileCheck %s -check-prefix=CHECK_DMR_SUCCESS
|
||||
|
||||
// REQUIRES: X86_ENABLED && LLVM_20_0+ && !MACOS_HOST
|
||||
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
// RUN: not %{ispc} --nowrap %s --target=avx512icl-x4 --enable-llvm-intrinsics --emit-llvm-text -O2 -o - 2>&1 | FileCheck %s -check-prefix=CHECK_ICL_ERROR
|
||||
// RUN: %{ispc} --nowrap %s --target=avx512spr-x4 --enable-llvm-intrinsics --emit-llvm-text -O2 -o - 2>&1 | FileCheck %s -check-prefix=CHECK_SPR_SUCCESS
|
||||
// RUN: %{ispc} --nowrap %s --target=avx512spr-x4 --cpu=gnr --enable-llvm-intrinsics --emit-llvm-text -O2 -o - 2>&1 | FileCheck %s -check-prefix=CHECK_GNR_SUCCESS
|
||||
// RUN: %{ispc} --nowrap %s --target=avx10.2dmr-x4 --cpu=dmr --enable-llvm-intrinsics --emit-llvm-text -O2 -o - 2>&1 | FileCheck %s -check-prefix=CHECK_DMR_SUCCESS
|
||||
// RUN: %{ispc} --nowrap %s --target=avx512gnr-x4 --enable-llvm-intrinsics --emit-llvm-text -O2 -o - 2>&1 | FileCheck %s -check-prefix=CHECK_GNR_SUCCESS
|
||||
// RUN: %{ispc} --nowrap %s --target=avx10.2dmr-x4 --enable-llvm-intrinsics --emit-llvm-text -O2 -o - 2>&1 | FileCheck %s -check-prefix=CHECK_DMR_SUCCESS
|
||||
|
||||
// REQUIRES: X86_ENABLED && LLVM_20_0+ && !MACOS_HOST
|
||||
|
||||
|
||||
@@ -32,8 +32,13 @@
|
||||
// RUN: %{ispc} %s --nostdlib --nowrap --target=avx512spr-x16 -o %t.o 2>&1 | FileCheck %s -check-prefix=CHECK_AVX512
|
||||
// RUN: %{ispc} %s --nostdlib --nowrap --target=avx512spr-x32 -o %t.o 2>&1 | FileCheck %s -check-prefix=CHECK_AVX512
|
||||
// RUN: %{ispc} %s --nostdlib --nowrap --target=avx512spr-x64 -o %t.o 2>&1 | FileCheck %s -check-prefix=CHECK_AVX512
|
||||
// RUN: %{ispc} %s --nostdlib --nowrap --target=avx512gnr-x4 -o %t.o 2>&1 | FileCheck %s -check-prefix=CHECK_AVX512
|
||||
// RUN: %{ispc} %s --nostdlib --nowrap --target=avx512gnr-x8 -o %t.o 2>&1 | FileCheck %s -check-prefix=CHECK_AVX512
|
||||
// RUN: %{ispc} %s --nostdlib --nowrap --target=avx512gnr-x16 -o %t.o 2>&1 | FileCheck %s -check-prefix=CHECK_AVX512
|
||||
// RUN: %{ispc} %s --nostdlib --nowrap --target=avx512gnr-x32 -o %t.o 2>&1 | FileCheck %s -check-prefix=CHECK_AVX512
|
||||
// RUN: %{ispc} %s --nostdlib --nowrap --target=avx512gnr-x64 -o %t.o 2>&1 | FileCheck %s -check-prefix=CHECK_AVX512
|
||||
|
||||
// A note about notrunning on macOS - it's because of SPR not being supported there.
|
||||
// A note about not running on macOS - it's because of SPR/GNR not being supported there.
|
||||
// It should be sufficient to run this test on other platforms and not to complicate
|
||||
// with splitting it to SPR and non-SPR versions.
|
||||
// REQUIRES: X86_ENABLED && !MACOS_HOST
|
||||
|
||||
@@ -1,14 +1,21 @@
|
||||
// The test checks that target definitions for SPR are not accepted on macOS.
|
||||
// The test checks that target definitions for SPR and GNR are not accepted on macOS.
|
||||
|
||||
//; RUN: not %{ispc} %s -o %t.o --nostdlib --target-os=macos --arch=x86-64 --nowrap --target=avx512spr-x4 2>&1 | FileCheck %s
|
||||
//; RUN: not %{ispc} %s -o %t.o --nostdlib --target-os=macos --arch=x86-64 --nowrap --target=avx512spr-x8 2>&1 | FileCheck %s
|
||||
//; RUN: not %{ispc} %s -o %t.o --nostdlib --target-os=macos --arch=x86-64 --nowrap --target=avx512spr-x16 2>&1 | FileCheck %s
|
||||
//; RUN: not %{ispc} %s -o %t.o --nostdlib --target-os=macos --arch=x86-64 --nowrap --target=avx512spr-x32 2>&1 | FileCheck %s
|
||||
//; RUN: not %{ispc} %s -o %t.o --nostdlib --target-os=macos --arch=x86-64 --nowrap --target=avx512spr-x64 2>&1 | FileCheck %s
|
||||
//; RUN: not %{ispc} %s -o %t.o --nostdlib --target-os=macos --arch=x86-64 --nowrap --target=avx512spr-x4 2>&1 | FileCheck %s -check-prefix=CHECK_SPR
|
||||
//; RUN: not %{ispc} %s -o %t.o --nostdlib --target-os=macos --arch=x86-64 --nowrap --target=avx512spr-x8 2>&1 | FileCheck %s -check-prefix=CHECK_SPR
|
||||
//; RUN: not %{ispc} %s -o %t.o --nostdlib --target-os=macos --arch=x86-64 --nowrap --target=avx512spr-x16 2>&1 | FileCheck %s -check-prefix=CHECK_SPR
|
||||
//; RUN: not %{ispc} %s -o %t.o --nostdlib --target-os=macos --arch=x86-64 --nowrap --target=avx512spr-x32 2>&1 | FileCheck %s -check-prefix=CHECK_SPR
|
||||
//; RUN: not %{ispc} %s -o %t.o --nostdlib --target-os=macos --arch=x86-64 --nowrap --target=avx512spr-x64 2>&1 | FileCheck %s -check-prefix=CHECK_SPR
|
||||
|
||||
//; RUN: not %{ispc} %s -o %t.o --nostdlib --target-os=macos --arch=x86-64 --nowrap --target=avx512gnr-x4 2>&1 | FileCheck %s -check-prefix=CHECK_GNR
|
||||
//; RUN: not %{ispc} %s -o %t.o --nostdlib --target-os=macos --arch=x86-64 --nowrap --target=avx512gnr-x8 2>&1 | FileCheck %s -check-prefix=CHECK_GNR
|
||||
//; RUN: not %{ispc} %s -o %t.o --nostdlib --target-os=macos --arch=x86-64 --nowrap --target=avx512gnr-x16 2>&1 | FileCheck %s -check-prefix=CHECK_GNR
|
||||
//; RUN: not %{ispc} %s -o %t.o --nostdlib --target-os=macos --arch=x86-64 --nowrap --target=avx512gnr-x32 2>&1 | FileCheck %s -check-prefix=CHECK_GNR
|
||||
//; RUN: not %{ispc} %s -o %t.o --nostdlib --target-os=macos --arch=x86-64 --nowrap --target=avx512gnr-x64 2>&1 | FileCheck %s -check-prefix=CHECK_GNR
|
||||
|
||||
// REQUIRES: X86_ENABLED && MACOS_HOST
|
||||
|
||||
// CHECK: Error: avx512spr-x{{.*}} target for x86-64 on macOS is not supported in current build.
|
||||
// CHECK_SPR: Error: avx512spr-x{{.*}} target for x86-64 on macOS is not supported in current build.
|
||||
// CHECK_GNR: Error: avx512gnr-x{{.*}} target for x86-64 on macOS is not supported in current build.
|
||||
|
||||
uniform int j;
|
||||
|
||||
|
||||
@@ -6,6 +6,12 @@
|
||||
//; RUN: %{ispc} %s -o %t.o --nostdlib --target=avx512spr-x32
|
||||
//; RUN: %{ispc} %s -o %t.o --nostdlib --target=avx512spr-x64
|
||||
|
||||
//; RUN: %{ispc} %s -o %t.o --nostdlib --target=avx512gnr-x4
|
||||
//; RUN: %{ispc} %s -o %t.o --nostdlib --target=avx512gnr-x8
|
||||
//; RUN: %{ispc} %s -o %t.o --nostdlib --target=avx512gnr-x16
|
||||
//; RUN: %{ispc} %s -o %t.o --nostdlib --target=avx512gnr-x32
|
||||
//; RUN: %{ispc} %s -o %t.o --nostdlib --target=avx512gnr-x64
|
||||
|
||||
// REQUIRES: X86_ENABLED && !MACOS_HOST
|
||||
|
||||
uniform int j;
|
||||
|
||||
@@ -5,13 +5,16 @@
|
||||
|
||||
// RUN: %{ispc} %s --target=avx512icl-x4 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_XMM
|
||||
// RUN: %{ispc} %s --target=avx512spr-x4 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_XMM
|
||||
// RUN: %{ispc} %s --target=avx512gnr-x4 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_XMM
|
||||
|
||||
// RUN: %{ispc} %s --target=avx512icl-x8 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_YMM
|
||||
// RUN: %{ispc} %s --target=avx512spr-x8 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_YMM
|
||||
// RUN: %{ispc} %s --target=avx512gnr-x8 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_YMM
|
||||
|
||||
// RUN: %{ispc} %s --target=avx512icl-x16 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_ZMM
|
||||
// RUN: %{ispc} %s --target=avx512icl-x16 --opt=disable-zmm --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_YMM
|
||||
// RUN: %{ispc} %s --target=avx512spr-x16 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_ZMM
|
||||
// RUN: %{ispc} %s --target=avx512gnr-x16 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_ZMM
|
||||
|
||||
// REQUIRES: X86_ENABLED && !MACOS_HOST
|
||||
|
||||
|
||||
@@ -2,9 +2,11 @@
|
||||
|
||||
// RUN: %{ispc} %s --target=avx512icl-x32 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_ZMMX2
|
||||
// RUN: %{ispc} %s --target=avx512spr-x32 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_ZMMX2
|
||||
// RUN: %{ispc} %s --target=avx512gnr-x32 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_ZMMX2
|
||||
|
||||
// RUN: %{ispc} %s --target=avx512icl-x64 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_ZMMX4
|
||||
// RUN: %{ispc} %s --target=avx512spr-x64 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_ZMMX4
|
||||
// RUN: %{ispc} %s --target=avx512gnr-x64 --emit-asm -o - | FileCheck %s -check-prefixes=CHECK_ALL,CHECK_ZMMX4
|
||||
|
||||
// REQUIRES: X86_ENABLED && !MACOS_HOST
|
||||
|
||||
|
||||
+6
-9
@@ -47,13 +47,12 @@ const char *const isa_strings[] = {
|
||||
"SKX",
|
||||
"ICL",
|
||||
"SPR",
|
||||
"GNR",
|
||||
"DMR",
|
||||
};
|
||||
|
||||
static const char *spr_amx_on = "SPR (AMX on)";
|
||||
static const char *spr_amx_off = "SPR (AMX off)";
|
||||
|
||||
static const char *lGetSystemISA() {
|
||||
static char amx_isa_string[32];
|
||||
#if defined(__arm__) || defined(__aarch64__) || defined(_M_ARM64)
|
||||
return "ARM NEON";
|
||||
#elif defined(__i386__) || defined(__x86_64__) || defined(_M_IX86) || defined(_M_X64)
|
||||
@@ -62,12 +61,10 @@ static const char *lGetSystemISA() {
|
||||
return "Unknown x86 ISA";
|
||||
}
|
||||
const char *isa = isa_strings[isa_id];
|
||||
if (isa_id == SPR_AVX512) {
|
||||
if (__os_enabled_amx_support()) {
|
||||
return spr_amx_on;
|
||||
} else {
|
||||
return spr_amx_off;
|
||||
}
|
||||
if (isa_id >= SPR_AVX512) {
|
||||
snprintf(amx_isa_string, sizeof(amx_isa_string), "%s (AMX %s)", isa,
|
||||
__os_enabled_amx_support() ? "on" : "off");
|
||||
return amx_isa_string;
|
||||
}
|
||||
return isa;
|
||||
#elif defined(__riscv)
|
||||
|
||||
Reference in New Issue
Block a user