diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 8da9419c81b6c..f5049cddd85d8 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -7692,16 +7692,22 @@ Driver::getOffloadArchs(Compilation &C, const llvm::opt::DerivedArgList &Args, ? OffloadArch::Generic : OffloadArch::HIPDefault)); } else if (Kind == Action::OFK_SYCL) { + // Accept legacy `-march` device arguments for SYCL. // For SYCL offloading, we need to check the triple for NVPTX or AMDGPU. // The default arch is set for NVPTX if not provided. For AMDGPU, emit // an error as the user is responsible to set the arch. - if (TC.getTriple().isNVPTX()) - Archs.insert(OffloadArchToString(OffloadArch::SM_75)); - else if (TC.getTriple().isAMDGPU()) - C.getDriver().Diag(clang::diag::err_drv_sycl_missing_amdgpu_arch) - << 1 << TC.getTriple().str(); - else - Archs.insert(StringRef()); + if (auto *Arg = C.getArgsForToolChain(&TC, /*BoundArch=*/"", Kind) + .getLastArg(options::OPT_march_EQ)) { + Archs.insert(Arg->getValue()); + } else { + if (TC.getTriple().isNVPTX()) + Archs.insert(OffloadArchToString(OffloadArch::SM_50)); + else if (TC.getTriple().isAMDGPU()) + C.getDriver().Diag(clang::diag::err_drv_sycl_missing_amdgpu_arch) + << 1 << TC.getTriple().str(); + else + Archs.insert(StringRef()); + } } else if (Kind == Action::OFK_OpenMP) { // Accept legacy `-march` device arguments for OpenMP. if (auto *Arg = C.getArgsForToolChain(&TC, /*BoundArch=*/"", Kind) diff --git a/clang/test/Driver/sycl-offload-Xarch.cpp b/clang/test/Driver/sycl-offload-Xarch.cpp new file mode 100644 index 0000000000000..ac8ccbb9e36d4 --- /dev/null +++ b/clang/test/Driver/sycl-offload-Xarch.cpp @@ -0,0 +1,40 @@ +// Test passing of -Xarch_