xref: /netbsd-src/external/apache2/llvm/dist/clang/lib/Driver/ToolChains/AMDGPUOpenMP.h (revision e038c9c4676b0f19b1b7dd08a940c6ed64a6d5ae)
1 //===- AMDGPUOpenMP.h - AMDGPUOpenMP ToolChain Implementation -*- C++ -*---===//
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 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_AMDGPUOPENMP_H
10 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_AMDGPUOPENMP_H
11 
12 #include "AMDGPU.h"
13 #include "clang/Driver/Tool.h"
14 #include "clang/Driver/ToolChain.h"
15 
16 namespace clang {
17 namespace driver {
18 
19 namespace tools {
20 
21 namespace AMDGCN {
22 // Runs llvm-link/opt/llc/lld, which links multiple LLVM bitcode, together with
23 // device library, then compiles it to ISA in a shared object.
24 class LLVM_LIBRARY_VISIBILITY OpenMPLinker : public Tool {
25 public:
OpenMPLinker(const ToolChain & TC)26   OpenMPLinker(const ToolChain &TC)
27       : Tool("AMDGCN::OpenMPLinker", "amdgcn-link", TC) {}
28 
hasIntegratedCPP()29   bool hasIntegratedCPP() const override { return false; }
30 
31   void ConstructJob(Compilation &C, const JobAction &JA,
32                     const InputInfo &Output, const InputInfoList &Inputs,
33                     const llvm::opt::ArgList &TCArgs,
34                     const char *LinkingOutput) const override;
35 
36 private:
37   /// \return llvm-link output file name.
38   const char *constructLLVMLinkCommand(Compilation &C, const JobAction &JA,
39                                        const InputInfoList &Inputs,
40                                        const llvm::opt::ArgList &Args,
41                                        llvm::StringRef SubArchName,
42                                        llvm::StringRef OutputFilePrefix) const;
43 
44   /// \return llc output file name.
45   const char *constructLlcCommand(Compilation &C, const JobAction &JA,
46                                   const InputInfoList &Inputs,
47                                   const llvm::opt::ArgList &Args,
48                                   llvm::StringRef SubArchName,
49                                   llvm::StringRef OutputFilePrefix,
50                                   const char *InputFileName,
51                                   bool OutputIsAsm = false) const;
52 
53   void constructLldCommand(Compilation &C, const JobAction &JA,
54                            const InputInfoList &Inputs, const InputInfo &Output,
55                            const llvm::opt::ArgList &Args,
56                            const char *InputFileName) const;
57 };
58 
59 } // end namespace AMDGCN
60 } // end namespace tools
61 
62 namespace toolchains {
63 
64 class LLVM_LIBRARY_VISIBILITY AMDGPUOpenMPToolChain final
65     : public ROCMToolChain {
66 public:
67   AMDGPUOpenMPToolChain(const Driver &D, const llvm::Triple &Triple,
68                         const ToolChain &HostTC,
69                         const llvm::opt::ArgList &Args);
70 
getAuxTriple()71   const llvm::Triple *getAuxTriple() const override {
72     return &HostTC.getTriple();
73   }
74 
75   llvm::opt::DerivedArgList *
76   TranslateArgs(const llvm::opt::DerivedArgList &Args, StringRef BoundArch,
77                 Action::OffloadKind DeviceOffloadKind) const override;
78   void
79   addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
80                         llvm::opt::ArgStringList &CC1Args,
81                         Action::OffloadKind DeviceOffloadKind) const override;
82   void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const override;
83   CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override;
84   void
85   AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
86                             llvm::opt::ArgStringList &CC1Args) const override;
87   void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs,
88                            llvm::opt::ArgStringList &CC1Args) const override;
89 
90   SanitizerMask getSupportedSanitizers() const override;
91 
92   VersionTuple
93   computeMSVCVersion(const Driver *D,
94                      const llvm::opt::ArgList &Args) const override;
95 
96   const ToolChain &HostTC;
97 
98 protected:
99   Tool *buildLinker() const override;
100 };
101 
102 } // end namespace toolchains
103 } // end namespace driver
104 } // end namespace clang
105 
106 #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_AMDGPUOPENMP_H
107