diff options
author | vitalyisaev <vitalyisaev@yandex-team.com> | 2023-06-29 10:00:50 +0300 |
---|---|---|
committer | vitalyisaev <vitalyisaev@yandex-team.com> | 2023-06-29 10:00:50 +0300 |
commit | 6ffe9e53658409f212834330e13564e4952558f6 (patch) | |
tree | 85b1e00183517648b228aafa7c8fb07f5276f419 /contrib/libs/clang14/lib/Driver/ToolChains/AMDGPU.h | |
parent | 726057070f9c5a91fc10fde0d5024913d10f1ab9 (diff) | |
download | ydb-6ffe9e53658409f212834330e13564e4952558f6.tar.gz |
YQ Connector: support managed ClickHouse
Со стороны dqrun можно обратиться к инстансу коннектора, который работает на streaming стенде, и извлечь данные из облачного CH.
Diffstat (limited to 'contrib/libs/clang14/lib/Driver/ToolChains/AMDGPU.h')
-rw-r--r-- | contrib/libs/clang14/lib/Driver/ToolChains/AMDGPU.h | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/contrib/libs/clang14/lib/Driver/ToolChains/AMDGPU.h b/contrib/libs/clang14/lib/Driver/ToolChains/AMDGPU.h new file mode 100644 index 0000000000..156bfd1fbd --- /dev/null +++ b/contrib/libs/clang14/lib/Driver/ToolChains/AMDGPU.h @@ -0,0 +1,152 @@ +//===--- AMDGPU.h - AMDGPU 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_AMDGPU_H +#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_AMDGPU_H + +#include "Gnu.h" +#include "ROCm.h" +#include "clang/Basic/TargetID.h" +#include "clang/Driver/Options.h" +#include "clang/Driver/Tool.h" +#include "clang/Driver/ToolChain.h" +#include "llvm/ADT/SmallString.h" +#include "llvm/Support/TargetParser.h" + +#include <map> + +namespace clang { +namespace driver { + +namespace tools { +namespace amdgpu { + +class LLVM_LIBRARY_VISIBILITY Linker : public Tool { +public: + Linker(const ToolChain &TC) : Tool("amdgpu::Linker", "ld.lld", TC) {} + bool isLinkJob() const override { return true; } + 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; +}; + +void getAMDGPUTargetFeatures(const Driver &D, const llvm::Triple &Triple, + const llvm::opt::ArgList &Args, + std::vector<StringRef> &Features); + +} // end namespace amdgpu +} // end namespace tools + +namespace toolchains { + +class LLVM_LIBRARY_VISIBILITY AMDGPUToolChain : public Generic_ELF { +protected: + const std::map<options::ID, const StringRef> OptionsDefault; + + Tool *buildLinker() const override; + StringRef getOptionDefault(options::ID OptID) const { + auto opt = OptionsDefault.find(OptID); + assert(opt != OptionsDefault.end() && "No Default for Option"); + return opt->second; + } + +public: + AMDGPUToolChain(const Driver &D, const llvm::Triple &Triple, + const llvm::opt::ArgList &Args); + unsigned GetDefaultDwarfVersion() const override { return 5; } + bool IsIntegratedAssemblerDefault() const override { return true; } + bool IsMathErrnoDefault() const override { return false; } + + bool useIntegratedAs() const override { return true; } + bool isCrossCompiling() const override { return true; } + bool isPICDefault() const override { return false; } + bool isPIEDefault(const llvm::opt::ArgList &Args) const override { + return false; + } + bool isPICDefaultForced() const override { return false; } + bool SupportsProfiling() const override { return false; } + + 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; + + /// Return whether denormals should be flushed, and treated as 0 by default + /// for the subtarget. + static bool getDefaultDenormsAreZeroForTarget(llvm::AMDGPU::GPUKind GPUKind); + + llvm::DenormalMode getDefaultDenormalModeForType( + const llvm::opt::ArgList &DriverArgs, const JobAction &JA, + const llvm::fltSemantics *FPType = nullptr) const override; + + static bool isWave64(const llvm::opt::ArgList &DriverArgs, + llvm::AMDGPU::GPUKind Kind); + /// Needed for using lto. + bool HasNativeLLVMSupport() const override { + return true; + } + + /// Needed for translating LTO options. + const char *getDefaultLinker() const override { return "ld.lld"; } + + /// Should skip argument. + bool shouldSkipArgument(const llvm::opt::Arg *Arg) const; + + /// Uses amdgpu_arch tool to get arch of the system GPU. Will return error + /// if unable to find one. + llvm::Error getSystemGPUArch(const llvm::opt::ArgList &Args, + std::string &GPUArch) const; + +protected: + /// Check and diagnose invalid target ID specified by -mcpu. + virtual void checkTargetID(const llvm::opt::ArgList &DriverArgs) const; + + /// The struct type returned by getParsedTargetID. + struct ParsedTargetIDType { + Optional<std::string> OptionalTargetID; + Optional<std::string> OptionalGPUArch; + Optional<llvm::StringMap<bool>> OptionalFeatures; + }; + + /// Get target ID, GPU arch, and target ID features if the target ID is + /// specified and valid. + ParsedTargetIDType + getParsedTargetID(const llvm::opt::ArgList &DriverArgs) const; + + /// Get GPU arch from -mcpu without checking. + StringRef getGPUArch(const llvm::opt::ArgList &DriverArgs) const; + + llvm::Error detectSystemGPUs(const llvm::opt::ArgList &Args, + SmallVector<std::string, 1> &GPUArchs) const; +}; + +class LLVM_LIBRARY_VISIBILITY ROCMToolChain : public AMDGPUToolChain { +public: + ROCMToolChain(const Driver &D, const llvm::Triple &Triple, + const llvm::opt::ArgList &Args); + void + addClangTargetOptions(const llvm::opt::ArgList &DriverArgs, + llvm::opt::ArgStringList &CC1Args, + Action::OffloadKind DeviceOffloadKind) const override; + + // Returns a list of device library names shared by different languages + llvm::SmallVector<std::string, 12> + getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs, + const std::string &GPUArch) const; +}; + +} // end namespace toolchains +} // end namespace driver +} // end namespace clang + +#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_AMDGPU_H |