Skip to content

Commit 02b08f2

Browse files
committed
[AArch64][VecLib] Add libmvec support for AArch64 targets
Change-Id: I07cd07932c0cb94782de8cf0d25c4729a48e695b
1 parent 3c56437 commit 02b08f2

File tree

11 files changed

+2722
-9
lines changed

11 files changed

+2722
-9
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,8 @@ Modified Compiler Flags
357357

358358
- The ``-fchar8_t`` flag is no longer considered in non-C++ languages modes. (#GH55373)
359359

360+
- The ``-fveclib=libmvec`` option now supports AArch64 targets (requires GLIBC 2.40 or newer).
361+
360362
Removed Compiler Flags
361363
-------------------------
362364

clang/include/clang/Driver/Options.td

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3473,8 +3473,9 @@ def fveclib : Joined<["-"], "fveclib=">, Group<f_Group>,
34733473
Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>,
34743474
HelpText<"Use the given vector functions library">,
34753475
HelpTextForVariants<[ClangOption, CC1Option],
3476-
"Use the given vector functions library. "
3477-
"Note: -fveclib={ArmPL,SLEEF} implies -fno-math-errno">,
3476+
"Use the given vector functions library.\n"
3477+
" Note: -fveclib={ArmPL,SLEEF,libmvec} implies -fno-math-errno.\n"
3478+
" Note: -fveclib=libmvec on AArch64 requires GLIBC 2.40 or newer.">,
34783479
Values<"Accelerate,libmvec,MASSV,SVML,SLEEF,Darwin_libsystem_m,ArmPL,AMDLIBM,none">,
34793480
NormalizedValuesScope<"llvm::driver::VectorLibrary">,
34803481
NormalizedValues<["Accelerate", "LIBMVEC", "MASSV", "SVML", "SLEEF",

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5683,11 +5683,18 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
56835683
Triple.getArch() != llvm::Triple::x86_64)
56845684
D.Diag(diag::err_drv_unsupported_opt_for_target)
56855685
<< Name << Triple.getArchName();
5686-
} else if (Name == "libmvec" || Name == "AMDLIBM") {
5686+
} else if (Name == "AMDLIBM") {
56875687
if (Triple.getArch() != llvm::Triple::x86 &&
56885688
Triple.getArch() != llvm::Triple::x86_64)
56895689
D.Diag(diag::err_drv_unsupported_opt_for_target)
56905690
<< Name << Triple.getArchName();
5691+
} else if (Name == "libmvec") {
5692+
if (Triple.getArch() != llvm::Triple::x86 &&
5693+
Triple.getArch() != llvm::Triple::x86_64 &&
5694+
Triple.getArch() != llvm::Triple::aarch64 &&
5695+
Triple.getArch() != llvm::Triple::aarch64_be)
5696+
D.Diag(diag::err_drv_unsupported_opt_for_target)
5697+
<< Name << Triple.getArchName();
56915698
} else if (Name == "SLEEF" || Name == "ArmPL") {
56925699
if (Triple.getArch() != llvm::Triple::aarch64 &&
56935700
Triple.getArch() != llvm::Triple::aarch64_be &&

clang/test/Driver/fveclib.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// RUN: %clang -### -c -fveclib=none %s 2>&1 | FileCheck --check-prefix=CHECK-NOLIB %s
22
// RUN: %clang -### -c -fveclib=Accelerate %s 2>&1 | FileCheck --check-prefix=CHECK-ACCELERATE %s
33
// RUN: %clang -### -c --target=x86_64-unknown-linux-gnu -fveclib=libmvec %s 2>&1 | FileCheck --check-prefix=CHECK-libmvec %s
4+
// RUN: %clang -### -c --target=aarch64-linux-gnu -fveclib=libmvec %s 2>&1 | FileCheck --check-prefix=CHECK-LIBMVEC-AARCH64 %s
45
// RUN: %clang -### -c --target=x86_64-unknown-linux-gnu -fveclib=AMDLIBM %s 2>&1 | FileCheck --check-prefix=CHECK-AMDLIBM %s
56
// RUN: %clang -### -c -fveclib=MASSV %s 2>&1 | FileCheck --check-prefix=CHECK-MASSV %s
67
// RUN: %clang -### -c -fveclib=Darwin_libsystem_m %s 2>&1 | FileCheck --check-prefix=CHECK-DARWIN_LIBSYSTEM_M %s
@@ -12,6 +13,7 @@
1213
// CHECK-NOLIB: "-fveclib=none"
1314
// CHECK-ACCELERATE: "-fveclib=Accelerate"
1415
// CHECK-libmvec: "-fveclib=libmvec"
16+
// CHECK-LIBMVEC-AARCH64: "-fveclib=libmvec"
1517
// CHECK-AMDLIBM: "-fveclib=AMDLIBM"
1618
// CHECK-MASSV: "-fveclib=MASSV"
1719
// CHECK-DARWIN_LIBSYSTEM_M: "-fveclib=Darwin_libsystem_m"
@@ -23,7 +25,6 @@
2325

2426
// RUN: not %clang --target=x86 -c -fveclib=SLEEF %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s
2527
// RUN: not %clang --target=x86 -c -fveclib=ArmPL %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s
26-
// RUN: not %clang --target=aarch64 -c -fveclib=libmvec %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s
2728
// RUN: not %clang --target=aarch64 -c -fveclib=SVML %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s
2829
// RUN: not %clang --target=aarch64 -c -fveclib=AMDLIBM %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s
2930
// CHECK-ERROR: unsupported option {{.*}} for target
@@ -43,6 +44,9 @@
4344
// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fveclib=libmvec -flto %s 2>&1 | FileCheck --check-prefix=CHECK-LTO-LIBMVEC %s
4445
// CHECK-LTO-LIBMVEC: "-plugin-opt=-vector-library=LIBMVEC"
4546

47+
// RUN: %clang -### --target=aarch64-linux-gnu -fveclib=libmvec -flto %s 2>&1 | FileCheck --check-prefix=CHECK-LTO-LIBMVEC-AARCH64 %s
48+
// CHECK-LTO-LIBMVEC-AARCH64: "-plugin-opt=-vector-library=LIBMVEC"
49+
4650
// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fveclib=AMDLIBM -flto %s 2>&1 | FileCheck --check-prefix=CHECK-LTO-AMDLIBM %s
4751
// CHECK-LTO-AMDLIBM: "-plugin-opt=-vector-library=AMDLIBM"
4852

@@ -68,6 +72,10 @@
6872
// CHECK-ERRNO-LIBMVEC: "-fveclib=libmvec"
6973
// CHECK-ERRNO-LIBMVEC-SAME: "-fmath-errno"
7074

75+
// RUN: %clang -### --target=aarch64-linux-gnu -fveclib=libmvec %s 2>&1 | FileCheck --check-prefix=CHECK-ERRNO-LIBMVEC-AARCH64 %s
76+
// CHECK-ERRNO-LIBMVEC-AARCH64: "-fveclib=libmvec"
77+
// CHECK-ERRNO-LIBMVEC-AARCH64-SAME: "-fmath-errno"
78+
7179
// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fveclib=AMDLIBM %s 2>&1 | FileCheck --check-prefix=CHECK-ERRNO-AMDLIBM %s
7280
// CHECK-ERRNO-AMDLIBM: "-fveclib=AMDLIBM"
7381
// CHECK-ERRNO-AMDLIBM-SAME: "-fmath-errno"

0 commit comments

Comments
 (0)