https://github.com/bob80905 updated https://github.com/llvm/llvm-project/pull/173411
>From 75465515be659ed46ede310c91b6cfe29176bc1c Mon Sep 17 00:00:00 2001 From: Joshua Batista <[email protected]> Date: Mon, 22 Dec 2025 12:04:01 -0800 Subject: [PATCH 1/4] options work! --- clang/include/clang/Options/Options.td | 6 ++++++ clang/lib/Driver/ToolChains/Clang.cpp | 1 + clang/lib/Driver/ToolChains/HLSL.cpp | 6 ++++++ clang/test/Options/all_resources_bound.hlsl | 10 ++++++++++ 4 files changed, 23 insertions(+) create mode 100644 clang/test/Options/all_resources_bound.hlsl diff --git a/clang/include/clang/Options/Options.td b/clang/include/clang/Options/Options.td index 8cd31a3be109a..8a032317a71c4 100644 --- a/clang/include/clang/Options/Options.td +++ b/clang/include/clang/Options/Options.td @@ -9612,6 +9612,12 @@ class DXCJoinedOrSeparate<string name> : Option<["/", "-"], name, KIND_JOINED_OR_SEPARATE>, Group<dxc_Group>, Visibility<[DXCOption]>; +def dxc_all_resources_bound : DXCFlag<"all-resources-bound">, + HelpText<"Enables agressive flattening">; +def hlsl_all_resources_bound : Option<["-"], "hlsl-all-resources-bound", KIND_SEPARATE>, + Group<dxc_Group>, + Visibility<[ClangOption, CC1Option]>, + HelpText<"Enables agressive flattening">; def dxc_col_major : DXCFlag<"Zpc">, HelpText<"Pack matrices in column-major order">; def dxc_row_major : DXCFlag<"Zpr">, HelpText<"Pack matrices in row-major order">; def dxc_no_stdinc : DXCFlag<"hlsl-no-stdinc">, diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 310f3b58a211e..2721bac473070 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -3699,6 +3699,7 @@ static void RenderOpenCLOptions(const ArgList &Args, ArgStringList &CmdArgs, static void RenderHLSLOptions(const ArgList &Args, ArgStringList &CmdArgs, types::ID InputType) { const unsigned ForwardedArguments[] = { + options::OPT_hlsl_all_resources_bound, options::OPT_dxil_validator_version, options::OPT_res_may_alias, options::OPT_D, diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp index b76a3d7287975..587481b5623e1 100644 --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -417,6 +417,12 @@ HLSLToolChain::TranslateArgs(const DerivedArgList &Args, StringRef BoundArch, getDriver().Diag(diag::err_drv_dxc_invalid_matrix_layout); for (Arg *A : Args) { + if (A->getOption().getID() == options::OPT_dxc_all_resources_bound) { + DAL->AddFlagArg(nullptr, + Opts.getOption(options::OPT_hlsl_all_resources_bound)); + A->claim(); + continue; + } if (A->getOption().getID() == options::OPT_dxil_validator_version) { StringRef ValVerStr = A->getValue(); if (!isLegalValidatorVersion(ValVerStr, getDriver())) diff --git a/clang/test/Options/all_resources_bound.hlsl b/clang/test/Options/all_resources_bound.hlsl new file mode 100644 index 0000000000000..2dc1795bfb286 --- /dev/null +++ b/clang/test/Options/all_resources_bound.hlsl @@ -0,0 +1,10 @@ +// RUN: %clang_dxc -T lib_6_4 -all-resources-bound %s 2>&1 -### | FileCheck -check-prefix=ARB %s +// RUN: %clang_dxc -T lib_6_4 %s 2>&1 -### | FileCheck -check-prefix=NO_ARB %s + +// ARB: "-hlsl-all-resources-bound" +// NO_ARB-NOT: "-hlsl-all-resources-bound" +// assert expected CC1 option is present +float4 main(float4 a : A) : SV_TARGET +{ + return -a.yxxx; +} >From bd4883659723b1c150622c9b0b7e3d4b8778b564 Mon Sep 17 00:00:00 2001 From: Joshua Batista <[email protected]> Date: Tue, 23 Dec 2025 11:05:44 -0800 Subject: [PATCH 2/4] add shader module flag setting logic --- clang/include/clang/Basic/CodeGenOptions.def | 3 +++ clang/include/clang/Options/Options.td | 5 ++-- clang/lib/CodeGen/CGHLSLRuntime.cpp | 4 ++- .../test/CodeGenHLSL/all-resources-bound.hlsl | 7 ++++++ llvm/lib/Target/DirectX/DXILShaderFlags.cpp | 7 ++++++ .../ShaderFlags/all-resources-bound.ll | 25 +++++++++++++++++++ 6 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 clang/test/CodeGenHLSL/all-resources-bound.hlsl create mode 100644 llvm/test/CodeGen/DirectX/ShaderFlags/all-resources-bound.ll diff --git a/clang/include/clang/Basic/CodeGenOptions.def b/clang/include/clang/Basic/CodeGenOptions.def index a059803c433e3..06e3e4cd564b1 100644 --- a/clang/include/clang/Basic/CodeGenOptions.def +++ b/clang/include/clang/Basic/CodeGenOptions.def @@ -488,6 +488,9 @@ CODEGENOPT(StaticClosure, 1, 0, Benign) /// Assume that UAVs/SRVs may alias CODEGENOPT(ResMayAlias, 1, 0, Benign) +/// Assume that not all resources are bound +CODEGENOPT(AllResourcesBound, 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/Options/Options.td b/clang/include/clang/Options/Options.td index 8a032317a71c4..04756ce486eaf 100644 --- a/clang/include/clang/Options/Options.td +++ b/clang/include/clang/Options/Options.td @@ -9614,10 +9614,11 @@ class DXCJoinedOrSeparate<string name> : Option<["/", "-"], name, def dxc_all_resources_bound : DXCFlag<"all-resources-bound">, HelpText<"Enables agressive flattening">; -def hlsl_all_resources_bound : Option<["-"], "hlsl-all-resources-bound", KIND_SEPARATE>, +def hlsl_all_resources_bound : Option<["/", "-"], "hlsl-all-resources-bound", KIND_FLAG>, Group<dxc_Group>, Visibility<[ClangOption, CC1Option]>, - HelpText<"Enables agressive flattening">; + HelpText<"Enables agressive flattening">, + MarshallingInfoFlag<CodeGenOpts<"AllResourcesBound">>; def dxc_col_major : DXCFlag<"Zpc">, HelpText<"Pack matrices in column-major order">; def dxc_row_major : DXCFlag<"Zpr">, HelpText<"Pack matrices in row-major order">; def dxc_no_stdinc : DXCFlag<"hlsl-no-stdinc">, diff --git a/clang/lib/CodeGen/CGHLSLRuntime.cpp b/clang/lib/CodeGen/CGHLSLRuntime.cpp index 2e9602d1b3793..4c0349d4be7bf 100644 --- a/clang/lib/CodeGen/CGHLSLRuntime.cpp +++ b/clang/lib/CodeGen/CGHLSLRuntime.cpp @@ -483,7 +483,9 @@ void CGHLSLRuntime::finishCodeGen() { addDxilValVersion(TargetOpts.DxilValidatorVersion, M); if (CodeGenOpts.ResMayAlias) M.setModuleFlag(llvm::Module::ModFlagBehavior::Error, "dx.resmayalias", 1); - + if (CodeGenOpts.AllResourcesBound) + M.setModuleFlag(llvm::Module::ModFlagBehavior::Error, + "dx.allresourcesbound", 1); // NativeHalfType corresponds to the -fnative-half-type clang option which is // aliased by clang-dxc's -enable-16bit-types option. This option is used to // set the UseNativeLowPrecision DXIL module flag in the DirectX backend diff --git a/clang/test/CodeGenHLSL/all-resources-bound.hlsl b/clang/test/CodeGenHLSL/all-resources-bound.hlsl new file mode 100644 index 0000000000000..22703cc6eb0e5 --- /dev/null +++ b/clang/test/CodeGenHLSL/all-resources-bound.hlsl @@ -0,0 +1,7 @@ +// RUN: %clang_dxc -all-resources-bound -T lib_6_3 -HV 202x -Vd -Xclang -emit-llvm %s | FileCheck %s --check-prefix=FLAG +// RUN: %clang_dxc -T lib_6_3 -HV 202x -Xclang -emit-llvm %s | FileCheck %s --check-prefix=NOFLAG + +// FLAG-DAG: ![[ARB:.*]] = !{i32 1, !"dx.allresourcesbound", i32 1} +// FLAG-DAG: !llvm.module.flags = !{{{.*}}![[ARB]]{{.*}}} + +// NOFLAG-NOT: dx.allresourcesbound diff --git a/llvm/lib/Target/DirectX/DXILShaderFlags.cpp b/llvm/lib/Target/DirectX/DXILShaderFlags.cpp index e0049dc75c0db..a4320209c53d6 100644 --- a/llvm/lib/Target/DirectX/DXILShaderFlags.cpp +++ b/llvm/lib/Target/DirectX/DXILShaderFlags.cpp @@ -287,6 +287,13 @@ ModuleShaderFlags::gatherGlobalModuleFlags(const Module &M, if (CanSetResMayNotAlias && MMDI.ValidatorVersion < VersionTuple(1, 8)) CSF.ResMayNotAlias = !DRM.uavs().empty(); + // The command line option -all-resources-bound will set the + // dx.allresourcesbound module flag to 1 + if (auto *AllResourcesBound = mdconst::extract_or_null<ConstantInt>( + M.getModuleFlag("dx.allresourcesbound"))) + if (AllResourcesBound->getValue().getBoolValue()) + CSF.AllResourcesBound = true; + return CSF; } diff --git a/llvm/test/CodeGen/DirectX/ShaderFlags/all-resources-bound.ll b/llvm/test/CodeGen/DirectX/ShaderFlags/all-resources-bound.ll new file mode 100644 index 0000000000000..14ddcfafdf5de --- /dev/null +++ b/llvm/test/CodeGen/DirectX/ShaderFlags/all-resources-bound.ll @@ -0,0 +1,25 @@ +; RUN: opt -S --passes="print-dx-shader-flags" 2>&1 %s | FileCheck %s + +; This test checks to ensure that setting the LLVM module flag +; "dx.allresourcesbound" to 1 sets the corresponding DXIL shader flag + +target triple = "dxil-pc-shadermodel6.8-library" + +; CHECK: Combined Shader Flags for Module +; CHECK-NEXT: Shader Flags Value: 0x00000100 + +; CHECK: Note: shader requires additional functionality: +; CHECK-NEXT: extra DXIL module flags: +; CHECK-NEXT: All resources bound for the duration of shader execution + + +; CHECK: Function main : 0x00000100 +define float @main() #0 { + ret float 0.0 +} + +!llvm.module.flags = !{!0} + +!0 = !{i32 1, !"dx.allresourcesbound", i32 1} + +attributes #0 = { convergent norecurse nounwind "hlsl.export"} >From d7c48b48dce66296c724067da7cbbcd6f28edfa2 Mon Sep 17 00:00:00 2001 From: Joshua Batista <[email protected]> Date: Tue, 23 Dec 2025 13:49:13 -0800 Subject: [PATCH 3/4] remove - because sometimes it's / --- clang/test/Options/all_resources_bound.hlsl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/test/Options/all_resources_bound.hlsl b/clang/test/Options/all_resources_bound.hlsl index 2dc1795bfb286..7ac70fddf1aa8 100644 --- a/clang/test/Options/all_resources_bound.hlsl +++ b/clang/test/Options/all_resources_bound.hlsl @@ -1,8 +1,8 @@ // RUN: %clang_dxc -T lib_6_4 -all-resources-bound %s 2>&1 -### | FileCheck -check-prefix=ARB %s // RUN: %clang_dxc -T lib_6_4 %s 2>&1 -### | FileCheck -check-prefix=NO_ARB %s -// ARB: "-hlsl-all-resources-bound" -// NO_ARB-NOT: "-hlsl-all-resources-bound" +// ARB: "hlsl-all-resources-bound" +// NO_ARB-NOT: "hlsl-all-resources-bound" // assert expected CC1 option is present float4 main(float4 a : A) : SV_TARGET { >From 8443a392a10a99b404c2cef1755d374f9bbd9afd Mon Sep 17 00:00:00 2001 From: Joshua Batista <[email protected]> Date: Tue, 23 Dec 2025 14:17:13 -0800 Subject: [PATCH 4/4] remove the double quotes --- clang/test/Options/all_resources_bound.hlsl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/test/Options/all_resources_bound.hlsl b/clang/test/Options/all_resources_bound.hlsl index 7ac70fddf1aa8..4c8fe7124f3be 100644 --- a/clang/test/Options/all_resources_bound.hlsl +++ b/clang/test/Options/all_resources_bound.hlsl @@ -1,8 +1,8 @@ // RUN: %clang_dxc -T lib_6_4 -all-resources-bound %s 2>&1 -### | FileCheck -check-prefix=ARB %s // RUN: %clang_dxc -T lib_6_4 %s 2>&1 -### | FileCheck -check-prefix=NO_ARB %s -// ARB: "hlsl-all-resources-bound" -// NO_ARB-NOT: "hlsl-all-resources-bound" +// ARB: hlsl-all-resources-bound +// NO_ARB-NOT: hlsl-all-resources-bound // assert expected CC1 option is present float4 main(float4 a : A) : SV_TARGET { _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
