Author: Joseph Huber Date: 2026-06-12T09:59:21-05:00 New Revision: 52751a0fda17f0dac1c441aee6617ab1b1434f4d
URL: https://github.com/llvm/llvm-project/commit/52751a0fda17f0dac1c441aee6617ab1b1434f4d DIFF: https://github.com/llvm/llvm-project/commit/52751a0fda17f0dac1c441aee6617ab1b1434f4d.diff LOG: [AMDGPU][SPIR-V] Fix treating SPIR-V input as the wrong LLVM-IR (#202986) Summary: This hack is intended for non-RDC AMDGCN. Added: Modified: clang/lib/Driver/ToolChains/Clang.cpp clang/test/Driver/hip-toolchain-no-rdc.hip Removed: ################################################################################ diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index b6bab8f58a160..04f9ddc568768 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -5385,22 +5385,20 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-emit-llvm-uselists"); if (IsUsingLTO) { + const Arg *LTOArg = Args.getLastArg(options::OPT_foffload_lto, + options::OPT_foffload_lto_EQ); if (IsDeviceOffloadAction && !JA.isDeviceOffloading(Action::OFK_OpenMP) && !Args.hasFlag(options::OPT_offload_new_driver, options::OPT_no_offload_new_driver, C.getActiveOffloadKinds() != Action::OFK_None) && - !Triple.isAMDGPU()) { + !Triple.isAMDGPU() && !Triple.isSPIRV()) { D.Diag(diag::err_drv_unsupported_opt_for_target) - << Args.getLastArg(options::OPT_foffload_lto, - options::OPT_foffload_lto_EQ) - ->getAsString(Args) + << (LTOArg ? LTOArg->getAsString(Args) : "-foffload-lto") << Triple.getTriple(); } else if (Triple.isNVPTX() && !IsRDCMode && JA.isDeviceOffloading(Action::OFK_Cuda)) { D.Diag(diag::err_drv_unsupported_opt_for_language_mode) - << Args.getLastArg(options::OPT_foffload_lto, - options::OPT_foffload_lto_EQ) - ->getAsString(Args) + << (LTOArg ? LTOArg->getAsString(Args) : "-foffload-lto") << "-fno-gpu-rdc"; } else { assert(LTOMode == LTOK_Full || LTOMode == LTOK_Thin); @@ -9576,6 +9574,7 @@ void LinkerWrapper::ConstructJob(Compilation &C, const JobAction &JA, OPT_flto_EQ, OPT_hipspv_pass_plugin_EQ, OPT_use_spirv_backend, + OPT_no_use_spirv_backend, OPT_fmultilib_flag, OPT_fprofile_generate, OPT_fprofile_generate_EQ, @@ -9639,10 +9638,13 @@ void LinkerWrapper::ConstructJob(Compilation &C, const JobAction &JA, for (Arg *A : ToolChainArgs) { if (A->getOption().matches(OPT_Zlinker_input)) LinkerArgs.emplace_back(A->getValue()); - else if (ShouldForward(CompilerOptions, A, *TC)) + else if (ShouldForward(CompilerOptions, A, *TC)) { + A->claim(); A->render(Args, CompilerArgs); - else if (ShouldForward(LinkerOptions, A, *TC)) + } else if (ShouldForward(LinkerOptions, A, *TC)) { + A->claim(); A->render(Args, LinkerArgs); + } } // If the user explicitly requested it via `--offload-arch` we should @@ -9713,7 +9715,7 @@ void LinkerWrapper::ConstructJob(Compilation &C, const JobAction &JA, options::OPT_fprofile_instr_generate_EQ); if (!Args.hasArg(options::OPT_foffload_lto_EQ, options::OPT_fno_offload_lto) && - !UsesProfileGenerate) + !UsesProfileGenerate && !TC->getTriple().isSPIRV()) CmdArgs.push_back("--no-lto"); } } diff --git a/clang/test/Driver/hip-toolchain-no-rdc.hip b/clang/test/Driver/hip-toolchain-no-rdc.hip index 591342df3839c..69bb3a47e38b3 100644 --- a/clang/test/Driver/hip-toolchain-no-rdc.hip +++ b/clang/test/Driver/hip-toolchain-no-rdc.hip @@ -36,17 +36,24 @@ // RUN: %t/a.o %t/b.o \ // RUN: 2>&1 | FileCheck -check-prefixes=LKONLY %s -// FIXME: AMDGCNSPIRV + no-offload-new-driver crashes (separate bug). -// UN: %clang -### --target=x86_64-linux-gnu --no-offload-new-driver \ -// UN: --offload-arch=amdgcnspirv --offload-arch=gfx900 \ -// UN: %s -nogpuinc -nogpulib -fno-lto \ -// UN: 2>&1 | FileCheck -check-prefixes=AMDGCNSPIRV %s +// RUN: %clang -### --target=x86_64-linux-gnu --no-offload-new-driver \ +// RUN: --offload-arch=amdgcnspirv --offload-arch=gfx900 \ +// RUN: %s -nogpuinc -nogpulib \ +// RUN: 2>&1 | FileCheck -check-prefixes=AMDGCNSPIRV %s // RUN: %clang -### --target=x86_64-linux-gnu --offload-new-driver \ // RUN: --offload-arch=amdgcnspirv --offload-arch=gfx900 \ // RUN: %s -nogpuinc -nogpulib \ // RUN: 2>&1 | FileCheck -check-prefixes=AMDGCNSPIRV-NEW %s +// SPIR-V requires the LTO pipeline; --no-lto must not be passed. +// RUN: %clang -### --target=x86_64-linux-gnu -fno-gpu-rdc \ +// RUN: --offload-arch=amdgcnspirv -nogpuinc -nogpulib \ +// RUN: %s 2>&1 | FileCheck -check-prefixes=SPIRV-NO-LTO %s +// SPIRV-NO-LTO: {{".*clang-linker-wrapper}} +// SPIRV-NO-LTO-NOT: "--no-lto" +// SPIRV-NO-LTO-SAME: "--emit-fatbin-only" + // Profile generation needs LTO, so the linker wrapper must not get --no-lto. // RUN: %clang -### --target=x86_64-linux-gnu -fno-gpu-rdc -fprofile-generate \ // RUN: -x hip --cuda-gpu-arch=gfx900 -nogpuinc -nogpulib --offload-new-driver \ @@ -223,11 +230,11 @@ // Check mixed AMDGCNSPIRV and concrete GPU arch. // -// AMDGCNSPIRV: "-cc1" "-triple" "spirv64-amd-amdhsa" {{.*}}"-emit-llvm-bc" {{.*}}"-fembed-bitcode=marker" "-disable-llvm-passes" {{.*}} "-o" "[[AMDGCNSPV_BC:.*bc]]" +// AMDGCNSPIRV: "-cc1" "-triple" "spirv64-amd-amdhsa" {{.*}}"-emit-llvm-bc" {{.*}}"-flto=full"{{.*}} "-fembed-bitcode=marker" "-disable-llvm-passes" {{.*}} "-o" "[[AMDGCNSPV_BC:.*bc]]" // AMDGCNSPIRV: {{".*llvm-link.*"}} "-o" "[[AMDGCNSPV_TMP:.*bc]]" "[[AMDGCNSPV_BC]]" // AMDGCNSPIRV: {{".*llvm-spirv.*"}} "--spirv-max-version=1.6" "--spirv-ext=+all" {{.*}} "[[AMDGCNSPV_TMP]]" {{.*}}"-o" "[[AMDGCNSPV_CO:.*out]]" -// AMDGCNSPIRV: "-cc1" "-triple" "amdgcn-amd-amdhsa" {{.*}}"-emit-obj" {{.*}}"-target-cpu" "gfx900"{{.*}} "-o" "[[GFX900_OBJ:.*o]]" -// AMDGCNSPIRV: {{".*lld.*"}} {{.*}}"-plugin-opt=mcpu=gfx900" {{.*}} "-o" "[[GFX900_CO:.*out]]" {{.*}}"[[GFX900_OBJ]]" +// AMDGCNSPIRV: "-cc1" "-triple" "amdgcn-amd-amdhsa" {{.*}}"-emit-llvm-bc" {{.*}}"-flto=full"{{.*}} "-target-cpu" "gfx900"{{.*}} "-o" "[[GFX900_BC:.*bc]]" +// AMDGCNSPIRV: {{".*lld.*"}} {{.*}}"-plugin-opt=mcpu=gfx900" {{.*}} "-o" "[[GFX900_CO:.*out]]" {{.*}}"[[GFX900_BC]]" // AMDGCNSPIRV: {{".*clang-offload-bundler.*"}} "-type=o" // AMDGCNSPIRV-SAME: "-targets={{.*}}hip-spirv64-amd-amdhsa--amdgcnspirv,hip-amdgcn-amd-amdhsa--gfx900" // AMDGCNSPIRV-SAME: "-input=[[AMDGCNSPV_CO]]" "-input=[[GFX900_CO]]" _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
