Author: Joseph Huber Date: 2026-01-29T08:52:10-06:00 New Revision: 3b97c1a1fcdec66e42d49ed1a4ee79dceb9f923a
URL: https://github.com/llvm/llvm-project/commit/3b97c1a1fcdec66e42d49ed1a4ee79dceb9f923a DIFF: https://github.com/llvm/llvm-project/commit/3b97c1a1fcdec66e42d49ed1a4ee79dceb9f923a.diff LOG: Revert "[Clang] Lift HIPSPV onto the new offload driver (#168043)" This reverts commit 9ae6d8f565515a0199b18d6f156b1a41f328af1a. This reverts commit d2e18bebe0b95d09ef8d0ac2ba0aa8d0e129be54. Added: Modified: clang/docs/ReleaseNotes.rst clang/lib/Basic/Targets.cpp clang/lib/Basic/Targets/SPIR.h clang/lib/Driver/Driver.cpp clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Driver/ToolChains/HIPSPV.cpp clang/lib/Driver/ToolChains/HIPSPV.h clang/test/Driver/hipspv-link-static-library.hip clang/test/Driver/hipspv-pass-plugin.hip clang/test/Driver/hipspv-toolchain-rdc.hip clang/test/Driver/hipspv-toolchain.hip clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp Removed: clang/test/Driver/Inputs/hipspv/lib/hip-device-lib/hipspv-spirv64-unknown-chipstar.bc clang/test/Driver/hipspv-toolchain-rdc-separate.hip ################################################################################ diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 423ee9f66a6e3..81abc9adc3bf0 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -52,13 +52,6 @@ AST Dumping Potentially Breaking Changes Clang Frontend Potentially Breaking Changes ------------------------------------------- -- HIPSPV toolchain: `--offload-targets=spirv{32,64}` option is - deprecated and will be removed when the new offload driver becomes - default. The replacement for the option is - `--offload-targets=spirv{32,64}-unknown-chipstar` when using the new - offload driver (`--offload-new-driver`). - - Clang Python Bindings Potentially Breaking Changes -------------------------------------------------- - Remove ``CompletionString.Availability``. No libclang interfaces returned instances of it. diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 919fb0703b7a4..263253918d965 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -680,13 +680,13 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple, return std::make_unique<SPIRVTargetInfo>(Triple, Opts); } case llvm::Triple::spirv32: { - if ((os != llvm::Triple::UnknownOS && os != llvm::Triple::ChipStar) || + if (os != llvm::Triple::UnknownOS || Triple.getEnvironment() != llvm::Triple::UnknownEnvironment) return nullptr; return std::make_unique<SPIRV32TargetInfo>(Triple, Opts); } case llvm::Triple::spirv64: { - if ((os != llvm::Triple::UnknownOS && os != llvm::Triple::ChipStar) || + if (os != llvm::Triple::UnknownOS || Triple.getEnvironment() != llvm::Triple::UnknownEnvironment) { if (os == llvm::Triple::OSType::AMDHSA) return std::make_unique<SPIRV64AMDGCNTargetInfo>(Triple, Opts); diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h index eef9521c7434a..ea992b0e01dbe 100644 --- a/clang/lib/Basic/Targets/SPIR.h +++ b/clang/lib/Basic/Targets/SPIR.h @@ -362,9 +362,8 @@ class LLVM_LIBRARY_VISIBILITY SPIRV32TargetInfo : public BaseSPIRVTargetInfo { : BaseSPIRVTargetInfo(Triple, Opts) { assert(Triple.getArch() == llvm::Triple::spirv32 && "Invalid architecture for 32-bit SPIR-V."); - assert((getTriple().getOS() == llvm::Triple::UnknownOS || - getTriple().getOS() == llvm::Triple::ChipStar) && - "32-bit SPIR-V target must use unknown or chipstar OS"); + assert(getTriple().getOS() == llvm::Triple::UnknownOS && + "32-bit SPIR-V target must use unknown OS"); assert(getTriple().getEnvironment() == llvm::Triple::UnknownEnvironment && "32-bit SPIR-V target must use unknown environment type"); PointerWidth = PointerAlign = 32; @@ -386,9 +385,8 @@ class LLVM_LIBRARY_VISIBILITY SPIRV64TargetInfo : public BaseSPIRVTargetInfo { : BaseSPIRVTargetInfo(Triple, Opts) { assert(Triple.getArch() == llvm::Triple::spirv64 && "Invalid architecture for 64-bit SPIR-V."); - assert((getTriple().getOS() == llvm::Triple::UnknownOS || - getTriple().getOS() == llvm::Triple::ChipStar) && - "64-bit SPIR-V target must use unknown or chipstar OS"); + assert(getTriple().getOS() == llvm::Triple::UnknownOS && + "64-bit SPIR-V target must use unknown OS"); assert(getTriple().getEnvironment() == llvm::Triple::UnknownEnvironment && "64-bit SPIR-V target must use unknown environment type"); PointerWidth = PointerAlign = 64; diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 10932dde13e01..eb3f9cbea2845 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -4938,26 +4938,21 @@ Action *Driver::BuildOffloadingActions(Compilation &C, // Compiling HIP in device-only non-RDC mode requires linking each action // individually. for (Action *&A : DeviceActions) { - auto *OffloadTriple = A->getOffloadingToolChain() - ? &A->getOffloadingToolChain()->getTriple() - : nullptr; - bool IsHIPSPV = - OffloadTriple && OffloadTriple->isSPIRV() && - (OffloadTriple->getOS() == llvm::Triple::OSType::AMDHSA || - OffloadTriple->getOS() == llvm::Triple::OSType::ChipStar); + bool IsAMDGCNSPIRV = A->getOffloadingToolChain() && + A->getOffloadingToolChain()->getTriple().getOS() == + llvm::Triple::OSType::AMDHSA && + A->getOffloadingToolChain()->getTriple().isSPIRV(); bool UseSPIRVBackend = Args.hasFlag(options::OPT_use_spirv_backend, options::OPT_no_use_spirv_backend, /*Default=*/false); - // Special handling for the HIP SPIR-V toolchains in device-only. + // Special handling for the HIP SPIR-V toolchain in device-only. // The translator path has a linking step, whereas the SPIR-V backend path // does not to avoid any external dependency such as spirv-link. The // linking step is skipped for the SPIR-V backend path. - bool IsAMDGCNSPIRVWithBackend = - IsHIPSPV && OffloadTriple->getOS() == llvm::Triple::OSType::AMDHSA && - UseSPIRVBackend; + bool IsAMDGCNSPIRVWithBackend = IsAMDGCNSPIRV && UseSPIRVBackend; - if ((A->getType() != types::TY_Object && !IsHIPSPV && + if ((A->getType() != types::TY_Object && !IsAMDGCNSPIRV && A->getType() != types::TY_LTO_BC) || HIPRelocatableObj || !HIPNoRDC || !offloadDeviceOnly() || (IsAMDGCNSPIRVWithBackend && offloadDeviceOnly())) @@ -6966,9 +6961,6 @@ const ToolChain &Driver::getToolChain(const ArgList &Args, case llvm::Triple::ShaderModel: TC = std::make_unique<toolchains::HLSLToolChain>(*this, Target, Args); break; - case llvm::Triple::ChipStar: - TC = std::make_unique<toolchains::HIPSPVToolChain>(*this, Target, Args); - break; default: // Of these targets, Hexagon is the only one that might have // an OS of Linux, in which case it got handled above already. diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 37ef3b196c743..af6da80cb5ceb 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -9156,7 +9156,6 @@ void LinkerWrapper::ConstructJob(Compilation &C, const JobAction &JA, OPT_v, OPT_cuda_path_EQ, OPT_rocm_path_EQ, - OPT_hip_path_EQ, OPT_O_Group, OPT_g_Group, OPT_g_flags_Group, diff --git a/clang/lib/Driver/ToolChains/HIPSPV.cpp b/clang/lib/Driver/ToolChains/HIPSPV.cpp index ec140aa937e58..f797573a5725d 100644 --- a/clang/lib/Driver/ToolChains/HIPSPV.cpp +++ b/clang/lib/Driver/ToolChains/HIPSPV.cpp @@ -90,27 +90,9 @@ void HIPSPV::Linker::constructLinkAndEmitSpirvCommand( } // Emit SPIR-V binary. - llvm::opt::ArgStringList TrArgs; - auto T = getToolChain().getTriple(); - bool HasNoSubArch = T.getSubArch() == llvm::Triple::NoSubArch; - if (T.getOS() == llvm::Triple::ChipStar) { - // chipStar needs 1.2 for supporting warp-level primitivies via sub-group - // extensions. Strictly put we'd need 1.3 for the standard non-extension - // shuffle operations, but it's not supported by any backend driver of the - // chipStar. - if (HasNoSubArch) - TrArgs.push_back("--spirv-max-version=1.2"); - TrArgs.push_back("--spirv-ext=-all" - // Needed for experimental indirect call support. - ",+SPV_INTEL_function_pointers" - // Needed for shuffles below SPIR-V 1.3 - ",+SPV_INTEL_subgroups"); - } else { - if (HasNoSubArch) - TrArgs.push_back("--spirv-max-version=1.1"); - TrArgs.push_back("--spirv-ext=+all"); - } + llvm::opt::ArgStringList TrArgs{"--spirv-max-version=1.1", + "--spirv-ext=+all"}; InputInfo TrInput = InputInfo(types::TY_LLVM_BC, TempFile, ""); SPIRV::constructTranslateCommand(C, *this, JA, Output, TrInput, TrArgs); } @@ -134,16 +116,7 @@ void HIPSPV::Linker::ConstructJob(Compilation &C, const JobAction &JA, HIPSPVToolChain::HIPSPVToolChain(const Driver &D, const llvm::Triple &Triple, const ToolChain &HostTC, const ArgList &Args) - : ToolChain(D, Triple, Args), HostTC(&HostTC) { - // Lookup binaries into the driver directory, this is used to - // discover the clang-offload-bundler executable. - getProgramPaths().push_back(getDriver().Dir); -} - -// Non-offloading toolchain. Primaly used by clang-offload-linker. -HIPSPVToolChain::HIPSPVToolChain(const Driver &D, const llvm::Triple &Triple, - const ArgList &Args) - : ToolChain(D, Triple, Args), HostTC(nullptr) { + : ToolChain(D, Triple, Args), HostTC(HostTC) { // Lookup binaries into the driver directory, this is used to // discover the clang-offload-bundler executable. getProgramPaths().push_back(getDriver().Dir); @@ -152,14 +125,7 @@ HIPSPVToolChain::HIPSPVToolChain(const Driver &D, const llvm::Triple &Triple, void HIPSPVToolChain::addClangTargetOptions( const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args, Action::OffloadKind DeviceOffloadingKind) const { - - if (!HostTC) { - assert(DeviceOffloadingKind == Action::OFK_None && - "Need host toolchain for offloading!"); - return; - } - - HostTC->addClangTargetOptions(DriverArgs, CC1Args, DeviceOffloadingKind); + HostTC.addClangTargetOptions(DriverArgs, CC1Args, DeviceOffloadingKind); assert(DeviceOffloadingKind == Action::OFK_HIP && "Only HIP offloading kinds are supported for GPUs."); @@ -190,37 +156,27 @@ Tool *HIPSPVToolChain::buildLinker() const { } void HIPSPVToolChain::addClangWarningOptions(ArgStringList &CC1Args) const { - if (HostTC) - HostTC->addClangWarningOptions(CC1Args); - ToolChain::addClangWarningOptions(CC1Args); + HostTC.addClangWarningOptions(CC1Args); } ToolChain::CXXStdlibType HIPSPVToolChain::GetCXXStdlibType(const ArgList &Args) const { - if (HostTC) - return HostTC->GetCXXStdlibType(Args); - return ToolChain::GetCXXStdlibType(Args); + return HostTC.GetCXXStdlibType(Args); } void HIPSPVToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs, ArgStringList &CC1Args) const { - if (HostTC) - HostTC->AddClangSystemIncludeArgs(DriverArgs, CC1Args); - ToolChain::AddClangSystemIncludeArgs(DriverArgs, CC1Args); + HostTC.AddClangSystemIncludeArgs(DriverArgs, CC1Args); } void HIPSPVToolChain::AddClangCXXStdlibIncludeArgs( const ArgList &Args, ArgStringList &CC1Args) const { - if (HostTC) - HostTC->AddClangCXXStdlibIncludeArgs(Args, CC1Args); - ToolChain::AddClangCXXStdlibIncludeArgs(Args, CC1Args); + HostTC.AddClangCXXStdlibIncludeArgs(Args, CC1Args); } void HIPSPVToolChain::AddIAMCUIncludeArgs(const ArgList &Args, ArgStringList &CC1Args) const { - if (HostTC) - HostTC->AddIAMCUIncludeArgs(Args, CC1Args); - ToolChain::AddIAMCUIncludeArgs(Args, CC1Args); + HostTC.AddIAMCUIncludeArgs(Args, CC1Args); } void HIPSPVToolChain::AddHIPIncludeArgs(const ArgList &DriverArgs, @@ -314,16 +270,12 @@ SanitizerMask HIPSPVToolChain::getSupportedSanitizers() const { // This behavior is necessary because the host and device toolchains // invocations often share the command line, so the device toolchain must // tolerate flags meant only for the host toolchain. - if (HostTC) - return HostTC->getSupportedSanitizers(); - return ToolChain::getSupportedSanitizers(); + return HostTC.getSupportedSanitizers(); } VersionTuple HIPSPVToolChain::computeMSVCVersion(const Driver *D, const ArgList &Args) const { - if (HostTC) - return HostTC->computeMSVCVersion(D, Args); - return ToolChain::computeMSVCVersion(D, Args); + return HostTC.computeMSVCVersion(D, Args); } void HIPSPVToolChain::adjustDebugInfoKind( diff --git a/clang/lib/Driver/ToolChains/HIPSPV.h b/clang/lib/Driver/ToolChains/HIPSPV.h index 068040ee4f491..caf6924151446 100644 --- a/clang/lib/Driver/ToolChains/HIPSPV.h +++ b/clang/lib/Driver/ToolChains/HIPSPV.h @@ -47,12 +47,9 @@ class LLVM_LIBRARY_VISIBILITY HIPSPVToolChain final : public ToolChain { public: HIPSPVToolChain(const Driver &D, const llvm::Triple &Triple, const ToolChain &HostTC, const llvm::opt::ArgList &Args); - HIPSPVToolChain(const Driver &D, const llvm::Triple &Triple, - const llvm::opt::ArgList &Args); const llvm::Triple *getAuxTriple() const override { - assert(HostTC); - return &HostTC->getTriple(); + return &HostTC.getTriple(); } void @@ -93,7 +90,7 @@ class LLVM_LIBRARY_VISIBILITY HIPSPVToolChain final : public ToolChain { bool isPICDefaultForced() const override { return false; } bool SupportsProfiling() const override { return false; } - const ToolChain *HostTC = nullptr; + const ToolChain &HostTC; protected: Tool *buildLinker() const override; diff --git a/clang/test/Driver/Inputs/hipspv/lib/hip-device-lib/hipspv-spirv64-unknown-chipstar.bc b/clang/test/Driver/Inputs/hipspv/lib/hip-device-lib/hipspv-spirv64-unknown-chipstar.bc deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/clang/test/Driver/hipspv-link-static-library.hip b/clang/test/Driver/hipspv-link-static-library.hip index 5b9dcef717213..cf16236738c12 100644 --- a/clang/test/Driver/hipspv-link-static-library.hip +++ b/clang/test/Driver/hipspv-link-static-library.hip @@ -4,45 +4,25 @@ // Create a dummy archive to test SDL linking // RUN: rm -rf %t && mkdir %t -// RUN: touch %t/dummy.bc +// RUN: touch %t/dummy.bc // RUN: llvm-ar cr %t/libSDL.a %t/dummy.bc // Test that -l options are passed to llvm-link for --offload=spirv64 // RUN: %clang -### --target=x86_64-linux-gnu --offload=spirv64 \ // RUN: --hip-path=%S/Inputs/hipspv -nohipwrapperinc %s \ -// RUN: --no-offload-new-driver -L%t -lSDL \ -// RUN: 2>&1 | FileCheck -check-prefixes=ALL,SDL %s +// RUN: -L%t -lSDL \ +// RUN: 2>&1 | FileCheck -check-prefix=SDL-LINK %s -// Test that .a files are properly unbundled and passed to llvm-link +// Test that .a files are properly unbundled and passed to llvm-link // RUN: %clang -### --target=x86_64-linux-gnu --offload=spirv64 \ // RUN: --hip-path=%S/Inputs/hipspv -nohipwrapperinc %s \ -// RUN: --no-offload-new-driver %t/libSDL.a \ -// RUN: 2>&1 | FileCheck -check-prefixes=ALL,SDL %s - -// RUN: %clang --offload-new-driver -fgpu-rdc \ -// RUN: --target=x86_64-linux-gnu \ -// RUN: --offload=spirv64-unknown-chipstar \ -// RUN: -nogpuinc -nogpulib %s -c -o %t/tu0.o -// RUN: %clang --offload-new-driver -fgpu-rdc \ -// RUN: --offload=spirv64-unknown-chipstar \ -// RUN: -nogpuinc -nogpulib %s -c -o %t/tu1.o -// RUN: llvm-ar cr %t/libSDL2.a %t/tu1.o - -// RUN: %clang --offload-new-driver -fgpu-rdc \ -// RUN: --target=x86_64-linux-gnu \ -// RUN: -Xoffload-compiler-spirv64-unknown-chipstar \ -// RUN: --hip-path=%S/Inputs/hipspv -no-hip-rt %t/tu0.o %t/libSDL2.a \ -// A hacky trick to print clang commands invoked by clang-linker-wrapper -// RUN: -v -Xlinker --emit-fatbin-only -Xoffload-compiler '-###' \ -// RUN: 2>&1 | FileCheck -check-prefixes=ALL,SDL-NEW %s +// RUN: %t/libSDL.a \ +// RUN: 2>&1 | FileCheck -check-prefix=SDL-ARCHIVE %s // Verify that the input files are added before the SDL files in llvm-link command // This tests the ordering fix to match HIPAMD behavior -// SDL: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}libSDL.a" "-targets=hip-spirv64-unknown-unknown-unknown-generic" "-output=[[SDL_A:.*\.a]]" "-allow-missing-bundles" -// SDL: "{{.*}}llvm-link" "-o" "{{.*}}.bc" "{{.*}}.bc" "[[SDL_A]]" -// SDL-NEW: "{{.*}}clang-linker-wrapper" -// SDL-NEW: "{{.*}}llvm-link" "-o" "{{.*}}.bc" "{{.*}}.o" "{{.*}}.o" +// SDL-LINK: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}libSDL.a" "-targets=hip-spirv64-unknown-unknown-unknown-generic" "-output=[[SDL_A:.*\.a]]" "-allow-missing-bundles" +// SDL-LINK: "{{.*}}llvm-link" "-o" "{{.*}}.bc" "{{.*}}.bc" "[[SDL_A]]" -// ALL: "{{.*}}opt" -// ALL-SAME: "-load-pass-plugin" {{".*/hipspv/lib/libLLVMHipSpvPasses.so"}} -// ALL-SAME: "-passes=hip-post-link-passes" +// SDL-ARCHIVE: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}libSDL.a" "-targets=hip-spirv64-unknown-unknown-unknown-generic" "-output=[[SDL_A:.*\.a]]" "-allow-missing-bundles" +// SDL-ARCHIVE: "{{.*}}llvm-link" "-o" "{{.*}}.bc" "{{.*}}.bc" "[[SDL_A]]" diff --git a/clang/test/Driver/hipspv-pass-plugin.hip b/clang/test/Driver/hipspv-pass-plugin.hip index 3b1f06b307405..fc3c64b057352 100644 --- a/clang/test/Driver/hipspv-pass-plugin.hip +++ b/clang/test/Driver/hipspv-pass-plugin.hip @@ -1,45 +1,20 @@ // UNSUPPORTED: system-windows // RUN: %clang -### -target x86_64-linux-gnu --offload=spirv64 \ -// RUN: --no-offload-new-driver --hip-path=%S/Inputs/hipspv -nogpuinc %s \ -// RUN: 2>&1 | FileCheck --check-prefixes=ALL,FROM-HIP-PATH %s +// RUN: --hip-path=%S/Inputs/hipspv -nogpuinc %s \ +// RUN: 2>&1 | FileCheck --check-prefixes=FROM-HIP-PATH %s // RUN: %clang -### -target x86_64-linux-gnu --offload=spirv64 \ -// RUN: --no-offload-new-driver -nogpuinc -nogpulib --hipspv-pass-plugin=%S/Inputs/pass-plugin.so %s \ -// RUN: 2>&1 | FileCheck --check-prefixes=ALL,FROM-OPTION %s +// RUN: -nogpuinc -nogpulib --hipspv-pass-plugin=%S/Inputs/pass-plugin.so %s \ +// RUN: 2>&1 | FileCheck --check-prefixes=FROM-OPTION %s // RUN: not %clang -### --target=x86_64-linux-gnu --offload=spirv64 \ -// RUN: --no-offload-new-driver -nogpuinc -nogpulib --hipspv-pass-plugin=foo.so %s \ -// RUN: 2>&1 | FileCheck --check-prefixes=ALL,FROM-OPTION-INVALID %s +// RUN: -nogpuinc -nogpulib --hipspv-pass-plugin=foo.so %s \ +// RUN: 2>&1 | FileCheck --check-prefixes=FROM-OPTION-INVALID %s // RUN: %clang -### -target x86_64-linux-gnu --offload=spirv64 \ -// RUN: --no-offload-new-driver -nogpuinc -nogpulib %s \ -// RUN: 2>&1 | FileCheck --check-prefixes=ALL,NO-PLUGIN %s - -// RUN: %clang --offload-new-driver -nogpuinc -nogpulib \ -// RUN: --offload=spirv64-unknown-chipstar \ -// RUN: --hip-path=%S/Inputs/hipspv -Xoffload-compiler \ -// RUN: '-###' -c %s -o /dev/null 2>&1 \ -// RUN: | FileCheck %s --check-prefixes=ALL,FROM-HIP-PATH - -// RUN: %clang --offload-new-driver -nogpuinc -nogpulib \ -// RUN: --offload=spirv64-unknown-chipstar \ -// RUN: -Xoffload-compiler-spirv64-unknown-chipstar \ -// RUN: --hipspv-pass-plugin=%S/Inputs/pass-plugin.so -Xoffload-compiler \ -// RUN: '-###' -c %s -o /dev/null 2>&1 \ -// RUN: | FileCheck %s --check-prefixes=ALL,FROM-OPTION - -// RUN: not %clang --offload-new-driver -nogpuinc -nogpulib \ -// RUN: --offload=spirv64-unknown-chipstar \ -// RUN: -Xoffload-compiler-spirv64-unknown-chipstar \ -// RUN: --hipspv-pass-plugin=foo.so -Xoffload-compiler \ -// RUN: '-###' -c %s -o /dev/null 2>&1 \ -// RUN: | FileCheck %s --check-prefixes=ALL,FROM-OPTION-INVALID - -// RUN: %clang --offload-new-driver -nogpuinc -nogpulib \ -// RUN: --offload=spirv64-unknown-chipstar -Xoffload-compiler \ -// RUN: '-###' -c %s -o /dev/null 2>&1 \ -// RUN: | FileCheck %s --check-prefixes=ALL,NO-PLUGIN +// RUN: -nogpuinc -nogpulib %s \ +// RUN: 2>&1 | FileCheck --check-prefixes=NO-PLUGIN %s // FROM-HIP-PATH: {{".*opt"}} {{".*.bc"}} "-load-pass-plugin" // FROM-HIP-PATH-SAME: {{".*/Inputs/hipspv/lib/libLLVMHipSpvPasses.so"}} @@ -48,4 +23,3 @@ // FROM-OPTION-INVALID: error: no such file or directory: 'foo.so' // NO-PLUGIN-NOT: {{".*opt"}} {{".*.bc"}} "-load-pass-plugin" // NO-PLUGIN-NOT: {{".*/Inputs/hipspv/lib/libLLVMHipSpvPasses.so"}} -// ALL: {{".*llvm-spirv[^ ]*"}} diff --git a/clang/test/Driver/hipspv-toolchain-rdc-separate.hip b/clang/test/Driver/hipspv-toolchain-rdc-separate.hip deleted file mode 100644 index 9d8e98856f7a3..0000000000000 --- a/clang/test/Driver/hipspv-toolchain-rdc-separate.hip +++ /dev/null @@ -1,66 +0,0 @@ -// UNSUPPORTED: system-windows - -// RUN: %clang -### -x hip -target x86_64-linux-gnu \ -// RUN: --offload=spirv64-unknown-chipstar --offload-new-driver -fgpu-rdc -c \ -// RUN: --hip-path=%S/Inputs/hipspv -nohipwrapperinc \ -// RUN: %S/Inputs/hip_multiple_inputs/a.cu \ -// RUN: %S/Inputs/hip_multiple_inputs/b.hip \ -// RUN: 2>&1 | FileCheck \ -// RUN: -DHIP_PATH=%S/Inputs/hipspv %s - -// CHECK: [[CLANG:".*clang[^ ]*"]] "-cc1" "-triple" "spirv64-unknown-chipstar" -// CHECK-SAME: "-aux-triple" "[[HOST_TRIPLE:[^ ]*]]" -// CHECK-SAME: "-emit-llvm-bc" -// CHECK-SAME: "-fcuda-is-device" "-fcuda-allow-variadic-functions" -// CHECK-SAME: "-fvisibility=hidden" "-fapply-global-visibility-to-externs" -// CHECK-SAME: "-mlink-builtin-bitcode" "[[HIP_PATH]]/lib/hip-device-lib/hipspv-spirv64-unknown-chipstar.bc" -// CHECK-SAME: "-fgpu-rdc" -// CHECK-SAME: "-o" "[[A_DEV_BC:.*bc]]" "-x" "hip" -// CHECK-SAME: "[[A_SRC:.*a.cu]]" - -// CHECK: "{{.*llvm-offload-binary[^ ]*}}" "-o" "[[A_BIN_PACKAGE:.*.out]]" -// CHECK-SAME: "--image=file=[[A_DEV_BC]],triple=spirv64-unknown-chipstar,arch=generic,kind=hip" - -// CHECK: [[CLANG]] "-cc1" "-triple" "[[HOST_TRIPLE]]" -// CHECK-SAME: "-aux-triple" "spirv64-unknown-chipstar" -// CHECK-SAME: "-emit-obj" -// CHECK-SAME: "-fgpu-rdc" -// CHECK-SAME: "-fembed-offload-object=[[A_BIN_PACKAGE]]" -// CHECK-SAME: "-o" "[[A_HOST_OBJ:.*o]]" "-x" "hip" "[[A_SRC]]" - -// CHECK: [[CLANG]] "-cc1" "-triple" "spirv64-unknown-chipstar" -// CHECK-SAME: "-aux-triple" "[[HOST_TRIPLE]]" -// CHECK-SAME: "-emit-llvm-bc" -// CHECK-SAME: "-fcuda-is-device" "-fcuda-allow-variadic-functions" -// CHECK-SAME: "-fvisibility=hidden" "-fapply-global-visibility-to-externs" -// CHECK-SAME: "-mlink-builtin-bitcode" "[[HIP_PATH]]/lib/hip-device-lib/hipspv-spirv64-unknown-chipstar.bc" -// CHECK-SAME: "-fgpu-rdc" -// CHECK-SAME: "-o" "[[B_DEV_BC:.*bc]]" "-x" "hip" -// CHECK-SAME: "[[B_SRC:.*b.hip]]" - -// CHECK: "{{.*llvm-offload-binary[^ ]*}}" "-o" "[[B_BIN_PACKAGE:.*.out]]" -// CHECK-SAME: "--image=file=[[B_DEV_BC]],triple=spirv64-unknown-chipstar,arch=generic,kind=hip" - -// CHECK: [[CLANG]] "-cc1" "-triple" "[[HOST_TRIPLE]]" -// CHECK-SAME: "-aux-triple" "spirv64-unknown-chipstar" -// CHECK-SAME: "-emit-obj" -// CHECK-SAME: "-fgpu-rdc" -// CHECK-SAME: "-fembed-offload-object=[[B_BIN_PACKAGE]]" -// CHECK-SAME: "-o" "[[B_HOST_OBJ:.*o]]" "-x" "hip" -// CHECK-SAME: "[[B_SRC]]" - -// RUN: rm -rf %t && mkdir %t -// RUN: touch %t/a.o %t/b.o -// RUN: %clang -### -target x86_64-linux-gnu --offload-new-driver -fgpu-rdc \ -// RUN: -Xoffload-compiler-spirv64-unknown-chipstar \ -// RUN: --hip-path=%S/Inputs/hipspv \ -// RUN: -no-hip-rt %t/a.o %t/b.o \ -// RUN: 2>&1 | FileCheck -check-prefixes=LINK \ -// RUN: -DHIP_PATH=%S/Inputs/hipspv %s - -// LINK: "{{.*clang-linker-wrapper[^ ]*}}" -// LINK-SAME: "--host-triple=x86_64-unknown-linux-gnu" -// LINK-SAME: "--device-compiler=spirv64-unknown-chipstar=--hip-path=[[HIP_PATH]]" -// LINK-SAME: "-o" "a.out" -// LINK-SAME: "{{.*a[.]o}}" "{{.*b[.]o}}" -// LINK-NOT: -lamdhip64 diff --git a/clang/test/Driver/hipspv-toolchain-rdc.hip b/clang/test/Driver/hipspv-toolchain-rdc.hip index 24e39ba0d16cf..05d9079f8dc18 100644 --- a/clang/test/Driver/hipspv-toolchain-rdc.hip +++ b/clang/test/Driver/hipspv-toolchain-rdc.hip @@ -4,113 +4,57 @@ // RUN: --no-offload-new-driver -fgpu-rdc --hip-path=%S/Inputs/hipspv -nohipwrapperinc \ // RUN: %S/Inputs/hip_multiple_inputs/a.cu \ // RUN: %S/Inputs/hip_multiple_inputs/b.hip \ -// RUN: 2>&1 | FileCheck --check-prefix=OLD %s - -// RUN: %clang -### -x hip -target x86_64-linux-gnu \ -// RUN: --offload=spirv64-unknown-chipstar --offload-new-driver -fgpu-rdc \ -// RUN: --hip-path=%S/Inputs/hipspv -nohipwrapperinc -no-hip-rt \ -// RUN: %S/Inputs/hip_multiple_inputs/a.cu \ -// RUN: %S/Inputs/hip_multiple_inputs/b.hip \ -// RUN: 2>&1 | FileCheck --check-prefix=NEW \ -// RUN: -DOFFLOAD_TRIPLE=spirv64-unknown-chipstar -DHIP_PATH=%S/Inputs/hipspv %s +// RUN: 2>&1 | FileCheck %s // Emit objects for host side path -// OLD: [[CLANG:".*clang.*"]] "-cc1" "-triple" "x86_64-unknown-linux-gnu" -// OLD-SAME: "-aux-triple" "spirv64" -// OLD-SAME: "-emit-obj" -// OLD-SAME: "-fgpu-rdc" -// OLD-SAME: {{.*}} "-o" [[A_OBJ_HOST:".*o"]] "-x" "hip" -// OLD-SAME: {{.*}} [[A_SRC:".*a.cu"]] - -// OLD: [[CLANG]] "-cc1" "-triple" "x86_64-unknown-linux-gnu" -// OLD-SAME: "-aux-triple" "spirv64" -// OLD-SAME: "-emit-obj" -// OLD-SAME: "-fgpu-rdc" -// OLD-SAME: {{.*}} "-o" [[B_OBJ_HOST:".*o"]] "-x" "hip" -// OLD-SAME: {{.*}} [[B_SRC:".*b.hip"]] +// CHECK: [[CLANG:".*clang.*"]] "-cc1" "-triple" "x86_64-unknown-linux-gnu" +// CHECK-SAME: "-aux-triple" "spirv64" +// CHECK-SAME: "-emit-obj" +// CHECK-SAME: "-fgpu-rdc" +// CHECK-SAME: {{.*}} "-o" [[A_OBJ_HOST:".*o"]] "-x" "hip" +// CHECK-SAME: {{.*}} [[A_SRC:".*a.cu"]] + +// CHECK: [[CLANG]] "-cc1" "-triple" "x86_64-unknown-linux-gnu" +// CHECK-SAME: "-aux-triple" "spirv64" +// CHECK-SAME: "-emit-obj" +// CHECK-SAME: "-fgpu-rdc" +// CHECK-SAME: {{.*}} "-o" [[B_OBJ_HOST:".*o"]] "-x" "hip" +// CHECK-SAME: {{.*}} [[B_SRC:".*b.hip"]] // Emit code (LLVM BC) for device side path. -// OLD: [[CLANG]] "-cc1" "-triple" "spirv64" -// OLD-SAME: "-aux-triple" "x86_64-unknown-linux-gnu" -// OLD-SAME: "-emit-llvm-bc" -// OLD-SAME: "-fcuda-is-device" "-fcuda-allow-variadic-functions" -// OLD-SAME: "-fvisibility=hidden" "-fapply-global-visibility-to-externs" -// OLD-SAME: "-fgpu-rdc" -// OLD-SAME: {{.*}} "-o" [[A_BC1:".*bc"]] "-x" "hip" -// OLD-SAME: {{.*}} [[A_SRC]] - -// OLD: [[CLANG]] "-cc1" "-triple" "spirv64" -// OLD-SAME: "-aux-triple" "x86_64-unknown-linux-gnu" -// OLD-SAME: "-emit-llvm-bc" -// OLD-SAME: "-fcuda-is-device" "-fcuda-allow-variadic-functions" -// OLD-SAME: "-fvisibility=hidden" "-fapply-global-visibility-to-externs" -// OLD-SAME: "-fgpu-rdc" -// OLD-SAME: {{.*}} "-o" [[B_BC1:".*bc"]] "-x" "hip" -// OLD-SAME: {{.*}} [[B_SRC]] +// CHECK: [[CLANG]] "-cc1" "-triple" "spirv64" +// CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu" +// CHECK-SAME: "-emit-llvm-bc" +// CHECK-SAME: "-fcuda-is-device" "-fcuda-allow-variadic-functions" +// CHECK-SAME: "-fvisibility=hidden" "-fapply-global-visibility-to-externs" +// CHECK-SAME: "-fgpu-rdc" +// CHECK-SAME: {{.*}} "-o" [[A_BC1:".*bc"]] "-x" "hip" +// CHECK-SAME: {{.*}} [[A_SRC]] + +// CHECK: [[CLANG]] "-cc1" "-triple" "spirv64" +// CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu" +// CHECK-SAME: "-emit-llvm-bc" +// CHECK-SAME: "-fcuda-is-device" "-fcuda-allow-variadic-functions" +// CHECK-SAME: "-fvisibility=hidden" "-fapply-global-visibility-to-externs" +// CHECK-SAME: "-fgpu-rdc" +// CHECK-SAME: {{.*}} "-o" [[B_BC1:".*bc"]] "-x" "hip" +// CHECK-SAME: {{.*}} [[B_SRC]] // Link device code, lower it with HIPSPV passes and emit SPIR-V binary. -// OLD: {{".*llvm-link.*"}} "-o" [[AB_LINK:".*bc"]] [[A_BC1]] [[B_BC1]] -// OLD: {{".*opt.*"}} [[AB_LINK]] "-load-pass-plugin" -// OLD-SAME: "{{.*}}/Inputs/hipspv/lib/libLLVMHipSpvPasses.so" -// OLD-SAME: "-o" [[AB_LOWER:".*bc"]] -// OLD: {{".*llvm-spirv"}} "--spirv-max-version=1.1" "--spirv-ext=+all" -// OLD-SAME: [[AB_LOWER]] "-o" "[[AB_SPIRV:.*out]]" +// CHECK: {{".*llvm-link.*"}} "-o" [[AB_LINK:".*bc"]] [[A_BC1]] [[B_BC1]] +// CHECK: {{".*opt.*"}} [[AB_LINK]] "-load-pass-plugin" +// CHECK-SAME: "{{.*}}/Inputs/hipspv/lib/libLLVMHipSpvPasses.so" +// CHECK-SAME: "-o" [[AB_LOWER:".*bc"]] +// CHECK: {{".*llvm-spirv"}} "--spirv-max-version=1.1" "--spirv-ext=+all" +// CHECK-SAME: [[AB_LOWER]] "-o" "[[AB_SPIRV:.*out]]" // Construct fat binary object. -// OLD: [[BUNDLER:".*clang-offload-bundler"]] "-type=o" "-bundle-align=4096" -// OLD-SAME: "-targets={{.*}},hip-spirv64----generic" -// OLD-SAME: "-input=/dev/null" "-input=[[AB_SPIRV]]" -// OLD-SAME: "-output=[[AB_FATBIN:.*hipfb]]" -// OLD: {{".*clang.*"}} "-o" [[OBJBUNDLE:".*o"]] "{{.*}}.mcin" +// CHECK: [[BUNDLER:".*clang-offload-bundler"]] "-type=o" "-bundle-align=4096" +// CHECK-SAME: "-targets={{.*}},hip-spirv64----generic" +// CHECK-SAME: "-input=/dev/null" "-input=[[AB_SPIRV]]" +// CHECK-SAME: "-output=[[AB_FATBIN:.*hipfb]]" +// CHECK: {{".*clang.*"}} "-o" [[OBJBUNDLE:".*o"]] "{{.*}}.mcin" // Output the executable -// OLD: {{".*ld.*"}} {{.*}}"-o" "a.out" {{.*}} [[A_OBJ_HOST]] [[B_OBJ_HOST]] -// OLD-SAME: [[OBJBUNDLE]] - -// NEW: [[CLANG:".*clang[^ ]*"]] "-cc1" "-triple" "[[OFFLOAD_TRIPLE]]" -// NEW-SAME: "-aux-triple" "[[HOST_TRIPLE:[^ ]*]]" -// NEW-SAME: "-emit-llvm-bc" -// NEW-SAME: "-fcuda-is-device" "-fcuda-allow-variadic-functions" -// NEW-SAME: "-fvisibility=hidden" "-fapply-global-visibility-to-externs" -// NEW-SAME: "-mlink-builtin-bitcode" "[[HIP_PATH]]/lib/hip-device-lib/hipspv-spirv64-unknown-chipstar.bc" -// NEW-SAME: "-fgpu-rdc" -// NEW-SAME: "-o" "[[A_DEV_BC:.*bc]]" "-x" "hip" -// NEW-SAME: "[[A_SRC:.*a.cu]]" - -// NEW: "{{.*llvm-offload-binary[^ ]*}}" "-o" "[[A_BIN_PACKAGE:.*.out]]" -// NEW-SAME: "--image=file=[[A_DEV_BC]],triple=[[OFFLOAD_TRIPLE]],arch=generic,kind=hip" - -// NEW: [[CLANG]] "-cc1" "-triple" "[[HOST_TRIPLE]]" -// NEW-SAME: "-aux-triple" "[[OFFLOAD_TRIPLE]]" -// NEW-SAME: "-emit-obj" -// NEW-SAME: "-fgpu-rdc" -// NEW-SAME: "-fembed-offload-object=[[A_BIN_PACKAGE]]" -// NEW-SAME: "-o" "[[A_HOST_OBJ:.*o]]" "-x" "hip" "[[A_SRC]]" - -// NEW: [[CLANG]] "-cc1" "-triple" "[[OFFLOAD_TRIPLE]]" -// NEW-SAME: "-aux-triple" "[[HOST_TRIPLE]]" -// NEW-SAME: "-emit-llvm-bc" -// NEW-SAME: "-fcuda-is-device" "-fcuda-allow-variadic-functions" -// NEW-SAME: "-fvisibility=hidden" "-fapply-global-visibility-to-externs" -// NEW-SAME: "-mlink-builtin-bitcode" "[[HIP_PATH]]/lib/hip-device-lib/hipspv-spirv64-unknown-chipstar.bc" -// NEW-SAME: "-fgpu-rdc" -// NEW-SAME: "-o" "[[B_DEV_BC:.*bc]]" "-x" "hip" -// NEW-SAME: "[[B_SRC:.*b.hip]]" - -// NEW: "{{.*llvm-offload-binary[^ ]*}}" "-o" "[[B_BIN_PACKAGE:.*.out]]" -// NEW-SAME: "--image=file=[[B_DEV_BC]],triple=[[OFFLOAD_TRIPLE]],arch=generic,kind=hip" - -// NEW: [[CLANG]] "-cc1" "-triple" "[[HOST_TRIPLE]]" -// NEW-SAME: "-aux-triple" "[[OFFLOAD_TRIPLE]]" -// NEW-SAME: "-emit-obj" -// NEW-SAME: "-fgpu-rdc" -// NEW-SAME: "-fembed-offload-object=[[B_BIN_PACKAGE]]" -// NEW-SAME: "-o" "[[B_HOST_OBJ:.*o]]" "-x" "hip" -// NEW-SAME: "[[B_SRC]]" - -// NEW: "{{.*clang-linker-wrapper[^ ]*}}" -// NEW-SAME: "--device-compiler=[[OFFLOAD_TRIPLE]]=--hip-path=[[HIP_PATH]]" -// NEW-SAME: "--host-triple=[[HOST_TRIPLE]]" -// NEW-SAME: "-o" "a.out" -// NEW-SAME: "[[A_HOST_OBJ]]" "[[B_HOST_OBJ]]" -// NEW-NOT: -lamdhip64 +// CHECK: {{".*ld.*"}} {{.*}}"-o" "a.out" {{.*}} [[A_OBJ_HOST]] [[B_OBJ_HOST]] +// CHECK-SAME: [[OBJBUNDLE]] diff --git a/clang/test/Driver/hipspv-toolchain.hip b/clang/test/Driver/hipspv-toolchain.hip index 3749a41a7181c..85c4333e877f2 100644 --- a/clang/test/Driver/hipspv-toolchain.hip +++ b/clang/test/Driver/hipspv-toolchain.hip @@ -2,92 +2,37 @@ // RUN: %clang -### -target x86_64-linux-gnu --offload=spirv64 \ // RUN: --no-offload-new-driver --hip-path=%S/Inputs/hipspv -nohipwrapperinc %s \ -// RUN: 2>&1 | FileCheck --check-prefixes=CHECK,OLD \ -// RUN: -DTRIPLE=spirv64 %s +// RUN: 2>&1 | FileCheck %s -// RUN: %clang -### -target x86_64-linux-gnu \ -// RUN: --offload=spirv64-unknown-chipstar \ -// RUN: --offload-new-driver --hip-path=%S/Inputs/hipspv -nohipwrapperinc %s \ -// RUN: 2>&1 | FileCheck --check-prefixes=CHECK,NEW \ -// RUN: -DTRIPLE=spirv64-unknown-chipstar -DHIP_PATH=%S/Inputs/hipspv %s - -// CHECK: [[CLANG:".*clang.*"]] "-cc1" "-triple" "[[TRIPLE]]" +// CHECK: [[CLANG:".*clang.*"]] "-cc1" "-triple" "spirv64" // CHECK-SAME: "-aux-triple" "{{.*}}" "-emit-llvm-bc" // CHECK-SAME: "-fcuda-is-device" // CHECK-SAME: "-fcuda-allow-variadic-functions" -// CHECK-SAME: "-mlink-builtin-bitcode" {{".*/hipspv/lib/hip-device-lib/hipspv-}}[[TRIPLE]].bc" +// CHECK-SAME: "-mlink-builtin-bitcode" {{".*/hipspv/lib/hip-device-lib/hipspv-spirv64.bc"}} // CHECK-SAME: "-isystem" {{".*/hipspv/include"}} // CHECK-SAME: "-fhip-new-launch-api" -// CHECK-SAME: "-o" "[[OBJ_DEV:.*(o|bc)]]" +// CHECK-SAME: "-o" [[DEV_BC:".*bc"]] // CHECK-SAME: "-x" "hip" -// OLD: {{".*llvm-link"}} "-o" [[LINK_BC:".*bc"]] "[[OBJ_DEV]]" - -// OLD: {{".*opt"}} [[LINK_BC]] "-load-pass-plugin" -// OLD-SAME: {{".*/hipspv/lib/libLLVMHipSpvPasses.so"}} -// OLD-SAME: "-passes=hip-post-link-passes" "-o" [[LOWER_BC:".*bc"]] +// CHECK: {{".*llvm-link"}} "-o" [[LINK_BC:".*bc"]] [[DEV_BC]] -// OLD: {{".*llvm-spirv"}} "--spirv-max-version=1.1" "--spirv-ext=+all" -// OLD-SAME: [[LOWER_BC]] "-o" "[[SPIRV_OUT:.*out]]" +// CHECK: {{".*opt"}} [[LINK_BC]] "-load-pass-plugin" +// CHECK-SAME: {{".*/hipspv/lib/libLLVMHipSpvPasses.so"}} +// CHECK-SAME: "-passes=hip-post-link-passes" "-o" [[LOWER_BC:".*bc"]] -// OLD: {{".*clang-offload-bundler"}} "-type=o" "-bundle-align=4096" -// OLD-SAME: "-targets=host-x86_64-unknown-linux-gnu,hip-spirv64----generic" -// OLD-SAME: "-input={{.*}}" "-input=[[SPIRV_OUT]]" "-output=[[BUNDLE:.*hipfb]]" +// CHECK: {{".*llvm-spirv"}} "--spirv-max-version=1.1" "--spirv-ext=+all" +// CHECK-SAME: [[LOWER_BC]] "-o" "[[SPIRV_OUT:.*out]]" -// NEW: {{".*llvm-offload-binary"}} "-o" "[[PACKAGE:.*.out]]" -// NEW-SAME: "--image=file=[[OBJ_DEV]],triple=[[TRIPLE]],arch=generic,kind=hip" +// CHECK: {{".*clang-offload-bundler"}} "-type=o" "-bundle-align=4096" +// CHECK-SAME: "-targets=host-x86_64-unknown-linux-gnu,hip-spirv64----generic" +// CHECK-SAME: "-input={{.*}}" "-input=[[SPIRV_OUT]]" "-output=[[BUNDLE:.*hipfb]]" -// NEW: {{".*clang-linker-wrapper"}} "--device-compiler=[[TRIPLE]]=--hip-path=[[HIP_PATH]]" -// NEW-SAME: "--emit-fatbin-only" "-o" "[[BUNDLE:.*hipfb]]" - -// CHECK: [[CLANG]] "-cc1" "-triple" {{".*"}} "-aux-triple" "[[TRIPLE]]" +// CHECK: [[CLANG]] "-cc1" "-triple" {{".*"}} "-aux-triple" "spirv64" // CHECK-SAME: "-emit-obj" // CHECK-SAME: "-fcuda-include-gpubinary" "[[BUNDLE]]" // CHECK-SAME: "-o" [[OBJ_HOST:".*o"]] "-x" "hip" -// OLD: {{".*ld.*"}} {{.*}}[[OBJ_HOST]] - -// NEW: {{".*clang-linker-wrapper"}} -// NEW-SAME: "--linker-path={{.*ld.*}}" "-o" "a.out" -// NEW-SAME: [[OBJ_HOST]] - -//------------------------------------------------------------------------------ -// Check the clang command, invoked by the linker wrapper, selects the HIPSPV -// toolchain for the new offload driver. - -// RUN: %clang --offload-new-driver -target x86_64-linux-gnu -nogpuinc \ -// RUN: -nogpulib --offload=spirv64-unknown-chipstar \ -// RUN: --hip-path=%S/Inputs/hipspv -Xoffload-compiler \ -// RUN: '-###' -c %s -o /dev/null 2>&1 \ -// RUN: | FileCheck %s --check-prefix=CHIPSTAR - -// CHIPSTAR: {{".*llvm-link"}} -// CHIPSTAR-SAME: "-o" [[LINK_BC:".*bc"]] "{{[^ ]*.o}}" - -// CHIPSTAR: {{".*opt"}} [[LINK_BC]] "-load-pass-plugin" -// CHIPSTAR-SAME: {{".*/hipspv/lib/libLLVMHipSpvPasses.so"}} -// CHIPSTAR-SAME: "-passes=hip-post-link-passes" "-o" [[LOWER_BC:".*bc"]] - -// CHIPSTAR: {{".*llvm-spirv"}} "--spirv-max-version=1.2" -// CHIPSTAR-SAME: "--spirv-ext=-all,+SPV_INTEL_function_pointers,+SPV_INTEL_subgroups" -// CHIPSTAR-SAME: [[LOWER_BC]] "-o" "[[SPIRV_OUT:.*img]]" - -// RUN: %clang --offload-new-driver -target x86_64-linux-gnu -nogpuinc \ -// RUN: -nogpulib --offload=spirv64v1.3-unknown-chipstar \ -// RUN: --hip-path=%S/Inputs/hipspv -Xoffload-compiler \ -// RUN: '-###' -c %s -o /dev/null 2>&1 \ -// RUN: | FileCheck %s --check-prefix=CHIPSTAR_SUBARCH - -// CHIPSTAR_SUBARCH: {{".*llvm-link"}} -// CHIPSTAR_SUBARCH-SAME: "-o" [[LINK_BC:".*bc"]] "{{[^ ]*.o}}" - -// CHIPSTAR_SUBARCH: {{".*opt"}} [[LINK_BC]] "-load-pass-plugin" -// CHIPSTAR_SUBARCH-SAME: {{".*/hipspv/lib/libLLVMHipSpvPasses.so"}} -// CHIPSTAR_SUBARCH-SAME: "-passes=hip-post-link-passes" "-o" [[LOWER_BC:".*bc"]] - -// CHIPSTAR_SUBARCH: {{".*llvm-spirv"}} -// CHIPSTAR_SUBARCH-SAME: "--spirv-ext=-all,+SPV_INTEL_function_pointers,+SPV_INTEL_subgroups" -// CHIPSTAR_SUBARCH-SAME: [[LOWER_BC]] "-o" "[[SPIRV_OUT:.*img]]" +// CHECK: {{".*ld.*"}} {{.*}}[[OBJ_HOST]] //----------------------------------------------------------------------------- // Check llvm-spirv-<LLVM_VERSION_MAJOR> is used if it is found in PATH. @@ -96,14 +41,8 @@ // RUN: && chmod +x %t/versioned/llvm-spirv-%llvm-version-major // RUN: env "PATH=%t/versioned" %clang -### -target x86_64-linux-gnu \ // RUN: --offload=spirv64 --hip-path=%S/Inputs/hipspv -nohipwrapperinc \ -// RUN: --no-offload-new-driver %s 2>&1 \ +// RUN: %s 2>&1 \ // RUN: | FileCheck -DVERSION=%llvm-version-major \ // RUN: --check-prefix=VERSIONED %s -// RUN: env "PATH=%t/versioned" %clang -target x86_64-linux-gnu --offload-new-driver \ -// RUN: -nogpuinc -nogpulib --offload=spirv64-unknown-chipstar \ -// RUN: --hip-path=%S/Inputs/hipspv -Xoffload-compiler '-###' -c %s \ -// RUN: -o /dev/null 2>&1 \ -// RUN: | FileCheck -DVERSION=%llvm-version-major --check-prefix=VERSIONED %s - // VERSIONED: {{.*}}llvm-spirv-[[VERSION]] diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp index 619e539857fc6..48a3c5f97e375 100644 --- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp +++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp @@ -409,19 +409,8 @@ fatbinary(ArrayRef<std::pair<StringRef, StringRef>> InputFiles, } // namespace nvptx namespace amdgcn { - -// Constructs a triple string for clang offload bundler. -// NOTE: copied from HIPUtility.cpp. -static std::string normalizeForBundler(const llvm::Triple &T, - bool HasTargetID) { - return HasTargetID ? (T.getArchName() + "-" + T.getVendorName() + "-" + - T.getOSName() + "-" + T.getEnvironmentName()) - .str() - : T.normalize(llvm::Triple::CanonicalForm::FOUR_IDENT); -} - Expected<StringRef> -fatbinary(ArrayRef<std::tuple<StringRef, StringRef, StringRef>> InputFiles, +fatbinary(ArrayRef<std::pair<StringRef, StringRef>> InputFiles, const ArgList &Args) { llvm::TimeTraceScope TimeScope("AMDGPU Fatbinary"); @@ -452,10 +441,10 @@ fatbinary(ArrayRef<std::tuple<StringRef, StringRef, StringRef>> InputFiles, Args.MakeArgString(Twine("-compression-level=") + Arg->getValue())); SmallVector<StringRef> Targets = {"-targets=host-x86_64-unknown-linux-gnu"}; - for (const auto &[File, TripleRef, Arch] : InputFiles) { - std::string NormalizedTriple = - normalizeForBundler(Triple(TripleRef), !Arch.empty()); - Targets.push_back(Saver.save("hip-" + NormalizedTriple + "-" + Arch)); + for (const auto &[File, Arch] : InputFiles) { + Targets.push_back(Saver.save(Arch == "amdgcnspirv" + ? "hip-spirv64-amd-amdhsa--" + Arch + : "hip-amdgcn-amd-amdhsa--" + Arch)); } CmdArgs.push_back(Saver.save(llvm::join(Targets, ","))); @@ -464,7 +453,7 @@ fatbinary(ArrayRef<std::tuple<StringRef, StringRef, StringRef>> InputFiles, #else CmdArgs.push_back("-input=/dev/null"); #endif - for (const auto &[File, Triple, Arch] : InputFiles) + for (const auto &[File, Arch] : InputFiles) CmdArgs.push_back(Saver.save("-input=" + File)); CmdArgs.push_back(Saver.save("-output=" + *TempFileOrErr)); @@ -827,11 +816,10 @@ bundleCuda(ArrayRef<OffloadingImage> Images, const ArgList &Args) { Expected<SmallVector<std::unique_ptr<MemoryBuffer>>> bundleHIP(ArrayRef<OffloadingImage> Images, const ArgList &Args) { - SmallVector<std::tuple<StringRef, StringRef, StringRef>, 4> InputFiles; + SmallVector<std::pair<StringRef, StringRef>, 4> InputFiles; for (const OffloadingImage &Image : Images) - InputFiles.emplace_back(std::make_tuple(Image.Image->getBufferIdentifier(), - Image.StringData.lookup("triple"), - Image.StringData.lookup("arch"))); + InputFiles.emplace_back(std::make_pair(Image.Image->getBufferIdentifier(), + Image.StringData.lookup("arch"))); auto FileOrErr = amdgcn::fatbinary(InputFiles, Args); if (!FileOrErr) _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
