Skip to content

Commit 32a1b6a

Browse files
[flang][veclib] Adding AMDLIBM target to fveclib (#140533)
This commit adds AMDLIBM support to fveclib targets. The support is already present in clang and this patch extends it to flang.
1 parent 57aa7fa commit 32a1b6a

File tree

5 files changed

+8
-2
lines changed

5 files changed

+8
-2
lines changed

clang/lib/Driver/ToolChains/Flang.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,7 @@ void Flang::addTargetOptions(const ArgList &Args,
484484
Triple.getArch() != llvm::Triple::x86_64)
485485
D.Diag(diag::err_drv_unsupported_opt_for_target)
486486
<< Name << Triple.getArchName();
487-
} else if (Name == "libmvec") {
487+
} else if (Name == "libmvec" || Name == "AMDLIBM") {
488488
if (Triple.getArch() != llvm::Triple::x86 &&
489489
Triple.getArch() != llvm::Triple::x86_64)
490490
D.Diag(diag::err_drv_unsupported_opt_for_target)

flang/include/flang/Frontend/CodeGenOptions.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ CODEGENOPT(AliasAnalysis, 1, 0) ///< Enable alias analysis pass
4242
CODEGENOPT(Underscoring, 1, 1)
4343
ENUM_CODEGENOPT(RelocationModel, llvm::Reloc::Model, 3, llvm::Reloc::PIC_) ///< Name of the relocation model to use.
4444
ENUM_CODEGENOPT(DebugInfo, llvm::codegenoptions::DebugInfoKind, 4, llvm::codegenoptions::NoDebugInfo) ///< Level of debug info to generate
45-
ENUM_CODEGENOPT(VecLib, llvm::driver::VectorLibrary, 3, llvm::driver::VectorLibrary::NoLibrary) ///< Vector functions library to use
45+
ENUM_CODEGENOPT(VecLib, llvm::driver::VectorLibrary, 4, llvm::driver::VectorLibrary::NoLibrary) ///< Vector functions library to use
4646
ENUM_CODEGENOPT(FramePointer, llvm::FramePointerKind, 2, llvm::FramePointerKind::None) ///< Enable the usage of frame pointers
4747

4848
ENUM_CODEGENOPT(DoConcurrentMapping, DoConcurrentMappingKind, 2, DoConcurrentMappingKind::DCMK_None) ///< Map `do concurrent` to OpenMP

flang/lib/Frontend/CompilerInvocation.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ static bool parseVectorLibArg(Fortran::frontend::CodeGenOptions &opts,
201201
.Case("SLEEF", VectorLibrary::SLEEF)
202202
.Case("Darwin_libsystem_m", VectorLibrary::Darwin_libsystem_m)
203203
.Case("ArmPL", VectorLibrary::ArmPL)
204+
.Case("AMDLIBM", VectorLibrary::AMDLIBM)
204205
.Case("NoLibrary", VectorLibrary::NoLibrary)
205206
.Default(std::nullopt);
206207
if (!val.has_value()) {

flang/test/Driver/fveclib-codegen.f90

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
! test that -fveclib= is passed to the backend
22
! RUN: %if aarch64-registered-target %{ %flang -S -Ofast -target aarch64-unknown-linux-gnu -fveclib=SLEEF -o - %s | FileCheck %s --check-prefix=SLEEF %}
33
! RUN: %if x86-registered-target %{ %flang -S -Ofast -target x86_64-unknown-linux-gnu -fveclib=libmvec -o - %s | FileCheck %s %}
4+
! RUN: %if x86-registered-target %{ %flang -S -O3 -ffast-math -target x86_64-unknown-linux-gnu -fveclib=AMDLIBM -o - %s | FileCheck %s --check-prefix=AMDLIBM %}
45
! RUN: %flang -S -Ofast -fveclib=NoLibrary -o - %s | FileCheck %s --check-prefix=NOLIB
56

67
subroutine sb(a, b)
@@ -10,6 +11,7 @@ subroutine sb(a, b)
1011
! check that we used a vectorized call to powf()
1112
! CHECK: _ZGVbN4vv_powf
1213
! SLEEF: _ZGVnN4vv_powf
14+
! AMDLIBM: amd_vrs4_powf
1315
! NOLIB: powf
1416
a(i) = a(i) ** b(i)
1517
end do

flang/test/Driver/fveclib.f90

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
! RUN: %flang -### -c -fveclib=Darwin_libsystem_m %s 2>&1 | FileCheck -check-prefix CHECK-DARWIN_LIBSYSTEM_M %s
66
! RUN: %flang -### -c --target=aarch64-none-none -fveclib=SLEEF %s 2>&1 | FileCheck -check-prefix CHECK-SLEEF %s
77
! RUN: %flang -### -c --target=aarch64-none-none -fveclib=ArmPL %s 2>&1 | FileCheck -check-prefix CHECK-ARMPL %s
8+
! RUN: %flang -### -c --target=x86_64-unknown-linux-gnu -fveclib=AMDLIBM %s 2>&1 | FileCheck -check-prefix CHECK-AMDLIBM %s
89
! RUN: %flang -### -c --target=aarch64-apple-darwin -fveclib=none %s 2>&1 | FileCheck -check-prefix CHECK-NOLIB-DARWIN %s
910
! RUN: not %flang -c -fveclib=something %s 2>&1 | FileCheck -check-prefix CHECK-INVALID %s
1011

@@ -15,6 +16,7 @@
1516
! CHECK-DARWIN_LIBSYSTEM_M: "-fveclib=Darwin_libsystem_m"
1617
! CHECK-SLEEF: "-fveclib=SLEEF"
1718
! CHECK-ARMPL: "-fveclib=ArmPL"
19+
! CHECK-AMDLIBM: "-fveclib=AMDLIBM"
1820
! CHECK-NOLIB-DARWIN: "-fveclib=none"
1921

2022
! CHECK-INVALID: error: invalid value 'something' in '-fveclib=something'
@@ -23,6 +25,7 @@
2325
! RUN: not %flang --target=x86-none-none -c -fveclib=ArmPL %s 2>&1 | FileCheck -check-prefix CHECK-ERROR %s
2426
! RUN: not %flang --target=aarch64-none-none -c -fveclib=libmvec %s 2>&1 | FileCheck -check-prefix CHECK-ERROR %s
2527
! RUN: not %flang --target=aarch64-none-none -c -fveclib=SVML %s 2>&1 | FileCheck -check-prefix CHECK-ERROR %s
28+
! RUN: not %flang --target=aarch64-none-none -c -fveclib=AMDLIBM %s 2>&1 | FileCheck -check-prefix CHECK-ERROR %s
2629
! CHECK-ERROR: unsupported option {{.*}} for target
2730

2831
! RUN: %flang -fveclib=Accelerate %s -target arm64-apple-ios8.0.0 -### 2>&1 | FileCheck --check-prefix=CHECK-LINK %s

0 commit comments

Comments
 (0)