diff options
author | Farzon Lotfi <farzonlotfi@microsoft.com> | 2025-08-12 12:42:08 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-08-12 12:42:08 -0400 |
commit | 544562ebc2bc6f38cf21a2a82a84dcb4a14b06b9 (patch) | |
tree | 143a4810b1d06a369753e42028325d39e182f576 /llvm/lib/Target/DirectX/DirectXTargetMachine.cpp | |
parent | 219893297b88009a17a28fe656f9ed7fc4c62ae3 (diff) | |
download | llvm-544562ebc2bc6f38cf21a2a82a84dcb4a14b06b9.zip llvm-544562ebc2bc6f38cf21a2a82a84dcb4a14b06b9.tar.gz llvm-544562ebc2bc6f38cf21a2a82a84dcb4a14b06b9.tar.bz2 |
[DirectX] Remove lifetime intrinsics and run Dead Store Elimination (#152636)
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).
Diffstat (limited to 'llvm/lib/Target/DirectX/DirectXTargetMachine.cpp')
-rw-r--r-- | llvm/lib/Target/DirectX/DirectXTargetMachine.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp b/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp index 84751d2..4ca2247 100644 --- a/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp +++ b/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp @@ -45,6 +45,7 @@ #include "llvm/Support/Compiler.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Target/TargetLoweringObjectFile.h" +#include "llvm/Transforms/Scalar.h" #include "llvm/Transforms/Scalar/Scalarizer.h" #include <optional> @@ -72,6 +73,7 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeDirectXTarget() { initializeDXILFinalizeLinkageLegacyPass(*PR); initializeDXILPrettyPrinterLegacyPass(*PR); initializeDXILForwardHandleAccessesLegacyPass(*PR); + initializeDSELegacyPassPass(*PR); initializeDXILCBufferAccessLegacyPass(*PR); } @@ -112,6 +114,7 @@ public: addPass(createScalarizerPass(DxilScalarOptions)); addPass(createDXILFlattenArraysLegacyPass()); addPass(createDXILForwardHandleAccessesLegacyPass()); + addPass(createDeadStoreEliminationPass()); addPass(createDXILLegalizeLegacyPass()); addPass(createDXILResourceImplicitBindingLegacyPass()); addPass(createDXILTranslateMetadataLegacyPass()); |