diff --git a/clang/include/clang/Basic/CodeGenOptions.def b/clang/include/clang/Basic/CodeGenOptions.def index e137738102544..6411d71633fd2 100644 --- a/clang/include/clang/Basic/CodeGenOptions.def +++ b/clang/include/clang/Basic/CodeGenOptions.def @@ -478,6 +478,9 @@ CODEGENOPT(StaticClosure, 1, 0, Benign) /// Assume that UAVs/SRVs may alias CODEGENOPT(ResMayAlias, 1, 0, Benign) +/// Omit the root signature from produced DXContainer +CODEGENOPT(HLSLRootSigStrip, 1, 0, Benign) + /// Controls how unwind v2 (epilog) information should be generated for x64 /// Windows. ENUM_CODEGENOPT(WinX64EHUnwindV2, WinX64EHUnwindV2Mode, diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 916400efdb449..a27d143f3216c 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -9354,6 +9354,16 @@ def res_may_alias : Option<["/", "-"], "res-may-alias", KIND_FLAG>, Visibility<[DXCOption, ClangOption, CC1Option]>, HelpText<"Assume that UAVs/SRVs may alias">, MarshallingInfoFlag>; +def Qdx_rootsignature_strip : Option<["-"], "Qdx-rootsignature-strip", KIND_FLAG>, + Group, + Visibility<[ClangOption, CC1Option]>, + HelpText<"Omit the root signature from produced DXContainer">, + MarshallingInfoFlag>; +def dxc_Qstrip_rootsignature : + Option<["/", "-"], "Qstrip-rootsignature", KIND_FLAG>, + Alias, + Group, + Visibility<[DXCOption]>; def target_profile : DXCJoinedOrSeparate<"T">, MetaVarName<"">, HelpText<"Set target profile">, Values<"ps_6_0, ps_6_1, ps_6_2, ps_6_3, ps_6_4, ps_6_5, ps_6_6, ps_6_7," diff --git a/clang/lib/CodeGen/CGHLSLRuntime.cpp b/clang/lib/CodeGen/CGHLSLRuntime.cpp index a47d1cc22980d..0e9061e1a27f2 100644 --- a/clang/lib/CodeGen/CGHLSLRuntime.cpp +++ b/clang/lib/CodeGen/CGHLSLRuntime.cpp @@ -68,7 +68,8 @@ void addDxilValVersion(StringRef ValVersionStr, llvm::Module &M) { void addRootSignature(llvm::dxbc::RootSignatureVersion RootSigVer, ArrayRef Elements, - llvm::Function *Fn, llvm::Module &M) { + llvm::Function *Fn, llvm::Module &M, + bool StripRootSignature) { auto &Ctx = M.getContext(); llvm::hlsl::rootsig::MetadataBuilder RSBuilder(Ctx, Elements); @@ -80,7 +81,14 @@ void addRootSignature(llvm::dxbc::RootSignatureVersion RootSigVer, MDNode::get(Ctx, {ValueAsMetadata::get(Fn), RootSignature, Version}); StringRef RootSignatureValKey = "dx.rootsignatures"; - auto *RootSignatureValMD = M.getOrInsertNamedMetadata(RootSignatureValKey); + NamedMDNode *RootSignatureValMD = M.getNamedMetadata(RootSignatureValKey); + if (!RootSignatureValMD) { + IRBuilder<> Builder(Ctx); + RootSignatureValMD = M.getOrInsertNamedMetadata(RootSignatureValKey); + MDNode *InfoMD = MDNode::get( + Ctx, {ConstantAsMetadata::get(Builder.getInt1(StripRootSignature))}); + RootSignatureValMD->addOperand(InfoMD); + } RootSignatureValMD->addOperand(MDVals); } @@ -479,11 +487,12 @@ void CGHLSLRuntime::emitEntryFunction(const FunctionDecl *FD, B.CreateRetVoid(); // Add and identify root signature to function, if applicable + auto &CodeGenOpts = CGM.getCodeGenOpts(); for (const Attr *Attr : FD->getAttrs()) { if (const auto *RSAttr = dyn_cast(Attr)) { auto *RSDecl = RSAttr->getSignatureDecl(); addRootSignature(RSDecl->getVersion(), RSDecl->getRootElements(), EntryFn, - M); + M, CodeGenOpts.HLSLRootSigStrip); } } } diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 7d0c142ecd061..07dc985c210b1 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -3790,18 +3790,18 @@ static void RenderOpenCLOptions(const ArgList &Args, ArgStringList &CmdArgs, static void RenderHLSLOptions(const ArgList &Args, ArgStringList &CmdArgs, types::ID InputType) { - const unsigned ForwardedArguments[] = { - options::OPT_dxil_validator_version, - options::OPT_res_may_alias, - options::OPT_D, - options::OPT_I, - options::OPT_O, - options::OPT_emit_llvm, - options::OPT_emit_obj, - options::OPT_disable_llvm_passes, - options::OPT_fnative_half_type, - options::OPT_hlsl_entrypoint, - options::OPT_fdx_rootsignature_version}; + const unsigned ForwardedArguments[] = {options::OPT_dxil_validator_version, + options::OPT_res_may_alias, + options::OPT_D, + options::OPT_I, + options::OPT_O, + options::OPT_emit_llvm, + options::OPT_emit_obj, + options::OPT_disable_llvm_passes, + options::OPT_fnative_half_type, + options::OPT_hlsl_entrypoint, + options::OPT_fdx_rootsignature_version, + options::OPT_Qdx_rootsignature_strip}; if (!types::isHLSL(InputType)) return; for (const auto &Arg : ForwardedArguments) diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp index 38f4643abad98..d4e175b8faa53 100644 --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -304,6 +304,12 @@ HLSLToolChain::TranslateArgs(const DerivedArgList &Args, StringRef BoundArch, A->claim(); continue; } + if (A->getOption().getID() == options::OPT_dxc_Qstrip_rootsignature) { + DAL->AddFlagArg(nullptr, + Opts.getOption(options::OPT_Qdx_rootsignature_strip)); + A->claim(); + continue; + } if (A->getOption().getID() == options::OPT__SLASH_O) { StringRef OStr = A->getValue(); if (OStr == "d") { diff --git a/clang/test/CodeGenHLSL/RootSignature.hlsl b/clang/test/CodeGenHLSL/RootSignature.hlsl index bc40bdd79ce59..9aa786310198d 100644 --- a/clang/test/CodeGenHLSL/RootSignature.hlsl +++ b/clang/test/CodeGenHLSL/RootSignature.hlsl @@ -1,8 +1,10 @@ // RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -emit-llvm -o - %s | FileCheck %s -// CHECK: !dx.rootsignatures = !{![[#EMPTY_ENTRY:]], ![[#DT_ENTRY:]], +// CHECK: !dx.rootsignatures = !{![[#LOWER_INFO:]], ![[#EMPTY_ENTRY:]], ![[#DT_ENTRY:]], // CHECK-SAME: ![[#RF_ENTRY:]], ![[#RC_ENTRY:]], ![[#RD_ENTRY:]], ![[#SS_ENTRY:]]} +// CHECK: ![[#LOWER_INFO]] = !{i1 false} + // CHECK: ![[#EMPTY_ENTRY]] = !{ptr @EmptyEntry, ![[#EMPTY:]], i32 2} // CHECK: ![[#EMPTY]] = !{} diff --git a/clang/test/CodeGenHLSL/dx-rootsignature-strip.hlsl b/clang/test/CodeGenHLSL/dx-rootsignature-strip.hlsl new file mode 100644 index 0000000000000..c8b34ec6e1c00 --- /dev/null +++ b/clang/test/CodeGenHLSL/dx-rootsignature-strip.hlsl @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -Qdx-rootsignature-strip -triple dxil-pc-shadermodel6.3-compute -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,FLAG +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-compute -emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,NOFLAG + +// CHECK: !dx.rootsignatures = !{![[#LOWER_INFO:]], ![[#EMPTY_ENTRY:]]} +// FLAG: ![[#LOWER_INFO]] = !{i1 true} +// NOFLAG: ![[#LOWER_INFO]] = !{i1 false} + +// Ensure root signature metadata is still generated in either case +// CHECK: ![[#EMPTY_ENTRY]] = !{ptr @EmptyEntry, ![[#EMPTY:]], i32 2} +// CHECK: ![[#EMPTY]] = !{} + +[shader("compute"), RootSignature("")] +[numthreads(1,1,1)] +void EmptyEntry() {} + diff --git a/clang/test/Driver/dxc_Qstrip-rootsignature.hlsl b/clang/test/Driver/dxc_Qstrip-rootsignature.hlsl new file mode 100644 index 0000000000000..dc38a646ce444 --- /dev/null +++ b/clang/test/Driver/dxc_Qstrip-rootsignature.hlsl @@ -0,0 +1,17 @@ +// RUN: %clang_dxc -Qstrip-rootsignature -T cs_6_3 -HV 202x -Vd -Xclang -emit-llvm %s | FileCheck %s --check-prefixes=CHECK,FLAG +// RUN: %clang_dxc -T cs_6_3 -HV 202x -Vd -Xclang -emit-llvm %s | FileCheck %s --check-prefixes=CHECK,NOFLAG + +// Test to demonstrate that we can specify when to strip the root signature +// in its metadata + +// CHECK: !dx.rootsignatures = !{![[#LOWER_INFO:]], ![[#EMPTY_ENTRY:]]} +// FLAG: ![[#LOWER_INFO]] = !{i1 true} +// NOFLAG: ![[#LOWER_INFO]] = !{i1 false} + +// Ensure root signature metadata is still generated in either case +// CHECK: ![[#EMPTY_ENTRY]] = !{ptr @EmptyEntry, ![[#EMPTY:]], i32 2} +// CHECK: ![[#EMPTY]] = !{} + +[shader("compute"), RootSignature("")] +[numthreads(1,1,1)] +void EmptyEntry() {} diff --git a/llvm/include/llvm/Analysis/DXILMetadataAnalysis.h b/llvm/include/llvm/Analysis/DXILMetadataAnalysis.h index cb535ac14f1c6..be894ec39ed5a 100644 --- a/llvm/include/llvm/Analysis/DXILMetadataAnalysis.h +++ b/llvm/include/llvm/Analysis/DXILMetadataAnalysis.h @@ -37,6 +37,7 @@ struct ModuleMetadataInfo { Triple::EnvironmentType ShaderProfile{Triple::UnknownEnvironment}; VersionTuple ValidatorVersion{}; SmallVector EntryPropertyVec{}; + bool StripRootSignature{true}; void print(raw_ostream &OS) const; }; diff --git a/llvm/lib/Analysis/DXILMetadataAnalysis.cpp b/llvm/lib/Analysis/DXILMetadataAnalysis.cpp index 23f1aa82ae8a3..63868d26d2316 100644 --- a/llvm/lib/Analysis/DXILMetadataAnalysis.cpp +++ b/llvm/lib/Analysis/DXILMetadataAnalysis.cpp @@ -68,6 +68,18 @@ static ModuleMetadataInfo collectMetadataInfo(Module &M) { } MMDAI.EntryPropertyVec.push_back(EFP); } + NamedMDNode *RootSignaturesNode = M.getNamedMetadata("dx.rootsignatures"); + if (RootSignaturesNode) { + // Only insert any extra root signature lowering info on insert + MDNode *InfoMD = RootSignaturesNode->getOperand(0); + [[maybe_unused]] bool HasStripMD = + mdconst::hasa(InfoMD->getOperand(0)); + assert(HasStripMD && "Failed to parse Strip Root Signature component"); + auto *StripRootSignature = + mdconst::dyn_extract(InfoMD->getOperand(0)); + if (StripRootSignature) + MMDAI.StripRootSignature = StripRootSignature->getZExtValue(); + } return MMDAI; } @@ -84,6 +96,7 @@ void ModuleMetadataInfo::print(raw_ostream &OS) const { OS << " NumThreads: " << EP.NumThreadsX << "," << EP.NumThreadsY << "," << EP.NumThreadsZ << "\n"; } + OS << "Strip Root Signature: " << StripRootSignature << "\n"; } //===----------------------------------------------------------------------===// diff --git a/llvm/lib/Target/DirectX/DXContainerGlobals.cpp b/llvm/lib/Target/DirectX/DXContainerGlobals.cpp index b6e8ce7d78b23..8889d281cee45 100644 --- a/llvm/lib/Target/DirectX/DXContainerGlobals.cpp +++ b/llvm/lib/Target/DirectX/DXContainerGlobals.cpp @@ -154,6 +154,10 @@ void DXContainerGlobals::addRootSignature(Module &M, dxil::ModuleMetadataInfo &MMI = getAnalysis().getModuleMetadata(); + // Compiler flag denotes to not output the root signature part (RTS0) + if (MMI.StripRootSignature) + return; + // Root Signature in Library don't compile to DXContainer. if (MMI.ShaderProfile == llvm::Triple::Library) return; diff --git a/llvm/lib/Target/DirectX/DXILRootSignature.cpp b/llvm/lib/Target/DirectX/DXILRootSignature.cpp index dfc81626da01f..60beb4d0c5d5b 100644 --- a/llvm/lib/Target/DirectX/DXILRootSignature.cpp +++ b/llvm/lib/Target/DirectX/DXILRootSignature.cpp @@ -527,8 +527,17 @@ analyzeModule(Module &M) { NamedMDNode *RootSignatureNode = M.getNamedMetadata("dx.rootsignatures"); if (RootSignatureNode == nullptr) return RSDMap; + if (RootSignatureNode->getNumOperands() == 0) { + reportError(Ctx, "Invalid Root Signature metadata - expected lowering " + "info and then Root Signature operands."); + return RSDMap; + } + + // Ignore the lowering info metadata + auto Begin = std::next(RootSignatureNode->op_begin()); + auto RSNodes = iterator_range(Begin, RootSignatureNode->op_end()); - for (const auto &RSDefNode : RootSignatureNode->operands()) { + for (const auto &RSDefNode : RSNodes) { if (RSDefNode->getNumOperands() != 3) { reportError(Ctx, "Invalid Root Signature metadata - expected function, " "signature, and version."); diff --git a/llvm/test/Analysis/DXILMetadataAnalysis/dxilVer-1.0.ll b/llvm/test/Analysis/DXILMetadataAnalysis/dxilVer-1.0.ll index 75c05d86dc781..116554bda4cae 100644 --- a/llvm/test/Analysis/DXILMetadataAnalysis/dxilVer-1.0.ll +++ b/llvm/test/Analysis/DXILMetadataAnalysis/dxilVer-1.0.ll @@ -8,6 +8,7 @@ target triple = "dxil-pc-shadermodel6.0-vertex" ; CHECK-NEXT: entry ; CHECK-NEXT: Function Shader Stage : vertex ; CHECK-NEXT: NumThreads: 0,0,0 +; CHECK-NEXT: Strip Root Signature: 1 ; CHECK-EMPTY: define void @entry() #0 { diff --git a/llvm/test/Analysis/DXILMetadataAnalysis/dxilVer-1.8.ll b/llvm/test/Analysis/DXILMetadataAnalysis/dxilVer-1.8.ll index 7a2cb51f9c819..0540621e455ae 100644 --- a/llvm/test/Analysis/DXILMetadataAnalysis/dxilVer-1.8.ll +++ b/llvm/test/Analysis/DXILMetadataAnalysis/dxilVer-1.8.ll @@ -8,6 +8,7 @@ target triple = "dxil-pc-shadermodel6.8-compute" ; CHECK-NEXT: entry ; CHECK-NEXT: Function Shader Stage : compute ; CHECK-NEXT: NumThreads: 1,2,1 +; CHECK-NEXT: Strip Root Signature: 1 ; CHECK-EMPTY: define void @entry() #0 { diff --git a/llvm/test/Analysis/DXILMetadataAnalysis/entry-properties.ll b/llvm/test/Analysis/DXILMetadataAnalysis/entry-properties.ll index a2c6c3a7952d4..c6f78fb32a185 100644 --- a/llvm/test/Analysis/DXILMetadataAnalysis/entry-properties.ll +++ b/llvm/test/Analysis/DXILMetadataAnalysis/entry-properties.ll @@ -14,6 +14,7 @@ target triple = "dxil-pc-shadermodel6.8-library" ; CHECK-NEXT: entry_cs ; CHECK-NEXT: Function Shader Stage : compute ; CHECK-NEXT: NumThreads: 1,2,1 +; CHECK-NEXT: Strip Root Signature: 1 ; CHECK-EMPTY: define void @entry_as() #0 { diff --git a/llvm/test/Analysis/DXILMetadataAnalysis/keep-rootsignature.ll b/llvm/test/Analysis/DXILMetadataAnalysis/keep-rootsignature.ll new file mode 100644 index 0000000000000..6a58b5eac80dd --- /dev/null +++ b/llvm/test/Analysis/DXILMetadataAnalysis/keep-rootsignature.ll @@ -0,0 +1,24 @@ +; RUN: opt -S -passes="print" -disable-output %s 2>&1 | FileCheck %s +target triple = "dxil-pc-shadermodel6.0-compute" + +; CHECK: Shader Model Version : 6.0 +; CHECK-NEXT: DXIL Version : 1.0 +; CHECK-NEXT: Shader Stage : compute +; CHECK-NEXT: Validator Version : 0 +; CHECK-NEXT: entry +; CHECK-NEXT: Function Shader Stage : compute +; CHECK-NEXT: NumThreads: 1,1,1 +; CHECK-NEXT: Strip Root Signature: 0 +; CHECK-EMPTY: + +define void @entry() #0 { +entry: + ret void +} + +attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } + +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 false} ; don't strip root signature +!2 = !{ ptr @entry, !3, i32 2 } ; function, root signature, version +!3 = !{} ; empty root signature diff --git a/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-as.ll b/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-as.ll index 6a8496bf731a3..36ed69e6c1fbb 100644 --- a/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-as.ll +++ b/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-as.ll @@ -8,6 +8,7 @@ target triple = "dxil-pc-shadermodel6-amplification" ; CHECK-NEXT: entry ; CHECK-NEXT: Function Shader Stage : amplification ; CHECK-NEXT: NumThreads: 0,0,0 +; CHECK-NEXT: Strip Root Signature: 1 ; CHECK-EMPTY: define void @entry() #0 { diff --git a/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-cs-val-ver-0.0.ll b/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-cs-val-ver-0.0.ll index e09f4fc411433..8370a4231834a 100644 --- a/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-cs-val-ver-0.0.ll +++ b/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-cs-val-ver-0.0.ll @@ -20,4 +20,5 @@ attributes #0 = { noinline nounwind "exp-shader"="cs" "hlsl.numthreads"="1,2,1" ; CHECK-NEXT: entry ; CHECK-NEXT: Function Shader Stage : compute ; CHECK-NEXT: NumThreads: 1,2,1 +; CHECK-NEXT: Strip Root Signature: 1 ; CHECK-EMPTY: diff --git a/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-cs.ll b/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-cs.ll index 4d6d696e6b29e..0f0a0a0f2b77a 100644 --- a/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-cs.ll +++ b/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-cs.ll @@ -9,6 +9,7 @@ target triple = "dxil-pc-shadermodel6.6-compute" ; CHECK-NEXT: entry ; CHECK-NEXT: Function Shader Stage : compute ; CHECK-NEXT: NumThreads: 1,2,1 +; CHECK-NEXT: Strip Root Signature: 1 ; CHECK-EMPTY: define void @entry() #0 { diff --git a/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-gs.ll b/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-gs.ll index e28438901bdfe..2bb555e0be868 100644 --- a/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-gs.ll +++ b/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-gs.ll @@ -8,6 +8,7 @@ target triple = "dxil-pc-shadermodel6.6-geometry" ; CHECK-NEXT: entry ; CHECK-NEXT: Function Shader Stage : geometry ; CHECK-NEXT: NumThreads: 0,0,0 +; CHECK-NEXT: Strip Root Signature: 1 ; CHECK-EMPTY: define void @entry() #0 { diff --git a/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-hs.ll b/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-hs.ll index fdec1d857118b..f70833a5e8615 100644 --- a/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-hs.ll +++ b/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-hs.ll @@ -8,6 +8,7 @@ target triple = "dxil-pc-shadermodel6.6-hull" ; CHECK-NEXT: entry ; CHECK-NEXT: Function Shader Stage : hull ; CHECK-NEXT: NumThreads: 0,0,0 +; CHECK-NEXT: Strip Root Signature: 1 ; CHECK-EMPTY: define void @entry() #0 { diff --git a/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-ms.ll b/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-ms.ll index 77bc3bbd85f9f..234c9cc6235f3 100644 --- a/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-ms.ll +++ b/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-ms.ll @@ -8,6 +8,7 @@ target triple = "dxil-pc-shadermodel6.6-mesh" ; CHECK-NEXT: entry ; CHECK-NEXT: Function Shader Stage : mesh ; CHECK-NEXT: NumThreads: 0,0,0 +; CHECK-NEXT: Strip Root Signature: 1 ; CHECK-EMPTY: define void @entry() #0 { diff --git a/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-ps.ll b/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-ps.ll index a02c56dbe17a2..914c47e45184b 100644 --- a/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-ps.ll +++ b/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-ps.ll @@ -8,6 +8,7 @@ target triple = "dxil-pc-shadermodel5.0-pixel" ; CHECK-NEXT: entry ; CHECK-NEXT: Function Shader Stage : pixel ; CHECK-NEXT: NumThreads: 0,0,0 +; CHECK-NEXT: Strip Root Signature: 1 ; CHECK-EMPTY: define void @entry() #0 { diff --git a/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-vs.ll b/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-vs.ll index 107f9fc1f0a24..d7b499aee2636 100644 --- a/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-vs.ll +++ b/llvm/test/Analysis/DXILMetadataAnalysis/shaderModel-vs.ll @@ -8,6 +8,7 @@ target triple = "dxil-pc-shadermodel-vertex" ; CHECK-NEXT: entry ; CHECK-NEXT: Function Shader Stage : vertex ; CHECK-NEXT: NumThreads: 0,0,0 +; CHECK-NEXT: Strip Root Signature: 1 ; CHECK-EMPTY: define void @entry() #0 { diff --git a/llvm/test/Analysis/DXILMetadataAnalysis/strip-rootsignature.ll b/llvm/test/Analysis/DXILMetadataAnalysis/strip-rootsignature.ll new file mode 100644 index 0000000000000..9a2c87f8e5db4 --- /dev/null +++ b/llvm/test/Analysis/DXILMetadataAnalysis/strip-rootsignature.ll @@ -0,0 +1,24 @@ +; RUN: opt -S -passes="print" -disable-output %s 2>&1 | FileCheck %s +target triple = "dxil-pc-shadermodel6.0-compute" + +; CHECK: Shader Model Version : 6.0 +; CHECK-NEXT: DXIL Version : 1.0 +; CHECK-NEXT: Shader Stage : compute +; CHECK-NEXT: Validator Version : 0 +; CHECK-NEXT: entry +; CHECK-NEXT: Function Shader Stage : compute +; CHECK-NEXT: NumThreads: 1,1,1 +; CHECK-NEXT: Strip Root Signature: 1 +; CHECK-EMPTY: + +define void @entry() #0 { +entry: + ret void +} + +attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } + +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 true} ; strip root signature +!2 = !{ ptr @entry, !3, i32 2 } ; function, root signature, version +!3 = !{} ; empty root signature diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-AllValidFlagCombinations.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-AllValidFlagCombinations.ll index 8eb7f90c6b757..9663194e219bb 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-AllValidFlagCombinations.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-AllValidFlagCombinations.ll @@ -9,7 +9,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"DescriptorTable", i32 0, !6, !8, !9, !10, !11, !12, !13, !14, !15, !16, !17, !18, !19, !20 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-AllValidFlagCombinationsV1.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-AllValidFlagCombinationsV1.ll index 053721de1eb1f..465bf1887bd76 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-AllValidFlagCombinationsV1.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-AllValidFlagCombinationsV1.ll @@ -9,7 +9,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 1 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"DescriptorTable", i32 0, !6, !7 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-Invalid-Flag.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-Invalid-Flag.ll index 58056c5d4ba94..4664dbb8e6d94 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-Invalid-Flag.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-Invalid-Flag.ll @@ -12,7 +12,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"DescriptorTable", i32 0, !6, !7 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-Invalid-NumDescriptors.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-Invalid-NumDescriptors.ll index 99d126ee95443..0077a19510859 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-Invalid-NumDescriptors.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-Invalid-NumDescriptors.ll @@ -12,7 +12,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"DescriptorTable", i32 0, !6} diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-Invalid-RangeType.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-Invalid-RangeType.ll index 0f7116307c315..322f9f053f0f6 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-Invalid-RangeType.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-Invalid-RangeType.ll @@ -12,7 +12,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"DescriptorTable", i32 0, !6, !7 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-Invalid-RegisterSpace.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-Invalid-RegisterSpace.ll index 94cd25b06a127..3d305fdfd279e 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-Invalid-RegisterSpace.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable-Invalid-RegisterSpace.ll @@ -12,7 +12,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"DescriptorTable", i32 0, !6, !7 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable.ll index 8e9b4b43b11a6..4a133fa2e94c8 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-DescriptorTable.ll @@ -12,7 +12,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"DescriptorTable", i32 0, !6, !7 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Error-is-not-function.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Error-is-not-function.ll index fbda7561cecad..cc6d02bc4e88a 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Error-is-not-function.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Error-is-not-function.ll @@ -17,7 +17,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2, !5} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2, !5} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !4 } ; list of root signature elements !4 = !{ !"RootFlags", i32 1 } ; 1 = allow_input_assembler_input_layout diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Error-is-not-value.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Error-is-not-value.ll index 94ab52e1f29c0..d6c5c65459d79 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Error-is-not-value.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Error-is-not-value.ll @@ -17,7 +17,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2, !5} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2, !5} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !4 } ; list of root signature elements !4 = !{ !"RootFlags", i32 1 } ; 1 = allow_input_assembler_input_layout diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Error-no-root-element-list.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Error-no-root-element-list.ll index dc7a3fd103207..c749ea720f4cf 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Error-no-root-element-list.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Error-no-root-element-list.ll @@ -17,7 +17,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2, !5} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2, !5} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, null, i32 2 } ; function, root signature !3 = !{ !4 } ; list of root signature elements !4 = !{ !"RootFlags", i32 1 } ; 1 = allow_input_assembler_input_layout diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Error-root-element-not-mdnode.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Error-root-element-not-mdnode.ll index 3028ca99e4ef6..a0582d7eca5d0 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Error-root-element-not-mdnode.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Error-root-element-not-mdnode.ll @@ -17,7 +17,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2, !5} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2, !5} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, i32 -1, i32 2 } ; function, root signature !3 = !{ !4 } ; list of root signature elements !4 = !{ !"RootFlags", i32 1 } ; 1 = allow_input_assembler_input_layout diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Error.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Error.ll index 0392065842116..88c206e3bfb74 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Error.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Error.ll @@ -14,5 +14,6 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!1} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !1} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !1= !{ !"RootFlags" } ; function, root signature diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Flags-Error.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Flags-Error.ll index 65511160f230d..3a030a3a2bf08 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Flags-Error.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Flags-Error.ll @@ -14,7 +14,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !4 } ; list of root signature elements !4 = !{ !"NOTRootFlags", i32 1 } ; 1 = allow_input_assembler_input_layout diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Flags.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Flags.ll index 10235b7d17960..7c25ed4415880 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Flags.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Flags.ll @@ -12,7 +12,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !4 } ; list of root signature elements !4 = !{ !"RootFlags", i32 1 } ; 1 = allow_input_assembler_input_layout diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-MultipleEntryFunctions.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-MultipleEntryFunctions.ll index fec9c226d8bc5..317ff88e57ea2 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-MultipleEntryFunctions.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-MultipleEntryFunctions.ll @@ -15,7 +15,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2, !5} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2, !5} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !4 } ; list of root signature elements !4 = !{ !"RootFlags", i32 1 } ; 1 = allow_input_assembler_input_layout diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-NullFunction-Error.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-NullFunction-Error.ll index c6b57ee31c87a..61a21f5de6645 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-NullFunction-Error.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-NullFunction-Error.ll @@ -12,7 +12,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2, !5} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2, !5} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !4 } ; list of root signature elements !4 = !{ !"RootFlags", i32 1 } ; 1 = allow_input_assembler_input_layout diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Parameters-Invalid-ParameterIsNotString.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Parameters-Invalid-ParameterIsNotString.ll index b4b616f8fd6ee..3f60bce1ce34a 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Parameters-Invalid-ParameterIsNotString.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Parameters-Invalid-ParameterIsNotString.ll @@ -13,7 +13,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!0} -!0 = !{ ptr @main, !1, i32 2 } -!1 = !{ !2 } -!2 = !{ i32 0 } +!dx.rootsignatures = !{!0, !1} +!0 = !{i1 0} ; strip root signature +!1 = !{ ptr @main, !2, i32 2 } +!2 = !{ !3 } +!3 = !{ i32 0 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Parameters-Validation-Error.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Parameters-Validation-Error.ll index a61928d0a7fd3..6121435d3613a 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Parameters-Validation-Error.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Parameters-Validation-Error.ll @@ -14,7 +14,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"RootConstants", i32 255, i32 1, i32 2, i32 3 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Parameters.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Parameters.ll index 6477ad397c32d..8dc8a537600f5 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Parameters.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Parameters.ll @@ -10,7 +10,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !4, !5, !6, !7 } ; list of root signature elements !4 = !{ !"RootFlags", i32 1 } ; 1 = allow_input_assembler_input_layout diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootConstants-Invalid-Num32BitValues.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootConstants-Invalid-Num32BitValues.ll index 121bc6e932a48..df6fa4e5b7d5a 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootConstants-Invalid-Num32BitValues.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootConstants-Invalid-Num32BitValues.ll @@ -10,7 +10,8 @@ entry: ret void } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"RootConstants", i32 0, i32 1, i32 2, !"Invalid" } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootConstants-Invalid-RegisterSpace.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootConstants-Invalid-RegisterSpace.ll index 3534e5d1c5a26..464458ad44521 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootConstants-Invalid-RegisterSpace.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootConstants-Invalid-RegisterSpace.ll @@ -12,7 +12,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"RootConstants", i32 0, i32 1, !"Invalid", i32 3 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootConstants-Invalid-ShaderRegister.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootConstants-Invalid-ShaderRegister.ll index 5c3dce2f419ee..f524d59b58cfe 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootConstants-Invalid-ShaderRegister.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootConstants-Invalid-ShaderRegister.ll @@ -12,7 +12,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"RootConstants", i32 0, !"Invalid", i32 2, i32 3 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootConstants.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootConstants.ll index 964554fe143ef..27cea999874d7 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootConstants.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootConstants.ll @@ -12,7 +12,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"RootConstants", i32 0, i32 1, i32 2, i32 3 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-Flags.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-Flags.ll index 96f96011a7d16..706bee43f9407 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-Flags.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-Flags.ll @@ -12,7 +12,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"RootCBV", i32 0, i32 1, i32 2, i32 3 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-Multiple-Flags.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-Multiple-Flags.ll index dd06a2783bd10..35ba100c40b71 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-Multiple-Flags.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-Multiple-Flags.ll @@ -13,7 +13,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"RootCBV", i32 0, i32 1, i32 2, i32 10 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-RegisterKind.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-RegisterKind.ll index 579528d8b5e13..8a57681d52437 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-RegisterKind.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-RegisterKind.ll @@ -12,7 +12,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"Invalid", i32 0, i32 1, i32 2, i32 3 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-RegisterSpace.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-RegisterSpace.ll index 18582090e761d..65b154cf9fc57 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-RegisterSpace.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-RegisterSpace.ll @@ -12,7 +12,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"RootCBV", i32 0, i32 1, i32 4294967280, i32 0 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-RegisterValue.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-RegisterValue.ll index 8bbfdf00bea29..13b134a91f704 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-RegisterValue.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-RegisterValue.ll @@ -12,7 +12,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"RootCBV", i32 0, i32 4294967295, i32 2, i32 3 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor.ll index f77bb96840bea..5af06a57b8115 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor.ll @@ -12,7 +12,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"RootCBV", i32 0, i32 1, i32 2, i32 8 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor_V1.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor_V1.ll index ddf556e7fe20a..a399149d90c8a 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor_V1.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor_V1.ll @@ -12,7 +12,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 1 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"RootCBV", i32 0, i32 1, i32 2, i32 2 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootElement-Error.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootElement-Error.ll index aa8d46dccbac4..67e3e1c6a8d19 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootElement-Error.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootElement-Error.ll @@ -14,6 +14,7 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !"NOTRootElements" } ; list of root signature elements diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootFlags-VisibilityValidationError.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootFlags-VisibilityValidationError.ll index baeb74c2c3ce7..b48d5702e415e 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootFlags-VisibilityValidationError.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootFlags-VisibilityValidationError.ll @@ -14,7 +14,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !4 } ; list of root signature elements !4 = !{ !"RootFlags", i32 2147487744 } ; 1 = allow_input_assembler_input_layout diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-AddressU.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-AddressU.ll index 288dea00b6e55..d702f954305d2 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-AddressU.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-AddressU.ll @@ -13,7 +13,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"StaticSampler", i32 4, i32 666, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-AddressV.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-AddressV.ll index e9abcf9669999..c7598c48c34c0 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-AddressV.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-AddressV.ll @@ -13,7 +13,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"StaticSampler", i32 4, i32 2, i32 666, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-AddressW.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-AddressW.ll index 238f488ee78d6..da03a4be35af8 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-AddressW.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-AddressW.ll @@ -13,7 +13,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 666, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-BorderColor.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-BorderColor.ll index 8dc69eb1f9d7c..7617f44cf56f8 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-BorderColor.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-BorderColor.ll @@ -13,7 +13,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 666, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-ComparisonFunc.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-ComparisonFunc.ll index b2c8faf8d4a0a..081a00c460945 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-ComparisonFunc.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-ComparisonFunc.ll @@ -13,7 +13,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 666, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-Filter.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-Filter.ll index 758d2629ed78e..4460287006907 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-Filter.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-Filter.ll @@ -13,7 +13,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"StaticSampler", i32 45, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-MaxAnisotropy.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-MaxAnisotropy.ll index 47d4b52d72e8e..b762cacb42e35 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-MaxAnisotropy.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-MaxAnisotropy.ll @@ -13,7 +13,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 666, i32 3, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-MaxLod.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-MaxLod.ll index 7e7d56eff309c..8a0272cef7555 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-MaxLod.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-MaxLod.ll @@ -13,7 +13,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 2, float -1.280000e+02, float 0x7FF8000000000000, i32 42, i32 0, i32 0 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-MinLod.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-MinLod.ll index d958f10d3c1af..4f110ffac6522 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-MinLod.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-MinLod.ll @@ -13,7 +13,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 2, float 0x7FF8000000000000, float 1.280000e+02, i32 42, i32 0, i32 0 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-MinLopBias.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-MinLopBias.ll index 34b27eb40f5fb..e25d84347709d 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-MinLopBias.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-MinLopBias.ll @@ -13,7 +13,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 6.660000e+02, i32 9, i32 3, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-RegisterSpace.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-RegisterSpace.ll index dc6ee4290b532..ec77e23b7e73d 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-RegisterSpace.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-RegisterSpace.ll @@ -13,7 +13,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 4294967280, i32 0 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-ShaderRegister.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-ShaderRegister.ll index 6cee1dd95fd81..2ee2b486fc856 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-ShaderRegister.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-ShaderRegister.ll @@ -13,7 +13,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 2, float -1.280000e+02, float 1.280000e+02, i32 4294967295, i32 0, i32 0 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-ShaderVisibility.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-ShaderVisibility.ll index fa5bf12e2b8cd..311b6030748c1 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-ShaderVisibility.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-ShaderVisibility.ll @@ -13,7 +13,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 666 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers.ll index d9ee39dbb7287..9e21ada1b9909 100644 --- a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers.ll +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers.ll @@ -12,7 +12,8 @@ entry: attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} ; strip root signature !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !5 } ; list of root signature elements !5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Stripped.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Stripped.ll new file mode 100644 index 0000000000000..f00b589bd76b3 --- /dev/null +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Stripped.ll @@ -0,0 +1,31 @@ +; RUN: opt %s -dxil-embed -dxil-globals -S -o - | FileCheck %s +; RUN: llc %s --filetype=obj -o - | obj2yaml | FileCheck %s --check-prefix=DXC + +target triple = "dxil-unknown-shadermodel6.0-compute" + +define void @main() #0 { +entry: + ret void +} +attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" } + +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 true} ; strip root signature +!2 = !{ ptr @main, !3, i32 2 } ; function, root signature +!3 = !{ !5 } ; list of root signature elements +!5 = !{ !"DescriptorTable", i32 0, !6, !7 } +!6 = !{ !"SRV", i32 1, i32 1, i32 0, i32 -1, i32 4 } +!7 = !{ !"UAV", i32 5, i32 1, i32 10, i32 5, i32 2 } + +; Check "required" parts are present +; DXC: - Name: DXIL +; DXC: - Name: HASH +; DXC: - Name: PSV0 + +; CHECK: @dx.dxil = private constant +; CHECK: @dx.hash = private constant +; CHECK: @dx.psv0 = private constant + +; But no RTS0 (root signature) part +; DXC-NOT: - Name: RTS0 +; CHECK-NOT: @dx.rts0 = private constant diff --git a/llvm/test/CodeGen/DirectX/strip-rootsignatures.ll b/llvm/test/CodeGen/DirectX/strip-rootsignatures.ll index 3ac617ae871fc..3f806d052a6db 100644 --- a/llvm/test/CodeGen/DirectX/strip-rootsignatures.ll +++ b/llvm/test/CodeGen/DirectX/strip-rootsignatures.ll @@ -12,7 +12,8 @@ entry: ; CHECK-NOT: !dx.rootsignatures ; CHECK-NOT: {{^!}} -!dx.rootsignatures = !{!2} ; list of function/root signature pairs +!dx.rootsignatures = !{!0, !2} ; list of function/root signature pairs +!0 = !{i1 0} !2 = !{ ptr @main, !3, i32 2 } ; function, root signature !3 = !{ !4 } ; list of root signature elements !4 = !{ !"RootFlags", i32 1 } ; 1 = allow_input_assembler_input_layout