Skip to content

Commit ce51d8c

Browse files
committed
Merge from 'main' to 'sycl-web' (9 commits)
CONFLICT (modify/delete): clang/lib/CodeGen/BackendConsumer.h deleted in HEAD and modified in 8d9b154. Version 8d9b154 of clang/lib/CodeGen/BackendConsumer.h left in tree. CONFLICT (content): Merge conflict in clang/lib/CodeGen/CodeGenAction.cpp
2 parents d95884f + 8d9b154 commit ce51d8c

33 files changed

+1416
-930
lines changed

clang/docs/StandardCPlusPlusModules.rst

Lines changed: 604 additions & 611 deletions
Large diffs are not rendered by default.

clang/lib/Basic/Targets.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -814,7 +814,7 @@ using namespace clang::targets;
814814
TargetInfo *
815815
TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags,
816816
const std::shared_ptr<TargetOptions> &Opts) {
817-
llvm::Triple Triple(Opts->Triple);
817+
llvm::Triple Triple(llvm::Triple::normalize(Opts->Triple));
818818

819819
// Construct the target
820820
std::unique_ptr<TargetInfo> Target = AllocateTarget(Triple, *Opts);

clang/lib/CodeGen/BackendConsumer.h

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
//===--- BackendConsumer.h - LLVM BackendConsumer Header File -------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef LLVM_CLANG_LIB_CODEGEN_BACKENDCONSUMER_H
10+
#define LLVM_CLANG_LIB_CODEGEN_BACKENDCONSUMER_H
11+
12+
#include "clang/CodeGen/BackendUtil.h"
13+
#include "clang/CodeGen/CodeGenAction.h"
14+
15+
#include "llvm/IR/DiagnosticInfo.h"
16+
#include "llvm/Support/Timer.h"
17+
18+
namespace llvm {
19+
class DiagnosticInfoDontCall;
20+
}
21+
22+
namespace clang {
23+
class ASTContext;
24+
class CodeGenAction;
25+
class CoverageSourceInfo;
26+
27+
class BackendConsumer : public ASTConsumer {
28+
using LinkModule = CodeGenAction::LinkModule;
29+
30+
virtual void anchor();
31+
DiagnosticsEngine &Diags;
32+
BackendAction Action;
33+
const HeaderSearchOptions &HeaderSearchOpts;
34+
const CodeGenOptions &CodeGenOpts;
35+
const TargetOptions &TargetOpts;
36+
const LangOptions &LangOpts;
37+
std::unique_ptr<raw_pwrite_stream> AsmOutStream;
38+
ASTContext *Context;
39+
IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS;
40+
41+
llvm::Timer LLVMIRGeneration;
42+
unsigned LLVMIRGenerationRefCount;
43+
44+
/// True if we've finished generating IR. This prevents us from generating
45+
/// additional LLVM IR after emitting output in HandleTranslationUnit. This
46+
/// can happen when Clang plugins trigger additional AST deserialization.
47+
bool IRGenFinished = false;
48+
49+
bool TimerIsEnabled = false;
50+
51+
std::unique_ptr<CodeGenerator> Gen;
52+
53+
SmallVector<LinkModule, 4> LinkModules;
54+
55+
// A map from mangled names to their function's source location, used for
56+
// backend diagnostics as the Clang AST may be unavailable. We actually use
57+
// the mangled name's hash as the key because mangled names can be very
58+
// long and take up lots of space. Using a hash can cause name collision,
59+
// but that is rare and the consequences are pointing to a wrong source
60+
// location which is not severe. This is a vector instead of an actual map
61+
// because we optimize for time building this map rather than time
62+
// retrieving an entry, as backend diagnostics are uncommon.
63+
std::vector<std::pair<llvm::hash_code, FullSourceLoc>>
64+
ManglingFullSourceLocs;
65+
66+
67+
// This is here so that the diagnostic printer knows the module a diagnostic
68+
// refers to.
69+
llvm::Module *CurLinkModule = nullptr;
70+
71+
public:
72+
BackendConsumer(BackendAction Action, DiagnosticsEngine &Diags,
73+
IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS,
74+
const HeaderSearchOptions &HeaderSearchOpts,
75+
const PreprocessorOptions &PPOpts,
76+
const CodeGenOptions &CodeGenOpts,
77+
const TargetOptions &TargetOpts, const LangOptions &LangOpts,
78+
const std::string &InFile,
79+
SmallVector<LinkModule, 4> LinkModules,
80+
std::unique_ptr<raw_pwrite_stream> OS, llvm::LLVMContext &C,
81+
CoverageSourceInfo *CoverageInfo = nullptr);
82+
83+
// This constructor is used in installing an empty BackendConsumer
84+
// to use the clang diagnostic handler for IR input files. It avoids
85+
// initializing the OS field.
86+
BackendConsumer(BackendAction Action, DiagnosticsEngine &Diags,
87+
IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS,
88+
const HeaderSearchOptions &HeaderSearchOpts,
89+
const PreprocessorOptions &PPOpts,
90+
const CodeGenOptions &CodeGenOpts,
91+
const TargetOptions &TargetOpts, const LangOptions &LangOpts,
92+
llvm::Module *Module, SmallVector<LinkModule, 4> LinkModules,
93+
llvm::LLVMContext &C,
94+
CoverageSourceInfo *CoverageInfo = nullptr);
95+
96+
llvm::Module *getModule() const;
97+
std::unique_ptr<llvm::Module> takeModule();
98+
99+
CodeGenerator *getCodeGenerator();
100+
101+
void HandleCXXStaticMemberVarInstantiation(VarDecl *VD) override;
102+
void Initialize(ASTContext &Ctx) override;
103+
bool HandleTopLevelDecl(DeclGroupRef D) override;
104+
void HandleInlineFunctionDefinition(FunctionDecl *D) override;
105+
void HandleInterestingDecl(DeclGroupRef D) override;
106+
void HandleTranslationUnit(ASTContext &C) override;
107+
void HandleTagDeclDefinition(TagDecl *D) override;
108+
void HandleTagDeclRequiredDefinition(const TagDecl *D) override;
109+
void CompleteTentativeDefinition(VarDecl *D) override;
110+
void CompleteExternalDeclaration(VarDecl *D) override;
111+
void AssignInheritanceModel(CXXRecordDecl *RD) override;
112+
void HandleVTable(CXXRecordDecl *RD) override;
113+
114+
// Links each entry in LinkModules into our module. Returns true on error.
115+
bool LinkInModules(llvm::Module *M, bool ShouldLinkFiles = true);
116+
117+
/// Get the best possible source location to represent a diagnostic that
118+
/// may have associated debug info.
119+
const FullSourceLoc getBestLocationFromDebugLoc(
120+
const llvm::DiagnosticInfoWithLocationBase &D,
121+
bool &BadDebugInfo, StringRef &Filename,
122+
unsigned &Line, unsigned &Column) const;
123+
124+
std::optional<FullSourceLoc> getFunctionSourceLocation(
125+
const llvm::Function &F) const;
126+
127+
void DiagnosticHandlerImpl(const llvm::DiagnosticInfo &DI);
128+
/// Specialized handler for InlineAsm diagnostic.
129+
/// \return True if the diagnostic has been successfully reported, false
130+
/// otherwise.
131+
bool InlineAsmDiagHandler(const llvm::DiagnosticInfoInlineAsm &D);
132+
/// Specialized handler for diagnostics reported using SMDiagnostic.
133+
void SrcMgrDiagHandler(const llvm::DiagnosticInfoSrcMgr &D);
134+
/// Specialized handler for StackSize diagnostic.
135+
/// \return True if the diagnostic has been successfully reported, false
136+
/// otherwise.
137+
bool StackSizeDiagHandler(const llvm::DiagnosticInfoStackSize &D);
138+
/// Specialized handler for ResourceLimit diagnostic.
139+
/// \return True if the diagnostic has been successfully reported, false
140+
/// otherwise.
141+
bool ResourceLimitDiagHandler(const llvm::DiagnosticInfoResourceLimit &D);
142+
143+
/// Specialized handler for unsupported backend feature diagnostic.
144+
void UnsupportedDiagHandler(const llvm::DiagnosticInfoUnsupported &D);
145+
/// Specialized handlers for optimization remarks.
146+
/// Note that these handlers only accept remarks and they always handle
147+
/// them.
148+
void EmitOptimizationMessage(const llvm::DiagnosticInfoOptimizationBase &D,
149+
unsigned DiagID);
150+
void
151+
OptimizationRemarkHandler(const llvm::DiagnosticInfoOptimizationBase &D);
152+
void OptimizationRemarkHandler(
153+
const llvm::OptimizationRemarkAnalysisFPCommute &D);
154+
void OptimizationRemarkHandler(
155+
const llvm::OptimizationRemarkAnalysisAliasing &D);
156+
void OptimizationFailureHandler(
157+
const llvm::DiagnosticInfoOptimizationFailure &D);
158+
void DontCallDiagHandler(const llvm::DiagnosticInfoDontCall &D);
159+
/// Specialized handler for misexpect warnings.
160+
/// Note that misexpect remarks are emitted through ORE
161+
void MisExpectDiagHandler(const llvm::DiagnosticInfoMisExpect &D);
162+
};
163+
164+
} // namespace clang
165+
#endif

clang/lib/CodeGen/CodeGenAction.cpp

Lines changed: 6 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,6 @@ namespace clang {
120120
const CodeGenOptions &CodeGenOpts;
121121
const TargetOptions &TargetOpts;
122122
const LangOptions &LangOpts;
123-
const FileManager &FileMgr;
124123
std::unique_ptr<raw_pwrite_stream> AsmOutStream;
125124
ASTContext *Context;
126125
IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS;
@@ -161,14 +160,12 @@ namespace clang {
161160
const PreprocessorOptions &PPOpts,
162161
const CodeGenOptions &CodeGenOpts,
163162
const TargetOptions &TargetOpts,
164-
const LangOptions &LangOpts, const FileManager &FileMgr,
165-
const std::string &InFile,
163+
const LangOptions &LangOpts, const std::string &InFile,
166164
SmallVector<LinkModule, 4> LinkModules,
167165
std::unique_ptr<raw_pwrite_stream> OS, LLVMContext &C,
168166
CoverageSourceInfo *CoverageInfo = nullptr)
169167
: Diags(Diags), Action(Action), HeaderSearchOpts(HeaderSearchOpts),
170168
CodeGenOpts(CodeGenOpts), TargetOpts(TargetOpts), LangOpts(LangOpts),
171-
FileMgr(FileMgr),
172169
AsmOutStream(std::move(OS)), Context(nullptr), FS(VFS),
173170
LLVMIRGeneration("irgen", "LLVM IR Generation Time"),
174171
LLVMIRGenerationRefCount(0),
@@ -189,13 +186,12 @@ namespace clang {
189186
const PreprocessorOptions &PPOpts,
190187
const CodeGenOptions &CodeGenOpts,
191188
const TargetOptions &TargetOpts,
192-
const LangOptions &LangOpts,const FileManager &FileMgr,
193-
llvm::Module *Module,
189+
const LangOptions &LangOpts, llvm::Module *Module,
194190
SmallVector<LinkModule, 4> LinkModules, LLVMContext &C,
195191
CoverageSourceInfo *CoverageInfo = nullptr)
196192
: Diags(Diags), Action(Action), HeaderSearchOpts(HeaderSearchOpts),
197193
CodeGenOpts(CodeGenOpts), TargetOpts(TargetOpts), LangOpts(LangOpts),
198-
FileMgr(FileMgr),Context(nullptr), FS(VFS),
194+
Context(nullptr), FS(VFS),
199195
LLVMIRGeneration("irgen", "LLVM IR Generation Time"),
200196
LLVMIRGenerationRefCount(0),
201197
Gen(CreateLLVMCodeGen(Diags, "", std::move(VFS), HeaderSearchOpts,
@@ -272,36 +268,6 @@ namespace clang {
272268
HandleTopLevelDecl(D);
273269
}
274270

275-
bool ReloadModules(llvm::Module *M) {
276-
for (const CodeGenOptions::BitcodeFileToLink &F :
277-
CodeGenOpts.LinkBitcodeFiles) {
278-
auto BCBuf = FileMgr.getBufferForFile(F.Filename);
279-
if (!BCBuf) {
280-
Diags.Report(diag::err_cannot_open_file)
281-
<< F.Filename << BCBuf.getError().message();
282-
LinkModules.clear();
283-
return true;
284-
}
285-
286-
LLVMContext &Ctx = getModule()->getContext();
287-
Expected<std::unique_ptr<llvm::Module>> ModuleOrErr =
288-
getOwningLazyBitcodeModule(std::move(*BCBuf), Ctx);
289-
290-
if (!ModuleOrErr) {
291-
handleAllErrors(ModuleOrErr.takeError(), [&](ErrorInfoBase &EIB) {
292-
Diags.Report(diag::err_cannot_open_file) << F.Filename
293-
<< EIB.message();
294-
});
295-
LinkModules.clear();
296-
return true;
297-
}
298-
LinkModules.push_back({std::move(ModuleOrErr.get()), F.PropagateAttrs,
299-
F.Internalize, F.LinkFlags});
300-
}
301-
302-
return false; // success
303-
}
304-
305271
// Links each entry in LinkModules into our module. Returns true on error.
306272
bool LinkInModules(llvm::Module *M) {
307273
for (auto &LM : LinkModules) {
@@ -1161,9 +1127,8 @@ CodeGenAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile) {
11611127
std::unique_ptr<BackendConsumer> Result(new BackendConsumer(
11621128
BA, CI.getDiagnostics(), &CI.getVirtualFileSystem(),
11631129
CI.getHeaderSearchOpts(), CI.getPreprocessorOpts(), CI.getCodeGenOpts(),
1164-
CI.getTargetOpts(), CI.getLangOpts(), CI.getFileManager(),
1165-
std::string(InFile), std::move(LinkModules), std::move(OS), *VMContext,
1166-
CoverageInfo));
1130+
CI.getTargetOpts(), CI.getLangOpts(), std::string(InFile),
1131+
std::move(LinkModules), std::move(OS), *VMContext, CoverageInfo));
11671132
BEConsumer = Result.get();
11681133

11691134
// Enable generating macro debug info only when debug info is not disabled and
@@ -1376,7 +1341,7 @@ void CodeGenAction::ExecuteAction() {
13761341
BackendConsumer Result(BA, CI.getDiagnostics(), &CI.getVirtualFileSystem(),
13771342
CI.getHeaderSearchOpts(), CI.getPreprocessorOpts(),
13781343
CI.getCodeGenOpts(), CI.getTargetOpts(),
1379-
CI.getLangOpts(), CI.getFileManager(), TheModule.get(),
1344+
CI.getLangOpts(), TheModule.get(),
13801345
std::move(LinkModules), *VMContext, nullptr);
13811346

13821347
// Link in each pending link module.

clang/lib/Driver/ToolChains/HLSL.cpp

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,49 @@ std::optional<std::string> tryParseProfile(StringRef Profile) {
9898
else if (llvm::getAsUnsignedInteger(Parts[2], 0, Minor))
9999
return std::nullopt;
100100

101-
// dxil-unknown-shadermodel-hull
101+
// Determine DXIL version using the minor version number of Shader
102+
// Model version specified in target profile. Prior to decoupling DXIL version
103+
// numbering from that of Shader Model DXIL version 1.Y corresponds to SM 6.Y.
104+
// E.g., dxilv1.Y-unknown-shadermodelX.Y-hull
102105
llvm::Triple T;
103-
T.setArch(Triple::ArchType::dxil);
106+
Triple::SubArchType SubArch = llvm::Triple::NoSubArch;
107+
switch (Minor) {
108+
case 0:
109+
SubArch = llvm::Triple::DXILSubArch_v1_0;
110+
break;
111+
case 1:
112+
SubArch = llvm::Triple::DXILSubArch_v1_1;
113+
break;
114+
case 2:
115+
SubArch = llvm::Triple::DXILSubArch_v1_2;
116+
break;
117+
case 3:
118+
SubArch = llvm::Triple::DXILSubArch_v1_3;
119+
break;
120+
case 4:
121+
SubArch = llvm::Triple::DXILSubArch_v1_4;
122+
break;
123+
case 5:
124+
SubArch = llvm::Triple::DXILSubArch_v1_5;
125+
break;
126+
case 6:
127+
SubArch = llvm::Triple::DXILSubArch_v1_6;
128+
break;
129+
case 7:
130+
SubArch = llvm::Triple::DXILSubArch_v1_7;
131+
break;
132+
case 8:
133+
SubArch = llvm::Triple::DXILSubArch_v1_8;
134+
break;
135+
case OfflineLibMinor:
136+
// Always consider minor version x as the latest supported DXIL version
137+
SubArch = llvm::Triple::LatestDXILSubArch;
138+
break;
139+
default:
140+
// No DXIL Version corresponding to specified Shader Model version found
141+
return std::nullopt;
142+
}
143+
T.setArch(Triple::ArchType::dxil, SubArch);
104144
T.setOSName(Triple::getOSTypeName(Triple::OSType::ShaderModel).str() +
105145
VersionTuple(Major, Minor).getAsString());
106146
T.setEnvironment(Kind);

clang/test/CodeGenHLSL/basic-target.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@
77
// RUN: %clang -target dxil-pc-shadermodel6.0-geometry -S -emit-llvm -o - %s | FileCheck %s
88

99
// CHECK: target datalayout = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64"
10-
// CHECK: target triple = "dxil-pc-shadermodel6.0-{{[a-z]+}}"
10+
// CHECK: target triple = "dxilv1.0-pc-shadermodel6.0-{{[a-z]+}}"

clang/test/Driver/dxc_dxv_path.hlsl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
// DXV_PATH:dxv{{(.exe)?}}" "-" "-o" "-"
88

99
// RUN: %clang_dxc -I test -Vd -Tlib_6_3 -### %s 2>&1 | FileCheck %s --check-prefix=VD
10-
// VD:"-cc1"{{.*}}"-triple" "dxil-unknown-shadermodel6.3-library"
10+
// VD:"-cc1"{{.*}}"-triple" "dxilv1.3-unknown-shadermodel6.3-library"
1111
// VD-NOT:dxv not found
1212

1313
// RUN: %clang_dxc -Tlib_6_3 -ccc-print-bindings --dxv-path=%T -Fo %t.dxo %s 2>&1 | FileCheck %s --check-prefix=BINDINGS
14-
// BINDINGS: "dxil-unknown-shadermodel6.3-library" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[DXC:.+]].dxo"
15-
// BINDINGS-NEXT: "dxil-unknown-shadermodel6.3-library" - "hlsl::Validator", inputs: ["[[DXC]].dxo"]
14+
// BINDINGS: "dxilv1.3-unknown-shadermodel6.3-library" - "clang", inputs: ["[[INPUT:.+]]"], output: "[[DXC:.+]].dxo"
15+
// BINDINGS-NEXT: "dxilv1.3-unknown-shadermodel6.3-library" - "hlsl::Validator", inputs: ["[[DXC]].dxo"]
1616

1717
// RUN: %clang_dxc -Tlib_6_3 -ccc-print-phases --dxv-path=%T -Fo %t.dxc %s 2>&1 | FileCheck %s --check-prefix=PHASES
1818

clang/test/Options/enable_16bit_types_validation.hlsl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
// HV_invalid_2017: error: '-enable-16bit-types' option requires target HLSL Version >= 2018 and shader model >= 6.2, but HLSL Version is 'hlsl2017' and shader model is '6.4'
1010
// TP_invalid: error: '-enable-16bit-types' option requires target HLSL Version >= 2018 and shader model >= 6.2, but HLSL Version is 'hlsl2021' and shader model is '6.0'
1111

12-
// valid_2021: "dxil-unknown-shadermodel6.4-library"
12+
// valid_2021: "dxilv1.4-unknown-shadermodel6.4-library"
1313
// valid_2021-SAME: "-std=hlsl2021"
1414
// valid_2021-SAME: "-fnative-half-type"
1515

16-
// valid_2018: "dxil-unknown-shadermodel6.4-library"
16+
// valid_2018: "dxilv1.4-unknown-shadermodel6.4-library"
1717
// valid_2018-SAME: "-std=hlsl2018"
1818
// valid_2018-SAME: "-fnative-half-type"
1919

clang/unittests/Driver/DXCModeTest.cpp

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -68,25 +68,27 @@ TEST(DxcModeTest, TargetProfileValidation) {
6868
IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions();
6969
DiagnosticsEngine Diags(DiagID, &*DiagOpts, DiagConsumer);
7070

71-
validateTargetProfile("-Tvs_6_0", "dxil--shadermodel6.0-vertex",
71+
validateTargetProfile("-Tvs_6_0", "dxilv1.0--shadermodel6.0-vertex",
7272
InMemoryFileSystem, Diags);
73-
validateTargetProfile("-Ths_6_1", "dxil--shadermodel6.1-hull",
73+
validateTargetProfile("-Ths_6_1", "dxilv1.1--shadermodel6.1-hull",
7474
InMemoryFileSystem, Diags);
75-
validateTargetProfile("-Tds_6_2", "dxil--shadermodel6.2-domain",
75+
validateTargetProfile("-Tds_6_2", "dxilv1.2--shadermodel6.2-domain",
7676
InMemoryFileSystem, Diags);
77-
validateTargetProfile("-Tds_6_2", "dxil--shadermodel6.2-domain",
77+
validateTargetProfile("-Tds_6_2", "dxilv1.2--shadermodel6.2-domain",
7878
InMemoryFileSystem, Diags);
79-
validateTargetProfile("-Tgs_6_3", "dxil--shadermodel6.3-geometry",
79+
validateTargetProfile("-Tgs_6_3", "dxilv1.3--shadermodel6.3-geometry",
8080
InMemoryFileSystem, Diags);
81-
validateTargetProfile("-Tps_6_4", "dxil--shadermodel6.4-pixel",
81+
validateTargetProfile("-Tps_6_4", "dxilv1.4--shadermodel6.4-pixel",
8282
InMemoryFileSystem, Diags);
83-
validateTargetProfile("-Tcs_6_5", "dxil--shadermodel6.5-compute",
83+
validateTargetProfile("-Tcs_6_5", "dxilv1.5--shadermodel6.5-compute",
8484
InMemoryFileSystem, Diags);
85-
validateTargetProfile("-Tms_6_6", "dxil--shadermodel6.6-mesh",
85+
validateTargetProfile("-Tms_6_6", "dxilv1.6--shadermodel6.6-mesh",
8686
InMemoryFileSystem, Diags);
87-
validateTargetProfile("-Tas_6_7", "dxil--shadermodel6.7-amplification",
87+
validateTargetProfile("-Tas_6_7", "dxilv1.7--shadermodel6.7-amplification",
8888
InMemoryFileSystem, Diags);
89-
validateTargetProfile("-Tlib_6_x", "dxil--shadermodel6.15-library",
89+
validateTargetProfile("-Tcs_6_8", "dxilv1.8--shadermodel6.8-compute",
90+
InMemoryFileSystem, Diags);
91+
validateTargetProfile("-Tlib_6_x", "dxilv1.8--shadermodel6.15-library",
9092
InMemoryFileSystem, Diags);
9193

9294
// Invalid tests.

0 commit comments

Comments
 (0)