diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index 1047c8a41e294..59ca51abddfd4 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -398,6 +398,8 @@ def err_drv_sycl_missing_amdgpu_arch : Error< "missing AMDGPU architecture for SYCL offloading; specify it with '-Xsycl-target-backend%select{|=%1}0 --offload-arch='">; def err_drv_sycl_thinlto_split_off: Error< "'%0' is not supported when '%1' is set with '-fsycl'">; +def err_drv_sycl_offload_arch_new_driver: Error< + "'--offload-arch' is supported when '-fsycl' is set with '--offload-new-driver'">; def warn_drv_sycl_offload_target_duplicate : Warning< "SYCL offloading target '%0' is similar to target '%1' already specified; " "will be ignored">, InGroup; diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index c3d3d93fd236c..0ada2df74b27c 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -1185,12 +1185,13 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C, llvm::StringMap> DerivedArchs; llvm::StringMap FoundNormalizedTriples; llvm::SmallVector UniqueSYCLTriplesVec; + llvm::StringSet<> SYCLTriples; if (HasSYCLTargetsOption) { // At this point, we know we have a valid combination // of -fsycl*target options passed Arg *SYCLTargetsValues = SYCLTargets; if (SYCLTargetsValues) { - llvm::StringSet<> SYCLTriples; + if (SYCLTargetsValues->getNumValues()) { // Multiple targets are currently not supported when using @@ -1279,9 +1280,10 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C, if (!Arch.empty()) DerivedArchs[DeviceTriple.getTriple()].insert(Arch); } + if (!SYCLTriples.empty()) { for (const auto &SYCLTriple : SYCLTriples) { - llvm::Triple Triple(SYCLTriple.getKey()); + llvm::Triple Triple(MakeSYCLDeviceTriple(SYCLTriple.getKey())); UniqueSYCLTriplesVec.push_back(Triple); } } @@ -1290,6 +1292,103 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C, Diag(clang::diag::warn_drv_empty_joined_argument) << SYCLTargetsValues->getAsString(C.getInputArgs()); } + } + // If the user specified --offload-arch, deduce the offloading + // target triple(s) from the set of architecture(s). + // Create a toolchain for each valid triple. + else if (HasValidSYCLRuntime && + C.getInputArgs().hasArg(options::OPT_offload_arch_EQ) && !IsHIP && + !IsCuda) { + // SYCL offloading to Intel CPUs and Intel GPUs with ``--offload-arch`` + // is currently enabled only with ``--offload-new-driver`` option. + // Emit a diagnostic if ``--offload-arch`` is invoked without + // ``--offload-new driver`` option. + if (!C.getInputArgs().hasFlag(options::OPT_offload_new_driver, + options::OPT_no_offload_new_driver, + false)) { + Diag(clang::diag::err_drv_sycl_offload_arch_new_driver); + return; + } + const ToolChain *HostTC = C.getSingleOffloadToolChain(); + auto AMDTriple = getHIPOffloadTargetTriple(*this, C.getInputArgs()); + auto NVPTXTriple = getNVIDIAOffloadTargetTriple(*this, C.getInputArgs(), + HostTC->getTriple()); + + // Attempt to deduce the offloading triple from the set of architectures. + // We need to temporarily create these toolchains so that we can access + // tools for inferring architectures. + llvm::DenseSet Archs; + if (NVPTXTriple) { + auto TempTC = std::make_unique( + *this, *NVPTXTriple, *HostTC, C.getInputArgs(), Action::OFK_None); + for (StringRef Arch : + getOffloadArchs(C, C.getArgs(), Action::OFK_SYCL, &*TempTC, true)) + Archs.insert(Arch); + } + if (AMDTriple) { + auto TempTC = std::make_unique( + *this, *AMDTriple, *HostTC, C.getInputArgs()); + for (StringRef Arch : + getOffloadArchs(C, C.getArgs(), Action::OFK_SYCL, &*TempTC, true)) + Archs.insert(Arch); + } + if (!AMDTriple && !NVPTXTriple) { + for (StringRef Arch : + getOffloadArchs(C, C.getArgs(), Action::OFK_SYCL, nullptr, true)) + Archs.insert(Arch); + } + for (StringRef Arch : Archs) { + if (NVPTXTriple && IsSYCLSupportedNVidiaGPUArch(StringToOffloadArchSYCL( + getProcessorFromTargetID(*NVPTXTriple, Arch)))) { + DerivedArchs[NVPTXTriple->getTriple()].insert(Arch); + } else if (AMDTriple && + IsSYCLSupportedAMDGPUArch(StringToOffloadArchSYCL( + getProcessorFromTargetID(*AMDTriple, Arch)))) { + DerivedArchs[AMDTriple->getTriple()].insert(Arch); + } else if (IsSYCLSupportedIntelCPUArch(StringToOffloadArchSYCL(Arch))) { + DerivedArchs[MakeSYCLDeviceTriple("spir64_x86_64").getTriple()].insert( + Arch); + } else if (IsSYCLSupportedIntelGPUArch(StringToOffloadArchSYCL(Arch))) { + StringRef IntelGPUArch; + IntelGPUArch = mapIntelGPUArchName(Arch).data(); + DerivedArchs[MakeSYCLDeviceTriple("spir64_gen").getTriple()].insert( + IntelGPUArch); + } else { + Diag(clang::diag::err_drv_invalid_sycl_target) << Arch; + return; + } + } + // If the set is empty then we failed to find a native architecture. + if (Archs.empty()) { + Diag(clang::diag::err_drv_invalid_sycl_target) << "native"; + return; + } + + for (const auto &TripleAndArchs : DerivedArchs) + SYCLTriples.insert(TripleAndArchs.first()); + + for (const auto &Val : SYCLTriples) { + llvm::Triple SYCLTargetTriple(MakeSYCLDeviceTriple(Val.getKey())); + std::string NormalizedName = SYCLTargetTriple.normalize(); + + + + // Make sure we don't have a duplicate triple. + auto Duplicate = FoundNormalizedTriples.find(NormalizedName); + if (Duplicate != FoundNormalizedTriples.end()) { + Diag(clang::diag::warn_drv_sycl_offload_target_duplicate) + << Val.getKey() << Duplicate->second; + continue; + } + + // Store the current triple so that we can check for duplicates in the + // following iterations. + FoundNormalizedTriples[NormalizedName] = Val.getKey(); + UniqueSYCLTriplesVec.push_back(SYCLTargetTriple); + } + + addSYCLDefaultTriple(C, UniqueSYCLTriplesVec); + } else { // If -fsycl is supplied without -fsycl-targets we will assume SPIR-V. // For -fsycl-device-only, we also setup the implied triple as needed. diff --git a/clang/lib/Driver/ToolChains/SYCL.cpp b/clang/lib/Driver/ToolChains/SYCL.cpp index 12c34ef6e615d..a5b3e184b1620 100644 --- a/clang/lib/Driver/ToolChains/SYCL.cpp +++ b/clang/lib/Driver/ToolChains/SYCL.cpp @@ -27,6 +27,180 @@ using namespace clang::driver::tools; using namespace clang; using namespace llvm::opt; +// Struct that relates an AOT target value with +// Intel CPUs and GPUs. +struct StringToOffloadArchSYCLMap { + const char *ArchName; + SYCLSupportedOffloadArchs IntelArch; +}; + +// Mapping of supported SYCL offloading architectures. +static const StringToOffloadArchSYCLMap StringToArchNamesMap[] = { + // Intel CPU mapping. + {"skylake-avx512", SYCLSupportedOffloadArchs::SKYLAKEAVX512}, + {"core-avx2", SYCLSupportedOffloadArchs::COREAVX2}, + {"corei7-avx", SYCLSupportedOffloadArchs::COREI7AVX}, + {"corei7", SYCLSupportedOffloadArchs::COREI7}, + {"westmere", SYCLSupportedOffloadArchs::WESTMERE}, + {"sandybridge", SYCLSupportedOffloadArchs::SANDYBRIDGE}, + {"ivybridge", SYCLSupportedOffloadArchs::IVYBRIDGE}, + {"broadwell", SYCLSupportedOffloadArchs::BROADWELL}, + {"coffeelake", SYCLSupportedOffloadArchs::COFFEELAKE}, + {"alderlake", SYCLSupportedOffloadArchs::ALDERLAKE}, + {"skylake", SYCLSupportedOffloadArchs::SKYLAKE}, + {"skx", SYCLSupportedOffloadArchs::SKX}, + {"cascadelake", SYCLSupportedOffloadArchs::CASCADELAKE}, + {"icelake-client", SYCLSupportedOffloadArchs::ICELAKECLIENT}, + {"icelake-server", SYCLSupportedOffloadArchs::ICELAKESERVER}, + {"sapphirerapids", SYCLSupportedOffloadArchs::SAPPHIRERAPIDS}, + {"graniterapids", SYCLSupportedOffloadArchs::GRANITERAPIDS}, + // Intel GPU mapping. + {"bdw", SYCLSupportedOffloadArchs::BDW}, + {"skl", SYCLSupportedOffloadArchs::SKL}, + {"kbl", SYCLSupportedOffloadArchs::KBL}, + {"cfl", SYCLSupportedOffloadArchs::CFL}, + {"apl", SYCLSupportedOffloadArchs::APL}, + {"bxt", SYCLSupportedOffloadArchs::BXT}, + {"glk", SYCLSupportedOffloadArchs::GLK}, + {"whl", SYCLSupportedOffloadArchs::WHL}, + {"aml", SYCLSupportedOffloadArchs::AML}, + {"cml", SYCLSupportedOffloadArchs::CML}, + {"icllp", SYCLSupportedOffloadArchs::ICLLP}, + {"icl", SYCLSupportedOffloadArchs::ICL}, + {"ehl", SYCLSupportedOffloadArchs::EHL}, + {"jsl", SYCLSupportedOffloadArchs::JSL}, + {"tgllp", SYCLSupportedOffloadArchs::TGLLP}, + {"tgl", SYCLSupportedOffloadArchs::TGL}, + {"rkl", SYCLSupportedOffloadArchs::RKL}, + {"adl_s", SYCLSupportedOffloadArchs::ADL_S}, + {"rpl_s", SYCLSupportedOffloadArchs::RPL_S}, + {"adl_p", SYCLSupportedOffloadArchs::ADL_P}, + {"adl_n", SYCLSupportedOffloadArchs::ADL_N}, + {"dg1", SYCLSupportedOffloadArchs::DG1}, + {"acm_g10", SYCLSupportedOffloadArchs::ACM_G10}, + {"dg2_g10", SYCLSupportedOffloadArchs::DG2_G10}, + {"acm_g11", SYCLSupportedOffloadArchs::ACM_G11}, + {"dg2_g10", SYCLSupportedOffloadArchs::DG2_G10}, + {"dg2_g11", SYCLSupportedOffloadArchs::DG2_G11}, + {"acm_g12", SYCLSupportedOffloadArchs::ACM_G12}, + {"dg2_g12", SYCLSupportedOffloadArchs::DG2_G12}, + {"pvc", SYCLSupportedOffloadArchs::PVC}, + {"pvc_vg", SYCLSupportedOffloadArchs::PVC_VG}, + {"mtl_u", SYCLSupportedOffloadArchs::MTL_U}, + {"mtl_s", SYCLSupportedOffloadArchs::MTL_S}, + {"arl_u", SYCLSupportedOffloadArchs::ARL_U}, + {"arl_s", SYCLSupportedOffloadArchs::ARL_S}, + {"mtl_h", SYCLSupportedOffloadArchs::MTL_H}, + {"arl_h", SYCLSupportedOffloadArchs::ARL_H}, + {"bmg_g21", SYCLSupportedOffloadArchs::BMG_G21}, + {"lnl_m", SYCLSupportedOffloadArchs::LNL_M}, + // AMD GPU Mapping + {"gfx700", SYCLSupportedOffloadArchs::GFX700}, + {"gfx701", SYCLSupportedOffloadArchs::GFX701}, + {"gfx702", SYCLSupportedOffloadArchs::GFX702}, + {"gfx801", SYCLSupportedOffloadArchs::GFX801}, + {"gfx802", SYCLSupportedOffloadArchs::GFX802}, + {"gfx803", SYCLSupportedOffloadArchs::GFX803}, + {"gfx805", SYCLSupportedOffloadArchs::GFX805}, + {"gfx810", SYCLSupportedOffloadArchs::GFX810}, + {"gfx900", SYCLSupportedOffloadArchs::GFX900}, + {"gfx902", SYCLSupportedOffloadArchs::GFX902}, + {"gfx904", SYCLSupportedOffloadArchs::GFX904}, + {"gfx906", SYCLSupportedOffloadArchs::GFX906}, + {"gfx908", SYCLSupportedOffloadArchs::GFX908}, + {"gfx909", SYCLSupportedOffloadArchs::GFX909}, + {"gfx90a", SYCLSupportedOffloadArchs::GFX90A}, + {"gfx90c", SYCLSupportedOffloadArchs::GFX90C}, + {"gfx940", SYCLSupportedOffloadArchs::GFX940}, + {"gfx941", SYCLSupportedOffloadArchs::GFX941}, + {"gfx942", SYCLSupportedOffloadArchs::GFX942}, + {"gfx1010", SYCLSupportedOffloadArchs::GFX1010}, + {"gfx1011", SYCLSupportedOffloadArchs::GFX1011}, + {"gfx1012", SYCLSupportedOffloadArchs::GFX1012}, + {"gfx1013", SYCLSupportedOffloadArchs::GFX1013}, + {"gfx1030", SYCLSupportedOffloadArchs::GFX1030}, + {"gfx1031", SYCLSupportedOffloadArchs::GFX1031}, + {"gfx1032", SYCLSupportedOffloadArchs::GFX1032}, + {"gfx1033", SYCLSupportedOffloadArchs::GFX1033}, + {"gfx1034", SYCLSupportedOffloadArchs::GFX1034}, + {"gfx1035", SYCLSupportedOffloadArchs::GFX1035}, + {"gfx1036", SYCLSupportedOffloadArchs::GFX1036}, + {"gfx1100", SYCLSupportedOffloadArchs::GFX1100}, + {"gfx1101", SYCLSupportedOffloadArchs::GFX1101}, + {"gfx1102", SYCLSupportedOffloadArchs::GFX1102}, + {"gfx1103", SYCLSupportedOffloadArchs::GFX1103}, + {"gfx1150", SYCLSupportedOffloadArchs::GFX1150}, + {"gfx1151", SYCLSupportedOffloadArchs::GFX1151}, + {"gfx1200", SYCLSupportedOffloadArchs::GFX1200}, + {"gfx1201", SYCLSupportedOffloadArchs::GFX1201}, + // NVidia GPU Mapping. + {"sm_50", SYCLSupportedOffloadArchs::SM_50}, + {"sm_52", SYCLSupportedOffloadArchs::SM_52}, + {"sm_53", SYCLSupportedOffloadArchs::SM_53}, + {"sm_60", SYCLSupportedOffloadArchs::SM_60}, + {"sm_61", SYCLSupportedOffloadArchs::SM_61}, + {"sm_62", SYCLSupportedOffloadArchs::SM_62}, + {"sm_70", SYCLSupportedOffloadArchs::SM_70}, + {"sm_72", SYCLSupportedOffloadArchs::SM_72}, + {"sm_75", SYCLSupportedOffloadArchs::SM_75}, + {"sm_80", SYCLSupportedOffloadArchs::SM_80}, + {"sm_86", SYCLSupportedOffloadArchs::SM_86}, + {"sm_87", SYCLSupportedOffloadArchs::SM_87}, + {"sm_89", SYCLSupportedOffloadArchs::SM_89}, + {"sm_90", SYCLSupportedOffloadArchs::SM_90}, + {"sm_90a", SYCLSupportedOffloadArchs::SM_90A}}; + +// Check if the user provided value for --offload-arch is a valid +// Intel CPU or Intel GPU target. +SYCLSupportedOffloadArchs +clang::driver::StringToOffloadArchSYCL(llvm::StringRef ArchNameAsString) { + auto result = std::find_if( + std::begin(StringToArchNamesMap), std::end(StringToArchNamesMap), + [ArchNameAsString](const StringToOffloadArchSYCLMap &map) { + return ArchNameAsString == map.ArchName; + }); + if (result == std::end(StringToArchNamesMap)) + return SYCLSupportedOffloadArchs::UNKNOWN; + return result->IntelArch; +} + +// This is a mapping between the user provided --offload-arch value for Intel +// GPU targets and the spir64_gen device name accepted by OCLOC (the Intel GPU +// AOT compiler). +StringRef clang::driver::mapIntelGPUArchName(StringRef ArchName) { + StringRef Arch; + Arch = llvm::StringSwitch(ArchName) + .Case("bdw", "bdw") + .Case("skl", "skl") + .Case("kbl", "kbl") + .Case("cfl", "cfl") + .Cases("apl", "bxt", "apl") + .Case("glk", "glk") + .Case("whl", "whl") + .Case("aml", "aml") + .Case("cml", "cml") + .Cases("icllp", "icl", "icllp") + .Cases("ehl", "jsl", "ehl") + .Cases("tgllp", "tgl", "tgllp") + .Case("rkl", "rkl") + .Cases("adl_s", "rpl_s", "adl_s") + .Case("adl_p", "adl_p") + .Case("adl_n", "adl_n") + .Case("dg1", "dg1") + .Cases("acm_g10", "dg2_g10", "acm_g10") + .Cases("acm_g11", "dg2_g11", "acm_g11") + .Cases("acm_g12", "dg2_g12", "acm_g12") + .Case("pvc", "pvc") + .Case("pvc_vg", "pvc_vg") + .Cases("mtl_u", "mtl_s", "arl_u", "arl_s", "mtl_u") + .Case("mtl_h", "mtl_h") + .Case("arl_h", "arl_h") + .Case("bmg_g21", "bmg_g21") + .Case("lnl_m", "lnl_m") + .Default(""); + return Arch; +} + SYCLInstallationDetector::SYCLInstallationDetector(const Driver &D) : D(D), InstallationCandidates() { InstallationCandidates.emplace_back(D.Dir + "/.."); diff --git a/clang/lib/Driver/ToolChains/SYCL.h b/clang/lib/Driver/ToolChains/SYCL.h index 504ecd1247591..54c4b23d6309f 100644 --- a/clang/lib/Driver/ToolChains/SYCL.h +++ b/clang/lib/Driver/ToolChains/SYCL.h @@ -16,6 +16,159 @@ namespace clang { namespace driver { +// List of architectures (Intel CPU, Intel GPU, AMD GPU, NVidia GPU) +// that support SYCL offloading. +enum class SYCLSupportedOffloadArchs { + // Intel CPUs + UNKNOWN, + SKYLAKEAVX512, + COREAVX2, + COREI7AVX, + COREI7, + WESTMERE, + SANDYBRIDGE, + IVYBRIDGE, + BROADWELL, + COFFEELAKE, + ALDERLAKE, + SKYLAKE, + SKX, + CASCADELAKE, + ICELAKECLIENT, + ICELAKESERVER, + SAPPHIRERAPIDS, + GRANITERAPIDS, + // Intel GPUs + BDW, + SKL, + KBL, + CFL, + APL, + BXT, + GLK, + WHL, + AML, + CML, + ICLLP, + ICL, + EHL, + JSL, + TGLLP, + TGL, + RKL, + ADL_S, + RPL_S, + ADL_P, + ADL_N, + DG1, + ACM_G10, + DG2_G10, + ACM_G11, + DG2_G11, + ACM_G12, + DG2_G12, + PVC, + PVC_VG, + MTL_U, + MTL_S, + ARL_U, + ARL_S, + MTL_H, + ARL_H, + BMG_G21, + LNL_M, + // AMD GPUs + GFX700, + GFX701, + GFX702, + GFX801, + GFX802, + GFX803, + GFX805, + GFX810, + GFX900, + GFX902, + GFX904, + GFX906, + GFX908, + GFX909, + GFX90A, + GFX90C, + GFX940, + GFX941, + GFX942, + GFX1010, + GFX1011, + GFX1012, + GFX1013, + GFX1030, + GFX1031, + GFX1032, + GFX1033, + GFX1034, + GFX1035, + GFX1036, + GFX1100, + GFX1101, + GFX1102, + GFX1103, + GFX1150, + GFX1151, + GFX1200, + GFX1201, + // NVidia GPUs. + SM_50, + SM_52, + SM_53, + SM_60, + SM_61, + SM_62, + SM_70, + SM_72, + SM_75, + SM_80, + SM_86, + SM_87, + SM_89, + SM_90, + SM_90A +}; + +// Check if the given Arch value is a valid SYCL supported AMD GPU. +static inline bool IsSYCLSupportedAMDGPUArch(SYCLSupportedOffloadArchs Arch) { + return Arch >= SYCLSupportedOffloadArchs::GFX700 && + Arch <= SYCLSupportedOffloadArchs::GFX1201; +} + +// Check if the given Arch value is a valid SYCL supported NVidia GPU. +static inline bool +IsSYCLSupportedNVidiaGPUArch(SYCLSupportedOffloadArchs Arch) { + return Arch >= SYCLSupportedOffloadArchs::SM_50 && + Arch <= SYCLSupportedOffloadArchs::SM_90A; +} + +// Check if the given Arch value is a valid Intel CPU. +static inline bool IsSYCLSupportedIntelCPUArch(SYCLSupportedOffloadArchs Arch) { + return Arch >= SYCLSupportedOffloadArchs::SKYLAKEAVX512 && + Arch < SYCLSupportedOffloadArchs::BDW; +} + +// Check if the given Arch value is a valid Intel GPU. +static inline bool IsSYCLSupportedIntelGPUArch(SYCLSupportedOffloadArchs Arch) { + return Arch >= SYCLSupportedOffloadArchs::BDW && + Arch <= SYCLSupportedOffloadArchs::LNL_M; +} + +// Check if the user provided value for --offload-arch is a valid +// Intel CPU or Intel GPU target. +SYCLSupportedOffloadArchs +StringToOffloadArchSYCL(llvm::StringRef ArchNameAsString); + +// This is a mapping between the user provided --offload-arch value for Intel +// GPU targets and the spir64_gen device name accepted by OCLOC (the Intel GPU +// AOT compiler). +StringRef mapIntelGPUArchName(StringRef ArchName); + class SYCLInstallationDetector { public: SYCLInstallationDetector(const Driver &D); diff --git a/clang/test/Driver/sycl-offload-arch-amd-gpu.cpp b/clang/test/Driver/sycl-offload-arch-amd-gpu.cpp new file mode 100644 index 0000000000000..55f847ba50b6d --- /dev/null +++ b/clang/test/Driver/sycl-offload-arch-amd-gpu.cpp @@ -0,0 +1,123 @@ +// SYCL AOT compilation to AMD GPUs using --offload-arch and --offload-new-driver + +// AMD GPUs + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx700 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx700 -DMAC_STR=GFX700 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx701 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx701 -DMAC_STR=GFX701 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx702 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx702 -DMAC_STR=GFX702 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx801 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx801 -DMAC_STR=GFX801 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx802 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx802 -DMAC_STR=GFX802 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx803 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx803 -DMAC_STR=GFX803 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx805 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx805 -DMAC_STR=GFX805 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx810 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx810 -DMAC_STR=GFX810 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx900 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx900 -DMAC_STR=GFX900 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx902 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx902 -DMAC_STR=GFX902 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx904 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx904 -DMAC_STR=GFX904 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx906 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx906 -DMAC_STR=GFX906 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx908 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx908 -DMAC_STR=GFX908 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx909 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx909 -DMAC_STR=GFX909 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx90a -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx90a -DMAC_STR=GFX90A + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx90c -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx90c -DMAC_STR=GFX90C + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx940 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx940 -DMAC_STR=GFX940 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx941 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx941 -DMAC_STR=GFX941 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx942 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx942 -DMAC_STR=GFX942 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx1010 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx1010 -DMAC_STR=GFX1010 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx1011 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx1011 -DMAC_STR=GFX1011 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx1012 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx1012 -DMAC_STR=GFX1012 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx1013 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx1013 -DMAC_STR=GFX1013 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx1030 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx1030 -DMAC_STR=GFX1030 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx1031 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx1031 -DMAC_STR=GFX1031 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx1032 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx1032 -DMAC_STR=GFX1032 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx1033 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx1033 -DMAC_STR=GFX1033 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx1034 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx1034 -DMAC_STR=GFX1034 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx1035 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx1035 -DMAC_STR=GFX1035 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx1036 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx1036 -DMAC_STR=GFX1036 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx1100 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx1100 -DMAC_STR=GFX1100 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx1101 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx1101 -DMAC_STR=GFX1101 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx1102 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx1102 -DMAC_STR=GFX1102 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx1103 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx1103 -DMAC_STR=GFX1103 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx1150 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx1150 -DMAC_STR=GFX1150 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx1151 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx1151 -DMAC_STR=GFX1151 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx1200 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx1200 -DMAC_STR=GFX1200 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=gfx1201 -nogpulib -fno-sycl-libspirv %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-AMD-GPU,CLANG-OFFLOAD-PACKAGER-AMD -DDEV_STR=gfx1201 -DMAC_STR=GFX1201 + +// TARGET-TRIPLE-AMD-GPU: clang{{.*}} "-triple" "amdgcn-amd-amdhsa" +// TARGET-TRIPLE-AMD-GPU: "-D__SYCL_TARGET_AMD_GPU_[[MAC_STR]]__" +// CLANG-OFFLOAD-PACKAGER-AMD: clang-offload-packager{{.*}} "--image={{.*}}triple=amdgcn-amd-amdhsa,arch=[[DEV_STR]],kind=sycl" + + diff --git a/clang/test/Driver/sycl-offload-arch-intel-cpu.cpp b/clang/test/Driver/sycl-offload-arch-intel-cpu.cpp new file mode 100644 index 0000000000000..dbb71da6ed6e7 --- /dev/null +++ b/clang/test/Driver/sycl-offload-arch-intel-cpu.cpp @@ -0,0 +1,60 @@ +/// Tests the behaviors of using -fsycl --offload-new-driver +// --offload-arch=. + +// SYCL AOT compilation to Intel CPUs using --offload-arch + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=broadwell %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-CPU,CLANG-OFFLOAD-PACKAGER-CPU -DDEV_STR=broadwell + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=coffeelake %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-CPU,CLANG-OFFLOAD-PACKAGER-CPU -DDEV_STR=coffeelake + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=icelake-client %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-CPU,CLANG-OFFLOAD-PACKAGER-CPU -DDEV_STR=icelake-client + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=skylake-avx512 %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-CPU,CLANG-OFFLOAD-PACKAGER-CPU -DDEV_STR=skylake-avx512 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=core-avx2 %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-CPU,CLANG-OFFLOAD-PACKAGER-CPU -DDEV_STR=core-avx2 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=corei7-avx %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-CPU,CLANG-OFFLOAD-PACKAGER-CPU -DDEV_STR=corei7-avx + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=corei7 %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-CPU,CLANG-OFFLOAD-PACKAGER-CPU -DDEV_STR=corei7 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=westmere %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-CPU,CLANG-OFFLOAD-PACKAGER-CPU -DDEV_STR=westmere + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=sandybridge %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-CPU,CLANG-OFFLOAD-PACKAGER-CPU -DDEV_STR=sandybridge + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=ivybridge %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-CPU,CLANG-OFFLOAD-PACKAGER-CPU -DDEV_STR=ivybridge + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=alderlake %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-CPU,CLANG-OFFLOAD-PACKAGER-CPU -DDEV_STR=alderlake + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=skylake %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-CPU,CLANG-OFFLOAD-PACKAGER-CPU -DDEV_STR=skylake + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=skx %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-CPU,CLANG-OFFLOAD-PACKAGER-CPU -DDEV_STR=skx + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=cascadelake %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-CPU,CLANG-OFFLOAD-PACKAGER-CPU -DDEV_STR=cascadelake + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=icelake-server %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-CPU,CLANG-OFFLOAD-PACKAGER-CPU -DDEV_STR=icelake-server + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=sapphirerapids %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-CPU,CLANG-OFFLOAD-PACKAGER-CPU -DDEV_STR=sapphirerapids + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=graniterapids %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-CPU,CLANG-OFFLOAD-PACKAGER-CPU -DDEV_STR=graniterapids + +// TARGET-TRIPLE-CPU: clang{{.*}} "-triple" "spir64_x86_64-unknown-unknown" +// TARGET-TRIPLE-CPU: "-D__SYCL_TARGET_INTEL_X86_64__" +// CLANG-OFFLOAD-PACKAGER-CPU: clang-offload-packager{{.*}} "--image={{.*}}triple=spir64_x86_64-unknown-unknown,arch=[[DEV_STR]],kind=sycl" + diff --git a/clang/test/Driver/sycl-offload-arch-intel-gpu.cpp b/clang/test/Driver/sycl-offload-arch-intel-gpu.cpp new file mode 100644 index 0000000000000..df7873fade58f --- /dev/null +++ b/clang/test/Driver/sycl-offload-arch-intel-gpu.cpp @@ -0,0 +1,124 @@ +/// Tests the behaviors of using -fsycl --offload-new-driver +// --offload-arch=. + +// SYCL AOT compilation to Intel GPUs using --offload-arch + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=bdw %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=bdw -DMAC_STR=BDW + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=skl %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=skl -DMAC_STR=SKL + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=kbl %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=kbl -DMAC_STR=KBL + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=cfl %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=cfl -DMAC_STR=CFL + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=apl %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=apl -DMAC_STR=APL + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=bxt %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=apl -DMAC_STR=APL + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=glk %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=glk -DMAC_STR=GLK + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=whl %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=whl -DMAC_STR=WHL + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=aml %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=aml -DMAC_STR=AML + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=cml %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=cml -DMAC_STR=CML + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=icllp %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=icllp -DMAC_STR=ICLLP + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=icl %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=icllp -DMAC_STR=ICLLP + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=ehl %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=ehl -DMAC_STR=EHL + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=jsl %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=ehl -DMAC_STR=EHL + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=tgllp %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=tgllp -DMAC_STR=TGLLP + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=tgl %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=tgllp -DMAC_STR=TGLLP + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=rkl %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=rkl -DMAC_STR=RKL + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=adl_s %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=adl_s -DMAC_STR=ADL_S + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=rpl_s %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=adl_s -DMAC_STR=ADL_S + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=adl_p %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=adl_p -DMAC_STR=ADL_P + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=adl_n %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=adl_n -DMAC_STR=ADL_N + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=dg1 %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=dg1 -DMAC_STR=DG1 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=acm_g10 %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=acm_g10 -DMAC_STR=ACM_G10 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=dg2_g10 %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=acm_g10 -DMAC_STR=ACM_G10 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=acm_g11 %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=acm_g11 -DMAC_STR=ACM_G11 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=dg2_g11 %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=acm_g11 -DMAC_STR=ACM_G11 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=acm_g12 %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=acm_g12 -DMAC_STR=ACM_G12 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=dg2_g12 %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU -DDEV_STR=acm_g12 -DMAC_STR=ACM_G12 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=pvc %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU-OPTS -DDEV_STR=pvc -DMAC_STR=PVC + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=pvc_vg %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU-OPTS -DDEV_STR=pvc_vg -DMAC_STR=PVC_VG + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=mtl_u %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU-OPTS -DDEV_STR=mtl_u -DMAC_STR=MTL_U + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=mtl_s %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU-OPTS -DDEV_STR=mtl_u -DMAC_STR=MTL_U + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=arl_u %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU-OPTS -DDEV_STR=mtl_u -DMAC_STR=MTL_U + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=arl_s %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU-OPTS -DDEV_STR=mtl_u -DMAC_STR=MTL_U + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=mtl_h %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU-OPTS -DDEV_STR=mtl_h -DMAC_STR=MTL_H + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=arl_h %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU-OPTS -DDEV_STR=arl_h -DMAC_STR=ARL_H + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=bmg_g21 %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU-OPTS -DDEV_STR=bmg_g21 -DMAC_STR=BMG_G21 + +// RUN: %clangxx -### --offload-new-driver -fsycl --offload-arch=lnl_m %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=TARGET-TRIPLE-GPU,CLANG-OFFLOAD-PACKAGER-GPU-OPTS -DDEV_STR=lnl_m -DMAC_STR=LNL_M + +// TARGET-TRIPLE-GPU: clang{{.*}} "-triple" "spir64_gen-unknown-unknown" +// TARGET-TRIPLE-GPU: "-D__SYCL_TARGET_INTEL_GPU_[[MAC_STR]]__" +// CLANG-OFFLOAD-PACKAGER-GPU: clang-offload-packager{{.*}} "--image={{.*}}triple=spir64_gen-unknown-unknown,arch=[[DEV_STR]],kind=sycl" +// CLANG-OFFLOAD-PACKAGER-GPU-OPTS: clang-offload-packager{{.*}} "--image={{.*}}triple=spir64_gen-unknown-unknown,arch=[[DEV_STR]],kind=sycl{{.*}}" + diff --git a/clang/test/Driver/sycl-offload-arch-nvidia-gpu.cpp b/clang/test/Driver/sycl-offload-arch-nvidia-gpu.cpp new file mode 100644 index 0000000000000..dc6684bb646bf --- /dev/null +++ b/clang/test/Driver/sycl-offload-arch-nvidia-gpu.cpp @@ -0,0 +1,52 @@ +/// Tests the behaviors of using --offload-arch for offloading +// SYCL kernels to NVidia GPUs using --offload-new-driver. + +// RUN: %clangxx --offload-new-driver -fsycl --offload-arch=sm_50 -nocudalib -### %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=CLANG-OFFLOAD-PACKAGER-GPU,MACRO_NVIDIA -DDEV_STR=sm_50 -DMAC_STR=SM_50 + +// RUN: %clangxx --offload-new-driver -fsycl --offload-arch=sm_52 -nocudalib -### %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=CLANG-OFFLOAD-PACKAGER-GPU,MACRO_NVIDIA -DDEV_STR=sm_52 -DMAC_STR=SM_52 + +// RUN: %clangxx --offload-new-driver -fsycl --offload-arch=sm_53 -nocudalib -### %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=CLANG-OFFLOAD-PACKAGER-GPU,MACRO_NVIDIA -DDEV_STR=sm_53 -DMAC_STR=SM_53 + +// RUN: %clangxx --offload-new-driver -fsycl --offload-arch=sm_60 -nocudalib -### %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=CLANG-OFFLOAD-PACKAGER-GPU,MACRO_NVIDIA -DDEV_STR=sm_60 -DMAC_STR=SM_60 + +// RUN: %clangxx --offload-new-driver -fsycl --offload-arch=sm_61 -nocudalib -### %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=CLANG-OFFLOAD-PACKAGER-GPU,MACRO_NVIDIA -DDEV_STR=sm_61 -DMAC_STR=SM_61 + +// RUN: %clangxx --offload-new-driver -fsycl --offload-arch=sm_62 -nocudalib -### %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=CLANG-OFFLOAD-PACKAGER-GPU,MACRO_NVIDIA -DDEV_STR=sm_62 -DMAC_STR=SM_62 + +// RUN: %clangxx --offload-new-driver -fsycl --offload-arch=sm_70 -nocudalib -### %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=CLANG-OFFLOAD-PACKAGER-GPU,MACRO_NVIDIA -DDEV_STR=sm_70 -DMAC_STR=SM_70 + +// RUN: %clangxx --offload-new-driver -fsycl --offload-arch=sm_72 -nocudalib -### %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=CLANG-OFFLOAD-PACKAGER-GPU,MACRO_NVIDIA -DDEV_STR=sm_72 -DMAC_STR=SM_72 + +// RUN: %clangxx --offload-new-driver -fsycl --offload-arch=sm_75 -nocudalib -### %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=CLANG-OFFLOAD-PACKAGER-GPU,MACRO_NVIDIA -DDEV_STR=sm_75 -DMAC_STR=SM_75 + +// RUN: %clangxx --offload-new-driver -fsycl --offload-arch=sm_80 -nocudalib -### %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=CLANG-OFFLOAD-PACKAGER-GPU,MACRO_NVIDIA -DDEV_STR=sm_80 -DMAC_STR=SM_80 + +// RUN: %clangxx --offload-new-driver -fsycl --offload-arch=sm_86 -nocudalib -### %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=CLANG-OFFLOAD-PACKAGER-GPU,MACRO_NVIDIA -DDEV_STR=sm_86 -DMAC_STR=SM_86 + +// RUN: %clangxx --offload-new-driver -fsycl --offload-arch=sm_87 -nocudalib -### %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=CLANG-OFFLOAD-PACKAGER-GPU,MACRO_NVIDIA -DDEV_STR=sm_87 -DMAC_STR=SM_87 + +// RUN: %clangxx --offload-new-driver -fsycl --offload-arch=sm_89 -nocudalib -### %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=CLANG-OFFLOAD-PACKAGER-GPU,MACRO_NVIDIA -DDEV_STR=sm_89 -DMAC_STR=SM_89 + +// RUN: %clangxx --offload-new-driver -fsycl --offload-arch=sm_90 -nocudalib -### %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=CLANG-OFFLOAD-PACKAGER-GPU,MACRO_NVIDIA -DDEV_STR=sm_90 -DMAC_STR=SM_90 + +// RUN: %clangxx --offload-new-driver -fsycl --offload-arch=sm_90a -nocudalib -### %s 2>&1 | \ +// RUN: FileCheck %s --check-prefixes=CLANG-OFFLOAD-PACKAGER-GPU,MACRO_NVIDIA -DDEV_STR=sm_90a -DMAC_STR=SM_90A + +// MACRO_NVIDIA: clang{{.*}} "-triple" "nvptx64-nvidia-cuda" +// MACRO_NVIDIA: "-D__SYCL_TARGET_NVIDIA_GPU_[[MAC_STR]]__" +// CLANG-OFFLOAD-PACKAGER-GPU: clang-offload-packager{{.*}} "--image={{.*}}triple=nvptx64-nvidia-cuda,arch=[[DEV_STR]],kind=sycl" +