From 175e42303bb2a4253c65126666b1ae05b32b0004 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Thu, 26 Mar 2020 14:31:00 -0400 Subject: [PATCH] AMDGPU: Make HIPToolChain a subclass of AMDGPUToolChain This fixes some code duplication. This is also a step towards consolidating builtin library handling. --- clang/lib/Driver/ToolChains/HIP.cpp | 30 +----------------------------- clang/lib/Driver/ToolChains/HIP.h | 8 ++------ 2 files changed, 3 insertions(+), 35 deletions(-) diff --git a/clang/lib/Driver/ToolChains/HIP.cpp b/clang/lib/Driver/ToolChains/HIP.cpp index 0a9ec68..d21b3f5 100644 --- a/clang/lib/Driver/ToolChains/HIP.cpp +++ b/clang/lib/Driver/ToolChains/HIP.cpp @@ -268,40 +268,12 @@ void AMDGCN::Linker::ConstructJob(Compilation &C, const JobAction &JA, HIPToolChain::HIPToolChain(const Driver &D, const llvm::Triple &Triple, const ToolChain &HostTC, const ArgList &Args) - : ToolChain(D, Triple, Args), HostTC(HostTC) { + : AMDGPUToolChain(D, Triple, Args), HostTC(HostTC) { // Lookup binaries into the driver directory, this is used to // discover the clang-offload-bundler executable. getProgramPaths().push_back(getDriver().Dir); } -// FIXME: Duplicated in AMDGPUToolChain -llvm::DenormalMode HIPToolChain::getDefaultDenormalModeForType( - const llvm::opt::ArgList &DriverArgs, Action::OffloadKind DeviceOffloadKind, - const llvm::fltSemantics *FPType) const { - // Denormals should always be enabled for f16 and f64. - if (!FPType || FPType != &llvm::APFloat::IEEEsingle()) - return llvm::DenormalMode::getIEEE(); - - if (DeviceOffloadKind == Action::OFK_Cuda) { - if (FPType && FPType == &llvm::APFloat::IEEEsingle() && - DriverArgs.hasFlag(options::OPT_fcuda_flush_denormals_to_zero, - options::OPT_fno_cuda_flush_denormals_to_zero, - false)) - return llvm::DenormalMode::getPreserveSign(); - } - - const StringRef GpuArch = DriverArgs.getLastArgValue(options::OPT_mcpu_EQ); - auto Kind = llvm::AMDGPU::parseArchAMDGCN(GpuArch); - - // TODO: There are way too many flags that change this. Do we need to check - // them all? - bool DAZ = DriverArgs.hasArg(options::OPT_cl_denorms_are_zero) || - !AMDGPUToolChain::getDefaultDenormsAreZeroForTarget(Kind); - // Outputs are flushed to zero, preserving sign - return DAZ ? llvm::DenormalMode::getPreserveSign() : - llvm::DenormalMode::getIEEE(); -} - void HIPToolChain::addClangTargetOptions( const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args, diff --git a/clang/lib/Driver/ToolChains/HIP.h b/clang/lib/Driver/ToolChains/HIP.h index 32eb870..b6a3a27 100644 --- a/clang/lib/Driver/ToolChains/HIP.h +++ b/clang/lib/Driver/ToolChains/HIP.h @@ -11,6 +11,7 @@ #include "clang/Driver/ToolChain.h" #include "clang/Driver/Tool.h" +#include "AMDGPU.h" namespace clang { namespace driver { @@ -72,7 +73,7 @@ private: namespace toolchains { -class LLVM_LIBRARY_VISIBILITY HIPToolChain : public ToolChain { +class LLVM_LIBRARY_VISIBILITY HIPToolChain final : public AMDGPUToolChain { public: HIPToolChain(const Driver &D, const llvm::Triple &Triple, const ToolChain &HostTC, const llvm::opt::ArgList &Args); @@ -115,11 +116,6 @@ public: unsigned GetDefaultDwarfVersion() const override { return 4; } - llvm::DenormalMode getDefaultDenormalModeForType( - const llvm::opt::ArgList &DriverArgs, - Action::OffloadKind DeviceOffloadKind, - const llvm::fltSemantics *FPType = nullptr) const override; - const ToolChain &HostTC; protected: -- 2.7.4