summaryrefslogtreecommitdiff
path: root/llvm/test/CodeGen/DirectX
AgeCommit message (Collapse)Author
2025-11-20[HLSL] Implement the `fwidth` intrinsic for DXIL and SPIR-V target (#161378)Alexander Johnston
Adds the fwidth intrinsic for HLSL. The DXIL path only requires modification to the hlsl headers. The SPIRV path implements the OpFwidth builtin in Clang and instruction selection for the OpFwidth instruction in LLVM. Also adds shader stage tests to the ddx_coarse and ddy_coarse instructions used by fwidth. Closes #99120 --------- Co-authored-by: Alexander Johnston <alexander.johnston@amd.com>
2025-11-18[HLSL][DirectX] Use a padding type for HLSL buffers. (#167404)Justin Bogner
This change drops the use of the "Layout" type and instead uses explicit padding throughout the compiler to represent types in HLSL buffers. There are a few parts to this, though it's difficult to split them up as they're very interdependent: 1. Refactor HLSLBufferLayoutBuilder to allow us to calculate the padding of arbitrary types. 2. Teach Clang CodeGen to use HLSL specific paths for cbuffers when generating aggregate copies, array accesses, and structure accesses. 3. Simplify DXILCBufferAccesses such that it directly replaces accesses with dx.resource.getpointer rather than recalculating the layout. 4. Basic infrastructure for SPIR-V handling, but the implementation itself will need work in follow ups. Fixes several issues, including #138996, #144573, and #156084. Resolves #147352.
2025-11-18[HLSL] Implement ddx/ddy_coarse intrinsics (#164831)Alexander Johnston
Closes https://github.com/llvm/llvm-project/issues/99097 Closes https://github.com/llvm/llvm-project/issues/99100 As ddx and ddy are near identical implementations I've combined them in this PR. This aims to unblock https://github.com/llvm/llvm-project/pull/161378 --------- Co-authored-by: Alexander Johnston <alexander.johnston@amd.com>
2025-11-10[DirectX] Teach DXILResourceAccess about cbuffers (#164554)Justin Bogner
This isn't reachable today but will come into play once we reorder passes for #147352 and #147351. Note that the `CBufferRowIntrin` helper struct is copied from the `DXILCBufferAccess` pass, but it will be removed from there when we simplify that pass in #147351
2025-11-06[DirectX] Remove llvm.assume intrinsic (#166697)Farzon Lotfi
fixes #165051 This change reverts the experiment we did for #165311 While some backends seem to support llvm.assume without validation The validator itself does not so it makes more sense to just remove it.
2025-11-06[DirectX] Let data scalarizer pass account for sub-types when updating GEP ↵Finn Plummer
type (#166200) This pr lets the `dxil-data-scalarization` account for a GEP with a source type that is a sub-type of the pointer operand type. The pass is updated so that the replaced GEP introduces zero indices such that the result type remains the same (with the vector -> array transform). Please see resolved issue for an annotated example. Resolves: https://github.com/llvm/llvm-project/issues/165473
2025-11-05[DirectX] Emit `hlsl.wavesize` function attribute as entry property metadata ↵Finn Plummer
(#165624) This pr adds support for emitting the `hlsl.wavesize` function attribute as an entry property metadata for a compute shader. It follows the implementation of `hlsl.numthreads`. - Collects the wave range information from the function attribute in `DXILMetadataAnalysis` - Introduce the `WaveRange` property tag - Emit a `WaveSize` or `WaveRange` metadata (depending on shader model) in `DXILTranslateMetadata` - Add tests for valid/invalid scenarios - Updates the base `PSVInfo` to reflect the min/max wave lane counts Resolves #70118
2025-11-04[HLSL] Implement the f16tof32() intrinsic (#165860)Tim Corringham
Implement the f16tof32() intrinsic, including DXILand SPIRV codegen, and associated tests. Fixes #99112 --------- Co-authored-by: Tim Corringham <tcorring@amd.com>
2025-10-29[DirectX] Use an allow-list of DXIL compatible module metadata (#165290)Finn Plummer
This pr introduces an allow-list for module metadata, this encompasses the llvm metadata nodes: `llvm.ident` and `llvm.module.flags`, as well as, the generated `dx.` options. Resolves: #164473.
2025-10-29[DirectX] Add DXIL validation of `llvm.loop` metadata (#164292)Finn Plummer
This pr adds the equivalent validation of `llvm.loop` metadata that is [done in DXC](https://github.com/microsoft/DirectXShaderCompiler/blob/8f21027f2ad5dcfa63a275cbd278691f2c8fad33/lib/DxilValidation/DxilValidation.cpp#L3010). This is done as follows: - Add `llvm.loop` to the metadata allow-list in `DXILTranslateMetadata` - Iterate through all `llvm.loop` metadata nodes and strip all incompatible ones - Raise an error for ill-formed nodes that are compatible with DXIL Resolves: https://github.com/llvm/llvm-project/issues/137387
2025-10-28[HLSL][DXIL][SPRIV] Added WaveActiveMin intrinsic (#164385)Sietze Riemersma
Adds the WaveActiveMin intrinsic from #99169. I think I did all of the required things on the checklist: - [x] Implement `WaveActiveMin` clang builtin, - [x] Link `WaveActiveMin` clang builtin with `hlsl_intrinsics.h` - [x] Add sema checks for `WaveActiveMin` to `CheckHLSLBuiltinFunctionCall` in `SemaChecking.cpp` - [x] Add codegen for `WaveActiveMin` to `EmitHLSLBuiltinExpr` in `CGBuiltin.cpp` - [x] Add codegen tests to `clang/test/CodeGenHLSL/builtins/WaveActiveMin.hlsl` - [x] Add sema tests to `clang/test/SemaHLSL/BuiltIns/WaveActiveMin-errors.hlsl` - [x] Create the `int_dx_WaveActiveMin` intrinsic in `IntrinsicsDirectX.td` - [x] Create the `DXILOpMapping` of `int_dx_WaveActiveMin` to `119` in `DXIL.td` - [x] Create the `WaveActiveMin.ll` and `WaveActiveMin_errors.ll` tests in `llvm/test/CodeGen/DirectX/` - [x] Create the `int_spv_WaveActiveMin` intrinsic in `IntrinsicsSPIRV.td` - [x] In SPIRVInstructionSelector.cpp create the `WaveActiveMin` lowering and map it to `int_spv_WaveActiveMin` in `SPIRVInstructionSelector::selectIntrinsic`. - [x] Create SPIR-V backend test case in `llvm/test/CodeGen/SPIRV/hlsl-intrinsics/WaveActiveMin.ll But as some of the code has changed and was moved around (E.G. `CGBuiltin.cpp` -> `CGHLSLBuiltins.cpp`) I mostly followed how `WaveActiveMax()` is implemented. I have not been able to run the tests myself as I am unsure which project runs the correct test. Any guidance on how I can test myself would be helpful. Also added some tests to the offload-test-suite https://github.com/llvm/offload-test-suite/pull/478
2025-10-27[HLSL] Adding DXIL Storage type into `TypedInfo` (#164887)joaosaffran
In DXIL, some 64bit types are actually represented with their 32bit counterpart. This was already being address in the codegen, however the metadata generation was lacking this information. This PR is fixing this issue. Closes: [#146735](https://github.com/llvm/llvm-project/issues/146735)
2025-10-24[NFC][DirectX] Refactor `DXILPrepare`/`DXILTranslateMetadata` (#164285)Finn Plummer
This pr updates `DXILPrepare` and `DXILTranslateMetadata` by moving all the removal of metadata from `DXILPrepare` to `DXILTranslateMetadata` to have a more consistent definition of what each pass is doing. It restricts the `DXILPrepare` to only update function attributes and insert bitcasts, and moves the removal of metadata to `DXILTranslateMetadata` so that all manipulation of metadata is done in a single pass.
2025-10-23[DirectX] Use a well-formed cbuffer in the unused cbuffer test (#164844)Justin Bogner
CBuffers still need a layout type for now. Fix the crash when looking up the cbuffer info.
2025-10-22[HLSL] Allow completely unused cbuffers (#164557)Justin Bogner
We were checking for cbuffers where the global was removed, but if the buffer is completely unused the whole thing can be null. --------- Co-authored-by: Helena Kotas <hekotas@microsoft.com>
2025-10-22[DirectX] Fix crash when naming buffers of arrays (#164553)Justin Bogner
DXILResource was falling over trying to name a resource type that contained an array, such as `StructuredBuffer<float[3][2]>`. Handle this by walking through array types to gather the dimensions.
2025-10-21[DirectX] remove unrecognized 'llvm.errno.tbaa' named metadata for DXIL ↵Finn Plummer
target (#164472) This is a temporary measure to explicitly remove the unrecognized named metadata when targeting DXIL. This should be removed for an allowlist as tracked here: https://github.com/llvm/llvm-project/issues/164473.
2025-10-16[DirectX] Introduce `dx.Padding` type (#160957)Justin Bogner
This introduces the `dx.Padding` type as an alternative to the `dx.Layout` types that are currently used for cbuffers. Later, we'll remove the `dx.Layout` types completely, but making the backend handle either makes it easier to stage the necessary changes to get there. See #147352 for details.
2025-10-15[DirectX] Add `llvm.dx.resource.getdimensions.x` intrinsic and lowering to ↵Helena Kotas
DXIL (#161753) Introduces LLVM intrinsic `llvm.dx.resource.getdimensions.x` and its lowering to DXIL op `op.dx.getDimensions`. The intrinsic will be used to implement `GetDimension` for buffers. The lowering is using `undef` value since it is required by the DXIL format which is based on LLVM 3.7. Proposal update: https://github.com/llvm/wg-hlsl/pull/350 Closes #112982
2025-10-15[DirectX] Add 32- and 64-bit 3-element vectors to DataLayout (#160955)Justin Bogner
This explicitly adds two 3-element vectors to the DataLayout so that they'll be element-aligned. We need to do this more generally for vectors, but this unblocks some very common cases. Workaround for #123968
2025-10-15[DirectX] Make a test a bit more readable. NFC (#160747)Justin Bogner
CHECK-lines ignore whitespace, so we can remove some here and make this a bit easier to read.
2025-10-14[DirectX] Fix DXIL container generating invalid PSV0 part for unbounded ↵Helena Kotas
resources (#163287) When calculating the upper bound for resource binding to be stored in the PSV0 part of the DXIL container, the compiler needs to take into account that the resource range could be _unbounded_, which is indicated by the binding size being `UINT32_MAX`. Fixes [#159679](https://github.com/llvm/llvm-project/issues/159679)
2025-10-08[DirectX] Making sure we always parse, validate and verify Flags (#162171)joaosaffran
This PR makes a few changes to make sure that Root Signature Flags are always parsed validated and verified, this includes if you use a version that doesn't support flags. The logic already existed, this PR just makes sure it is always executed. Closes: [#161579](https://github.com/llvm/llvm-project/issues/161579) --------- Co-authored-by: joaosaffran <joao.saffran@microsoft.com>
2025-10-06[DirectX] Fix Flags validation to prevent casting into enum (#161587)joaosaffran
This PR changes the validation logic for Root Descriptor and Descriptor Range flags to properly check if the `uint32_t` values are within range before casting into the enums.
2025-10-01[DirectX] Updating Root Signature Metadata to contain Static Sampler flags ↵joaosaffran
(#160210) Root Signature 1.2 adds flags to static samplers. This requires us to change the metadata representation to account for it when being generated. This patch focus on the metadata changes required in the backend, frontend changes will come in a future PR.
2025-09-26[DirectX] Validating Root flags are denying shader stage (#160919)joaosaffran
Root Signature Flags, allow flags to block compilation of certain shader stages. This PR implements a validation and notify the user if they compile a root signature that is denying such shader stage. Closes: https://github.com/llvm/llvm-project/issues/153062 Previously approved: https://github.com/llvm/llvm-project/pull/153287 --------- Co-authored-by: joaosaffran <joao.saffran@microsoft.com> Co-authored-by: Joao Saffran <{ID}+{username}@users.noreply.github.com> Co-authored-by: Joao Saffran <jderezende@microsoft.com>
2025-09-26[DirectX] Updating DXContainer Yaml to represent Root Signature 1.2 (#159659)joaosaffran
This PR updates the YAML representation of DXContainer to support Root Signature 1.2, this also requires updating the write logic to support testing.
2025-09-26[DirectX] Adding missing descriptor table validations (#153276)joaosaffran
This patch adds 2 small validation to DirectX backend. First, it checks if registers in descriptor tables are not overflowing, meaning they don't try to bind registers over the maximum allowed value, this is checked both on the offset and on the number of descriptors inside the range; second, it checks if samplers are being mixed with other resource types. Closes: #153057, #153058 --------- Co-authored-by: joaosaffran <joao.saffran@microsoft.com> Co-authored-by: Joao Saffran <{ID}+{username}@users.noreply.github.com> Co-authored-by: Joao Saffran <jderezende@microsoft.com>
2025-09-25Implements isnan() HLSL intrinsic for DXIL and SPIR-V targets. (#157733)Dan Brown
Addresses #99132.
2025-09-22[DirectX] NonUniformResourceIndex lowering (#159608)Helena Kotas
Introduces `llvm.{dx|svp}.resource.nonuniformindex` intrinsic that will be used when a resource index is not guaranteed to be uniform across threads (HLSL function NonUniformResourceIndex). The DXIL lowering layer looks for this intrinsic call in the resource index calculation, makes sure it is reflected in the NonUniform flag on DXIL create handle ops (`dx.op.createHandle` and `dx.op.createHandleFromBinding`), and then removes it from the module. Closes #155701
2025-09-12[DirectX] Updating Root Signature YAML representation to use Enums instead ↵joaosaffran
of uint (#154827) This PR is updating Root Signature YAML to use enums, this is a required change to remove the use of to_underlying from DirectXContainer binary file. Closes: [#150676](https://github.com/llvm/llvm-project/issues/150676)
2025-09-10[DirectX] Validate if Textures/TypedBuffers are being bound in Root ↵joaosaffran
Signatures (#147573) DXC doesn't allow Textures/TypedBuffers to bind with root signature descriptors, this implements the same check. Closes: #126647 --------- Co-authored-by: joaosaffran <joao.saffran@microsoft.com> Co-authored-by: Joao Saffran <{ID}+{username}@users.noreply.github.com> Co-authored-by: Joao Saffran <jderezende@microsoft.com>
2025-09-10[DirectX] Removing dxbc DescriptorRange from mcbxdc (#154629)joaosaffran
MC Descriptor Range Representation currently depend on Object structures. This PR removes that dependency and in order to facilitate removing to_underlying usage in follow-up PRs.
2025-09-09[HLSL][DirectX] Add support for `rootsig` as a target environment (#156373)Finn Plummer
This pr implements support for a root signature as a target, as specified [here](https://github.com/llvm/wg-hlsl/blob/main/proposals/0029-root-signature-driver-options.md#target-root-signature-version). This is implemented in the following steps: 1. Add `rootsignature` as a shader model environment type and define `rootsig` as a `target_profile`. Only valid as versions 1.0 and 1.1 2. Updates `HLSLFrontendAction` to invoke a special handling of constructing the `ASTContext` if we are considering an `hlsl` file and with a `rootsignature` target 3. Defines the special handling to minimally instantiate the `Parser` and `Sema` to insert the `RootSignatureDecl` 4. Updates `CGHLSLRuntime` to emit the constructed root signature decl as part of `dx.rootsignatures` with a `null` entry function 5. Updates `DXILRootSignature` to handle emitting a root signature without an entry function 6. Updates `ToolChains/HLSL` to invoke `only-section=RTS0` to strip any other generated information Resolves: https://github.com/llvm/llvm-project/issues/150286. ##### Implementation Considerations Ideally we could invoke this as part of `clang-dxc` without the need of a source file. However, the initialization of the `Parser` and `Lexer` becomes quite complicated to handle this. Technically, we could avoid generating any of the extra information that is removed in step 6. However, it seems better to re-use the logic in `llvm-objcopy` without any need for additional custom logic in `DXILRootSignature`.
2025-09-08[DirectX] Add emulation for fp16 types of llvm.is.fpclass (#157505)Farzon Lotfi
fixes #157504 This changes adds the emulation we need for IsNaN, IsNormal, & IsFinite This change only applies these emulations to the llvm.is.fpclass cases of fp16. Since there is no DX intrinsics yet for these cases, applying the emulation to the necessary intrinsics is left for future implementers of - https://github.com/llvm/llvm-project/issues/99132 - https://github.com/llvm/llvm-project/issues/156069 - https://github.com/llvm/llvm-project/issues/99131
2025-09-05[DirectX] Add isinf f16 emulation for SM6.8 and lower (#156932)Farzon Lotfi
fixes #156068 - We needed to add a new sub arch to the target tripple so we can test that emulation does not happen when targeting SM6.9 - The HLSL toolchain needed to be updated to handle the conversion of strings to enums for the new sub arch. - The emulation is done in DXILIntrinsicExpansion.cpp and needs to be able to convert both llvm.is.fpclass and lvm.dx.isinf to the proper emulation - test updates in TargetParser/TripleTest.cpp, isinf.ll, is_fpclass.ll, and DXCModeTest.cpp
2025-09-04[HLSL][NFC] Change line endings to LF (#156930)Helena Kotas
Changes line endings in files related to HLSL to LF (`\n`).
2025-08-29[DirectX] Make dx.RawBuffer an op that can't be replaced (#154620)Farzon Lotfi
fixes #152348 SimplifyCFG collapses raw buffer store from a if\else load into a select. This change prevents the TargetExtType dx.Rawbuffer from being replace thus preserving the if\else blocks. A further change was needed to eliminate the phi node before we process Intrinsic::dx_resource_getpointer in DXILResourceAccess.cpp
2025-08-29[NFC] #155740 post cleanup (#155966)paperchalice
Remove all "approx-func-fp-math" in tests.
2025-08-28[DirectX] Validate registers are bound to root signature (#146785)joaosaffran
DXC checks if registers are correctly bound to root signature descriptors. This implements the same check. closes: #[126645](https://github.com/llvm/llvm-project/issues/126645) --------- Co-authored-by: joaosaffran <joao.saffran@microsoft.com> Co-authored-by: Joao Saffran <jderezende@microsoft.com>
2025-08-28[HLSL][DirectX] Remove uniformity bit from resource initialization ↵Helena Kotas
intrinsics (#155332) Removes uniformity bit from resource initialization intrinsics `llvm.{dx|spv}.resource.handlefrombinding` and `llvm.{dx|spv}.resource.handlefromimplicitbinding`. The flag currently always set to `false`. It should be derived from resource analysis and not provided by codegen. Closes #135452
2025-08-27[DirectX][ObectYAML] Make `RootParameterOffset` and `StaticSamplersOffset` ↵Finn Plummer
behaviour consistent (#155521) This pr fixes some inconsistencies in behaviour of how we handle `StaticSamplersOffset` with respect to DXC and `RootParameterOffset`. Namely: 1. Make codegen of `RTS0` always compute the `StaticSamplersOffset` regardless if there are any `StaticSampler`s. This is to be consistent and produce an identical `DXContainer` as DXC. 2. Make the `StaticSamplersOffset` and `RootParametersOffset` optional parameters in the yaml description. This means it will be used when it is specified (which was not necassarily the case before). 3. Enforce that the provided `StaticSamplersOffset` and `RootParametersOffset` in a yaml description match the computed value. For more context see: https://github.com/llvm/llvm-project/issues/155299. Description of existing test updates updates: - `CodeGen/DirectX/ContainerData`: Updated to codegen computed values (previously unspecified) - `llvm-objcopy/DXContainer`: Updated to `yaml2obj` computed values (previously unspecified) - `ObjectYAML/DXContainer`: Updated to `yaml2obj` computed values (previously incorrect) - `ObjectYAML/DXContainerYAMLTest`: Updated to `yaml2obj` computed values (previously incorrect) See newly added tests for testing of optional parameter functionality and `StaticSamplersOffset` computation. Resolves: https://github.com/llvm/llvm-project/issues/155299
2025-08-25[DirectX] Refactor RootSignature Backend to remove `to_underlying` from Root ↵joaosaffran
Parameter Header (#154249) This patch is refactoring Root Parameter Header in DX Container backend to remove the usage of `to_underlying`. This requires some changes: first, MC Root Signature should not depend on Object/DXContainer.h; Second, we need to assume data to be valid in scenarios where it was originally not expected, this made some tests be removed.
2025-08-15[DirectX] Add GlobalDCE pass after finalize linkage pass in DirectX backend ↵Kaitlin Peng
(#151071) Fixes #139023. This PR essentially removes unused global variables: - Restores the `GlobalDCE` Legacy pass and adds it to the DirectX backend after the finalize linkage pass - Converts external global variables with no usage to internal linkage in the finalize linkage pass - (so they can be removed by `GlobalDCE`) - Makes the `dxil-finalize-linkage` pass usable using the new pass manager flag syntax - Adds tests to `finalize_linkage.ll` that make sure unused global variables are removed - Adds a use for variable `@CBV` in `opaque-value_as_metadata.ll` so it isn't removed - Changes the `scalar-data.ll` run command to avoid removing its global variables --------- Co-authored-by: Farzon Lotfi <farzonlotfi@microsoft.com>
2025-08-14[DirectX] Add Range Overlap validation (#152229)joaosaffran
As part of the Root Signature Spec, we need to validate if Root Signatures are not defining overlapping ranges. Closes: https://github.com/llvm/llvm-project/issues/126645 --------- Co-authored-by: joaosaffran <joao.saffran@microsoft.com> Co-authored-by: Joao Saffran <{ID}+{username}@users.noreply.github.com> Co-authored-by: Joao Saffran <jderezende@microsoft.com>
2025-08-12[DirectX] Remove lifetime intrinsics and run Dead Store Elimination (#152636)Farzon Lotfi
fixes #151764 This fix has two parts first we track all lifetime intrinsics and if they are users of an alloca of a target extention like dx.RawBuffer then we eliminate those memory intrinsics when we visit the alloca. We do step one to allow us to use the Dead Store Elimination Pass. This removes the alloca and simplifies the use of the target extention back to using just the global. That keeps things in a form the DXILBitcodeWriter is expecting. Obviously to pull this off we needed to bring back the legacy pass manager plumbing for the DSE pass and hook it up into the DirectX backend. The net impact of this change is that DML shader pass rate went from 89.72% (4268 successful compilations) to 90.98% (4328 successful compilations).
2025-08-11[HLSL] Update DXIL resource metadata code to support resource arrays (#152254)Helena Kotas
Closes #145422
2025-08-11[HLSL][DirectX] Fix `dot2add` DXIL operation to use float overload (#152781)Kaitlin Peng
Fixes #152585. The `dot2add` DXILOpFunction should be `dx.op.dot2AddHalf.f32` (i.e. it has [a single overload that's a float](https://github.com/microsoft/DirectXShaderCompiler/blob/main/utils/hct/hctdb.py#L3960), rather than no overloads). It was also being defined for too low of a DXIL version - [dxc says SM6.4](https://github.com/microsoft/DirectXShaderCompiler/blob/main/utils/hct/hctdb.py#L740).
2025-08-11[DirectX] Fix resource binding analysis incorrectly removing duplicates ↵Helena Kotas
(#152253) The resource binding analysis was incorrectly reducing the size of the `Bindings` vector by one element after sorting and de-duplication. This led to an inaccurate setting of the `HasOverlappingBinding` flag in the `DXILResourceBindingInfo` analysis, as the truncated vector no longer reflected the true binding state. This update corrects the shrink logic and introduces an `assert` in the `DXILPostOptimizationValidation` pass. The assertion will trigger if `HasOverlappingBinding` is set but no corresponding error is detected, helping catch future inconsistencies. The bug surfaced when the `srv_metadata.hlsl` and `uav_metadata.hlsl` tests were updated to include unbounded resource arrays as part of https://github.com/llvm/llvm-project/issues/145422. These updated test files are included in this PR, as they would cause the new assertion to fire if the original issue remained unresolved. Depends on #152250
2025-08-08[DirectX] Update lifetime legalization to account for the removed size ↵Deric C.
argument (#152791) Fixes #152754 - Fixes the ArgOperand index in `DXILOpLowering.cpp` used to obtain the pointer operand of a lifetime intrinsic. - Updates the tests `llvm/test/CodeGen/DirectX/legalize-lifetimes-valver-1.5.ll`, `llvm/test/CodeGen/DirectX/legalize-lifetimes-valver-1.6.ll`, `llvm/test/CodeGen/DirectX/ShaderFlags/lifetimes-noint64op.ll`, and `llvm/test/tools/dxil-dis/lifetimes.ll` to use the new size-less lifetime intrinsic - Removes lifetime intrinsics from the test `llvm/test/CodeGen/DirectX/legalize-memset.ll` to be consistent with the corresponding memcpy test which does not have lifetime intrinsics. (Removal of lifetime intrinsics from tests like this was suggested here in the past: https://github.com/llvm/llvm-project/pull/139173#discussion_r2091778868) - Rewrites the lifetime legalization functions in the EmbedDXILPass to re-add the explicit size argument for DXIL