@@ -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+
15591585bool 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) &&
0 commit comments