brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · caf6924 Raw
104 lines · c
1//===--- HIPSPV.h - HIP ToolChain Implementations ---------------*- 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-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HIPSPV_H10#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HIPSPV_H11 12#include "SPIRV.h"13#include "clang/Driver/Tool.h"14#include "clang/Driver/ToolChain.h"15 16namespace clang {17namespace driver {18namespace tools {19namespace HIPSPV {20 21// Runs llvm-link/opt/llc/lld, which links multiple LLVM bitcode, together with22// device library, then compiles it to SPIR-V in a shared object.23class LLVM_LIBRARY_VISIBILITY Linker final : public Tool {24public:25  Linker(const ToolChain &TC) : Tool("HIPSPV::Linker", "hipspv-link", TC) {}26 27  bool hasIntegratedCPP() const override { return false; }28 29  void ConstructJob(Compilation &C, const JobAction &JA,30                    const InputInfo &Output, const InputInfoList &Inputs,31                    const llvm::opt::ArgList &TCArgs,32                    const char *LinkingOutput) const override;33 34private:35  void constructLinkAndEmitSpirvCommand(Compilation &C, const JobAction &JA,36                                        const InputInfoList &Inputs,37                                        const InputInfo &Output,38                                        const llvm::opt::ArgList &Args) const;39};40 41} // namespace HIPSPV42} // namespace tools43 44namespace toolchains {45 46class LLVM_LIBRARY_VISIBILITY HIPSPVToolChain final : public ToolChain {47public:48  HIPSPVToolChain(const Driver &D, const llvm::Triple &Triple,49                  const ToolChain &HostTC, const llvm::opt::ArgList &Args);50 51  const llvm::Triple *getAuxTriple() const override {52    return &HostTC.getTriple();53  }54 55  void56  addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,57                        llvm::opt::ArgStringList &CC1Args,58                        Action::OffloadKind DeviceOffloadKind) const override;59  void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const override;60  CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override;61  void62  AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,63                            llvm::opt::ArgStringList &CC1Args) const override;64  void AddClangCXXStdlibIncludeArgs(65      const llvm::opt::ArgList &Args,66      llvm::opt::ArgStringList &CC1Args) const override;67  void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs,68                           llvm::opt::ArgStringList &CC1Args) const override;69  void AddHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs,70                         llvm::opt::ArgStringList &CC1Args) const override;71  llvm::SmallVector<BitCodeLibraryInfo, 12>72  getDeviceLibs(const llvm::opt::ArgList &Args,73                const Action::OffloadKind DeviceOffloadKind) const override;74 75  SanitizerMask getSupportedSanitizers() const override;76 77  VersionTuple78  computeMSVCVersion(const Driver *D,79                     const llvm::opt::ArgList &Args) const override;80 81  void adjustDebugInfoKind(llvm::codegenoptions::DebugInfoKind &DebugInfoKind,82                           const llvm::opt::ArgList &Args) const override;83  bool IsMathErrnoDefault() const override { return false; }84  bool useIntegratedAs() const override { return true; }85  bool isCrossCompiling() const override { return true; }86  bool isPICDefault() const override { return false; }87  bool isPIEDefault(const llvm::opt::ArgList &Args) const override {88    return false;89  }90  bool isPICDefaultForced() const override { return false; }91  bool SupportsProfiling() const override { return false; }92 93  const ToolChain &HostTC;94 95protected:96  Tool *buildLinker() const override;97};98 99} // end namespace toolchains100} // end namespace driver101} // end namespace clang102 103#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HIPSPV_H104