DxilGenerationPass.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. }
  21. namespace hlsl {
  22. class DxilResourceBase;
  23. class WaveSensitivityAnalysis {
  24. public:
  25. static WaveSensitivityAnalysis* create();
  26. virtual ~WaveSensitivityAnalysis() { }
  27. virtual void Analyze(llvm::Function *F) = 0;
  28. virtual bool IsWaveSensitive(llvm::Instruction *op) = 0;
  29. };
  30. class HLSLExtensionsCodegenHelper;
  31. // Pause/resume support.
  32. bool ClearPauseResumePasses(llvm::Module &M); // true if modified; false if missing
  33. void GetPauseResumePasses(llvm::Module &M, llvm::StringRef &pause, llvm::StringRef &resume);
  34. void SetPauseResumePasses(llvm::Module &M, llvm::StringRef pause, llvm::StringRef resume);
  35. }
  36. namespace llvm {
  37. /// \brief Create and return a pass that tranform the module into a DXIL module
  38. /// Note that this pass is designed for use with the legacy pass manager.
  39. ModulePass *createDxilCondenseResourcesPass();
  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 *createDxilLoadMetadataPass();
  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. ModulePass *createFailUndefResourcePass();
  63. FunctionPass *createSimplifyInstPass();
  64. ModulePass *createDxilTranslateRawBuffer();
  65. ModulePass *createNoPausePassesPass();
  66. ModulePass *createPausePassesPass();
  67. ModulePass *createResumePassesPass();
  68. FunctionPass *createMatrixBitcastLowerPass();
  69. void initializeDxilCondenseResourcesPass(llvm::PassRegistry&);
  70. void initializeDxilLowerCreateHandleForLibPass(llvm::PassRegistry&);
  71. void initializeDxilAllocateResourcesForLibPass(llvm::PassRegistry&);
  72. void initializeDxilEliminateOutputDynamicIndexingPass(llvm::PassRegistry&);
  73. void initializeDxilGenerationPassPass(llvm::PassRegistry&);
  74. void initializeHLEnsureMetadataPass(llvm::PassRegistry&);
  75. void initializeHLEmitMetadataPass(llvm::PassRegistry&);
  76. void initializeDxilFinalizeModulePass(llvm::PassRegistry&);
  77. void initializeDxilEmitMetadataPass(llvm::PassRegistry&);
  78. void initializeDxilExpandTrigIntrinsicsPass(llvm::PassRegistry&);
  79. void initializeDxilLoadMetadataPass(llvm::PassRegistry&);
  80. void initializeDxilDeadFunctionEliminationPass(llvm::PassRegistry&);
  81. void initializeHLDeadFunctionEliminationPass(llvm::PassRegistry&);
  82. void initializeHLPreprocessPass(llvm::PassRegistry&);
  83. void initializeDxilConvergentMarkPass(llvm::PassRegistry&);
  84. void initializeDxilConvergentClearPass(llvm::PassRegistry&);
  85. void initializeDxilPrecisePropagatePassPass(llvm::PassRegistry&);
  86. void initializeDxilPreserveAllOutputsPass(llvm::PassRegistry&);
  87. void initializeDxilPromoteLocalResourcesPass(llvm::PassRegistry&);
  88. void initializeDxilPromoteStaticResourcesPass(llvm::PassRegistry&);
  89. void initializeDxilLegalizeResourcesPass(llvm::PassRegistry&);
  90. void initializeDxilLegalizeEvalOperationsPass(llvm::PassRegistry&);
  91. void initializeDxilLegalizeSampleOffsetPassPass(llvm::PassRegistry&);
  92. void initializeFailUndefResourcePass(llvm::PassRegistry&);
  93. void initializeSimplifyInstPass(llvm::PassRegistry&);
  94. void initializeDxilTranslateRawBufferPass(llvm::PassRegistry&);
  95. void initializeNoPausePassesPass(llvm::PassRegistry&);
  96. void initializePausePassesPass(llvm::PassRegistry&);
  97. void initializeResumePassesPass(llvm::PassRegistry&);
  98. void initializeMatrixBitcastLowerPassPass(llvm::PassRegistry&);
  99. bool AreDxilResourcesDense(llvm::Module *M, hlsl::DxilResourceBase **ppNonDense);
  100. }