DxilGenerationPass.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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 *createDxilCondenseResourcesPass();
  41. ModulePass *createDxilLowerCreateHandleForLibPass();
  42. ModulePass *createDxilAllocateResourcesForLibPass();
  43. ModulePass *createDxilEliminateOutputDynamicIndexingPass();
  44. ModulePass *createDxilGenerationPass(bool NotOptimized, hlsl::HLSLExtensionsCodegenHelper *extensionsHelper);
  45. ModulePass *createHLEmitMetadataPass();
  46. ModulePass *createHLEnsureMetadataPass();
  47. ModulePass *createDxilFinalizeModulePass();
  48. ModulePass *createDxilEmitMetadataPass();
  49. FunctionPass *createDxilExpandTrigIntrinsicsPass();
  50. ModulePass *createDxilConvergentMarkPass();
  51. ModulePass *createDxilConvergentClearPass();
  52. ModulePass *createDxilDeadFunctionEliminationPass();
  53. ModulePass *createHLDeadFunctionEliminationPass();
  54. ModulePass *createHLPreprocessPass();
  55. ModulePass *createDxilPrecisePropagatePass();
  56. FunctionPass *createDxilPreserveAllOutputsPass();
  57. FunctionPass *createDxilPromoteLocalResources();
  58. ModulePass *createDxilPromoteStaticResources();
  59. ModulePass *createDxilLegalizeResources();
  60. ModulePass *createDxilLegalizeEvalOperationsPass();
  61. FunctionPass *createDxilLegalizeSampleOffsetPass();
  62. FunctionPass *createDxilSimpleGVNHoistPass();
  63. ModulePass *createInvalidateUndefResourcesPass();
  64. FunctionPass *createSimplifyInstPass();
  65. ModulePass *createDxilTranslateRawBuffer();
  66. ModulePass *createNoPausePassesPass();
  67. ModulePass *createPausePassesPass();
  68. ModulePass *createResumePassesPass();
  69. FunctionPass *createMatrixBitcastLowerPass();
  70. ModulePass *createDxilCleanupAddrSpaceCastPass();
  71. void initializeDxilCondenseResourcesPass(llvm::PassRegistry&);
  72. void initializeDxilLowerCreateHandleForLibPass(llvm::PassRegistry&);
  73. void initializeDxilAllocateResourcesForLibPass(llvm::PassRegistry&);
  74. void initializeDxilEliminateOutputDynamicIndexingPass(llvm::PassRegistry&);
  75. void initializeDxilGenerationPassPass(llvm::PassRegistry&);
  76. void initializeHLEnsureMetadataPass(llvm::PassRegistry&);
  77. void initializeHLEmitMetadataPass(llvm::PassRegistry&);
  78. void initializeDxilFinalizeModulePass(llvm::PassRegistry&);
  79. void initializeDxilEmitMetadataPass(llvm::PassRegistry&);
  80. void initializeDxilEraseDeadRegionPass(llvm::PassRegistry&);
  81. void initializeDxilExpandTrigIntrinsicsPass(llvm::PassRegistry&);
  82. void initializeDxilDeadFunctionEliminationPass(llvm::PassRegistry&);
  83. void initializeHLDeadFunctionEliminationPass(llvm::PassRegistry&);
  84. void initializeHLPreprocessPass(llvm::PassRegistry&);
  85. void initializeDxilConvergentMarkPass(llvm::PassRegistry&);
  86. void initializeDxilConvergentClearPass(llvm::PassRegistry&);
  87. void initializeDxilPrecisePropagatePassPass(llvm::PassRegistry&);
  88. void initializeDxilPreserveAllOutputsPass(llvm::PassRegistry&);
  89. void initializeDxilPromoteLocalResourcesPass(llvm::PassRegistry&);
  90. void initializeDxilPromoteStaticResourcesPass(llvm::PassRegistry&);
  91. void initializeDxilLegalizeResourcesPass(llvm::PassRegistry&);
  92. void initializeDxilLegalizeEvalOperationsPass(llvm::PassRegistry&);
  93. void initializeDxilLegalizeSampleOffsetPassPass(llvm::PassRegistry&);
  94. void initializeDxilSimpleGVNHoistPass(llvm::PassRegistry&);
  95. void initializeInvalidateUndefResourcesPass(llvm::PassRegistry&);
  96. void initializeSimplifyInstPass(llvm::PassRegistry&);
  97. void initializeDxilTranslateRawBufferPass(llvm::PassRegistry&);
  98. void initializeNoPausePassesPass(llvm::PassRegistry&);
  99. void initializePausePassesPass(llvm::PassRegistry&);
  100. void initializeResumePassesPass(llvm::PassRegistry&);
  101. void initializeMatrixBitcastLowerPassPass(llvm::PassRegistry&);
  102. void initializeDxilCleanupAddrSpaceCastPass(llvm::PassRegistry&);
  103. ModulePass *createDxilValidateWaveSensitivityPass();
  104. void initializeDxilValidateWaveSensitivityPass(llvm::PassRegistry&);
  105. FunctionPass *createCleanupDxBreakPass();
  106. void initializeCleanupDxBreakPass(llvm::PassRegistry&);
  107. ModulePass *createHLLegalizeParameter();
  108. void initializeHLLegalizeParameterPass(llvm::PassRegistry &);
  109. bool AreDxilResourcesDense(llvm::Module *M, hlsl::DxilResourceBase **ppNonDense);
  110. }