xref: /llvm-project/llvm/lib/Frontend/Driver/CodeGenOptions.cpp (revision 36adfec155de366d722f2bac8ff9162289dcf06c)
1a207e630STom Eccles //===--- CodeGenOptions.cpp - Shared codegen option handling --------------===//
2a207e630STom Eccles //
3a207e630STom Eccles // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4a207e630STom Eccles // See https://llvm.org/LICENSE.txt for license information.
5a207e630STom Eccles // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6a207e630STom Eccles //
7a207e630STom Eccles //===----------------------------------------------------------------------===//
8a207e630STom Eccles 
9a207e630STom Eccles #include "llvm/Frontend/Driver/CodeGenOptions.h"
10a207e630STom Eccles #include "llvm/Analysis/TargetLibraryInfo.h"
11a207e630STom Eccles #include "llvm/TargetParser/Triple.h"
12a207e630STom Eccles 
13a207e630STom Eccles namespace llvm::driver {
14a207e630STom Eccles 
createTLII(llvm::Triple & TargetTriple,driver::VectorLibrary Veclib)15a207e630STom Eccles TargetLibraryInfoImpl *createTLII(llvm::Triple &TargetTriple,
16a207e630STom Eccles                                   driver::VectorLibrary Veclib) {
17a207e630STom Eccles   TargetLibraryInfoImpl *TLII = new TargetLibraryInfoImpl(TargetTriple);
18a207e630STom Eccles 
19a207e630STom Eccles   using VectorLibrary = llvm::driver::VectorLibrary;
20a207e630STom Eccles   switch (Veclib) {
21a207e630STom Eccles   case VectorLibrary::Accelerate:
22a207e630STom Eccles     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::Accelerate,
23a207e630STom Eccles                                              TargetTriple);
24a207e630STom Eccles     break;
25a207e630STom Eccles   case VectorLibrary::LIBMVEC:
26a207e630STom Eccles     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::LIBMVEC_X86,
27a207e630STom Eccles                                              TargetTriple);
28a207e630STom Eccles     break;
29a207e630STom Eccles   case VectorLibrary::MASSV:
30a207e630STom Eccles     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::MASSV,
31a207e630STom Eccles                                              TargetTriple);
32a207e630STom Eccles     break;
33a207e630STom Eccles   case VectorLibrary::SVML:
34a207e630STom Eccles     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::SVML,
35a207e630STom Eccles                                              TargetTriple);
36a207e630STom Eccles     break;
37a207e630STom Eccles   case VectorLibrary::SLEEF:
38a207e630STom Eccles     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::SLEEFGNUABI,
39a207e630STom Eccles                                              TargetTriple);
40a207e630STom Eccles     break;
41a207e630STom Eccles   case VectorLibrary::Darwin_libsystem_m:
42a207e630STom Eccles     TLII->addVectorizableFunctionsFromVecLib(
43a207e630STom Eccles         TargetLibraryInfoImpl::DarwinLibSystemM, TargetTriple);
44a207e630STom Eccles     break;
45a207e630STom Eccles   case VectorLibrary::ArmPL:
46a207e630STom Eccles     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::ArmPL,
47a207e630STom Eccles                                              TargetTriple);
48a207e630STom Eccles     break;
49*36adfec1SRohit Aggarwal   case VectorLibrary::AMDLIBM:
50*36adfec1SRohit Aggarwal     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::AMDLIBM,
51*36adfec1SRohit Aggarwal                                              TargetTriple);
52*36adfec1SRohit Aggarwal     break;
53a207e630STom Eccles   default:
54a207e630STom Eccles     break;
55a207e630STom Eccles   }
56a207e630STom Eccles   return TLII;
57a207e630STom Eccles }
58a207e630STom Eccles 
59a207e630STom Eccles } // namespace llvm::driver
60