2
0

DxilGenerationPass.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // //
  3. // DxilGenerationPass.h //
  4. // Copyright (C) Microsoft Corporation. All rights reserved. //
  5. // This file is distributed under the University of Illinois Open Source //
  6. // License. See LICENSE.TXT for details. //
  7. // //
  8. // This file provides a DXIL Generation pass. //
  9. // //
  10. ///////////////////////////////////////////////////////////////////////////////
  11. #pragma once
  12. namespace llvm {
  13. class Module;
  14. class ModulePass;
  15. class Function;
  16. class FunctionPass;
  17. class Instruction;
  18. class PassRegistry;
  19. class StringRef;
  20. struct PostDominatorTree;
  21. }
  22. namespace hlsl {
  23. class DxilResourceBase;
  24. class WaveSensitivityAnalysis {
  25. public:
  26. static WaveSensitivityAnalysis* create(llvm::PostDominatorTree &PDT);
  27. virtual ~WaveSensitivityAnalysis() { }
  28. virtual void Analyze(llvm::Function *F) = 0;
  29. virtual bool IsWaveSensitive(llvm::Instruction *op) = 0;
  30. };
  31. class HLSLExtensionsCodegenHelper;
  32. // Pause/resume support.
  33. bool ClearPauseResumePasses(llvm::Module &M); // true if modified; false if missing
  34. void GetPauseResumePasses(llvm::Module &M, llvm::StringRef &pause, llvm::StringRef &resume);
  35. void SetPauseResumePasses(llvm::Module &M, llvm::StringRef pause, llvm::StringRef resume);
  36. }
  37. namespace llvm {
  38. /// \brief Create and return a pass that tranform the module into a DXIL module
  39. /// Note that this pass is designed for use with the legacy pass manager.
  40. ModulePass *createDxilLowerCreateHandleForLibPass();
  41. ModulePass *createDxilAllocateResourcesForLibPass();
  42. ModulePass *createDxilEliminateOutputDynamicIndexingPass();
  43. ModulePass *createDxilGenerationPass(bool NotOptimized, hlsl::HLSLExtensionsCodegenHelper *extensionsHelper);
  44. ModulePass *createHLEmitMetadataPass();
  45. ModulePass *createHLEnsureMetadataPass();
  46. ModulePass *createDxilFinalizeModulePass();
  47. ModulePass *createDxilEmitMetadataPass();
  48. FunctionPass *createDxilExpandTrigIntrinsicsPass();
  49. ModulePass *createDxilConvergentMarkPass();
  50. ModulePass *createDxilConvergentClearPass();
  51. ModulePass *createDxilDeadFunctionEliminationPass();
  52. ModulePass *createHLDeadFunctionEliminationPass();
  53. ModulePass *createHLPreprocessPass();
  54. ModulePass *createDxilPrecisePropagatePass();
  55. FunctionPass *createDxilPreserveAllOutputsPass();
  56. FunctionPass *createDxilPromoteLocalResources();
  57. ModulePass *createDxilPromoteStaticResources();
  58. ModulePass *createDxilLegalizeResources();
  59. ModulePass *createDxilLegalizeEvalOperationsPass();
  60. FunctionPass *createDxilLegalizeSampleOffsetPass();
  61. FunctionPass *createDxilSimpleGVNHoistPass();
  62. ModulePass *createInvalidateUndefResourcesPass();
  63. FunctionPass *createSimplifyInstPass();
  64. ModulePass *createDxilTranslateRawBuffer();
  65. ModulePass *createNoPausePassesPass();
  66. ModulePass *createPausePassesPass();
  67. ModulePass *createResumePassesPass();
  68. FunctionPass *createMatrixBitcastLowerPass();
  69. ModulePass *createDxilCleanupAddrSpaceCastPass();
  70. ModulePass *createDxilRenameResourcesPass();
  71. void initializeDxilLowerCreateHandleForLibPass(llvm::PassRegistry&);
  72. void initializeDxilAllocateResourcesForLibPass(llvm::PassRegistry&);
  73. void initializeDxilEliminateOutputDynamicIndexingPass(llvm::PassRegistry&);
  74. void initializeDxilGenerationPassPass(llvm::PassRegistry&);
  75. void initializeHLEnsureMetadataPass(llvm::PassRegistry&);
  76. void initializeHLEmitMetadataPass(llvm::PassRegistry&);
  77. void initializeDxilFinalizeModulePass(llvm::PassRegistry&);
  78. void initializeDxilEmitMetadataPass(llvm::PassRegistry&);
  79. void initializeDxilEraseDeadRegionPass(llvm::PassRegistry&);
  80. void initializeDxilExpandTrigIntrinsicsPass(llvm::PassRegistry&);
  81. void initializeDxilDeadFunctionEliminationPass(llvm::PassRegistry&);
  82. void initializeHLDeadFunctionEliminationPass(llvm::PassRegistry&);
  83. void initializeHLPreprocessPass(llvm::PassRegistry&);
  84. void initializeDxilConvergentMarkPass(llvm::PassRegistry&);
  85. void initializeDxilConvergentClearPass(llvm::PassRegistry&);
  86. void initializeDxilPrecisePropagatePassPass(llvm::PassRegistry&);
  87. void initializeDxilPreserveAllOutputsPass(llvm::PassRegistry&);
  88. void initializeDxilPromoteLocalResourcesPass(llvm::PassRegistry&);
  89. void initializeDxilPromoteStaticResourcesPass(llvm::PassRegistry&);
  90. void initializeDxilLegalizeResourcesPass(llvm::PassRegistry&);
  91. void initializeDxilLegalizeEvalOperationsPass(llvm::PassRegistry&);
  92. void initializeDxilLegalizeSampleOffsetPassPass(llvm::PassRegistry&);
  93. void initializeDxilSimpleGVNHoistPass(llvm::PassRegistry&);
  94. void initializeInvalidateUndefResourcesPass(llvm::PassRegistry&);
  95. void initializeSimplifyInstPass(llvm::PassRegistry&);
  96. void initializeDxilTranslateRawBufferPass(llvm::PassRegistry&);
  97. void initializeNoPausePassesPass(llvm::PassRegistry&);
  98. void initializePausePassesPass(llvm::PassRegistry&);
  99. void initializeResumePassesPass(llvm::PassRegistry&);
  100. void initializeMatrixBitcastLowerPassPass(llvm::PassRegistry&);
  101. void initializeDxilCleanupAddrSpaceCastPass(llvm::PassRegistry&);
  102. void initializeDxilRenameResourcesPass(llvm::PassRegistry&);
  103. ModulePass *createDxilValidateWaveSensitivityPass();
  104. void initializeDxilValidateWaveSensitivityPass(llvm::PassRegistry&);
  105. FunctionPass *createCleanupDxBreakPass();
  106. void initializeCleanupDxBreakPass(llvm::PassRegistry&);
  107. FunctionPass *createDxilLoopDeletionPass();
  108. void initializeDxilLoopDeletionPass(llvm::PassRegistry &);
  109. ModulePass *createHLLegalizeParameter();
  110. void initializeHLLegalizeParameterPass(llvm::PassRegistry &);
  111. bool AreDxilResourcesDense(llvm::Module *M, hlsl::DxilResourceBase **ppNonDense);
  112. ModulePass *createDxilNoOptLegalizePass();
  113. void initializeDxilNoOptLegalizePass(llvm::PassRegistry&);
  114. ModulePass *createDxilNoOptSimplifyInstructionsPass();
  115. void initializeDxilNoOptSimplifyInstructionsPass(llvm::PassRegistry&);
  116. ModulePass *createDxilMutateResourceToHandlePass();
  117. void initializeDxilMutateResourceToHandlePass(llvm::PassRegistry&);
  118. }