diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 80728daca03c9..eb60d907d2218 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -1596,28 +1596,27 @@ Compilation *Driver::BuildCompilation(ArrayRef ArgList) { A->claim(); if (Args.hasArg(options::OPT_spirv)) { + const llvm::StringMap ValidTargets = { + {"vulkan1.2", llvm::Triple::SPIRVSubArch_v15}, + {"vulkan1.3", llvm::Triple::SPIRVSubArch_v16}}; llvm::Triple T(TargetTriple); - T.setArch(llvm::Triple::spirv); - T.setOS(llvm::Triple::Vulkan); - // Set specific Vulkan version if applicable. + // Set specific Vulkan version. Default to vulkan1.3. + auto TargetInfo = ValidTargets.find("vulkan1.3"); + assert(TargetInfo != ValidTargets.end()); if (const Arg *A = Args.getLastArg(options::OPT_fspv_target_env_EQ)) { - const llvm::StringMap ValidTargets = { - {"vulkan1.2", llvm::Triple::SPIRVSubArch_v15}, - {"vulkan1.3", llvm::Triple::SPIRVSubArch_v16}}; - - auto TargetInfo = ValidTargets.find(A->getValue()); - if (TargetInfo != ValidTargets.end()) { - T.setOSName(TargetInfo->getKey()); - T.setArch(llvm::Triple::spirv, TargetInfo->getValue()); - } else { + TargetInfo = ValidTargets.find(A->getValue()); + if (TargetInfo == ValidTargets.end()) { Diag(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue(); } A->claim(); } - - TargetTriple = T.str(); + if (TargetInfo != ValidTargets.end()) { + T.setOSName(TargetInfo->getKey()); + T.setArch(llvm::Triple::spirv, TargetInfo->getValue()); + TargetTriple = T.str(); + } } } else { Diag(diag::err_drv_dxc_missing_target_profile); diff --git a/clang/test/Driver/dxc_spirv.hlsl b/clang/test/Driver/dxc_spirv.hlsl index e6624e5f1b3f6..65c9018dc54c5 100644 --- a/clang/test/Driver/dxc_spirv.hlsl +++ b/clang/test/Driver/dxc_spirv.hlsl @@ -3,7 +3,7 @@ // RUN: %clang_dxc -T cs_6_0 -spirv -fspv-target-env=vulkan1.3 -### %s 2>&1 | FileCheck %s --check-prefix=CHECK-VULKAN13 // RUN: not %clang_dxc -T cs_6_0 -spirv -fspv-target-env=vulkan1.0 -### %s 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR -// CHECK: "-triple" "spirv-unknown-vulkan-compute" +// CHECK: "-triple" "spirv1.6-unknown-vulkan1.3-compute" // CHECK-SAME: "-x" "hlsl" // CHECK-VULKAN12: "-triple" "spirv1.5-unknown-vulkan1.2-compute"