Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions clang/include/clang/Driver/Driver.h
Original file line number Diff line number Diff line change
Expand Up @@ -586,9 +586,9 @@ class Driver {
/// @name Helper Methods
/// @{

/// MakeSYCLDeviceTriple - Returns the SYCL device triple for the
/// getSYCLDeviceTriple - Returns the SYCL device triple for the
/// specified subarch
llvm::Triple MakeSYCLDeviceTriple(StringRef TargetArch = "spir64") const;
llvm::Triple getSYCLDeviceTriple(StringRef TargetArch = "spir64") const;

/// PrintActions - Print the list of actions.
void PrintActions(const Compilation &C) const;
Expand Down
2 changes: 1 addition & 1 deletion clang/include/clang/Driver/ToolChain.h
Original file line number Diff line number Diff line change
Expand Up @@ -781,7 +781,7 @@ class ToolChain {
virtual void AddHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const;

/// Add arguments to use SYCL specific includes.
/// Add arguments to use system-specific SYCL includes.
virtual void AddSYCLIncludeArgs(const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const;

Expand Down
2 changes: 1 addition & 1 deletion clang/lib/Driver/Compilation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ static bool ActionFailed(const Action *A,

// CUDA/HIP/SYCL can have the same input source code compiled multiple times
// so do not compile again if there are already failures. It is OK to abort
// the CUDA pipeline on errors.
// the CUDA/HIP/SYCL pipeline on errors.
if (A->isOffloading(Action::OFK_Cuda) || A->isOffloading(Action::OFK_HIP) ||
A->isOffloading(Action::OFK_SYCL))
return true;
Expand Down
84 changes: 42 additions & 42 deletions clang/lib/Driver/Driver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -834,6 +834,7 @@ static bool isValidSYCLTriple(llvm::Triple T) {
}

static const char *getDefaultSYCLArch(Compilation &C) {
// If -fsycl is supplied we will assume SPIR-V
if (C.getDefaultToolChain().getTriple().getArch() == llvm::Triple::x86)
return "spir";
return "spir64";
Expand All @@ -847,7 +848,7 @@ static bool addSYCLDefaultTriple(Compilation &C,
if (C.getInputArgs().hasArg(options::OPT_fsycl_force_target_EQ))
return false;
llvm::Triple DefaultTriple =
C.getDriver().MakeSYCLDeviceTriple(getDefaultSYCLArch(C));
C.getDriver().getSYCLDeviceTriple(getDefaultSYCLArch(C));
for (const auto &SYCLTriple : SYCLTriples) {
if (SYCLTriple == DefaultTriple)
return false;
Expand Down Expand Up @@ -1079,22 +1080,21 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
// We need to generate a SYCL toolchain if the user specified -fsycl.
// If -fsycl is supplied without any of these we will assume SPIR-V.
// Use of -fsycl-device-only overrides -fsycl.
bool HasValidSYCLRuntime =
C.getInputArgs().hasFlag(options::OPT_fsycl, options::OPT_fno_sycl,
false) ||
C.getInputArgs().hasArg(options::OPT_fsycl_device_only);
bool IsSYCL = C.getInputArgs().hasFlag(options::OPT_fsycl,
options::OPT_fno_sycl, false) ||
C.getInputArgs().hasArg(options::OPT_fsycl_device_only);

Arg *SYCLfpga = C.getInputArgs().getLastArg(options::OPT_fintelfpga);

// Make -fintelfpga flag imply -fsycl.
if (SYCLfpga && !HasValidSYCLRuntime)
HasValidSYCLRuntime = true;
if (SYCLfpga && !IsSYCL)
IsSYCL = true;

// A mechanism for retrieving SYCL-specific options, erroring out
// if SYCL offloading wasn't enabled prior to that
auto getArgRequiringSYCLRuntime = [&](OptSpecifier OptId) -> Arg * {
Arg *SYCLArg = C.getInputArgs().getLastArg(OptId);
if (SYCLArg && !HasValidSYCLRuntime) {
if (SYCLArg && !IsSYCL) {
Diag(clang::diag::err_drv_expecting_fsycl_with_sycl_opt)
// Dropping the '=' symbol, which would otherwise pollute
// the diagnostics for the most of options
Expand Down Expand Up @@ -1123,7 +1123,7 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
<< "-fsycl-host-compiler";

auto argSYCLIncompatible = [&](OptSpecifier OptId) {
if (!HasValidSYCLRuntime)
if (!IsSYCL)
return;
if (Arg *IncompatArg = C.getInputArgs().getLastArg(OptId))
Diag(clang::diag::err_drv_argument_not_allowed_with)
Expand Down Expand Up @@ -1182,7 +1182,7 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
getArgRequiringSYCLRuntime(options::OPT_fsycl_force_target_EQ);
if (SYCLForceTarget) {
StringRef Val(SYCLForceTarget->getValue());
llvm::Triple TT(MakeSYCLDeviceTriple(Val));
llvm::Triple TT(getSYCLDeviceTriple(Val));
if (!isValidSYCLTriple(TT))
Diag(clang::diag::err_drv_invalid_sycl_target) << Val;
}
Expand Down Expand Up @@ -1240,7 +1240,7 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
continue;
}

llvm::Triple DeviceTriple(MakeSYCLDeviceTriple(UserTargetName));
llvm::Triple DeviceTriple(getSYCLDeviceTriple(UserTargetName));
if (!isValidSYCLTriple(DeviceTriple)) {
Diag(clang::diag::err_drv_invalid_sycl_target) << Val;
continue;
Expand Down Expand Up @@ -1271,7 +1271,7 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
}

// Make sure we don't have a duplicate triple.
std::string NormalizedName = MakeSYCLDeviceTriple(Val).normalize();
std::string NormalizedName = getSYCLDeviceTriple(Val).normalize();
auto Duplicate = FoundNormalizedTriples.find(NormalizedName);
if (Duplicate != FoundNormalizedTriples.end()) {
Diag(clang::diag::warn_drv_sycl_offload_target_duplicate)
Expand Down Expand Up @@ -1303,9 +1303,8 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
// Create a toolchain for each valid triple.
// We do not support SYCL offloading if any of the inputs is a
// .cu (for CUDA type) or .hip (for HIP type) file.
else if (HasValidSYCLRuntime &&
C.getInputArgs().hasArg(options::OPT_offload_arch_EQ) && !IsHIP &&
!IsCuda) {
else if (IsSYCL && C.getInputArgs().hasArg(options::OPT_offload_arch_EQ) &&
!IsHIP && !IsCuda) {
// SYCL offloading to AOT Targets with '--offload-arch'
// is currently enabled only with '--offload-new-driver' option.
// Emit a diagnostic if '--offload-arch' is invoked without
Expand Down Expand Up @@ -1352,7 +1351,7 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
getProcessorFromTargetID(*AMDTriple, Arch)))) {
DerivedArchs[AMDTriple->getTriple()].insert(Arch);
} else if (IsSYCLSupportedIntelCPUArch(StringToOffloadArchSYCL(Arch))) {
DerivedArchs[MakeSYCLDeviceTriple("spir64_x86_64").getTriple()].insert(
DerivedArchs[getSYCLDeviceTriple("spir64_x86_64").getTriple()].insert(
Arch);
} else if (IsSYCLSupportedIntelGPUArch(StringToOffloadArchSYCL(Arch))) {
StringRef IntelGPUArch;
Expand All @@ -1363,7 +1362,7 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
// offloading to Intel GPUs and the corresponding '-device' value passed
// to OCLOC.
IntelGPUArch = mapIntelGPUArchName(Arch).data();
DerivedArchs[MakeSYCLDeviceTriple("spir64_gen").getTriple()].insert(
DerivedArchs[getSYCLDeviceTriple("spir64_gen").getTriple()].insert(
IntelGPUArch);
} else {
Diag(clang::diag::err_drv_invalid_sycl_target) << Arch;
Expand All @@ -1381,7 +1380,7 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
SYCLTriples.insert(TripleAndArchs.first());

for (const auto &Val : SYCLTriples) {
llvm::Triple SYCLTargetTriple(MakeSYCLDeviceTriple(Val.getKey()));
llvm::Triple SYCLTargetTriple(getSYCLDeviceTriple(Val.getKey()));
std::string NormalizedName = SYCLTargetTriple.normalize();

// Make sure we don't have a duplicate triple.
Expand All @@ -1403,12 +1402,12 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
} else {
// If -fsycl is supplied without -fsycl-targets we will assume SPIR-V.
// For -fsycl-device-only, we also setup the implied triple as needed.
if (HasValidSYCLRuntime) {
if (IsSYCL) {
StringRef SYCLTargetArch = getDefaultSYCLArch(C);
if (SYCLfpga)
// Triple for -fintelfpga is spir64_fpga.
SYCLTargetArch = "spir64_fpga";
UniqueSYCLTriplesVec.push_back(MakeSYCLDeviceTriple(SYCLTargetArch));
UniqueSYCLTriplesVec.push_back(getSYCLDeviceTriple(SYCLTargetArch));
addSYCLDefaultTriple(C, UniqueSYCLTriplesVec);
}
}
Expand Down Expand Up @@ -2529,7 +2528,7 @@ void Driver::PrintHelp(bool ShowHidden) const {
VisibilityMask);
}

llvm::Triple Driver::MakeSYCLDeviceTriple(StringRef TargetArch) const {
llvm::Triple Driver::getSYCLDeviceTriple(StringRef TargetArch) const {
SmallVector<StringRef, 5> SYCLAlias = {
"spir", "spir64", "spir64_fpga", "spir64_x86_64",
"spir64_gen", "spirv32", "spirv64", "nvptx64"};
Expand Down Expand Up @@ -2557,13 +2556,13 @@ void Driver::PrintSYCLToolHelp(const Compilation &C) const {
StringRef AV(A->getValue());
llvm::Triple T;
if (AV == "gen" || AV == "all")
HelpArgs.push_back(std::make_tuple(MakeSYCLDeviceTriple("spir64_gen"),
HelpArgs.push_back(std::make_tuple(getSYCLDeviceTriple("spir64_gen"),
"ocloc", "--help", ""));
if (AV == "fpga" || AV == "all")
HelpArgs.push_back(std::make_tuple(MakeSYCLDeviceTriple("spir64_fpga"),
HelpArgs.push_back(std::make_tuple(getSYCLDeviceTriple("spir64_fpga"),
"aoc", "-help", "-sycl"));
if (AV == "x86_64" || AV == "all")
HelpArgs.push_back(std::make_tuple(MakeSYCLDeviceTriple("spir64_x86_64"),
HelpArgs.push_back(std::make_tuple(getSYCLDeviceTriple("spir64_x86_64"),
"opencl-aot", "--help", ""));
if (HelpArgs.empty()) {
C.getDriver().Diag(diag::err_drv_unsupported_option_argument)
Expand Down Expand Up @@ -3614,7 +3613,7 @@ static bool hasSYCLDefaultSection(Compilation &C, const StringRef &File) {
if (!(IsArchive || isObjectFile(File.str())))
return false;

llvm::Triple TT(C.getDriver().MakeSYCLDeviceTriple(getDefaultSYCLArch(C)));
llvm::Triple TT(C.getDriver().getSYCLDeviceTriple(getDefaultSYCLArch(C)));
// Checking uses -check-section option with the input file, no output
// file and the target triple being looked for.
const char *Targets =
Expand Down Expand Up @@ -3821,7 +3820,7 @@ bool Driver::checkForSYCLDefaultDevice(Compilation &C,
// or if -fsycl-targets isn't passed (that implies default device)
if (const Arg *A = Args.getLastArg(options::OPT_fsycl_targets_EQ)) {
for (const char *Val : A->getValues()) {
llvm::Triple TT(C.getDriver().MakeSYCLDeviceTriple(Val));
llvm::Triple TT(C.getDriver().getSYCLDeviceTriple(Val));
if ((TT.isSPIROrSPIRV()) && TT.getSubArch() == llvm::Triple::NoSubArch)
// Default triple found
return false;
Expand Down Expand Up @@ -6303,7 +6302,7 @@ class OffloadingActionBuilder final {
// There are a few different variants for FPGA, if we see one, just
// use the default FPGA triple to reduce possible match confusion.
if (Arch.compare(0, 4, "fpga") == 0)
Arch = C.getDriver().MakeSYCLDeviceTriple("spir64_fpga").str();
Arch = C.getDriver().getSYCLDeviceTriple("spir64_fpga").str();

if (std::find(UniqueSections.begin(), UniqueSections.end(), Arch) ==
UniqueSections.end())
Expand Down Expand Up @@ -6460,8 +6459,9 @@ class OffloadingActionBuilder final {
// Unrecognized, we have already diagnosed this earlier; skip.
continue;
// Add the proper -device value to the list.
GpuArchList.emplace_back(C.getDriver().MakeSYCLDeviceTriple(
"spir64_gen"), ValidDevice->data());
GpuArchList.emplace_back(
C.getDriver().getSYCLDeviceTriple("spir64_gen"),
ValidDevice->data());
UserTargetName = "spir64_gen";
} else if (auto ValidDevice =
gen::isGPUTarget<gen::NvidiaGPU>(Val)) {
Expand All @@ -6470,7 +6470,7 @@ class OffloadingActionBuilder final {
continue;
// Add the proper -device value to the list.
GpuArchList.emplace_back(
C.getDriver().MakeSYCLDeviceTriple("nvptx64-nvidia-cuda"),
C.getDriver().getSYCLDeviceTriple("nvptx64-nvidia-cuda"),
ValidDevice->data());
UserTargetName = "nvptx64-nvidia-cuda";
} else if (auto ValidDevice = gen::isGPUTarget<gen::AmdGPU>(Val)) {
Expand All @@ -6479,7 +6479,7 @@ class OffloadingActionBuilder final {
continue;
// Add the proper -device value to the list.
GpuArchList.emplace_back(
C.getDriver().MakeSYCLDeviceTriple("amdgcn-amd-amdhsa"),
C.getDriver().getSYCLDeviceTriple("amdgcn-amd-amdhsa"),
ValidDevice->data());
UserTargetName = "amdgcn-amd-amdhsa";
} else if (Val == "native_cpu") {
Expand All @@ -6490,7 +6490,7 @@ class OffloadingActionBuilder final {
continue;
}

llvm::Triple TT(C.getDriver().MakeSYCLDeviceTriple(Val));
llvm::Triple TT(C.getDriver().getSYCLDeviceTriple(Val));
std::string NormalizedName = TT.normalize();

// Make sure we don't have a duplicate triple.
Expand All @@ -6503,7 +6503,7 @@ class OffloadingActionBuilder final {
FoundNormalizedTriples[NormalizedName] = Val;

SYCLTripleList.push_back(
C.getDriver().MakeSYCLDeviceTriple(UserTargetName));
C.getDriver().getSYCLDeviceTriple(UserTargetName));
if (TT.getSubArch() == llvm::Triple::SPIRSubArch_fpga)
SYCLfpgaTriple = true;
// For user specified spir64_gen, add an empty device value as a
Expand Down Expand Up @@ -6567,7 +6567,7 @@ class OffloadingActionBuilder final {
// -fsycl -fintelfpga implies spir64_fpga
const char *SYCLTargetArch =
SYCLfpga ? "spir64_fpga" : getDefaultSYCLArch(C);
llvm::Triple TT = C.getDriver().MakeSYCLDeviceTriple(SYCLTargetArch);
llvm::Triple TT = C.getDriver().getSYCLDeviceTriple(SYCLTargetArch);
auto TCIt = llvm::find_if(
ToolChains, [&](auto &TC) { return TT == TC->getTriple(); });
assert(TCIt != ToolChains.end() &&
Expand Down Expand Up @@ -8372,14 +8372,14 @@ Action *Driver::ConstructPhaseAction(
return C.MakeAction<BackendJobAction>(Input, Output);
}
if (Args.hasArg(options::OPT_emit_llvm) ||
((TargetDeviceOffloadKind == Action::OFK_SYCL &&
C.getDriver().getUseNewOffloadingDriver()) ||
(((Input->getOffloadingToolChain() &&
Input->getOffloadingToolChain()->getTriple().isAMDGPU()) ||
TargetDeviceOffloadKind == Action::OFK_HIP) &&
(Args.hasFlag(options::OPT_fgpu_rdc, options::OPT_fno_gpu_rdc,
false) ||
TargetDeviceOffloadKind == Action::OFK_OpenMP)))) {
(TargetDeviceOffloadKind == Action::OFK_SYCL &&
C.getDriver().getUseNewOffloadingDriver()) ||
(((Input->getOffloadingToolChain() &&
Input->getOffloadingToolChain()->getTriple().isAMDGPU()) ||
TargetDeviceOffloadKind == Action::OFK_HIP) &&
(Args.hasFlag(options::OPT_fgpu_rdc, options::OPT_fno_gpu_rdc,
false) ||
TargetDeviceOffloadKind == Action::OFK_OpenMP))) {
types::ID Output =
Args.hasArg(options::OPT_S) &&
(TargetDeviceOffloadKind == Action::OFK_None ||
Expand Down
2 changes: 1 addition & 1 deletion clang/lib/Driver/ToolChain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1660,7 +1660,7 @@ llvm::opt::DerivedArgList *ToolChain::TranslateOffloadTargetArgs(
A->getOption().matches(options::OPT_Xsycl_frontend);
if (A->getOption().matches(options::OPT_Xsycl_frontend_EQ)) {
// Passing device args: -Xsycl-target-frontend=<triple> -opt=val.
if (getDriver().MakeSYCLDeviceTriple(A->getValue(0)) == getTriple())
if (getDriver().getSYCLDeviceTriple(A->getValue(0)) == getTriple())
Index = Args.getBaseArgs().MakeIndex(A->getValue(1));
else
continue;
Expand Down
Loading
Loading