https://github.com/rohitaggarwal007 updated https://github.com/llvm/llvm-project/pull/140544
>From 4769d05876f3d7f4a335c10e51fb20e3c923e270 Mon Sep 17 00:00:00 2001 From: Rohit Aggarwal <rohit.aggar...@amd.com> Date: Mon, 19 May 2025 19:25:52 +0530 Subject: [PATCH 1/5] [Clang][Flang][Driver] Fix target parsing for -fveclib=AMDLIBM option --- clang/lib/Driver/ToolChains/Clang.cpp | 2 +- clang/lib/Driver/ToolChains/CommonArgs.cpp | 1 + clang/test/Driver/fveclib.c | 10 ++++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index a08bdba99bfe0..4aefdb24af17b 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -5844,7 +5844,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, Triple.getArch() != llvm::Triple::x86_64) D.Diag(diag::err_drv_unsupported_opt_for_target) << Name << Triple.getArchName(); - } else if (Name == "libmvec") { + } else if (Name == "libmvec" || Name == "AMDLIBM") { if (Triple.getArch() != llvm::Triple::x86 && Triple.getArch() != llvm::Triple::x86_64) D.Diag(diag::err_drv_unsupported_opt_for_target) diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index 5c1bc090810a2..c499b7266a553 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -935,6 +935,7 @@ void tools::addLTOOptions(const ToolChain &ToolChain, const ArgList &Args, llvm::StringSwitch<std::optional<StringRef>>(ArgVecLib->getValue()) .Case("Accelerate", "Accelerate") .Case("libmvec", "LIBMVEC") + .Case("AMDLIBM", "AMDLIBM") .Case("MASSV", "MASSV") .Case("SVML", "SVML") .Case("SLEEF", "sleefgnuabi") diff --git a/clang/test/Driver/fveclib.c b/clang/test/Driver/fveclib.c index 1235d08a3e139..5420555c36a2a 100644 --- a/clang/test/Driver/fveclib.c +++ b/clang/test/Driver/fveclib.c @@ -1,6 +1,7 @@ // RUN: %clang -### -c -fveclib=none %s 2>&1 | FileCheck --check-prefix=CHECK-NOLIB %s // RUN: %clang -### -c -fveclib=Accelerate %s 2>&1 | FileCheck --check-prefix=CHECK-ACCELERATE %s // RUN: %clang -### -c --target=x86_64-unknown-linux-gnu -fveclib=libmvec %s 2>&1 | FileCheck --check-prefix=CHECK-libmvec %s +// RUN: %clang -### -c --target=x86_64-unknown-linux-gnu -fveclib=AMDLIBM %s 2>&1 | FileCheck --check-prefix=CHECK-AMDLIBM %s // RUN: %clang -### -c -fveclib=MASSV %s 2>&1 | FileCheck --check-prefix=CHECK-MASSV %s // RUN: %clang -### -c -fveclib=Darwin_libsystem_m %s 2>&1 | FileCheck --check-prefix=CHECK-DARWIN_LIBSYSTEM_M %s // RUN: %clang -### -c --target=aarch64 -fveclib=SLEEF %s 2>&1 | FileCheck --check-prefix=CHECK-SLEEF %s @@ -11,6 +12,7 @@ // CHECK-NOLIB: "-fveclib=none" // CHECK-ACCELERATE: "-fveclib=Accelerate" // CHECK-libmvec: "-fveclib=libmvec" +// CHECK-AMDLIBM: "-fveclib=AMDLIBM" // CHECK-MASSV: "-fveclib=MASSV" // CHECK-DARWIN_LIBSYSTEM_M: "-fveclib=Darwin_libsystem_m" // CHECK-SLEEF: "-fveclib=SLEEF" @@ -23,6 +25,7 @@ // RUN: not %clang --target=x86 -c -fveclib=ArmPL %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s // RUN: not %clang --target=aarch64 -c -fveclib=libmvec %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s // RUN: not %clang --target=aarch64 -c -fveclib=SVML %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s +// RUN: not %clang --target=aarch64 -c -fveclib=AMDLIBM %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR %s // CHECK-ERROR: unsupported option {{.*}} for target // RUN: %clang -fveclib=Accelerate %s -target arm64-apple-ios8.0.0 -### 2>&1 | FileCheck --check-prefix=CHECK-LINK %s @@ -40,6 +43,9 @@ // RUN: %clang -### --target=x86_64-unknown-linux-gnu -fveclib=libmvec -flto %s 2>&1 | FileCheck --check-prefix=CHECK-LTO-LIBMVEC %s // CHECK-LTO-LIBMVEC: "-plugin-opt=-vector-library=LIBMVEC" +// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fveclib=AMDLIBM -flto %s 2>&1 | FileCheck --check-prefix=CHECK-LTO-AMDLIBM %s +// CHECK-LTO-AMDLIBM: "-plugin-opt=-vector-library=AMDLIBM" + // RUN: %clang -### --target=powerpc64-unknown-linux-gnu -fveclib=MASSV -flto %s 2>&1 | FileCheck --check-prefix=CHECK-LTO-MASSV %s // CHECK-LTO-MASSV: "-plugin-opt=-vector-library=MASSV" @@ -62,6 +68,10 @@ // CHECK-ERRNO-LIBMVEC: "-fveclib=libmvec" // CHECK-ERRNO-LIBMVEC-SAME: "-fmath-errno" +// RUN: %clang -### --target=x86_64-unknown-linux-gnu -fveclib=AMDLIBM %s 2>&1 | FileCheck --check-prefix=CHECK-ERRNO-AMDLIBM %s +// CHECK-ERRNO-AMDLIBM: "-fveclib=AMDLIBM" +// CHECK-ERRNO-AMDLIBM-SAME: "-fmath-errno" + // RUN: %clang -### --target=powerpc64-unknown-linux-gnu -fveclib=MASSV %s 2>&1 | FileCheck --check-prefix=CHECK-ERRNO-MASSV %s // CHECK-ERRNO-MASSV: "-fveclib=MASSV" // CHECK-ERRNO-MASSV-SAME: "-fmath-errno" >From 4505686899f24686aca32dfd53bd79e2908e185a Mon Sep 17 00:00:00 2001 From: Rohit Aggarwal <rohit.aggar...@amd.com> Date: Mon, 19 May 2025 23:30:52 +0530 Subject: [PATCH 2/5] Update -fveclib=AMDLIBM in flang --- clang/lib/Driver/ToolChains/Flang.cpp | 2 +- flang/lib/Frontend/CompilerInvocation.cpp | 1 + flang/test/Driver/fveclib.f90 | 3 +++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index b1ca747e68b89..0bd8d0c85e50a 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -484,7 +484,7 @@ void Flang::addTargetOptions(const ArgList &Args, Triple.getArch() != llvm::Triple::x86_64) D.Diag(diag::err_drv_unsupported_opt_for_target) << Name << Triple.getArchName(); - } else if (Name == "libmvec") { + } else if (Name == "libmvec" || Name == "AMDLIBM") { if (Triple.getArch() != llvm::Triple::x86 && Triple.getArch() != llvm::Triple::x86_64) D.Diag(diag::err_drv_unsupported_opt_for_target) diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp index 238079a09ef3a..a5df5b02fcf9f 100644 --- a/flang/lib/Frontend/CompilerInvocation.cpp +++ b/flang/lib/Frontend/CompilerInvocation.cpp @@ -196,6 +196,7 @@ static bool parseVectorLibArg(Fortran::frontend::CodeGenOptions &opts, llvm::StringSwitch<std::optional<VectorLibrary>>(arg->getValue()) .Case("Accelerate", VectorLibrary::Accelerate) .Case("libmvec", VectorLibrary::LIBMVEC) + .Case("AMDLIBM", VectorLibrary::AMDLIBM) .Case("MASSV", VectorLibrary::MASSV) .Case("SVML", VectorLibrary::SVML) .Case("SLEEF", VectorLibrary::SLEEF) diff --git a/flang/test/Driver/fveclib.f90 b/flang/test/Driver/fveclib.f90 index 1b536b8ad0f18..6cb9361f7b778 100644 --- a/flang/test/Driver/fveclib.f90 +++ b/flang/test/Driver/fveclib.f90 @@ -1,6 +1,7 @@ ! RUN: %flang -### -c -fveclib=none %s 2>&1 | FileCheck -check-prefix CHECK-NOLIB %s ! RUN: %flang -### -c -fveclib=Accelerate %s 2>&1 | FileCheck -check-prefix CHECK-ACCELERATE %s ! RUN: %flang -### -c --target=x86_64-unknown-linux-gnu -fveclib=libmvec %s 2>&1 | FileCheck -check-prefix CHECK-libmvec %s +! RUN: %flang -### -c --target=x86_64-unknown-linux-gnu -fveclib=AMDLIBM %s 2>&1 | FileCheck -check-prefix CHECK-AMDLIBM %s ! RUN: %flang -### -c -fveclib=MASSV %s 2>&1 | FileCheck -check-prefix CHECK-MASSV %s ! RUN: %flang -### -c -fveclib=Darwin_libsystem_m %s 2>&1 | FileCheck -check-prefix CHECK-DARWIN_LIBSYSTEM_M %s ! RUN: %flang -### -c --target=aarch64-none-none -fveclib=SLEEF %s 2>&1 | FileCheck -check-prefix CHECK-SLEEF %s @@ -11,6 +12,7 @@ ! CHECK-NOLIB: "-fveclib=none" ! CHECK-ACCELERATE: "-fveclib=Accelerate" ! CHECK-libmvec: "-fveclib=libmvec" +! CHECK-AMDLIBM: "-fveclib=AMDLIBM" ! CHECK-MASSV: "-fveclib=MASSV" ! CHECK-DARWIN_LIBSYSTEM_M: "-fveclib=Darwin_libsystem_m" ! CHECK-SLEEF: "-fveclib=SLEEF" @@ -22,6 +24,7 @@ ! RUN: not %flang --target=x86-none-none -c -fveclib=SLEEF %s 2>&1 | FileCheck -check-prefix CHECK-ERROR %s ! RUN: not %flang --target=x86-none-none -c -fveclib=ArmPL %s 2>&1 | FileCheck -check-prefix CHECK-ERROR %s ! RUN: not %flang --target=aarch64-none-none -c -fveclib=libmvec %s 2>&1 | FileCheck -check-prefix CHECK-ERROR %s +! RUN: not %flang --target=aarch64-none-none -c -fveclib=AMDLIBM %s 2>&1 | FileCheck -check-prefix CHECK-ERROR %s ! RUN: not %flang --target=aarch64-none-none -c -fveclib=SVML %s 2>&1 | FileCheck -check-prefix CHECK-ERROR %s ! CHECK-ERROR: unsupported option {{.*}} for target >From a135380263af7a4c484f0e326027b2e3ce3f1b63 Mon Sep 17 00:00:00 2001 From: Rohit Aggarwal <rohit.aggar...@amd.com> Date: Tue, 20 May 2025 11:01:05 +0530 Subject: [PATCH 3/5] Remove flang related changes as it is already taken care --- clang/lib/Driver/ToolChains/Flang.cpp | 2 +- flang/lib/Frontend/CompilerInvocation.cpp | 1 - flang/test/Driver/fveclib.f90 | 3 --- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index 0bd8d0c85e50a..b1ca747e68b89 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -484,7 +484,7 @@ void Flang::addTargetOptions(const ArgList &Args, Triple.getArch() != llvm::Triple::x86_64) D.Diag(diag::err_drv_unsupported_opt_for_target) << Name << Triple.getArchName(); - } else if (Name == "libmvec" || Name == "AMDLIBM") { + } else if (Name == "libmvec") { if (Triple.getArch() != llvm::Triple::x86 && Triple.getArch() != llvm::Triple::x86_64) D.Diag(diag::err_drv_unsupported_opt_for_target) diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp index a5df5b02fcf9f..238079a09ef3a 100644 --- a/flang/lib/Frontend/CompilerInvocation.cpp +++ b/flang/lib/Frontend/CompilerInvocation.cpp @@ -196,7 +196,6 @@ static bool parseVectorLibArg(Fortran::frontend::CodeGenOptions &opts, llvm::StringSwitch<std::optional<VectorLibrary>>(arg->getValue()) .Case("Accelerate", VectorLibrary::Accelerate) .Case("libmvec", VectorLibrary::LIBMVEC) - .Case("AMDLIBM", VectorLibrary::AMDLIBM) .Case("MASSV", VectorLibrary::MASSV) .Case("SVML", VectorLibrary::SVML) .Case("SLEEF", VectorLibrary::SLEEF) diff --git a/flang/test/Driver/fveclib.f90 b/flang/test/Driver/fveclib.f90 index 6cb9361f7b778..1b536b8ad0f18 100644 --- a/flang/test/Driver/fveclib.f90 +++ b/flang/test/Driver/fveclib.f90 @@ -1,7 +1,6 @@ ! RUN: %flang -### -c -fveclib=none %s 2>&1 | FileCheck -check-prefix CHECK-NOLIB %s ! RUN: %flang -### -c -fveclib=Accelerate %s 2>&1 | FileCheck -check-prefix CHECK-ACCELERATE %s ! RUN: %flang -### -c --target=x86_64-unknown-linux-gnu -fveclib=libmvec %s 2>&1 | FileCheck -check-prefix CHECK-libmvec %s -! RUN: %flang -### -c --target=x86_64-unknown-linux-gnu -fveclib=AMDLIBM %s 2>&1 | FileCheck -check-prefix CHECK-AMDLIBM %s ! RUN: %flang -### -c -fveclib=MASSV %s 2>&1 | FileCheck -check-prefix CHECK-MASSV %s ! RUN: %flang -### -c -fveclib=Darwin_libsystem_m %s 2>&1 | FileCheck -check-prefix CHECK-DARWIN_LIBSYSTEM_M %s ! RUN: %flang -### -c --target=aarch64-none-none -fveclib=SLEEF %s 2>&1 | FileCheck -check-prefix CHECK-SLEEF %s @@ -12,7 +11,6 @@ ! CHECK-NOLIB: "-fveclib=none" ! CHECK-ACCELERATE: "-fveclib=Accelerate" ! CHECK-libmvec: "-fveclib=libmvec" -! CHECK-AMDLIBM: "-fveclib=AMDLIBM" ! CHECK-MASSV: "-fveclib=MASSV" ! CHECK-DARWIN_LIBSYSTEM_M: "-fveclib=Darwin_libsystem_m" ! CHECK-SLEEF: "-fveclib=SLEEF" @@ -24,7 +22,6 @@ ! RUN: not %flang --target=x86-none-none -c -fveclib=SLEEF %s 2>&1 | FileCheck -check-prefix CHECK-ERROR %s ! RUN: not %flang --target=x86-none-none -c -fveclib=ArmPL %s 2>&1 | FileCheck -check-prefix CHECK-ERROR %s ! RUN: not %flang --target=aarch64-none-none -c -fveclib=libmvec %s 2>&1 | FileCheck -check-prefix CHECK-ERROR %s -! RUN: not %flang --target=aarch64-none-none -c -fveclib=AMDLIBM %s 2>&1 | FileCheck -check-prefix CHECK-ERROR %s ! RUN: not %flang --target=aarch64-none-none -c -fveclib=SVML %s 2>&1 | FileCheck -check-prefix CHECK-ERROR %s ! CHECK-ERROR: unsupported option {{.*}} for target >From ed8a1f91f66407891ac6e37e56c16000f923bbc0 Mon Sep 17 00:00:00 2001 From: Rohit Aggarwal <rohit.aggar...@amd.com> Date: Tue, 20 May 2025 12:08:31 +0530 Subject: [PATCH 4/5] Fix and update the bitcounts for veclib enum --- clang/include/clang/Basic/CodeGenOptions.def | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/include/clang/Basic/CodeGenOptions.def b/clang/include/clang/Basic/CodeGenOptions.def index 3f31d058f95a8..aad4e107cbeb3 100644 --- a/clang/include/clang/Basic/CodeGenOptions.def +++ b/clang/include/clang/Basic/CodeGenOptions.def @@ -389,7 +389,7 @@ ENUM_CODEGENOPT(Inlining, InliningMethod, 2, NormalInlining) VALUE_CODEGENOPT(InlineMaxStackSize, 32, UINT_MAX) // Vector functions library to use. -ENUM_CODEGENOPT(VecLib, llvm::driver::VectorLibrary, 3, llvm::driver::VectorLibrary::NoLibrary) +ENUM_CODEGENOPT(VecLib, llvm::driver::VectorLibrary, 4, llvm::driver::VectorLibrary::NoLibrary) /// The default TLS model to use. ENUM_CODEGENOPT(DefaultTLSModel, TLSModel, 2, GeneralDynamicTLSModel) >From 57fecd2678701f92735550bff2e7c3adbbb1c3f7 Mon Sep 17 00:00:00 2001 From: Rohit Aggarwal <rohit.aggar...@amd.com> Date: Tue, 20 May 2025 16:28:40 +0530 Subject: [PATCH 5/5] Updated the comment regarding the vector library support --- llvm/include/llvm/Frontend/Driver/CodeGenOptions.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/llvm/include/llvm/Frontend/Driver/CodeGenOptions.h b/llvm/include/llvm/Frontend/Driver/CodeGenOptions.h index c51476e9ad3fe..ee52645f2e51b 100644 --- a/llvm/include/llvm/Frontend/Driver/CodeGenOptions.h +++ b/llvm/include/llvm/Frontend/Driver/CodeGenOptions.h @@ -19,6 +19,19 @@ class TargetLibraryInfoImpl; } // namespace llvm namespace llvm::driver { +// The current supported vector libraries in enum \VectorLibrary are 9(including +// the NoLibrary). Changing the bitcount from 3 to 4 so that more than 8 values +// can be supported. Now the maximum number of vector libraries supported +// increase from 8(2^3) to 16(2^4). +// +// ENUM_CODEGENOPT(VecLib, llvm::driver::VectorLibrary, +// <bitcount>4</bitcount>, llvm::driver::VectorLibrary::NoLibrary) is the +// currently defined in clang/include/clang/Basic/CodeGenOptions.def +// bitcount is the number of bits used to represent the enum value. +// +// IMPORTANT NOTE: When adding a new vector library support, and if count of +// supported vector libraries crosses the current max limit. Please increment +// the bitcount value. /// Vector library option used with -fveclib= enum class VectorLibrary { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits