It seems that some SVE intrinsics may not be handled with nvhpc. I had an issue compiling a code using svdupq intrinsics recently.
I made a little reproducer and it seems that at least some svdupq variants are not available with nvhpc (tried with 22.7 and 22.9). The following code compiles fine with gcc 11 and llvm 11+ (at least).
gcc test.c -o test -march=armv8.1-a+sve
clang test.c -o test -march=armv8.1-a+sve
don’t complain
But with nvc,
nvc test.c -o test -tp neoverse-v1
/usr/bin/ld: /tmp/nvcDg_bxYzA1gsm.o: in function `main':
//test.c:10: undefined reference to `svdupq_n_f64.nxv2f64'
/usr/bin/ld: //test.c:11: undefined reference to `svdupq_f64(double, double) [clone .nxv2f64]'
/usr/bin/ld: //test.c:12: undefined reference to `svdupq_n_f32.nxv4f32'
So it appears that this is not handled, while it should?
#include "arm_sve.h"
#include <stdlib.h>
#include <stdio.h>
int main(){
//OK
svfloat64_t acc0 = svdup_n_f64(0.0);
//missing ?
acc0 = svdupq_n_f64(0.0, 1.0);
acc0 = svdupq_f64(0.0, 1.0);
svfloat32_t test = svdupq_n_f32(0.0, 1.0, 2.0, 3.0);
return 0;
}
ps: I did not try all variants, so there may be more … and perhaps other calls than svdupq might be affected.