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