@@ -834,6 +834,7 @@ static bool isValidSYCLTriple(llvm::Triple T) {
834834}
835835
836836static const char *getDefaultSYCLArch (Compilation &C) {
837+ // If -fsycl is supplied we will assume SPIR-V
837838 if (C.getDefaultToolChain ().getTriple ().getArch () == llvm::Triple::x86)
838839 return " spir" ;
839840 return " spir64" ;
@@ -847,7 +848,7 @@ static bool addSYCLDefaultTriple(Compilation &C,
847848 if (C.getInputArgs ().hasArg (options::OPT_fsycl_force_target_EQ))
848849 return false ;
849850 llvm::Triple DefaultTriple =
850- C.getDriver ().MakeSYCLDeviceTriple (getDefaultSYCLArch (C));
851+ C.getDriver ().getSYCLDeviceTriple (getDefaultSYCLArch (C));
851852 for (const auto &SYCLTriple : SYCLTriples) {
852853 if (SYCLTriple == DefaultTriple)
853854 return false ;
@@ -1079,22 +1080,21 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
10791080 // We need to generate a SYCL toolchain if the user specified -fsycl.
10801081 // If -fsycl is supplied without any of these we will assume SPIR-V.
10811082 // Use of -fsycl-device-only overrides -fsycl.
1082- bool HasValidSYCLRuntime =
1083- C.getInputArgs ().hasFlag (options::OPT_fsycl, options::OPT_fno_sycl,
1084- false ) ||
1085- C.getInputArgs ().hasArg (options::OPT_fsycl_device_only);
1083+ bool IsSYCL = C.getInputArgs ().hasFlag (options::OPT_fsycl,
1084+ options::OPT_fno_sycl, false ) ||
1085+ C.getInputArgs ().hasArg (options::OPT_fsycl_device_only);
10861086
10871087 Arg *SYCLfpga = C.getInputArgs ().getLastArg (options::OPT_fintelfpga);
10881088
10891089 // Make -fintelfpga flag imply -fsycl.
1090- if (SYCLfpga && !HasValidSYCLRuntime )
1091- HasValidSYCLRuntime = true ;
1090+ if (SYCLfpga && !IsSYCL )
1091+ IsSYCL = true ;
10921092
10931093 // A mechanism for retrieving SYCL-specific options, erroring out
10941094 // if SYCL offloading wasn't enabled prior to that
10951095 auto getArgRequiringSYCLRuntime = [&](OptSpecifier OptId) -> Arg * {
10961096 Arg *SYCLArg = C.getInputArgs ().getLastArg (OptId);
1097- if (SYCLArg && !HasValidSYCLRuntime ) {
1097+ if (SYCLArg && !IsSYCL ) {
10981098 Diag (clang::diag::err_drv_expecting_fsycl_with_sycl_opt)
10991099 // Dropping the '=' symbol, which would otherwise pollute
11001100 // the diagnostics for the most of options
@@ -1123,7 +1123,7 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
11231123 << " -fsycl-host-compiler" ;
11241124
11251125 auto argSYCLIncompatible = [&](OptSpecifier OptId) {
1126- if (!HasValidSYCLRuntime )
1126+ if (!IsSYCL )
11271127 return ;
11281128 if (Arg *IncompatArg = C.getInputArgs ().getLastArg (OptId))
11291129 Diag (clang::diag::err_drv_argument_not_allowed_with)
@@ -1182,7 +1182,7 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
11821182 getArgRequiringSYCLRuntime (options::OPT_fsycl_force_target_EQ);
11831183 if (SYCLForceTarget) {
11841184 StringRef Val (SYCLForceTarget->getValue ());
1185- llvm::Triple TT (MakeSYCLDeviceTriple (Val));
1185+ llvm::Triple TT (getSYCLDeviceTriple (Val));
11861186 if (!isValidSYCLTriple (TT))
11871187 Diag (clang::diag::err_drv_invalid_sycl_target) << Val;
11881188 }
@@ -1240,7 +1240,7 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
12401240 continue ;
12411241 }
12421242
1243- llvm::Triple DeviceTriple (MakeSYCLDeviceTriple (UserTargetName));
1243+ llvm::Triple DeviceTriple (getSYCLDeviceTriple (UserTargetName));
12441244 if (!isValidSYCLTriple (DeviceTriple)) {
12451245 Diag (clang::diag::err_drv_invalid_sycl_target) << Val;
12461246 continue ;
@@ -1271,7 +1271,7 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
12711271 }
12721272
12731273 // Make sure we don't have a duplicate triple.
1274- std::string NormalizedName = MakeSYCLDeviceTriple (Val).normalize ();
1274+ std::string NormalizedName = getSYCLDeviceTriple (Val).normalize ();
12751275 auto Duplicate = FoundNormalizedTriples.find (NormalizedName);
12761276 if (Duplicate != FoundNormalizedTriples.end ()) {
12771277 Diag (clang::diag::warn_drv_sycl_offload_target_duplicate)
@@ -1303,9 +1303,8 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
13031303 // Create a toolchain for each valid triple.
13041304 // We do not support SYCL offloading if any of the inputs is a
13051305 // .cu (for CUDA type) or .hip (for HIP type) file.
1306- else if (HasValidSYCLRuntime &&
1307- C.getInputArgs ().hasArg (options::OPT_offload_arch_EQ) && !IsHIP &&
1308- !IsCuda) {
1306+ else if (IsSYCL && C.getInputArgs ().hasArg (options::OPT_offload_arch_EQ) &&
1307+ !IsHIP && !IsCuda) {
13091308 // SYCL offloading to AOT Targets with '--offload-arch'
13101309 // is currently enabled only with '--offload-new-driver' option.
13111310 // Emit a diagnostic if '--offload-arch' is invoked without
@@ -1352,7 +1351,7 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
13521351 getProcessorFromTargetID (*AMDTriple, Arch)))) {
13531352 DerivedArchs[AMDTriple->getTriple ()].insert (Arch);
13541353 } else if (IsSYCLSupportedIntelCPUArch (StringToOffloadArchSYCL (Arch))) {
1355- DerivedArchs[MakeSYCLDeviceTriple (" spir64_x86_64" ).getTriple ()].insert (
1354+ DerivedArchs[getSYCLDeviceTriple (" spir64_x86_64" ).getTriple ()].insert (
13561355 Arch);
13571356 } else if (IsSYCLSupportedIntelGPUArch (StringToOffloadArchSYCL (Arch))) {
13581357 StringRef IntelGPUArch;
@@ -1363,7 +1362,7 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
13631362 // offloading to Intel GPUs and the corresponding '-device' value passed
13641363 // to OCLOC.
13651364 IntelGPUArch = mapIntelGPUArchName (Arch).data ();
1366- DerivedArchs[MakeSYCLDeviceTriple (" spir64_gen" ).getTriple ()].insert (
1365+ DerivedArchs[getSYCLDeviceTriple (" spir64_gen" ).getTriple ()].insert (
13671366 IntelGPUArch);
13681367 } else {
13691368 Diag (clang::diag::err_drv_invalid_sycl_target) << Arch;
@@ -1381,7 +1380,7 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
13811380 SYCLTriples.insert (TripleAndArchs.first ());
13821381
13831382 for (const auto &Val : SYCLTriples) {
1384- llvm::Triple SYCLTargetTriple (MakeSYCLDeviceTriple (Val.getKey ()));
1383+ llvm::Triple SYCLTargetTriple (getSYCLDeviceTriple (Val.getKey ()));
13851384 std::string NormalizedName = SYCLTargetTriple.normalize ();
13861385
13871386 // Make sure we don't have a duplicate triple.
@@ -1403,12 +1402,12 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C,
14031402 } else {
14041403 // If -fsycl is supplied without -fsycl-targets we will assume SPIR-V.
14051404 // For -fsycl-device-only, we also setup the implied triple as needed.
1406- if (HasValidSYCLRuntime ) {
1405+ if (IsSYCL ) {
14071406 StringRef SYCLTargetArch = getDefaultSYCLArch (C);
14081407 if (SYCLfpga)
14091408 // Triple for -fintelfpga is spir64_fpga.
14101409 SYCLTargetArch = " spir64_fpga" ;
1411- UniqueSYCLTriplesVec.push_back (MakeSYCLDeviceTriple (SYCLTargetArch));
1410+ UniqueSYCLTriplesVec.push_back (getSYCLDeviceTriple (SYCLTargetArch));
14121411 addSYCLDefaultTriple (C, UniqueSYCLTriplesVec);
14131412 }
14141413 }
@@ -2529,7 +2528,7 @@ void Driver::PrintHelp(bool ShowHidden) const {
25292528 VisibilityMask);
25302529}
25312530
2532- llvm::Triple Driver::MakeSYCLDeviceTriple (StringRef TargetArch) const {
2531+ llvm::Triple Driver::getSYCLDeviceTriple (StringRef TargetArch) const {
25332532 SmallVector<StringRef, 5 > SYCLAlias = {
25342533 " spir" , " spir64" , " spir64_fpga" , " spir64_x86_64" ,
25352534 " spir64_gen" , " spirv32" , " spirv64" , " nvptx64" };
@@ -2557,13 +2556,13 @@ void Driver::PrintSYCLToolHelp(const Compilation &C) const {
25572556 StringRef AV (A->getValue ());
25582557 llvm::Triple T;
25592558 if (AV == " gen" || AV == " all" )
2560- HelpArgs.push_back (std::make_tuple (MakeSYCLDeviceTriple (" spir64_gen" ),
2559+ HelpArgs.push_back (std::make_tuple (getSYCLDeviceTriple (" spir64_gen" ),
25612560 " ocloc" , " --help" , " " ));
25622561 if (AV == " fpga" || AV == " all" )
2563- HelpArgs.push_back (std::make_tuple (MakeSYCLDeviceTriple (" spir64_fpga" ),
2562+ HelpArgs.push_back (std::make_tuple (getSYCLDeviceTriple (" spir64_fpga" ),
25642563 " aoc" , " -help" , " -sycl" ));
25652564 if (AV == " x86_64" || AV == " all" )
2566- HelpArgs.push_back (std::make_tuple (MakeSYCLDeviceTriple (" spir64_x86_64" ),
2565+ HelpArgs.push_back (std::make_tuple (getSYCLDeviceTriple (" spir64_x86_64" ),
25672566 " opencl-aot" , " --help" , " " ));
25682567 if (HelpArgs.empty ()) {
25692568 C.getDriver ().Diag (diag::err_drv_unsupported_option_argument)
@@ -3614,7 +3613,7 @@ static bool hasSYCLDefaultSection(Compilation &C, const StringRef &File) {
36143613 if (!(IsArchive || isObjectFile (File.str ())))
36153614 return false ;
36163615
3617- llvm::Triple TT (C.getDriver ().MakeSYCLDeviceTriple (getDefaultSYCLArch (C)));
3616+ llvm::Triple TT (C.getDriver ().getSYCLDeviceTriple (getDefaultSYCLArch (C)));
36183617 // Checking uses -check-section option with the input file, no output
36193618 // file and the target triple being looked for.
36203619 const char *Targets =
@@ -3821,7 +3820,7 @@ bool Driver::checkForSYCLDefaultDevice(Compilation &C,
38213820 // or if -fsycl-targets isn't passed (that implies default device)
38223821 if (const Arg *A = Args.getLastArg (options::OPT_fsycl_targets_EQ)) {
38233822 for (const char *Val : A->getValues ()) {
3824- llvm::Triple TT (C.getDriver ().MakeSYCLDeviceTriple (Val));
3823+ llvm::Triple TT (C.getDriver ().getSYCLDeviceTriple (Val));
38253824 if ((TT.isSPIROrSPIRV ()) && TT.getSubArch () == llvm::Triple::NoSubArch)
38263825 // Default triple found
38273826 return false ;
@@ -6303,7 +6302,7 @@ class OffloadingActionBuilder final {
63036302 // There are a few different variants for FPGA, if we see one, just
63046303 // use the default FPGA triple to reduce possible match confusion.
63056304 if (Arch.compare (0 , 4 , " fpga" ) == 0 )
6306- Arch = C.getDriver ().MakeSYCLDeviceTriple (" spir64_fpga" ).str ();
6305+ Arch = C.getDriver ().getSYCLDeviceTriple (" spir64_fpga" ).str ();
63076306
63086307 if (std::find (UniqueSections.begin (), UniqueSections.end (), Arch) ==
63096308 UniqueSections.end ())
@@ -6460,8 +6459,9 @@ class OffloadingActionBuilder final {
64606459 // Unrecognized, we have already diagnosed this earlier; skip.
64616460 continue ;
64626461 // Add the proper -device value to the list.
6463- GpuArchList.emplace_back (C.getDriver ().MakeSYCLDeviceTriple (
6464- " spir64_gen" ), ValidDevice->data ());
6462+ GpuArchList.emplace_back (
6463+ C.getDriver ().getSYCLDeviceTriple (" spir64_gen" ),
6464+ ValidDevice->data ());
64656465 UserTargetName = " spir64_gen" ;
64666466 } else if (auto ValidDevice =
64676467 gen::isGPUTarget<gen::NvidiaGPU>(Val)) {
@@ -6470,7 +6470,7 @@ class OffloadingActionBuilder final {
64706470 continue ;
64716471 // Add the proper -device value to the list.
64726472 GpuArchList.emplace_back (
6473- C.getDriver ().MakeSYCLDeviceTriple (" nvptx64-nvidia-cuda" ),
6473+ C.getDriver ().getSYCLDeviceTriple (" nvptx64-nvidia-cuda" ),
64746474 ValidDevice->data ());
64756475 UserTargetName = " nvptx64-nvidia-cuda" ;
64766476 } else if (auto ValidDevice = gen::isGPUTarget<gen::AmdGPU>(Val)) {
@@ -6479,7 +6479,7 @@ class OffloadingActionBuilder final {
64796479 continue ;
64806480 // Add the proper -device value to the list.
64816481 GpuArchList.emplace_back (
6482- C.getDriver ().MakeSYCLDeviceTriple (" amdgcn-amd-amdhsa" ),
6482+ C.getDriver ().getSYCLDeviceTriple (" amdgcn-amd-amdhsa" ),
64836483 ValidDevice->data ());
64846484 UserTargetName = " amdgcn-amd-amdhsa" ;
64856485 } else if (Val == " native_cpu" ) {
@@ -6490,7 +6490,7 @@ class OffloadingActionBuilder final {
64906490 continue ;
64916491 }
64926492
6493- llvm::Triple TT (C.getDriver ().MakeSYCLDeviceTriple (Val));
6493+ llvm::Triple TT (C.getDriver ().getSYCLDeviceTriple (Val));
64946494 std::string NormalizedName = TT.normalize ();
64956495
64966496 // Make sure we don't have a duplicate triple.
@@ -6503,7 +6503,7 @@ class OffloadingActionBuilder final {
65036503 FoundNormalizedTriples[NormalizedName] = Val;
65046504
65056505 SYCLTripleList.push_back (
6506- C.getDriver ().MakeSYCLDeviceTriple (UserTargetName));
6506+ C.getDriver ().getSYCLDeviceTriple (UserTargetName));
65076507 if (TT.getSubArch () == llvm::Triple::SPIRSubArch_fpga)
65086508 SYCLfpgaTriple = true ;
65096509 // For user specified spir64_gen, add an empty device value as a
@@ -6567,7 +6567,7 @@ class OffloadingActionBuilder final {
65676567 // -fsycl -fintelfpga implies spir64_fpga
65686568 const char *SYCLTargetArch =
65696569 SYCLfpga ? " spir64_fpga" : getDefaultSYCLArch (C);
6570- llvm::Triple TT = C.getDriver ().MakeSYCLDeviceTriple (SYCLTargetArch);
6570+ llvm::Triple TT = C.getDriver ().getSYCLDeviceTriple (SYCLTargetArch);
65716571 auto TCIt = llvm::find_if (
65726572 ToolChains, [&](auto &TC) { return TT == TC->getTriple (); });
65736573 assert (TCIt != ToolChains.end () &&
@@ -8372,14 +8372,14 @@ Action *Driver::ConstructPhaseAction(
83728372 return C.MakeAction <BackendJobAction>(Input, Output);
83738373 }
83748374 if (Args.hasArg (options::OPT_emit_llvm) ||
8375- (( TargetDeviceOffloadKind == Action::OFK_SYCL &&
8376- C.getDriver ().getUseNewOffloadingDriver ()) ||
8377- (((Input->getOffloadingToolChain () &&
8378- Input->getOffloadingToolChain ()->getTriple ().isAMDGPU ()) ||
8379- TargetDeviceOffloadKind == Action::OFK_HIP) &&
8380- (Args.hasFlag (options::OPT_fgpu_rdc, options::OPT_fno_gpu_rdc,
8381- false ) ||
8382- TargetDeviceOffloadKind == Action::OFK_OpenMP) ))) {
8375+ (TargetDeviceOffloadKind == Action::OFK_SYCL &&
8376+ C.getDriver ().getUseNewOffloadingDriver ()) ||
8377+ (((Input->getOffloadingToolChain () &&
8378+ Input->getOffloadingToolChain ()->getTriple ().isAMDGPU ()) ||
8379+ TargetDeviceOffloadKind == Action::OFK_HIP) &&
8380+ (Args.hasFlag (options::OPT_fgpu_rdc, options::OPT_fno_gpu_rdc,
8381+ false ) ||
8382+ TargetDeviceOffloadKind == Action::OFK_OpenMP))) {
83838383 types::ID Output =
83848384 Args.hasArg (options::OPT_S) &&
83858385 (TargetDeviceOffloadKind == Action::OFK_None ||
0 commit comments