Skip to content

Commit 982225f

Browse files
make the changes for enabling new offloading model by default
1 parent a3f4959 commit 982225f

File tree

3 files changed

+42
-6
lines changed

3 files changed

+42
-6
lines changed

clang/include/clang/Driver/Driver.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -626,6 +626,13 @@ class Driver {
626626
/// @name Helper Methods
627627
/// @{
628628

629+
/// Utility function to parse all devices passed via -fsycl-targets.
630+
/// Return 'true' for JIT, AOT Intel CPU/GPUs and NVidia/AMD targets.
631+
/// Otherwise return 'false'.
632+
bool
633+
GetUseNewOffloadDriverForSYCLOffload(Compilation &C,
634+
const llvm::opt::ArgList &Args) const;
635+
629636
/// getSYCLDeviceTriple - Returns the SYCL device triple for the
630637
/// specified subarch
631638
// TODO: Additional Arg input parameter is for diagnostic output information

clang/lib/Driver/Driver.cpp

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1556,6 +1556,32 @@ static void appendOneArg(InputArgList &Args, const Arg *Opt) {
15561556
}
15571557
}
15581558

1559+
// Utility function to parse all devices passed via -fsycl-targets.
1560+
// Return 'true' for JIT, AOT Intel CPU/GPUs and NVidia/AMD targets.
1561+
// Otherwise return 'false'.
1562+
bool Driver::GetUseNewOffloadDriverForSYCLOffload(Compilation &C,
1563+
const ArgList &Args) const {
1564+
// Check only if enabled with -fsycl
1565+
if (!Args.hasFlag(options::OPT_fsycl, options::OPT_fno_sycl, false))
1566+
return false;
1567+
1568+
if (Args.hasFlag(options::OPT_no_offload_new_driver,
1569+
options::OPT_offload_new_driver, false))
1570+
return false;
1571+
1572+
if (Args.hasArg(options::OPT_fintelfpga))
1573+
return false;
1574+
1575+
if (const Arg *A = Args.getLastArg(options::OPT_fsycl_targets_EQ)) {
1576+
for (const char *Val : A->getValues()) {
1577+
llvm::Triple TT(C.getDriver().getSYCLDeviceTriple(Val));
1578+
if ((!TT.isSPIROrSPIRV()) || TT.isSPIRAOT())
1579+
return false;
1580+
}
1581+
}
1582+
return true;
1583+
}
1584+
15591585
bool Driver::readConfigFile(StringRef FileName,
15601586
llvm::cl::ExpansionContext &ExpCtx) {
15611587
// Try opening the given file.
@@ -2186,12 +2212,12 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
21862212
// Use new offloading path for OpenMP. This is disabled as the SYCL
21872213
// offloading path is not properly setup to use the updated device linking
21882214
// scheme.
2189-
if ((C->isOffloadingHostKind(Action::OFK_OpenMP) &&
2190-
TranslatedArgs->hasFlag(options::OPT_fopenmp_new_driver,
2191-
options::OPT_no_offload_new_driver, true)) ||
2215+
if (C->isOffloadingHostKind(Action::OFK_OpenMP) ||
21922216
TranslatedArgs->hasFlag(options::OPT_offload_new_driver,
2193-
options::OPT_no_offload_new_driver, false))
2217+
options::OPT_no_offload_new_driver, false) ||
2218+
GetUseNewOffloadDriverForSYCLOffload(*C, *TranslatedArgs)) {
21942219
setUseNewOffloadingDriver();
2220+
}
21952221

21962222
// Construct the list of abstract actions to perform for this compilation. On
21972223
// MachO targets this uses the driver-driver and universal actions.
@@ -7080,7 +7106,8 @@ void Driver::BuildDefaultActions(Compilation &C, DerivedArgList &Args,
70807106
options::OPT_fno_offload_via_llvm, false) ||
70817107
Args.hasFlag(options::OPT_offload_new_driver,
70827108
options::OPT_no_offload_new_driver,
7083-
C.isOffloadingHostKind(Action::OFK_Cuda));
7109+
C.isOffloadingHostKind(Action::OFK_Cuda)) ||
7110+
GetUseNewOffloadDriverForSYCLOffload(C, Args);
70847111

70857112
bool HIPNoRDC =
70867113
C.isOffloadingHostKind(Action::OFK_HIP) &&

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5289,7 +5289,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
52895289
(JA.isHostOffloading(C.getActiveOffloadKinds()) &&
52905290
Args.hasFlag(options::OPT_offload_new_driver,
52915291
options::OPT_no_offload_new_driver,
5292-
C.isOffloadingHostKind(Action::OFK_Cuda)));
5292+
C.isOffloadingHostKind(Action::OFK_Cuda))) ||
5293+
(JA.isHostOffloading(Action::OFK_SYCL) &&
5294+
C.getDriver().GetUseNewOffloadDriverForSYCLOffload(C, Args));
52935295

52945296
bool IsRDCMode =
52955297
Args.hasFlag(options::OPT_fgpu_rdc, options::OPT_fno_gpu_rdc, IsSYCL);

0 commit comments

Comments
 (0)