aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Driver
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Driver')
-rw-r--r--clang/lib/Driver/ToolChains/AMDGPU.cpp15
-rw-r--r--clang/lib/Driver/ToolChains/Clang.cpp24
-rw-r--r--clang/lib/Driver/ToolChains/HLSL.cpp4
-rw-r--r--clang/lib/Driver/ToolChains/HLSL.h2
4 files changed, 44 insertions, 1 deletions
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index 654a382..1a243fe 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -22,6 +22,7 @@
#include "llvm/Support/Process.h"
#include "llvm/Support/VirtualFileSystem.h"
#include "llvm/TargetParser/Host.h"
+#include "llvm/TargetParser/TargetParser.h"
#include <optional>
#include <system_error>
@@ -1095,9 +1096,21 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption(
if (K != SanitizerKind::Address)
return true;
+ // Check 'xnack+' availability by default
+ llvm::StringRef Processor =
+ getProcessorFromTargetID(TC.getTriple(), TargetID);
+ auto ProcKind = TC.getTriple().isAMDGCN()
+ ? llvm::AMDGPU::parseArchAMDGCN(Processor)
+ : llvm::AMDGPU::parseArchR600(Processor);
+ auto Features = TC.getTriple().isAMDGCN()
+ ? llvm::AMDGPU::getArchAttrAMDGCN(ProcKind)
+ : llvm::AMDGPU::getArchAttrR600(ProcKind);
+ if (Features & llvm::AMDGPU::FEATURE_XNACK_ALWAYS)
+ return false;
+
+ // Look for the xnack feature in TargetID
llvm::StringMap<bool> FeatureMap;
auto OptionalGpuArch = parseTargetID(TC.getTriple(), TargetID, &FeatureMap);
-
assert(OptionalGpuArch && "Invalid Target ID");
(void)OptionalGpuArch;
auto Loc = FeatureMap.find("xnack");
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index 30d3e52..e20963a 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -8266,6 +8266,30 @@ void Clang::AddClangCLArgs(const ArgList &Args, types::ID InputType,
<< "/kernel";
}
+ if (const Arg *A = Args.getLastArg(options::OPT__SLASH_vlen,
+ options::OPT__SLASH_vlen_EQ_256,
+ options::OPT__SLASH_vlen_EQ_512)) {
+ llvm::Triple::ArchType AT = getToolChain().getArch();
+ StringRef Default = AT == llvm::Triple::x86 ? "IA32" : "SSE2";
+ StringRef Arch = Args.getLastArgValue(options::OPT__SLASH_arch, Default);
+
+ if (A->getOption().matches(options::OPT__SLASH_vlen_EQ_512)) {
+ if (Arch == "AVX512F" || Arch == "AVX512")
+ CmdArgs.push_back("-mprefer-vector-width=512");
+ else
+ D.Diag(diag::warn_drv_argument_not_allowed_with)
+ << "/vlen=512" << std::string("/arch:").append(Arch);
+ }
+
+ if (A->getOption().matches(options::OPT__SLASH_vlen_EQ_256)) {
+ if (Arch == "AVX512F" || Arch == "AVX512")
+ CmdArgs.push_back("-mprefer-vector-width=256");
+ else if (Arch != "AVX" && Arch != "AVX2")
+ D.Diag(diag::warn_drv_argument_not_allowed_with)
+ << "/vlen=256" << std::string("/arch:").append(Arch);
+ }
+ }
+
Arg *MostGeneralArg = Args.getLastArg(options::OPT__SLASH_vmg);
Arg *BestCaseArg = Args.getLastArg(options::OPT__SLASH_vmb);
if (MostGeneralArg && BestCaseArg)
diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp
index 8d3fba7..5d7221b 100644
--- a/clang/lib/Driver/ToolChains/HLSL.cpp
+++ b/clang/lib/Driver/ToolChains/HLSL.cpp
@@ -567,3 +567,7 @@ bool HLSLToolChain::isLastJob(DerivedArgList &Args,
// output to the result file.
return true;
}
+
+void HLSLToolChain::addClangWarningOptions(ArgStringList &CC1Args) const {
+ CC1Args.push_back("-Wconversion");
+}
diff --git a/clang/lib/Driver/ToolChains/HLSL.h b/clang/lib/Driver/ToolChains/HLSL.h
index 3aed904..5bf385e 100644
--- a/clang/lib/Driver/ToolChains/HLSL.h
+++ b/clang/lib/Driver/ToolChains/HLSL.h
@@ -91,6 +91,8 @@ public:
// Set default DWARF version to 4 for DXIL uses version 4.
unsigned GetDefaultDwarfVersion() const override { return 4; }
+ void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const override;
+
private:
mutable std::unique_ptr<tools::hlsl::Validator> Validator;
mutable std::unique_ptr<tools::hlsl::MetalConverter> MetalConverter;