Skip to content

Commit 75026bb

Browse files
make the changes for enabling new offloading model by default
1 parent 74ffed8 commit 75026bb

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
@@ -1565,6 +1565,32 @@ static void appendOneArg(InputArgList &Args, const Arg *Opt) {
15651565
}
15661566
}
15671567

1568+
// Utility function to parse all devices passed via -fsycl-targets.
1569+
// Return 'true' for JIT, AOT Intel CPU/GPUs and NVidia/AMD targets.
1570+
// Otherwise return 'false'.
1571+
bool Driver::GetUseNewOffloadDriverForSYCLOffload(Compilation &C,
1572+
const ArgList &Args) const {
1573+
// Check only if enabled with -fsycl
1574+
if (!Args.hasFlag(options::OPT_fsycl, options::OPT_fno_sycl, false))
1575+
return false;
1576+
1577+
if (Args.hasFlag(options::OPT_no_offload_new_driver,
1578+
options::OPT_offload_new_driver, false))
1579+
return false;
1580+
1581+
if (Args.hasArg(options::OPT_fintelfpga))
1582+
return false;
1583+
1584+
if (const Arg *A = Args.getLastArg(options::OPT_fsycl_targets_EQ)) {
1585+
for (const char *Val : A->getValues()) {
1586+
llvm::Triple TT(C.getDriver().getSYCLDeviceTriple(Val));
1587+
if ((!TT.isSPIROrSPIRV()) || TT.isSPIRAOT())
1588+
return false;
1589+
}
1590+
}
1591+
return true;
1592+
}
1593+
15681594
bool Driver::readConfigFile(StringRef FileName,
15691595
llvm::cl::ExpansionContext &ExpCtx) {
15701596
// Try opening the given file.
@@ -2195,12 +2221,12 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
21952221
// Use new offloading path for OpenMP. This is disabled as the SYCL
21962222
// offloading path is not properly setup to use the updated device linking
21972223
// scheme.
2198-
if ((C->isOffloadingHostKind(Action::OFK_OpenMP) &&
2199-
TranslatedArgs->hasFlag(options::OPT_fopenmp_new_driver,
2200-
options::OPT_no_offload_new_driver, true)) ||
2224+
if (C->isOffloadingHostKind(Action::OFK_OpenMP) ||
22012225
TranslatedArgs->hasFlag(options::OPT_offload_new_driver,
2202-
options::OPT_no_offload_new_driver, false))
2226+
options::OPT_no_offload_new_driver, false) ||
2227+
GetUseNewOffloadDriverForSYCLOffload(*C, *TranslatedArgs)) {
22032228
setUseNewOffloadingDriver();
2229+
}
22042230

22052231
// Construct the list of abstract actions to perform for this compilation. On
22062232
// MachO targets this uses the driver-driver and universal actions.
@@ -7085,7 +7111,8 @@ void Driver::BuildDefaultActions(Compilation &C, DerivedArgList &Args,
70857111
options::OPT_fno_offload_via_llvm, false) ||
70867112
Args.hasFlag(options::OPT_offload_new_driver,
70877113
options::OPT_no_offload_new_driver,
7088-
C.isOffloadingHostKind(Action::OFK_Cuda));
7114+
C.isOffloadingHostKind(Action::OFK_Cuda)) ||
7115+
GetUseNewOffloadDriverForSYCLOffload(C, Args);
70897116

70907117
bool HIPNoRDC =
70917118
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
@@ -5233,7 +5233,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
52335233
(JA.isHostOffloading(C.getActiveOffloadKinds()) &&
52345234
Args.hasFlag(options::OPT_offload_new_driver,
52355235
options::OPT_no_offload_new_driver,
5236-
C.isOffloadingHostKind(Action::OFK_Cuda)));
5236+
C.isOffloadingHostKind(Action::OFK_Cuda))) ||
5237+
(JA.isHostOffloading(Action::OFK_SYCL) &&
5238+
C.getDriver().GetUseNewOffloadDriverForSYCLOffload(C, Args));
52375239

52385240
bool IsRDCMode =
52395241
Args.hasFlag(options::OPT_fgpu_rdc, options::OPT_fno_gpu_rdc, IsSYCL);

0 commit comments

Comments
 (0)