diff --git a/llvm/lib/Target/DirectX/DXILResourceImplicitBinding.cpp b/llvm/lib/Target/DirectX/DXILResourceImplicitBinding.cpp index 72d410b55c7e5..6e69c5ac1d633 100644 --- a/llvm/lib/Target/DirectX/DXILResourceImplicitBinding.cpp +++ b/llvm/lib/Target/DirectX/DXILResourceImplicitBinding.cpp @@ -136,10 +136,17 @@ PreservedAnalyses DXILResourceImplicitBinding::run(Module &M, DXILResourceBindingInfo &DRBI = AM.getResult(M); DXILResourceTypeMap &DRTM = AM.getResult(M); - if (DRBI.hasImplicitBinding()) - if (assignBindings(M, DRBI, DRTM)) - return PreservedAnalyses::none(); - return PreservedAnalyses::all(); + + if (!DRBI.hasImplicitBinding()) + return PreservedAnalyses::all(); + + if (!assignBindings(M, DRBI, DRTM)) + return PreservedAnalyses::all(); + + PreservedAnalyses PA; + PA.preserve(); + PA.preserve(); + return PA; } namespace { @@ -163,6 +170,8 @@ class DXILResourceImplicitBindingLegacy : public ModulePass { void getAnalysisUsage(llvm::AnalysisUsage &AU) const override { AU.addRequired(); AU.addRequired(); + AU.addPreserved(); + AU.addPreserved(); } }; diff --git a/llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp b/llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp index 625de759eb831..1a36809658498 100644 --- a/llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp +++ b/llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp @@ -409,6 +409,7 @@ class DXILTranslateMetadataLegacy : public ModulePass { AU.addPreserved(); AU.addPreserved(); AU.addPreserved(); + AU.addPreserved(); } bool runOnModule(Module &M) override { diff --git a/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp b/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp index 22142484cef3c..40fe6c6e639e4 100644 --- a/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp +++ b/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp @@ -103,7 +103,6 @@ class DirectXPassConfig : public TargetPassConfig { FunctionPass *createTargetRegisterAllocator(bool) override { return nullptr; } void addCodeGenPrepare() override { addPass(createDXILFinalizeLinkageLegacyPass()); - addPass(createDXILResourceImplicitBindingLegacyPass()); addPass(createDXILResourceAccessLegacyPass()); addPass(createDXILIntrinsicExpansionLegacyPass()); addPass(createDXILCBufferAccessLegacyPass()); @@ -114,6 +113,7 @@ class DirectXPassConfig : public TargetPassConfig { addPass(createScalarizerPass(DxilScalarOptions)); addPass(createDXILForwardHandleAccessesLegacyPass()); addPass(createDXILLegalizeLegacyPass()); + addPass(createDXILResourceImplicitBindingLegacyPass()); addPass(createDXILTranslateMetadataLegacyPass()); addPass(createDXILPostOptimizationValidationLegacyPass()); addPass(createDXILOpLoweringLegacyPass()); diff --git a/llvm/test/CodeGen/DirectX/llc-pipeline.ll b/llvm/test/CodeGen/DirectX/llc-pipeline.ll index 088040a491bdc..2b29fd30a7a56 100644 --- a/llvm/test/CodeGen/DirectX/llc-pipeline.ll +++ b/llvm/test/CodeGen/DirectX/llc-pipeline.ll @@ -14,8 +14,6 @@ ; CHECK-NEXT: ModulePass Manager ; CHECK-NEXT: DXIL Finalize Linkage -; CHECK-NEXT: DXIL Resource Binding Analysis -; CHECK-NEXT: DXIL Resource Implicit Binding ; CHECK-NEXT: FunctionPass Manager ; CHECK-NEXT: DXIL Resource Access ; CHECK-NEXT: DXIL Intrinsic Expansion @@ -27,6 +25,8 @@ ; CHECK-NEXT: Scalarize vector operations ; CHECK-NEXT: DXIL Forward Handle Accesses ; CHECK-NEXT: DXIL Legalizer +; CHECK-NEXT: DXIL Resource Binding Analysis +; CHECK-NEXT: DXIL Resource Implicit Binding ; CHECK-NEXT: DXIL Resources Analysis ; CHECK-NEXT: DXIL Module Metadata analysis ; CHECK-NEXT: DXIL Shader Flag Analysis