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