xref: /freebsd-src/contrib/llvm-project/llvm/lib/Frontend/Driver/CodeGenOptions.cpp (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
15f757f3fSDimitry Andric //===--- CodeGenOptions.cpp - Shared codegen option handling --------------===//
25f757f3fSDimitry Andric //
35f757f3fSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
45f757f3fSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
55f757f3fSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65f757f3fSDimitry Andric //
75f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
85f757f3fSDimitry Andric 
95f757f3fSDimitry Andric #include "llvm/Frontend/Driver/CodeGenOptions.h"
105f757f3fSDimitry Andric #include "llvm/Analysis/TargetLibraryInfo.h"
115f757f3fSDimitry Andric #include "llvm/TargetParser/Triple.h"
125f757f3fSDimitry Andric 
135f757f3fSDimitry Andric namespace llvm::driver {
145f757f3fSDimitry Andric 
155f757f3fSDimitry Andric TargetLibraryInfoImpl *createTLII(llvm::Triple &TargetTriple,
165f757f3fSDimitry Andric                                   driver::VectorLibrary Veclib) {
175f757f3fSDimitry Andric   TargetLibraryInfoImpl *TLII = new TargetLibraryInfoImpl(TargetTriple);
185f757f3fSDimitry Andric 
195f757f3fSDimitry Andric   using VectorLibrary = llvm::driver::VectorLibrary;
205f757f3fSDimitry Andric   switch (Veclib) {
215f757f3fSDimitry Andric   case VectorLibrary::Accelerate:
225f757f3fSDimitry Andric     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::Accelerate,
235f757f3fSDimitry Andric                                              TargetTriple);
245f757f3fSDimitry Andric     break;
255f757f3fSDimitry Andric   case VectorLibrary::LIBMVEC:
265f757f3fSDimitry Andric     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::LIBMVEC_X86,
275f757f3fSDimitry Andric                                              TargetTriple);
285f757f3fSDimitry Andric     break;
295f757f3fSDimitry Andric   case VectorLibrary::MASSV:
305f757f3fSDimitry Andric     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::MASSV,
315f757f3fSDimitry Andric                                              TargetTriple);
325f757f3fSDimitry Andric     break;
335f757f3fSDimitry Andric   case VectorLibrary::SVML:
345f757f3fSDimitry Andric     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::SVML,
355f757f3fSDimitry Andric                                              TargetTriple);
365f757f3fSDimitry Andric     break;
375f757f3fSDimitry Andric   case VectorLibrary::SLEEF:
385f757f3fSDimitry Andric     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::SLEEFGNUABI,
395f757f3fSDimitry Andric                                              TargetTriple);
405f757f3fSDimitry Andric     break;
415f757f3fSDimitry Andric   case VectorLibrary::Darwin_libsystem_m:
425f757f3fSDimitry Andric     TLII->addVectorizableFunctionsFromVecLib(
435f757f3fSDimitry Andric         TargetLibraryInfoImpl::DarwinLibSystemM, TargetTriple);
445f757f3fSDimitry Andric     break;
455f757f3fSDimitry Andric   case VectorLibrary::ArmPL:
465f757f3fSDimitry Andric     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::ArmPL,
475f757f3fSDimitry Andric                                              TargetTriple);
485f757f3fSDimitry Andric     break;
49*0fca6ea1SDimitry Andric   case VectorLibrary::AMDLIBM:
50*0fca6ea1SDimitry Andric     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::AMDLIBM,
51*0fca6ea1SDimitry Andric                                              TargetTriple);
52*0fca6ea1SDimitry Andric     break;
535f757f3fSDimitry Andric   default:
545f757f3fSDimitry Andric     break;
555f757f3fSDimitry Andric   }
565f757f3fSDimitry Andric   return TLII;
575f757f3fSDimitry Andric }
585f757f3fSDimitry Andric 
595f757f3fSDimitry Andric } // namespace llvm::driver
60