Author: Florian Hahn Date: 2021-05-16T18:49:53+01:00 New Revision: 803c52d0dba929652280a38dcf90c491ab33d03b
URL: https://github.com/llvm/llvm-project/commit/803c52d0dba929652280a38dcf90c491ab33d03b DIFF: https://github.com/llvm/llvm-project/commit/803c52d0dba929652280a38dcf90c491ab33d03b.diff LOG: Recommit "[Clang,Driver] Add -fveclib=Darwin_libsystem_m support." Recommit D102489, with the test case requiring the AArch64 backend. This reverts the revert 59b419adc6e608db8d7c31efcc37f34c0b57b7d0. Added: clang/test/CodeGen/veclib-darwin-libsystem-m.c Modified: clang/include/clang/Basic/CodeGenOptions.h clang/include/clang/Driver/Options.td clang/lib/CodeGen/BackendUtil.cpp clang/test/Driver/autocomplete.c clang/test/Driver/fveclib.c Removed: ################################################################################ diff --git a/clang/include/clang/Basic/CodeGenOptions.h b/clang/include/clang/Basic/CodeGenOptions.h index 90388b169f5e0..901013033ba6a 100644 --- a/clang/include/clang/Basic/CodeGenOptions.h +++ b/clang/include/clang/Basic/CodeGenOptions.h @@ -55,11 +55,12 @@ class CodeGenOptions : public CodeGenOptionsBase { }; enum VectorLibrary { - NoLibrary, // Don't use any vector library. - Accelerate, // Use the Accelerate framework. - LIBMVEC, // GLIBC vector math library. - MASSV, // IBM MASS vector library. - SVML // Intel short vector math library. + NoLibrary, // Don't use any vector library. + Accelerate, // Use the Accelerate framework. + LIBMVEC, // GLIBC vector math library. + MASSV, // IBM MASS vector library. + SVML, // Intel short vector math library. + Darwin_libsystem_m // Use Darwin's libsytem_m vector functions. }; enum ObjCDispatchMethodKind { diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index c1d096f358d9e..303b5b95e76d7 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -2171,9 +2171,10 @@ def fno_experimental_isel : Flag<["-"], "fno-experimental-isel">, Group<f_clang_ Alias<fno_global_isel>; def fveclib : Joined<["-"], "fveclib=">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Use the given vector functions library">, - Values<"Accelerate,libmvec,MASSV,SVML,none">, + Values<"Accelerate,libmvec,MASSV,SVML,Darwin_libsystem_m,none">, NormalizedValuesScope<"CodeGenOptions">, - NormalizedValues<["Accelerate", "LIBMVEC", "MASSV", "SVML", "NoLibrary"]>, + NormalizedValues<["Accelerate", "LIBMVEC", "MASSV", "SVML", + "Darwin_libsystem_m", "NoLibrary"]>, MarshallingInfoEnum<CodeGenOpts<"VecLib">, "NoLibrary">; def fno_lax_vector_conversions : Flag<["-"], "fno-lax-vector-conversions">, Group<f_Group>, Alias<flax_vector_conversions_EQ>, AliasArgs<["none"]>; diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index e5a2a089563ef..837ffd0950753 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -402,6 +402,10 @@ static TargetLibraryInfoImpl *createTLII(llvm::Triple &TargetTriple, case CodeGenOptions::SVML: TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::SVML); break; + case CodeGenOptions::Darwin_libsystem_m: + TLII->addVectorizableFunctionsFromVecLib( + TargetLibraryInfoImpl::DarwinLibSystemM); + break; default: break; } diff --git a/clang/test/CodeGen/veclib-darwin-libsystem-m.c b/clang/test/CodeGen/veclib-darwin-libsystem-m.c new file mode 100644 index 0000000000000..23915147ded14 --- /dev/null +++ b/clang/test/CodeGen/veclib-darwin-libsystem-m.c @@ -0,0 +1,16 @@ +// RUN: %clang_cc1 -fveclib=Darwin_libsystem_m -triple arm64-apple-darwin %s -target-cpu apple-a7 -vectorize-loops -emit-llvm -O3 -o - | FileCheck %s + +// REQUIRES: aarch64-registered-target + +// Make sure -fveclib=Darwin_libsystem_m gets passed through to LLVM as +// expected: a call to _simd_sin_f4 should be generated. + +extern float sinf(float); + +// CHECK-LABEL: define{{.*}}@apply_sin +// CHECK: call <4 x float> @_simd_sin_f4( +// +void apply_sin(float *A, float *B, float *C, unsigned N) { + for (unsigned i = 0; i < N; i++) + C[i] = sinf(A[i]) + sinf(B[i]); +} diff --git a/clang/test/Driver/autocomplete.c b/clang/test/Driver/autocomplete.c index 85bf6c7912a45..3efe141de6fc1 100644 --- a/clang/test/Driver/autocomplete.c +++ b/clang/test/Driver/autocomplete.c @@ -76,6 +76,7 @@ // FLTOALL-NEXT: thin // RUN: %clang --autocomplete=-fveclib= | FileCheck %s -check-prefix=FVECLIBALL // FVECLIBALL: Accelerate +// FVECLIBALL-NEXT: Darwin_libsystem_m // FVECLIBALL-NEXT: libmvec // FVECLIBALL-NEXT: MASSV // FVECLIBALL-NEXT: none diff --git a/clang/test/Driver/fveclib.c b/clang/test/Driver/fveclib.c index 5036422f57913..2bf7558a02af8 100644 --- a/clang/test/Driver/fveclib.c +++ b/clang/test/Driver/fveclib.c @@ -2,12 +2,14 @@ // RUN: %clang -### -c -fveclib=Accelerate %s 2>&1 | FileCheck -check-prefix CHECK-ACCELERATE %s // RUN: %clang -### -c -fveclib=libmvec %s 2>&1 | FileCheck -check-prefix CHECK-libmvec %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: not %clang -c -fveclib=something %s 2>&1 | FileCheck -check-prefix CHECK-INVALID %s // CHECK-NOLIB: "-fveclib=none" // CHECK-ACCELERATE: "-fveclib=Accelerate" // CHECK-libmvec: "-fveclib=libmvec" // CHECK-MASSV: "-fveclib=MASSV" +// CHECK-DARWIN_LIBSYSTEM_M: "-fveclib=Darwin_libsystem_m" // CHECK-INVALID: error: invalid value 'something' in '-fveclib=something' _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits