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