Skip to content

Commit 3d31191

Browse files
authored
Work around Clang failing to disambiguate SVE intrinsics and add AppleClang crossbuild to MacOS/arm64 DYNAMIC_ARCH in AzureCI (#4140)
* Add AppleClang crossbuild to MacOS/arm64 DYNAMIC_ARCH * add casts to disambiguate svwhilelt for clang
1 parent affeef0 commit 3d31191

9 files changed

+37
-24
lines changed

azure-pipelines.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,19 @@ jobs:
271271
- script: |
272272
make TARGET=ARMV7 DYNAMIC_ARCH=1 NUM_THREADS=32 HOSTCC=clang NOFORTRAN=1
273273
274+
- job: OSX_xbuild_DYNAMIC_ARM64
275+
pool:
276+
vmImage: 'macOS-11'
277+
variables:
278+
CC: /Applications/Xcode_12.5.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
279+
CFLAGS: -O2 -Wno-macro-redefined -isysroot /Applications/Xcode_12.5.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk -arch arm64
280+
steps:
281+
- script: |
282+
ls /Applications/Xcode_12.5.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
283+
/Applications/Xcode_12.5.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch arm64 --print-supported-cpus
284+
/Applications/Xcode_11.7.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang --version
285+
make TARGET=ARMV8 DYNAMIC_ARCH=1 NUM_THREADS=32 HOSTCC=clang NOFORTRAN=1
286+
274287
- job: ALPINE_MUSL
275288
pool:
276289
vmImage: 'ubuntu-latest'

kernel/arm64/dot_kernel_sve.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ static FLOAT dot_kernel_sve(BLASLONG n, FLOAT *x, FLOAT *y) {
5050
BLASLONG sve_width = SVE_WIDTH;
5151

5252
for (BLASLONG i = 0; i < n; i += sve_width * 2) {
53-
svbool_t pg_a = SVE_WHILELT(i, n);
54-
svbool_t pg_b = SVE_WHILELT(i + sve_width, n);
53+
svbool_t pg_a = SVE_WHILELT((uint64_t)i, (uint64_t)n);
54+
svbool_t pg_b = SVE_WHILELT((uint64_t)(i + sve_width), (uint64_t)n);
5555

5656
SVE_TYPE x_vec_a = svld1(pg_a, &x[i]);
5757
SVE_TYPE y_vec_a = svld1(pg_a, &y[i]);

kernel/arm64/gemm_ncopy_sve_v1x8.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ int CNAME(BLASLONG m, BLASLONG n, IFLOAT *a, BLASLONG lda, IFLOAT *b) {
107107
BLASLONG remaining_n = n - single_vectors_n;
108108
if (remaining_n) {
109109
a_offset_inner = a_offset;
110-
svbool_t pg = SV_WHILE(0L, remaining_n);
110+
svbool_t pg = SV_WHILE((uint64_t)0L, (uint64_t)remaining_n);
111111
uint64_t active = remaining_n;
112112
uint64_t i_cnt = m >> 2;
113113
while (i_cnt--) {

kernel/arm64/gemm_tcopy_sve_v1x8.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ int CNAME(BLASLONG m, BLASLONG n, IFLOAT *a, BLASLONG lda, IFLOAT *b){
100100
BLASLONG remaining_n = n - single_vectors_n;
101101
if (remaining_n) {
102102
a_offset_inner = a_offset;
103-
svbool_t pg = SV_WHILE(0L, remaining_n);
103+
svbool_t pg = SV_WHILE((uint64_t)0L, (uint64_t)remaining_n);
104104
uint64_t active = remaining_n;
105105
uint64_t i_cnt = m >> 2;
106106
while (i_cnt--) {

kernel/arm64/trmm_lncopy_sve_v1.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,11 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
5252
FLOAT *ao;
5353
#ifdef DOUBLE
5454
svint64_t index = svindex_s64(0LL, lda);
55-
svbool_t pn = svwhilelt_b64(js, n);
55+
svbool_t pn = svwhilelt_b64((uint64_t)js, (uint64_t)n);
5656
int n_active = svcntp_b64(svptrue_b64(), pn);
5757
#else
5858
svint32_t index = svindex_s32(0, lda);
59-
svbool_t pn = svwhilelt_b32(js, n);
59+
svbool_t pn = svwhilelt_b32((uint64_t)js, (uint64_t)n);
6060
int n_active = svcntp_b32(svptrue_b32(), pn);
6161
#endif
6262
do
@@ -123,11 +123,11 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
123123
posY += n_active;
124124
js += n_active;
125125
#ifdef DOUBLE
126-
pn = svwhilelt_b64(js, n);
126+
pn = svwhilelt_b64((uint64_t)js, (uint64_t)n);
127127
n_active = svcntp_b64(svptrue_b64(), pn);
128128
} while (svptest_any(svptrue_b64(), pn));
129129
#else
130-
pn = svwhilelt_b32(js, n);
130+
pn = svwhilelt_b32((uint64_t)js, (uint64_t)n);
131131
n_active = svcntp_b32(svptrue_b32(), pn);
132132
} while (svptest_any(svptrue_b32(), pn));
133133
#endif

kernel/arm64/trmm_ltcopy_sve_v1.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
5151
FLOAT *ao;
5252
js = 0;
5353
#ifdef DOUBLE
54-
svbool_t pn = svwhilelt_b64(js, n);
54+
svbool_t pn = svwhilelt_b64((uint64_t)js, (uint64_t)n);
5555
int n_active = svcntp_b64(svptrue_b64(), pn);
5656
#else
57-
svbool_t pn = svwhilelt_b32(js, n);
57+
svbool_t pn = svwhilelt_b32((uint64_t)js, (uint64_t)n);
5858
int n_active = svcntp_b32(svptrue_b32(), pn);
5959
#endif
6060
do
@@ -122,11 +122,11 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
122122
posY += n_active;
123123
js += n_active;
124124
#ifdef DOUBLE
125-
pn = svwhilelt_b64(js, n);
125+
pn = svwhilelt_b64((uint64_t)js, (uint64_t)n);
126126
n_active = svcntp_b64(svptrue_b64(), pn);
127127
} while (svptest_any(svptrue_b64(), pn));
128128
#else
129-
pn = svwhilelt_b32(js, n);
129+
pn = svwhilelt_b32((uint64_t)js, (uint64_t)n);
130130
n_active = svcntp_b32(svptrue_b32(), pn);
131131
} while (svptest_any(svptrue_b32(), pn));
132132
#endif

kernel/arm64/trmm_uncopy_sve_v1.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,11 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
5252
FLOAT *ao;
5353
#ifdef DOUBLE
5454
svint64_t index = svindex_s64(0LL, lda);
55-
svbool_t pn = svwhilelt_b64(js, n);
55+
svbool_t pn = svwhilelt_b64((uint64_t)js, (uint64_t)n);
5656
int n_active = svcntp_b64(svptrue_b64(), pn);
5757
#else
5858
svint32_t index = svindex_s32(0, lda);
59-
svbool_t pn = svwhilelt_b32(js, n);
59+
svbool_t pn = svwhilelt_b32((uint64_t)js, (uint64_t)n);
6060
int n_active = svcntp_b32(svptrue_b32(), pn);
6161
#endif
6262
do
@@ -123,11 +123,11 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
123123
posY += n_active;
124124
js += n_active;
125125
#ifdef DOUBLE
126-
pn = svwhilelt_b64(js, n);
126+
pn = svwhilelt_b64((uint64_t)js, (uint64_t)n);
127127
n_active = svcntp_b64(svptrue_b64(), pn);
128128
} while (svptest_any(svptrue_b64(), pn));
129129
#else
130-
pn = svwhilelt_b32(js, n);
130+
pn = svwhilelt_b32((uint64_t)js, (uint64_t)n);
131131
n_active = svcntp_b32(svptrue_b32(), pn);
132132
} while (svptest_any(svptrue_b32(), pn));
133133
#endif

kernel/arm64/trmm_utcopy_sve_v1.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
5151
FLOAT *ao;
5252
js = 0;
5353
#ifdef DOUBLE
54-
svbool_t pn = svwhilelt_b64(js, n);
54+
svbool_t pn = svwhilelt_b64((uint64_t)js, (uint64_t)n);
5555
int n_active = svcntp_b64(svptrue_b64(), pn);
5656
#else
57-
svbool_t pn = svwhilelt_b32(js, n);
57+
svbool_t pn = svwhilelt_b32((uint64_t)js, (uint64_t)n);
5858
int n_active = svcntp_b32(svptrue_b32(), pn);
5959
#endif
6060
do
@@ -121,11 +121,11 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
121121
posY += n_active;
122122
js += n_active;
123123
#ifdef DOUBLE
124-
pn = svwhilelt_b64(js, n);
124+
pn = svwhilelt_b64((uint64_t)js, (uint64_t)n);
125125
n_active = svcntp_b64(svptrue_b64(), pn);
126126
} while (svptest_any(svptrue_b64(), pn));
127127
#else
128-
pn = svwhilelt_b32(js, n);
128+
pn = svwhilelt_b32((uint64_t)js, (uint64_t)n);
129129
n_active = svcntp_b32(svptrue_b32(), pn);
130130
} while (svptest_any(svptrue_b32(), pn));
131131
#endif

kernel/arm64/trsm_lncopy_sve.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,13 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG offset, FLOAT
5656
#ifdef DOUBLE
5757
int64_t js = 0;
5858
svint64_t index = svindex_s64(0LL, lda);
59-
svbool_t pn = svwhilelt_b64(js, n);
59+
svbool_t pn = svwhilelt_b64((uint64_t)js, (uint64_t)n);
6060
int n_active = svcntp_b64(svptrue_b64(), pn);
6161
#else
6262
int32_t N = n;
6363
int32_t js = 0;
6464
svint32_t index = svindex_s32(0, lda);
65-
svbool_t pn = svwhilelt_b32(js, N);
65+
svbool_t pn = svwhilelt_b32((uint32_t)js, (uint32_t)N);
6666
int n_active = svcntp_b32(svptrue_b32(), pn);
6767
#endif
6868
do {
@@ -106,11 +106,11 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG offset, FLOAT
106106

107107
js += n_active;
108108
#ifdef DOUBLE
109-
pn = svwhilelt_b64(js, n);
109+
pn = svwhilelt_b64((uint64_t)js, (uint64_t)n);
110110
n_active = svcntp_b64(svptrue_b64(), pn);
111111
} while (svptest_any(svptrue_b64(), pn));
112112
#else
113-
pn = svwhilelt_b32(js, N);
113+
pn = svwhilelt_b32((uint32_t)js, (uint32_t)N);
114114
n_active = svcntp_b32(svptrue_b32(), pn);
115115
} while (svptest_any(svptrue_b32(), pn));
116116
#endif

0 commit comments

Comments
 (0)