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