xref: /freebsd/contrib/llvm-project/llvm/lib/Frontend/Driver/CodeGenOptions.cpp (revision 770cf0a5f02dc8983a89c6568d741fbc25baa999)
1 //===--- CodeGenOptions.cpp - Shared codegen option handling --------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "llvm/Frontend/Driver/CodeGenOptions.h"
10 #include "llvm/Analysis/TargetLibraryInfo.h"
11 #include "llvm/ProfileData/InstrProfCorrelator.h"
12 #include "llvm/TargetParser/Triple.h"
13 
14 namespace llvm {
15 extern llvm::cl::opt<bool> DebugInfoCorrelate;
16 extern llvm::cl::opt<llvm::InstrProfCorrelator::ProfCorrelatorKind>
17     ProfileCorrelate;
18 } // namespace llvm
19 
20 namespace llvm::driver {
21 
22 TargetLibraryInfoImpl *createTLII(const llvm::Triple &TargetTriple,
23                                   driver::VectorLibrary Veclib) {
24   TargetLibraryInfoImpl *TLII = new TargetLibraryInfoImpl(TargetTriple);
25 
26   using VectorLibrary = llvm::driver::VectorLibrary;
27   switch (Veclib) {
28   case VectorLibrary::Accelerate:
29     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::Accelerate,
30                                              TargetTriple);
31     break;
32   case VectorLibrary::LIBMVEC:
33     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::LIBMVEC,
34                                              TargetTriple);
35     break;
36   case VectorLibrary::MASSV:
37     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::MASSV,
38                                              TargetTriple);
39     break;
40   case VectorLibrary::SVML:
41     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::SVML,
42                                              TargetTriple);
43     break;
44   case VectorLibrary::SLEEF:
45     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::SLEEFGNUABI,
46                                              TargetTriple);
47     break;
48   case VectorLibrary::Darwin_libsystem_m:
49     TLII->addVectorizableFunctionsFromVecLib(
50         TargetLibraryInfoImpl::DarwinLibSystemM, TargetTriple);
51     break;
52   case VectorLibrary::ArmPL:
53     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::ArmPL,
54                                              TargetTriple);
55     break;
56   case VectorLibrary::AMDLIBM:
57     TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::AMDLIBM,
58                                              TargetTriple);
59     break;
60   default:
61     break;
62   }
63   return TLII;
64 }
65 
66 std::string getDefaultProfileGenName() {
67   return llvm::DebugInfoCorrelate ||
68                  llvm::ProfileCorrelate != InstrProfCorrelator::NONE
69              ? "default_%m.proflite"
70              : "default_%m.profraw";
71 }
72 } // namespace llvm::driver
73