Skip to content

Commit 8a8a847

Browse files
committed
Fix cooperlake and sapphire rapids march flags on clang
The march=cooperlake and march=sapphirerapids flags were never getting added when building with Clang targetting those architectures. Instead it was falling back to the skylake AVX512 implementation. Clang added support for these two architectures in Clang 9 and Clang 12, so introduce new checks for those versions to enable the appropriate march flag, and fallback to skylake otherwise.
1 parent 562ef5f commit 8a8a847

File tree

3 files changed

+57
-26
lines changed

3 files changed

+57
-26
lines changed

Makefile.system

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,11 @@ GCCMINORVERSIONGTEQ4 := $(shell expr `$(CC) $(GCCDUMPVERSION_PARAM) | cut -f2 -d
384384
GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) $(GCCDUMPVERSION_PARAM) | cut -f2 -d.` \>= 7)
385385
endif
386386

387+
ifeq ($(C_COMPILER), CLANG)
388+
CLANGVERSIONGTEQ9 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 9)
389+
CLANGVERSIONGTEQ12 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 12)
390+
endif
391+
387392
#
388393
# OS dependent settings
389394
#

Makefile.x86_64

Lines changed: 50 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -75,18 +75,31 @@ endif
7575
ifeq ($(CORE), COOPERLAKE)
7676
ifndef NO_AVX512
7777
ifeq ($(C_COMPILER), GCC)
78-
# cooperlake support was added in 10.1
79-
ifeq ($(GCCVERSIONGTEQ10)$(GCCMINORVERSIONGTEQ1), 11)
80-
CCOMMON_OPT += -march=cooperlake
81-
ifneq ($(F_COMPILER), NAG)
82-
FCOMMON_OPT += -march=cooperlake
83-
endif
84-
else # gcc not support, fallback to avx512
85-
CCOMMON_OPT += -march=skylake-avx512
86-
ifneq ($(F_COMPILER), NAG)
87-
FCOMMON_OPT += -march=skylake-avx512
88-
endif
89-
endif
78+
# cooperlake support was added in 10.1
79+
ifeq ($(GCCVERSIONGTEQ10)$(GCCMINORVERSIONGTEQ1), 11)
80+
CCOMMON_OPT += -march=cooperlake
81+
ifneq ($(F_COMPILER), NAG)
82+
FCOMMON_OPT += -march=cooperlake
83+
endif
84+
else # gcc not support, fallback to avx512
85+
CCOMMON_OPT += -march=skylake-avx512
86+
ifneq ($(F_COMPILER), NAG)
87+
FCOMMON_OPT += -march=skylake-avx512
88+
endif
89+
endif
90+
else ifeq ($(C_COMPILER), CLANG)
91+
# cooperlake support was added in clang 9
92+
ifeq ($(CLANGVERSIONGTEQ9), 1)
93+
CCOMMON_OPT += -march=cooperlake
94+
ifneq ($(F_COMPILER), NAG)
95+
FCOMMON_OPT += -march=cooperlake
96+
endif
97+
else # not supported in clang, fallback to avx512
98+
CCOMMON_OPT += -march=skylake-avx512
99+
ifneq ($(F_COMPILER), NAG)
100+
FCOMMON_OPT += -march=skylake-avx512
101+
endif
102+
endif
90103
endif
91104
ifeq ($(OSNAME), CYGWIN_NT)
92105
CCOMMON_OPT += -fno-asynchronous-unwind-tables
@@ -104,18 +117,31 @@ endif
104117
ifeq ($(CORE), SAPPHIRERAPIDS)
105118
ifndef NO_AVX512
106119
ifeq ($(C_COMPILER), GCC)
107-
# sapphire rapids support was added in 11
108-
ifeq ($(GCCVERSIONGTEQ11), 1)
109-
CCOMMON_OPT += -march=sapphirerapids
110-
ifneq ($(F_COMPILER), NAG)
111-
FCOMMON_OPT += -march=sapphirerapids
112-
endif
113-
else # gcc not support, fallback to avx512
114-
CCOMMON_OPT += -march=skylake-avx512
115-
ifneq ($(F_COMPILER), NAG)
116-
FCOMMON_OPT += -march=skylake-avx512
117-
endif
118-
endif
120+
# sapphire rapids support was added in 11
121+
ifeq ($(GCCVERSIONGTEQ11), 1)
122+
CCOMMON_OPT += -march=sapphirerapids
123+
ifneq ($(F_COMPILER), NAG)
124+
FCOMMON_OPT += -march=sapphirerapids
125+
endif
126+
else # gcc not support, fallback to avx512
127+
CCOMMON_OPT += -march=skylake-avx512
128+
ifneq ($(F_COMPILER), NAG)
129+
FCOMMON_OPT += -march=skylake-avx512
130+
endif
131+
endif
132+
else ifeq ($(C_COMPILER), CLANG)
133+
# cooperlake support was added in clang 12
134+
ifeq ($(CLANGVERSIONGTEQ12), 1)
135+
CCOMMON_OPT += -march=cooperlake
136+
ifneq ($(F_COMPILER), NAG)
137+
FCOMMON_OPT += -march=cooperlake
138+
endif
139+
else # not supported in clang, fallback to avx512
140+
CCOMMON_OPT += -march=skylake-avx512
141+
ifneq ($(F_COMPILER), NAG)
142+
FCOMMON_OPT += -march=skylake-avx512
143+
endif
144+
endif
119145
endif
120146
ifeq ($(OSNAME), CYGWIN_NT)
121147
CCOMMON_OPT += -fno-asynchronous-unwind-tables

kernel/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ endif
3333
ifdef TARGET_CORE
3434
ifeq ($(TARGET_CORE), SAPPHIRERAPIDS)
3535
override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE)
36-
ifeq ($(GCCVERSIONGTEQ11), 1)
36+
ifeq (1, $(filter 1,$(GCCVERSIONGTEQ11) $(CLANGVERSIONGTEQ12)))
3737
override CFLAGS += -march=sapphirerapids
3838
else
3939
override CFLAGS += -march=skylake-avx512 -mavx512f
@@ -48,7 +48,7 @@ ifeq ($(TARGET_CORE), SAPPHIRERAPIDS)
4848
endif
4949
else ifeq ($(TARGET_CORE), COOPERLAKE)
5050
override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE)
51-
ifeq ($(GCCVERSIONGTEQ10), 1)
51+
ifeq (1, $(filter 1,$(GCCVERSIONGTEQ10) $(CLANGVERSIONGTEQ9)))
5252
override CFLAGS += -march=cooperlake
5353
else
5454
override CFLAGS += -march=skylake-avx512 -mavx512f

0 commit comments

Comments
 (0)