diff options
Diffstat (limited to 'clang/lib/Driver/ToolChains/HIP.h')
| -rw-r--r-- | clang/lib/Driver/ToolChains/HIP.h | 128 | 
1 files changed, 128 insertions, 0 deletions
diff --git a/clang/lib/Driver/ToolChains/HIP.h b/clang/lib/Driver/ToolChains/HIP.h new file mode 100644 index 000000000000..2d146ce5cc6f --- /dev/null +++ b/clang/lib/Driver/ToolChains/HIP.h @@ -0,0 +1,128 @@ +//===--- HIP.h - HIP ToolChain Implementations ------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HIP_H +#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HIP_H + +#include "clang/Driver/ToolChain.h" +#include "clang/Driver/Tool.h" + +namespace clang { +namespace driver { + +namespace tools { + +namespace AMDGCN { +  // Construct command for creating HIP fatbin. +  void constructHIPFatbinCommand(Compilation &C, const JobAction &JA, +                  StringRef OutputFileName, const InputInfoList &Inputs, +                  const llvm::opt::ArgList &TCArgs, const Tool& T); + +// Runs llvm-link/opt/llc/lld, which links multiple LLVM bitcode, together with +// device library, then compiles it to ISA in a shared object. +class LLVM_LIBRARY_VISIBILITY Linker : public Tool { +public: +  Linker(const ToolChain &TC) : Tool("AMDGCN::Linker", "amdgcn-link", TC) {} + +  bool hasIntegratedCPP() const override { return false; } + +  void ConstructJob(Compilation &C, const JobAction &JA, +                    const InputInfo &Output, const InputInfoList &Inputs, +                    const llvm::opt::ArgList &TCArgs, +                    const char *LinkingOutput) const override; + +private: +  /// \return llvm-link output file name. +  const char *constructLLVMLinkCommand(Compilation &C, const JobAction &JA, +                                       const InputInfoList &Inputs, +                                       const llvm::opt::ArgList &Args, +                                       llvm::StringRef SubArchName, +                                       llvm::StringRef OutputFilePrefix) const; + +  /// \return opt output file name. +  const char *constructOptCommand(Compilation &C, const JobAction &JA, +                                  const InputInfoList &Inputs, +                                  const llvm::opt::ArgList &Args, +                                  llvm::StringRef SubArchName, +                                  llvm::StringRef OutputFilePrefix, +                                  const char *InputFileName) const; + +  /// \return llc output file name. +  const char *constructLlcCommand(Compilation &C, const JobAction &JA, +                                  const InputInfoList &Inputs, +                                  const llvm::opt::ArgList &Args, +                                  llvm::StringRef SubArchName, +                                  llvm::StringRef OutputFilePrefix, +                                  const char *InputFileName, +                                  bool OutputIsAsm = false) const; + +  void constructLldCommand(Compilation &C, const JobAction &JA, +                           const InputInfoList &Inputs, const InputInfo &Output, +                           const llvm::opt::ArgList &Args, +                           const char *InputFileName) const; +}; + +} // end namespace AMDGCN +} // end namespace tools + +namespace toolchains { + +class LLVM_LIBRARY_VISIBILITY HIPToolChain : public ToolChain { +public: +  HIPToolChain(const Driver &D, const llvm::Triple &Triple, +                const ToolChain &HostTC, const llvm::opt::ArgList &Args); + +  const llvm::Triple *getAuxTriple() const override { +    return &HostTC.getTriple(); +  } + +  llvm::opt::DerivedArgList * +  TranslateArgs(const llvm::opt::DerivedArgList &Args, StringRef BoundArch, +                Action::OffloadKind DeviceOffloadKind) const override; +  void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs, +                             llvm::opt::ArgStringList &CC1Args, +                             Action::OffloadKind DeviceOffloadKind) const override; + +  bool useIntegratedAs() const override { return true; } +  bool isCrossCompiling() const override { return true; } +  bool isPICDefault() const override { return false; } +  bool isPIEDefault() const override { return false; } +  bool isPICDefaultForced() const override { return false; } +  bool SupportsProfiling() const override { return false; } +  bool IsMathErrnoDefault() const override { return false; } + +  void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const override; +  CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override; +  void +  AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs, +                            llvm::opt::ArgStringList &CC1Args) const override; +  void AddClangCXXStdlibIncludeArgs( +      const llvm::opt::ArgList &Args, +      llvm::opt::ArgStringList &CC1Args) const override; +  void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs, +                           llvm::opt::ArgStringList &CC1Args) const override; + +  SanitizerMask getSupportedSanitizers() const override; + +  VersionTuple +  computeMSVCVersion(const Driver *D, +                     const llvm::opt::ArgList &Args) const override; + +  unsigned GetDefaultDwarfVersion() const override { return 2; } + +  const ToolChain &HostTC; + +protected: +  Tool *buildLinker() const override; +}; + +} // end namespace toolchains +} // end namespace driver +} // end namespace clang + +#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HIP_H  | 
