Skip to content

Commit 54f2b45

Browse files
rohitaggarwal007Rohit Aggarwal
andauthored
[Clang][Driver][fveclib] Fix target parsing for -fveclib=AMDLIBM option (#140544)
The behavior of -fveclib=AMDLIBM should be similar to -fveclib=libmvec. Example - Error message for unsupported target usage should be same. We are handling the missed cases for -fveclib=AMDLIBM and aligning it to -fveclib=libmvec usage. --------- Co-authored-by: Rohit Aggarwal <[email protected]>
1 parent 9c33faf commit 54f2b45

File tree

5 files changed

+26
-2
lines changed

5 files changed

+26
-2
lines changed

clang/include/clang/Basic/CodeGenOptions.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ ENUM_CODEGENOPT(Inlining, InliningMethod, 2, NormalInlining)
389389
VALUE_CODEGENOPT(InlineMaxStackSize, 32, UINT_MAX)
390390

391391
// Vector functions library to use.
392-
ENUM_CODEGENOPT(VecLib, llvm::driver::VectorLibrary, 3, llvm::driver::VectorLibrary::NoLibrary)
392+
ENUM_CODEGENOPT(VecLib, llvm::driver::VectorLibrary, 4, llvm::driver::VectorLibrary::NoLibrary)
393393

394394
/// The default TLS model to use.
395395
ENUM_CODEGENOPT(DefaultTLSModel, TLSModel, 2, GeneralDynamicTLSModel)

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5851,7 +5851,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
58515851
Triple.getArch() != llvm::Triple::x86_64)
58525852
D.Diag(diag::err_drv_unsupported_opt_for_target)
58535853
<< Name << Triple.getArchName();
5854-
} else if (Name == "libmvec") {
5854+
} else if (Name == "libmvec" || Name == "AMDLIBM") {
58555855
if (Triple.getArch() != llvm::Triple::x86 &&
58565856
Triple.getArch() != llvm::Triple::x86_64)
58575857
D.Diag(diag::err_drv_unsupported_opt_for_target)

clang/lib/Driver/ToolChains/CommonArgs.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -935,6 +935,7 @@ void tools::addLTOOptions(const ToolChain &ToolChain, const ArgList &Args,
935935
llvm::StringSwitch<std::optional<StringRef>>(ArgVecLib->getValue())
936936
.Case("Accelerate", "Accelerate")
937937
.Case("libmvec", "LIBMVEC")
938+
.Case("AMDLIBM", "AMDLIBM")
938939
.Case("MASSV", "MASSV")
939940
.Case("SVML", "SVML")
940941
.Case("SLEEF", "sleefgnuabi")

clang/test/Driver/fveclib.c

Lines changed: 10 additions & 0 deletions
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=x86_64-unknown-linux-gnu -fveclib=AMDLIBM %s 2>&1 | FileCheck --check-prefix=CHECK-AMDLIBM %s
45
// RUN: %clang -### -c -fveclib=MASSV %s 2>&1 | FileCheck --check-prefix=CHECK-MASSV %s
56
// RUN: %clang -### -c -fveclib=Darwin_libsystem_m %s 2>&1 | FileCheck --check-prefix=CHECK-DARWIN_LIBSYSTEM_M %s
67
// RUN: %clang -### -c --target=aarch64 -fveclib=SLEEF %s 2>&1 | FileCheck --check-prefix=CHECK-SLEEF %s
@@ -11,6 +12,7 @@
1112
// CHECK-NOLIB: "-fveclib=none"
1213
// CHECK-ACCELERATE: "-fveclib=Accelerate"
1314
// CHECK-libmvec: "-fveclib=libmvec"
15+
// CHECK-AMDLIBM: "-fveclib=AMDLIBM"
1416
// CHECK-MASSV: "-fveclib=MASSV"
1517
// CHECK-DARWIN_LIBSYSTEM_M: "-fveclib=Darwin_libsystem_m"
1618
// CHECK-SLEEF: "-fveclib=SLEEF"
@@ -23,6 +25,7 @@
2325
// RUN: not %clang --target=x86 -c -fveclib=ArmPL %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s
2426
// RUN: not %clang --target=aarch64 -c -fveclib=libmvec %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s
2527
// RUN: not %clang --target=aarch64 -c -fveclib=SVML %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s
28+
// RUN: not %clang --target=aarch64 -c -fveclib=AMDLIBM %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s
2629
// CHECK-ERROR: unsupported option {{.*}} for target
2730

2831
// RUN: %clang -fveclib=Accelerate %s -target arm64-apple-ios8.0.0 -### 2>&1 | FileCheck --check-prefix=CHECK-LINK %s
@@ -40,6 +43,9 @@
4043
// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fveclib=libmvec -flto %s 2>&1 | FileCheck --check-prefix=CHECK-LTO-LIBMVEC %s
4144
// CHECK-LTO-LIBMVEC: "-plugin-opt=-vector-library=LIBMVEC"
4245

46+
// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fveclib=AMDLIBM -flto %s 2>&1 | FileCheck --check-prefix=CHECK-LTO-AMDLIBM %s
47+
// CHECK-LTO-AMDLIBM: "-plugin-opt=-vector-library=AMDLIBM"
48+
4349
// RUN: %clang -### --target=powerpc64-unknown-linux-gnu -fveclib=MASSV -flto %s 2>&1 | FileCheck --check-prefix=CHECK-LTO-MASSV %s
4450
// CHECK-LTO-MASSV: "-plugin-opt=-vector-library=MASSV"
4551

@@ -62,6 +68,10 @@
6268
// CHECK-ERRNO-LIBMVEC: "-fveclib=libmvec"
6369
// CHECK-ERRNO-LIBMVEC-SAME: "-fmath-errno"
6470

71+
// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fveclib=AMDLIBM %s 2>&1 | FileCheck --check-prefix=CHECK-ERRNO-AMDLIBM %s
72+
// CHECK-ERRNO-AMDLIBM: "-fveclib=AMDLIBM"
73+
// CHECK-ERRNO-AMDLIBM-SAME: "-fmath-errno"
74+
6575
// RUN: %clang -### --target=powerpc64-unknown-linux-gnu -fveclib=MASSV %s 2>&1 | FileCheck --check-prefix=CHECK-ERRNO-MASSV %s
6676
// CHECK-ERRNO-MASSV: "-fveclib=MASSV"
6777
// CHECK-ERRNO-MASSV-SAME: "-fmath-errno"

llvm/include/llvm/Frontend/Driver/CodeGenOptions.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,19 @@ class TargetLibraryInfoImpl;
1919
} // namespace llvm
2020

2121
namespace llvm::driver {
22+
// The current supported vector libraries in enum \VectorLibrary are 9(including
23+
// the NoLibrary). Changing the bitcount from 3 to 4 so that more than 8 values
24+
// can be supported. Now the maximum number of vector libraries supported
25+
// increase from 8(2^3) to 16(2^4).
26+
//
27+
// ENUM_CODEGENOPT(VecLib, llvm::driver::VectorLibrary,
28+
// <bitcount>4</bitcount>, llvm::driver::VectorLibrary::NoLibrary) is the
29+
// currently defined in clang/include/clang/Basic/CodeGenOptions.def
30+
// bitcount is the number of bits used to represent the enum value.
31+
//
32+
// IMPORTANT NOTE: When adding a new vector library support, and if count of
33+
// supported vector libraries crosses the current max limit. Please increment
34+
// the bitcount value.
2235

2336
/// Vector library option used with -fveclib=
2437
enum class VectorLibrary {

0 commit comments

Comments
 (0)