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